diff --git a/.changeset/config.json b/.changeset/config.json index 50fc841a..bd8889c9 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,15 +1,14 @@ { "$schema": "https://unpkg.com/@changesets/config@3.0.5/schema.json", - "changelog": "@changesets/cli/changelog", + "changelog": [ + "@changesets/changelog-github", + { "repo": "dev-five-git/devup-ui" } + ], "commit": false, "fixed": [], "linked": [], "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": [ - "*-example", - "*-benchmark", - "landing" - ] -} \ No newline at end of file + "ignore": ["*-example", "*-benchmark", "landing"] +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 7e4de40d..4ff5166b 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,5 @@ # These are supported funding model platforms -github: owjs3901 +github: dev-five-git patreon: JeongMinOh open_collective: devup-ui -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e7332bc8..13a79205 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,8 +20,10 @@ jobs: uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: Cargo tarpaulin - run: cargo install cargo-tarpaulin + - name: Cargo tarpaulin and fmt + run: | + cargo install cargo-tarpaulin + rustup component add rustfmt clippy - uses: pnpm/action-setup@v4 name: Install pnpm with: diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..e02c24e2 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm lint-staged \ No newline at end of file diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs new file mode 100644 index 00000000..7afc7807 --- /dev/null +++ b/.lintstagedrc.mjs @@ -0,0 +1,8 @@ +export default { + '**/*.{js,jsx,ts,tsx,mjs,md,mdx,json,json5,jsonc}': (files) => { + return [ + `npx eslint --config eslint.config.mjs --fix ${files.join(' ')}`, + `git add ${files.join(' ')}`, + ] + }, +} diff --git a/Cargo.lock b/Cargo.lock index 9967921f..bdbdfc3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -519,9 +519,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -651,9 +651,9 @@ dependencies = [ [[package]] name = "oxc_allocator" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b810fad23016e9a2a64d3b09f72ead6035312164788715dedd79b223f95b059" +checksum = "014a6bc98da00c997b35db73a7aced63d9e148ddcfe1a6bd759e87b903d95757" dependencies = [ "allocator-api2", "bumpalo", @@ -664,9 +664,9 @@ dependencies = [ [[package]] name = "oxc_ast" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1af40f244ac2215c43baeb5776412caf09777ab176ac49151f4ecb1f424d26b9" +checksum = "8f88ca3bb0ed59cebad6883e7a09e16e19fd1dbec7fcd7659c5e696456f3ea37" dependencies = [ "bitflags", "oxc_allocator", @@ -681,9 +681,9 @@ dependencies = [ [[package]] name = "oxc_ast_macros" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dced6af2266937211ef38e2e57d1f2ba2c380b7be13c856bb33dcd59aefedf" +checksum = "baf7bc9985027ebc3b8daaa4bcdeeafe8d027fb6f3ffed3dfc496a851d7b3ffe" dependencies = [ "phf", "proc-macro2", @@ -693,9 +693,9 @@ dependencies = [ [[package]] name = "oxc_ast_visit" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd60e51a6a2569b0a32a2703c37424c7daca1cff974960055cb643dd7eac8b1f" +checksum = "2750ee1156a0700d483c2b148dac6d45fbbdbbc44dfae973ab36fc8d92811259" dependencies = [ "oxc_allocator", "oxc_ast", @@ -705,9 +705,9 @@ dependencies = [ [[package]] name = "oxc_codegen" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee93207625b3bec356f87f1b1b10b417ca683b0eaa510ccf7f565d1c0078784e" +checksum = "e1b5e6819479a869dc791c98e23007b3dfc6c888b79b63691c0919d8db1f64e0" dependencies = [ "bitflags", "cow-utils", @@ -727,15 +727,15 @@ dependencies = [ [[package]] name = "oxc_data_structures" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11226a027c0320b450943c1d5a0d1eba9079d15c3a9edfbab3ecd4c8fb03d4bf" +checksum = "45904e6b2cf3e05e586a526f4668dac3ab3cb1a88f8ef065503d1336e85e64d2" [[package]] name = "oxc_diagnostics" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "880c30372eb360acfe377008f83a41bc391765b72c00a633f974ef9804282619" +checksum = "6f0976fcb5e3093b08e384b87dd660029ff99ac3a4ba5f57a2eebcb6d1fd2e3a" dependencies = [ "cow-utils", "oxc-miette", @@ -744,9 +744,9 @@ dependencies = [ [[package]] name = "oxc_ecmascript" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e2d1f7ee0df2c512b9219b82504ed6e31d2b04c629c6173e2a3508fc623e422" +checksum = "d5a38604b87cf5c118aad0a20b3197d44439bcf59680fb7d3e13dff605a27d6b" dependencies = [ "cow-utils", "num-bigint", @@ -759,9 +759,9 @@ dependencies = [ [[package]] name = "oxc_estree" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7288d04e52e326681027d44ea1b1545a6f4ab3392cb88a10dba93ebaaaa3f9" +checksum = "a8f909b432bafad7fe98609e2fd00b6b046c143fda4246a4e7bb7e41b47cf65e" [[package]] name = "oxc_index" @@ -771,9 +771,9 @@ checksum = "2fa07b0cfa997730afed43705766ef27792873fdf5215b1391949fec678d2392" [[package]] name = "oxc_parser" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273778f7be75802da774d17a001c38e75d8387cfcfc2212a76c4625e266777a5" +checksum = "b9ea8250a9ba1b4690a9e0a545cde6e0c676c4ad788a2711dbbaa4429faec3d1" dependencies = [ "bitflags", "cow-utils", @@ -794,9 +794,9 @@ dependencies = [ [[package]] name = "oxc_regular_expression" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a5a3dc8e02a05bd8ccc3888f9ae0dbbcee7da9a677a1f3b7f86254907604ff" +checksum = "93e783f03017ed46d9d50aed65de775fdcc57914d0a997300ea5816e1ed5d583" dependencies = [ "bitflags", "oxc_allocator", @@ -810,9 +810,9 @@ dependencies = [ [[package]] name = "oxc_semantic" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2357277e9ace9b086ded811f9fee3cf1bc943ea226cce4640d88578212937471" +checksum = "9f4bac78c59d63b90a5b39702ae259adfdb84fc69d61490c43c6547ab3bb3823" dependencies = [ "itertools 0.14.0", "oxc_allocator", @@ -845,9 +845,9 @@ dependencies = [ [[package]] name = "oxc_span" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f74ab03fd114c4ed30011692cc602b2eed51c51ee0eef4d46ca3522adcb6b2" +checksum = "d8b10b09752e1043e988081be2aabcc2abb948da5339adf66623c84fe959fd6f" dependencies = [ "compact_str", "oxc-miette", @@ -858,9 +858,9 @@ dependencies = [ [[package]] name = "oxc_syntax" -version = "0.90.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0c41d429d7883b00cece42a1285e8ef40ed936d4342e378016b4b2daf4c3e6" +checksum = "f60dbb25911dbbd22ac87792d208030d21ec077e8e6938990803685637ef201e" dependencies = [ "bitflags", "cow-utils", @@ -873,7 +873,6 @@ dependencies = [ "oxc_index", "oxc_span", "phf", - "rustc-hash", "unicode-id-start", ] @@ -1047,9 +1046,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -1059,9 +1058,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -1186,9 +1185,9 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -1207,18 +1206,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -1455,9 +1454,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -1468,9 +1467,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -1482,9 +1481,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.53" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -1495,9 +1494,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1505,9 +1504,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -1518,18 +1517,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aee0a0f5343de9221a0d233b04520ed8dc2e6728dce180b1dcd9288ec9d9fa3c" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" dependencies = [ "js-sys", "minicov", @@ -1540,9 +1539,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a369369e4360c2884c3168d22bded735c43cccae97bbc147586d4b480edd138d" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" dependencies = [ "proc-macro2", "quote", @@ -1551,9 +1550,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/README.md b/README.md index 5f2aa52f..3216e93c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ Devup UI logo -

Zero Config, Zero FOUC, Zero Runtime, CSS in JS Preprocessor

@@ -23,8 +22,8 @@ Discord - - + + @@ -76,17 +75,17 @@ npm install @devup-ui/webpack-plugin Next.js Build Time and Build Size (github action - ubuntu-latest) -| Library | Version | Build Time | Build Size | -|--------------------------|----------|------------|-------------------| -| tailwindcss | 4.1.13 | 20.22s | 57,415,796 bytes | -| styleX | 0.15.4 | 38.97s | 76,257,820 bytes | -| vanilla-extract | 1.17.4 | 20.09s | 59,366,237 bytes | -| kuma-ui | 1.5.9 | 21.61s | 67,422,085 bytes | -| panda-css | 1.3.1 | 22.01s | 62,431,065 bytes | -| chakra-ui | 3.27.0 | 29.99s | 210,122,493 bytes | -| mui | 7.3.2 | 22.21s | 94,231,958 bytes | -| devup-ui(per-file css) | 1.0.18 | 18.23s | 57,440,953 bytes | -| devup-ui(single css) | 1.0.18 | 18.35s | 57,409,008 bytes | +| Library | Version | Build Time | Build Size | +| ---------------------- | ------- | ---------- | ----------------- | +| tailwindcss | 4.1.13 | 20.22s | 57,415,796 bytes | +| styleX | 0.15.4 | 38.97s | 76,257,820 bytes | +| vanilla-extract | 1.17.4 | 20.09s | 59,366,237 bytes | +| kuma-ui | 1.5.9 | 21.61s | 67,422,085 bytes | +| panda-css | 1.3.1 | 22.01s | 62,431,065 bytes | +| chakra-ui | 3.27.0 | 29.99s | 210,122,493 bytes | +| mui | 7.3.2 | 22.21s | 94,231,958 bytes | +| devup-ui(per-file css) | 1.0.18 | 18.23s | 57,440,953 bytes | +| devup-ui(single css) | 1.0.18 | 18.35s | 57,409,008 bytes | ## How it works @@ -94,30 +93,40 @@ Devup UI is a CSS in JS preprocessor that does not require runtime. Devup UI eliminates the performance degradation of the browser through the CSS in JS preprocessor. We develop a preprocessor that considers all grammatical cases. -```typescript -const before = +```tsx +const before = -const after =
+const after =
``` Variables are fully supported. -```typescript -const before = - -const after =
+```tsx +const before = + +const after = ( +
+) ``` Various expressions and responsiveness are also fully supported. -```typescript -const before = b ? "yellow" : variable]}/> - -const after =
b ? "d2" : "d3"}`} style={{ - "--d2": variable -}}/> +```tsx +const before = b ? 'yellow' : variable]} /> + +const after = ( +
b ? 'd2' : 'd3'}`} + style={{ + '--d2': variable, + }} + /> +) ``` Support Theme with Typing @@ -139,36 +148,40 @@ Support Theme with Typing } ``` -```typescript +```tsx // Type Safe - + ``` Support Responsive And Pseudo Selector You can use responsive and pseudo selector. -```typescript +```tsx // Responsive with Selector -const box = +const box = // Same -const box = +const box = ``` ## How to Contribute ### Requirements + - [Node.js](https://nodejs.org) (LTS version recommended) - [Rust](https://rustup.rs) compiler - pnpm package manager (`npm install -g pnpm`) ### Development Setup + To set up the development environment, install the following packages: + ```sh pnpm i pnpm build cargo install cargo-tarpaulin cargo install wasm-pack ``` -After installation, run `pnpm test` to ensure everything works correctly. \ No newline at end of file + +After installation, run `pnpm test` to ensure everything works correctly. diff --git a/README_ko.md b/README_ko.md index 82ad08a1..699664a5 100644 --- a/README_ko.md +++ b/README_ko.md @@ -2,7 +2,6 @@ Devup UI logo
-

Zero Config, Zero FOUC, Zero Runtime, CSS in JS Preprocessor

@@ -23,8 +22,8 @@ Discord - - + +
@@ -70,17 +69,17 @@ npm install @devup-ui/vite-plugin Next.js Build Time and Build Size (github action - ubuntu-latest) -| 라이브러리 | 버전 | 빌드 시간 | 빌드 사이즈 | -|--------------------------|----------|------------|-------------------| -| tailwindcss | 4.1.13 | 20.22s | 57,415,796 bytes | -| styleX | 0.15.4 | 38.97s | 76,257,820 bytes | -| vanilla-extract | 1.17.4 | 20.09s | 59,366,237 bytes | -| kuma-ui | 1.5.9 | 21.61s | 67,422,085 bytes | -| panda-css | 1.3.1 | 22.01s | 62,431,065 bytes | -| chakra-ui | 3.27.0 | 29.99s | 210,122,493 bytes | -| mui | 7.3.2 | 22.21s | 94,231,958 bytes | -| devup-ui(per-file css) | 1.0.18 | 18.23s | 57,440,953 bytes | -| devup-ui(single css) | 1.0.18 | 18.35s | 57,409,008 bytes | +| 라이브러리 | 버전 | 빌드 시간 | 빌드 사이즈 | +| ---------------------- | ------ | --------- | ----------------- | +| tailwindcss | 4.1.13 | 20.22s | 57,415,796 bytes | +| styleX | 0.15.4 | 38.97s | 76,257,820 bytes | +| vanilla-extract | 1.17.4 | 20.09s | 59,366,237 bytes | +| kuma-ui | 1.5.9 | 21.61s | 67,422,085 bytes | +| panda-css | 1.3.1 | 22.01s | 62,431,065 bytes | +| chakra-ui | 3.27.0 | 29.99s | 210,122,493 bytes | +| mui | 7.3.2 | 22.21s | 94,231,958 bytes | +| devup-ui(per-file css) | 1.0.18 | 18.23s | 57,440,953 bytes | +| devup-ui(single css) | 1.0.18 | 18.35s | 57,409,008 bytes | ## 작동 원리 @@ -88,30 +87,40 @@ Devup UI는 런타임이 필요 없는 CSS in JS 전처리기입니다. Devup UI는 CSS in JS 전처리기를 통하여 브라우저의 성능 저하를 원천적으로 제거합니다. 모든 문법적 경우의 수를 고려하여 전처리기를 개발합니다. -```typescript -const before = +```tsx +const before = -const after =
+const after =
``` 변수 사용도 완전히 지원합니다. -```typescript -const before = - -const after =
+```tsx +const before = + +const after = ( +
+) ``` 다양한 표현식과 반응형도 모두 지원합니다. -```typescript -const before = b ? "yellow" : variable]}/> - -const after =
b ? "d2" : "d3"}`} style={{ - "--d2": variable -}}/> +```tsx +const before = b ? 'yellow' : variable]} /> + +const after = ( +
b ? 'd2' : 'd3'}`} + style={{ + '--d2': variable, + }} + /> +) ``` 타이핑이 되는 테마를 지원합니다. @@ -133,36 +142,40 @@ const after =
b ? "d2" : "d3"}`} style={{ } ``` -```typescript +```tsx // Type Safe - + ``` 반응형과 가상 선택자도 지원합니다. 물론 동시 사용도 가능합니다. -```typescript +```tsx // Responsive with Selector -const box = +const box = // Same -const box = +const box = ``` ## 기여 방법 ### 요구 사항 + - [Node.js](https://nodejs.org) (LTS 버전 권장) - [Rust](https://rustup.rs) 컴파일러 - pnpm 패키지 매니저 (`npm install -g pnpm`) ### 개발 환경 설정 + 개발 환경을 위해 아래 패키지들을 설치합니다: + ```sh pnpm i pnpm build cargo install cargo-tarpaulin cargo install wasm-pack ``` + 설치 후 `pnpm test`를 실행하여 문제가 없는지 확인합니다. diff --git a/apps/landing/devup.json b/apps/landing/devup.json index bb2cabc3..df27821b 100644 --- a/apps/landing/devup.json +++ b/apps/landing/devup.json @@ -1,592 +1,592 @@ { - "theme": { - "colors": { - "light": { - "primary": "#5A44FF", - "secondary": "#85A5F2", - "link": "#006BFF", - "text": "#2F2F2F", - "background": "#FFF", - "containerBackground": "#FFF", - "border": "#E0E0E0", - "success": "#4CAF50", - "warning": "#FF9800", - "error": "#F44336", - "info": "#2196F3", - "base": "#FFF", - "negativeBase": "#000", - "title": "#1A1A1A", - "caption": "#A9A8B4", - "shadow": "#87878740", - "codeBg": "#3E3B41", - "cardBg": "#F8F8F8", - "buttonBlue": "#266CCD", - "joinBg": "#CDE2FA", - "third": "#918AE9", - "buttonBlueHover": "#1453AC", - "buttonBlueActive": "#19498B", - "textReverse": "#FFF", - "footerTitle": "#A3A4B4", - "footerBg": "#F4F4F6", - "footerText": "#51575F", - "menuHover": "#F6F4FF", - "menuActive": "#EAE8FC", - "captionBold": "#7C7B8E", - "search": "#9C50FF", - "kakaoButton": "#DE9800", - "kakaoButtonHover": "#C98900", - "kakaoButtonActive": "#B77D00", - "imageBorder": "#C8C7D1", - "imageDropdown": "#ECECEC", - "imagePlaceholder": "#999", - "imageDate": "#C9C9C9", - "imageDateNone": "#F2F2F2", - "imageProgress": "#DADADA", - "imageMenuBg": "#FBFBFB", - "imageMenuSelect": "#EDECF7", - "starBg": "#F7F8FF" - }, - "dark": { - "primary": "#9086FF", - "secondary": "#2A4586", - "link": "#006BFF", - "text": "#EDEDED", - "background": "#131313", - "containerBackground": "#373639", - "border": "#333", - "success": "#4CAF50", - "warning": "#FF9800", - "error": "#F44336", - "info": "#2196F3", - "base": "#000", - "negativeBase": "#FFF", - "title": "#FAFAFA", - "caption": "#787878", - "shadow": "#62626240", - "codeBg": "#2E303C", - "cardBg": "#28272B", - "buttonBlue": "#0867AF", - "joinBg": "#2F363E", - "third": "#737FE4", - "buttonBlueHover": "#1453AC", - "buttonBlueActive": "#19498B", - "textReverse": "#2F2F2F", - "footerTitle": "#A3A4B4", - "footerBg": "#2E303C", - "footerText": "#FFF", - "menuHover": "#3C404B", - "menuActive": "#283259", - "captionBold": "#9C9BA9", - "search": "#6FA4FF", - "kakaoButton": "#A3740D", - "kakaoButtonHover": "#C98900", - "kakaoButtonActive": "#E09900", - "imageBorder": "#4D4C53", - "imageDropdown": "#3A3A3A", - "imagePlaceholder": "#4C4C4C", - "imageDate": "#636363", - "imageDateNone": "#343333", - "imageProgress": "#444", - "imageMenuBg": "#262626", - "imageMenuSelect": "#3F3F3F", - "starBg": "#232323" - } - }, - "typography": { - "h1": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "38px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "52px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "h6Reg": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 400, - "fontSize": "18px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 400, - "fontSize": "24px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "buttonL": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "17px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "20px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "code": [ - { - "fontFamily": "D2Coding", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "13px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "D2Coding", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "15px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null - ], - "buttonM": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "15px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "17px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "h4": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "28px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "36px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "body": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "14px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "16px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null - ], - "h6": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "18px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "24px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "textS": { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "15px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - "buttonLbold": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "17px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "18px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "buttonLsemiB": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "17px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "18px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "h2": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "36px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "48px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "h3": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "32px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "42px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "h5": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 600, - "fontSize": "24px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "30px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "buttonS": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "14px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "15px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "caption": { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "14px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - "small": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 300, - "fontSize": "11px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 400, - "fontSize": "12px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - null - ], - "buttonSmid": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "14px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "15px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "captionBold": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "13px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "14px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null - ], - "textSbold": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "13px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "15px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - null - ], - "textL": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "16px", - "lineHeight": 1.3, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "18px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null - ], - "footerMenu": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "13px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 500, - "fontSize": "14px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - null - ], - "bodyReg": [ - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 400, - "fontSize": "14px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null, - null, - null, - { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 400, - "fontSize": "16px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - }, - null - ], - "smallBold": { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 800, - "fontSize": "12px", - "lineHeight": 1.4, - "letterSpacing": "-0.03em" - }, - "bodyBold": { - "fontFamily": "Pretendard", - "fontStyle": "normal", - "fontWeight": 700, - "fontSize": "16px", - "lineHeight": 1.5, - "letterSpacing": "-0.03em" - } - } + "theme": { + "colors": { + "light": { + "primary": "#5A44FF", + "secondary": "#85A5F2", + "link": "#006BFF", + "text": "#2F2F2F", + "background": "#FFF", + "containerBackground": "#FFF", + "border": "#E0E0E0", + "success": "#4CAF50", + "warning": "#FF9800", + "error": "#F44336", + "info": "#2196F3", + "base": "#FFF", + "negativeBase": "#000", + "title": "#1A1A1A", + "caption": "#A9A8B4", + "shadow": "#87878740", + "codeBg": "#3E3B41", + "cardBg": "#F8F8F8", + "buttonBlue": "#266CCD", + "joinBg": "#CDE2FA", + "third": "#918AE9", + "buttonBlueHover": "#1453AC", + "buttonBlueActive": "#19498B", + "textReverse": "#FFF", + "footerTitle": "#A3A4B4", + "footerBg": "#F4F4F6", + "footerText": "#51575F", + "menuHover": "#F6F4FF", + "menuActive": "#EAE8FC", + "captionBold": "#7C7B8E", + "search": "#9C50FF", + "kakaoButton": "#DE9800", + "kakaoButtonHover": "#C98900", + "kakaoButtonActive": "#B77D00", + "imageBorder": "#C8C7D1", + "imageDropdown": "#ECECEC", + "imagePlaceholder": "#999", + "imageDate": "#C9C9C9", + "imageDateNone": "#F2F2F2", + "imageProgress": "#DADADA", + "imageMenuBg": "#FBFBFB", + "imageMenuSelect": "#EDECF7", + "starBg": "#F7F8FF" + }, + "dark": { + "primary": "#9086FF", + "secondary": "#2A4586", + "link": "#006BFF", + "text": "#EDEDED", + "background": "#131313", + "containerBackground": "#373639", + "border": "#333", + "success": "#4CAF50", + "warning": "#FF9800", + "error": "#F44336", + "info": "#2196F3", + "base": "#000", + "negativeBase": "#FFF", + "title": "#FAFAFA", + "caption": "#787878", + "shadow": "#62626240", + "codeBg": "#2E303C", + "cardBg": "#28272B", + "buttonBlue": "#0867AF", + "joinBg": "#2F363E", + "third": "#737FE4", + "buttonBlueHover": "#1453AC", + "buttonBlueActive": "#19498B", + "textReverse": "#2F2F2F", + "footerTitle": "#A3A4B4", + "footerBg": "#2E303C", + "footerText": "#FFF", + "menuHover": "#3C404B", + "menuActive": "#283259", + "captionBold": "#9C9BA9", + "search": "#6FA4FF", + "kakaoButton": "#A3740D", + "kakaoButtonHover": "#C98900", + "kakaoButtonActive": "#E09900", + "imageBorder": "#4D4C53", + "imageDropdown": "#3A3A3A", + "imagePlaceholder": "#4C4C4C", + "imageDate": "#636363", + "imageDateNone": "#343333", + "imageProgress": "#444", + "imageMenuBg": "#262626", + "imageMenuSelect": "#3F3F3F", + "starBg": "#232323" + } + }, + "typography": { + "h1": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "38px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "52px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "h6Reg": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 400, + "fontSize": "18px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 400, + "fontSize": "24px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "buttonL": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "17px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "20px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "code": [ + { + "fontFamily": "D2Coding", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "13px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "D2Coding", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "15px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null + ], + "buttonM": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "15px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "17px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "h4": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "28px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "36px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "body": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "14px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "16px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null + ], + "h6": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "18px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "24px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "textS": { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "15px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + "buttonLbold": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "17px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "18px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "buttonLsemiB": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "17px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "18px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "h2": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "36px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "48px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "h3": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "32px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "42px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "h5": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 600, + "fontSize": "24px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "30px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "buttonS": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "14px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "15px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "caption": { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "14px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + "small": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 300, + "fontSize": "11px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 400, + "fontSize": "12px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + null + ], + "buttonSmid": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "14px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "15px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "captionBold": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "13px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "14px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null + ], + "textSbold": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "13px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "15px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + null + ], + "textL": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "16px", + "lineHeight": 1.3, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "18px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null + ], + "footerMenu": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "13px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 500, + "fontSize": "14px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + null + ], + "bodyReg": [ + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 400, + "fontSize": "14px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null, + null, + null, + { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 400, + "fontSize": "16px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + }, + null + ], + "smallBold": { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 800, + "fontSize": "12px", + "lineHeight": 1.4, + "letterSpacing": "-0.03em" + }, + "bodyBold": { + "fontFamily": "Pretendard", + "fontStyle": "normal", + "fontWeight": 700, + "fontSize": "16px", + "lineHeight": 1.5, + "letterSpacing": "-0.03em" + } } -} \ No newline at end of file + } +} diff --git a/apps/landing/package.json b/apps/landing/package.json index 809833d6..a31d0981 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -16,17 +16,17 @@ "@devup-ui/reset-css": "workspace:*", "@mdx-js/loader": "^3.1.1", "@mdx-js/react": "^3.1.1", - "@next/mdx": "^15.5.3", + "@next/mdx": "^15.5.4", "@types/mdx": "^2.0.13", "body-scroll-lock": "3.1.5", "clsx": "^2.1.1", - "next": "^15.5.3", + "next": "^15.5.4", "react": "^19.1.1", "react-dom": "^19.1.1", "react-markdown": "^10.1.0", "react-syntax-highlighter": "^15.6.6", "remark-gfm": "^4.0.1", - "lenis": "1.3.11" + "lenis": "1.3.11" }, "devDependencies": { "@devup-ui/next-plugin": "workspace:*", @@ -39,4 +39,4 @@ "remark": "^15.0.1", "typescript": "^5" } -} \ No newline at end of file +} diff --git a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx index 3e5ee7d2..45610330 100644 --- a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx @@ -1 +1 @@ -`Bottom Sheet` component displays content in a slide-up panel from the bottom of the screen. \ No newline at end of file +`Bottom Sheet` component displays content in a slide-up panel from the bottom of the screen. diff --git a/apps/landing/src/app/(detail)/components/[component]/button/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/button/Api.mdx index 3789d5af..c3d0a455 100644 --- a/apps/landing/src/app/(detail)/components/[component]/button/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/button/Api.mdx @@ -1,5 +1,6 @@ ###### API -`Button` props extends the button HTML attributes. + +`Button` props extends the button HTML attributes.
| Property | Description | Type | Default | diff --git a/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx b/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx index 58d4b2b1..15027c92 100644 --- a/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx @@ -1 +1 @@ -`Checkbox` component allows users to select multiple options. \ No newline at end of file +`Checkbox` component allows users to select multiple options. diff --git a/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx b/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx index 8f149a61..5ded854f 100644 --- a/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx @@ -1 +1 @@ -`Color Picker` component allows users to select colors from a color palette. \ No newline at end of file +`Color Picker` component allows users to select colors from a color palette. diff --git a/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx b/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx index 124f7fae..758b7297 100644 --- a/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx @@ -1 +1 @@ -`Confirm` component displays a confirmation dialog to users. \ No newline at end of file +`Confirm` component displays a confirmation dialog to users. diff --git a/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx b/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx index 08c07d5d..67f10706 100644 --- a/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx @@ -1 +1 @@ -`Date Picker` component allows users to select a date from a calendar interface. \ No newline at end of file +`Date Picker` component allows users to select a date from a calendar interface. diff --git a/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx b/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx index 7ccdce4b..2268669f 100644 --- a/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx @@ -1 +1 @@ -`Dropdown` component displays a list of options that can be toggled. \ No newline at end of file +`Dropdown` component displays a list of options that can be toggled. diff --git a/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx b/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx index 546e56d2..20fbdfb6 100644 --- a/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx @@ -1 +1 @@ -`Footer` component displays the bottom section of a page. \ No newline at end of file +`Footer` component displays the bottom section of a page. diff --git a/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/header/index.mdx b/apps/landing/src/app/(detail)/components/[component]/header/index.mdx index ef274326..6800cb23 100644 --- a/apps/landing/src/app/(detail)/components/[component]/header/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/header/index.mdx @@ -1 +1 @@ -`Header` component displays the top navigation area of a page. \ No newline at end of file +`Header` component displays the top navigation area of a page. diff --git a/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx index 38f68784..a5f94f64 100644 --- a/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx @@ -1,13 +1,14 @@ ###### API -`Input` props extends the input HTML attributes. -
-| Property | Description | Type | Default | -| --- | --- | --- | --- | -| **variant** | The variant of the input | `'primary' \| 'default'` | `'default'` | -| **size** | The size of the input | `'sm' \| 'md' \| 'lg'` | `'md'` | -| **placeholder** | Placeholder text for the input | `string` | `undefined` | -| **type** | The type of input | `'text' \| 'password' \| 'email' \| 'number'` | `'text'` | -| **disabled** | Whether the input is disabled | `boolean` | `false` | -| **error** | Whether the input has an error state | `boolean` | `false` | -
\ No newline at end of file +`Input` props extends the input HTML attributes. + +
+ | Property | Description | Type | Default | | --- | --- | --- | --- | | + **variant** | The variant of the input | `'primary' \| 'default'` | + `'default'` | | **size** | The size of the input | `'sm' \| 'md' \| 'lg'` | + `'md'` | | **placeholder** | Placeholder text for the input | `string` | + `undefined` | | **type** | The type of input | `'text' \| 'password' \| + 'email' \| 'number'` | `'text'` | | **disabled** | Whether the input is + disabled | `boolean` | `false` | | **error** | Whether the input has an error + state | `boolean` | `false` | +
diff --git a/apps/landing/src/app/(detail)/components/[component]/input/index.mdx b/apps/landing/src/app/(detail)/components/[component]/input/index.mdx index b2598a47..8b2541da 100644 --- a/apps/landing/src/app/(detail)/components/[component]/input/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/input/index.mdx @@ -1 +1 @@ -`Input` component is used to handle text input from users. \ No newline at end of file +`Input` component is used to handle text input from users. diff --git a/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/label/index.mdx b/apps/landing/src/app/(detail)/components/[component]/label/index.mdx index 66ac34e6..158e8a94 100644 --- a/apps/landing/src/app/(detail)/components/[component]/label/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/label/index.mdx @@ -1 +1 @@ -`Label` component provides text labels for form elements. \ No newline at end of file +`Label` component provides text labels for form elements. diff --git a/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx b/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx index 97dbf522..72726159 100644 --- a/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx @@ -1 +1 @@ -`Menu` component displays a list of navigation options. \ No newline at end of file +`Menu` component displays a list of navigation options. diff --git a/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx b/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx index cf69ad59..7ee4a3ce 100644 --- a/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx @@ -1 +1 @@ -`Pagination` component allows users to navigate through multiple pages. \ No newline at end of file +`Pagination` component allows users to navigate through multiple pages. diff --git a/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx b/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx index 8ec889a6..8cb64d36 100644 --- a/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx @@ -1 +1 @@ -`Progress Bar` component displays the progress of a task or operation. \ No newline at end of file +`Progress Bar` component displays the progress of a task or operation. diff --git a/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx b/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx index dbc0cef6..310e1771 100644 --- a/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx @@ -1 +1 @@ -`Radio` component allows users to select a single option from a group. \ No newline at end of file +`Radio` component allows users to select a single option from a group. diff --git a/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/search/index.mdx b/apps/landing/src/app/(detail)/components/[component]/search/index.mdx index 1f42be2d..7312ac16 100644 --- a/apps/landing/src/app/(detail)/components/[component]/search/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/search/index.mdx @@ -1 +1 @@ -`Search` component provides a search input with filtering capabilities. \ No newline at end of file +`Search` component provides a search input with filtering capabilities. diff --git a/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/select/index.mdx b/apps/landing/src/app/(detail)/components/[component]/select/index.mdx index c587b299..296464e0 100644 --- a/apps/landing/src/app/(detail)/components/[component]/select/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/select/index.mdx @@ -1 +1 @@ -`Select` component allows users to choose from a list of options. \ No newline at end of file +`Select` component allows users to choose from a list of options. diff --git a/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx b/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx index 789d8ff2..05ffa485 100644 --- a/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx @@ -1 +1 @@ -`Slider` component allows users to select a value from a range. \ No newline at end of file +`Slider` component allows users to select a value from a range. diff --git a/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx b/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx index 75cbc49a..cff6e589 100644 --- a/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx @@ -1 +1 @@ -`Snackbar` component displays brief notifications to users. \ No newline at end of file +`Snackbar` component displays brief notifications to users. diff --git a/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx b/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx index 9ac4a130..cf99774b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx @@ -1 +1 @@ -`Stepper` component guides users through a multi-step process. \ No newline at end of file +`Stepper` component guides users through a multi-step process. diff --git a/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx b/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx index a86e5651..d50b3049 100644 --- a/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx @@ -1 +1 @@ -`Tab` component organizes content into multiple views. \ No newline at end of file +`Tab` component organizes content into multiple views. diff --git a/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx b/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx index 4572394f..7b361fec 100644 --- a/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx @@ -1 +1 @@ -`Textarea` component is used for multi-line text input. \ No newline at end of file +`Textarea` component is used for multi-line text input. diff --git a/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx b/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx index c6db46d4..d2432636 100644 --- a/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx @@ -1 +1 @@ -`Textbox` component is used for single-line text input. \ No newline at end of file +`Textbox` component is used for single-line text input. diff --git a/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx b/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx index 1cd8b259..5e46418a 100644 --- a/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx @@ -1 +1 @@ -`Theme Button` component is used to switch between light and dark themes. \ No newline at end of file +`Theme Button` component is used to switch between light and dark themes. diff --git a/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx b/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx index 2f8973eb..a034d947 100644 --- a/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx @@ -1 +1 @@ -`Toggle` component allows users to switch between two states. \ No newline at end of file +`Toggle` component allows users to switch between two states. diff --git a/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx b/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx index 7e79a439..7c8e7b17 100644 --- a/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx @@ -1 +1 @@ -`Tooltip` component displays additional information on hover. \ No newline at end of file +`Tooltip` component displays additional information on hover. diff --git a/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx index 0519ecba..e69de29b 100644 --- a/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx b/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx index 150a3bad..15016737 100644 --- a/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx +++ b/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx @@ -1 +1 @@ -`Uploader` component allows users to upload files. \ No newline at end of file +`Uploader` component allows users to upload files. diff --git a/apps/landing/src/app/(detail)/docs/LeftMenu.tsx b/apps/landing/src/app/(detail)/docs/LeftMenu.tsx index 7129a1dc..d3485904 100644 --- a/apps/landing/src/app/(detail)/docs/LeftMenu.tsx +++ b/apps/landing/src/app/(detail)/docs/LeftMenu.tsx @@ -7,6 +7,21 @@ export function LeftMenu() { Overview Installation + + Core Concepts + Features +```tsx +import { Box } from '@devup-ui/react' -const after =
+function App() { + return +} +``` + +The Box component defined above will render like this: + +```tsx +function App() { + return
+} +``` + +```css +.a { + background: red; +} +.b { + flex: 1; +} +.c { + height: 100px; +} +.d { + width: 400px; +} ``` +If you pass a number without a unit to a style property, it will be automatically scaled by 4. +This means 1 equals 4px, 2 equals 8px, and so on. + +However, the following properties are exceptions and **are not multiplied by 4**: + +- `opacity` +- `flex` +- `z-index` +- `line-clamp` +- `font-weight` +- `line-height` +- `scale` +- `aspect-ratio` +- `flex-grow` +- `flex-shrink` +- `order` +- `grid-column`, `grid-column-start`, `grid-column-end` +- `grid-row`, `grid-row-start`, `grid-row-end` +- `animation-iteration-count` +- `tab-size`, `moz-tab-size`, `-webkit-line-clamp` + +### Rendering as Another Element + You can use the `as` prop to change the element type. -```typescript -const before = +```tsx +import { Box } from '@devup-ui/react' + +function App() { + return +} +``` -const after = +By using the as prop, you can render it as another element as shown below: + +```tsx +function App() { + return +} +``` + +```css +.a { + background: red; +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/button/page.mdx b/apps/landing/src/app/(detail)/docs/api/button/page.mdx index a3e6c762..0cbc85da 100644 --- a/apps/landing/src/app/(detail)/docs/api/button/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/button/page.mdx @@ -12,8 +12,59 @@ The `Button` component is a simple button component that can be used to trigger ## How to use -```typescript -const before = + ) +} ``` + +The Button component defined above will render like this: + +```tsx +function App() { + return ( + + ) +} +``` + +```css +.a { + background: red; +} +.b { + width: 100px; +} +.c { + height: 100px; +} +``` + +If you pass a number without a unit to a style property, it will be automatically scaled by 4. +This means 1 equals 4px, 2 equals 8px, and so on. + +However, the following properties are exceptions and **are not multiplied by 4**: + +- `opacity` +- `flex` +- `z-index` +- `line-clamp` +- `font-weight` +- `line-height` +- `scale` +- `aspect-ratio` +- `flex-grow` +- `flex-shrink` +- `order` +- `grid-column`, `grid-column-start`, `grid-column-end` +- `grid-row`, `grid-row-start`, `grid-row-end` +- `animation-iteration-count` +- `tab-size`, `moz-tab-size`, `-webkit-line-clamp` diff --git a/apps/landing/src/app/(detail)/docs/api/center/page.mdx b/apps/landing/src/app/(detail)/docs/api/center/page.mdx index 9db755ae..63783ba4 100644 --- a/apps/landing/src/app/(detail)/docs/api/center/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/center/page.mdx @@ -1,8 +1,8 @@ export const metadata = { title: 'Center', alternates: { - canonical: '/docs/api/center' - } + canonical: '/docs/api/center', + }, } # Center @@ -13,20 +13,91 @@ It has a `display: flex` style with `justify-content: center` and `align-items: ## How to use -````typescript -const before = ( -
- - - -
-) - -const after = ( -
-
-
-
-
-) -```` +```tsx +import { Box, Center } from '@devup-ui/react' + +function App() { + return ( +
+ + + +
+ ) +} +``` + +The Center component defined above will render like this: + +```tsx +function App() { + return ( +
+
+
+
+
+ ) +} +``` + +```css +.a { + background: blue; +} +.b { + height: 100px; +} +.c { + width: 100px; +} +.d { + display: flex; +} +.e { + display: flex; +} +.f { + justify-content: center; +} +.g { + align-items: center; +} +``` + +If you pass a number without a unit to a style property, it will be automatically scaled by 4. +This means 1 equals 4px, 2 equals 8px, and so on. + +However, the following properties are exceptions and **are not multiplied by 4**: + +- `opacity` +- `flex` +- `z-index` +- `line-clamp` +- `font-weight` +- `line-height` +- `scale` +- `aspect-ratio` +- `flex-grow` +- `flex-shrink` +- `order` +- `grid-column`, `grid-column-start`, `grid-column-end` +- `grid-row`, `grid-row-start`, `grid-row-end` +- `animation-iteration-count` +- `tab-size`, `moz-tab-size`, `-webkit-line-clamp` + +
+ +Class names and style properties are resolved in the following order: + +1. Generate class names for child components. + - Compute class names and style properties coming from each child (including component defaults, utility classes, and props). + +2. Remove duplicate component properties. + - Deduplicate only when both the `key:value` pair and the `style-order` match. + +3. If the key:value matches but the `style-order` differs, the property is not removed — the later/higher-priority style will take precedence. + - Example: In other words, the `display: flex` implemented internally by `Center` and the `display: flex` provided directly by the user have different style-orders, so they are not removed, and the final style is applied according to priority. + +4. Generate the parent component’s className based on the merged result. + - After child classNames are generated and duplicates (per rules above) removed, compute/merge the parent className and final style output. diff --git a/apps/landing/src/app/(detail)/docs/api/css/page.mdx b/apps/landing/src/app/(detail)/docs/api/css/page.mdx index 792a1f73..ecf1836b 100644 --- a/apps/landing/src/app/(detail)/docs/api/css/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/css/page.mdx @@ -17,31 +17,78 @@ export const metadata = { You can use `css` as a tag function to create a css string. Pass in a string of css properties as an argument, ans it will be converted into a class list. -```typescript -const before = ( -
-) +```tsx +import { css } from '@devup-ui/react' -const after = +function App() { + return ( +
+ ) +} +``` + +The content above is rendered/transformed as shown below: + +```tsx +function App() { + return
+} +``` +```css +.a { + background: red; +} +.b { + width: 100px; +} +.c { + height: 100px; +} ``` ### CSS Object You can also use the css function by passing in a css object as an argument. -```typescript -const before = ( - -) +```tsx +import { css } from '@devup-ui/react' -const after = +function App() { + return ( +
+ ) +} +``` + +The content above is rendered/transformed as shown below: + +```tsx +function App() { + return
+} +``` + +```css +.a { + background: red; +} +.b { + width: 100px; +} +.c { + height: 100px; +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/flex/page.mdx b/apps/landing/src/app/(detail)/docs/api/flex/page.mdx index 3b31f24a..710363a4 100644 --- a/apps/landing/src/app/(detail)/docs/api/flex/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/flex/page.mdx @@ -14,8 +14,24 @@ It has a `display: flex` style by default. ## How to use -```typescript -const before = +```tsx +import { Flex } from '@devup-ui/react' -const after =
+function App() { + return +} +``` + +The Flex component defined above will render like this: + +```tsx +function App() { + return
+} +``` + +```css +.a { + display: flex; +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/grid/page.mdx b/apps/landing/src/app/(detail)/docs/api/grid/page.mdx index fe86b9a8..035921d3 100644 --- a/apps/landing/src/app/(detail)/docs/api/grid/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/grid/page.mdx @@ -14,21 +14,82 @@ It has a `display: grid` style by default. ## How to use -````typescript -const before = ( - - - - - -) - -const after = ( -
-
-
-
-
-) - ``` -```` +```tsx +import { Box, Grid } from '@devup-ui/react' + +function App() { + return ( + + + + + + ) +} +``` + +The Grid component defined above will render like this: + +```tsx +function App() { + return ( +
+
+
+
+
+ ) +} +``` + +```css +.a { + background: blue; +} +.b { + height: 100px; +} +.c { + width: 100px; +} +.d { + display: grid; +} +``` + +If you pass a number without a unit to a style property, it will be automatically scaled by 4. +This means 1 equals 4px, 2 equals 8px, and so on. + +However, the following properties are exceptions and **are not multiplied by 4**: + +- `opacity` +- `flex` +- `z-index` +- `line-clamp` +- `font-weight` +- `line-height` +- `scale` +- `aspect-ratio` +- `flex-grow` +- `flex-shrink` +- `order` +- `grid-column`, `grid-column-start`, `grid-column-end` +- `grid-row`, `grid-row-start`, `grid-row-end` +- `animation-iteration-count` +- `tab-size`, `moz-tab-size`, `-webkit-line-clamp` + +
+ +Class names and style properties are resolved in the following order: + +1. Generate class names for child components. + - Compute class names and style properties coming from each child (including component defaults, utility classes, and props). + +2. Remove duplicate component properties. + - Deduplicate only when both the `key:value` pair and the `style-order` match. + +3. If the key:value matches but the `style-order` differs, the property is not removed — the later/higher-priority style will take precedence. + - Example: In other words, the `display: flex` implemented internally by `Center` and the `display: flex` provided directly by the user have different style-orders, so they are not removed, and the final style is applied according to priority. + +4. Generate the parent component’s className based on the merged result. + - After child classNames are generated and duplicates (per rules above) removed, compute/merge the parent className and final style output. diff --git a/apps/landing/src/app/(detail)/docs/api/group-selector/page.mdx b/apps/landing/src/app/(detail)/docs/api/group-selector/page.mdx index bacf5e92..a9630224 100644 --- a/apps/landing/src/app/(detail)/docs/api/group-selector/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/group-selector/page.mdx @@ -12,7 +12,7 @@ The `group` selector is used to apply styles to a group of elements. It is used ## How to use -```typescript +```tsx const group = (
diff --git a/apps/landing/src/app/(detail)/docs/api/image/page.mdx b/apps/landing/src/app/(detail)/docs/api/image/page.mdx index af21b6ea..7d9cbb02 100644 --- a/apps/landing/src/app/(detail)/docs/api/image/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/image/page.mdx @@ -14,8 +14,18 @@ It is just a `img` with some styles. ## How to use -```typescript -const before = +```tsx +import { Image } from '@devup-ui/react' -const after = +function App() { + return +} +``` + +The Image component defined above will render like this: + +```tsx +function App() { + return +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/input/page.mdx b/apps/landing/src/app/(detail)/docs/api/input/page.mdx index 0fc38e63..0efe0dca 100644 --- a/apps/landing/src/app/(detail)/docs/api/input/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/input/page.mdx @@ -14,8 +14,24 @@ It is just a `input` with some styles. ## How to use -```typescript -const before = +```tsx +import { Input } from '@devup-ui/react' -const after = +function App() { + return +} +``` + +The Input component defined above will render like this: + +```tsx +function App() { + return +} +``` + +```css +.a { + border: 3px solid black; +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/selector/page.mdx b/apps/landing/src/app/(detail)/docs/api/selector/page.mdx index 338a8b7a..f4811542 100644 --- a/apps/landing/src/app/(detail)/docs/api/selector/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/selector/page.mdx @@ -8,6 +8,10 @@ export const metadata = { # Selector +The attributes defined in Pseudo-Class correspond to those defined in Selector, allowing them to be used directly as component props. + +
+ diff --git a/apps/landing/src/app/(detail)/docs/api/style-props/page.mdx b/apps/landing/src/app/(detail)/docs/api/style-props/page.mdx index e6b32431..42b613b7 100644 --- a/apps/landing/src/app/(detail)/docs/api/style-props/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/style-props/page.mdx @@ -8,6 +8,8 @@ export const metadata = { # Style Props +The attributes defined in Style Property correspond to those defined in Props, allowing them to be used directly as component props. + ## Animation
diff --git a/apps/landing/src/app/(detail)/docs/api/text/page.mdx b/apps/landing/src/app/(detail)/docs/api/text/page.mdx index 965e7e1d..d4ff9e7e 100644 --- a/apps/landing/src/app/(detail)/docs/api/text/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/text/page.mdx @@ -14,8 +14,64 @@ It is just a `span` with some styles. ## How to use -```typescript -const before = This is Text component. +```tsx +import { Text } from '@devup-ui/react' -const after = This is Text component. +function App() { + return ( + + This is Text component. + + ) +} +``` + +The Text component defined above will render like this: + +```tsx +function App() { + return This is Text component. +} +``` + +```css +.a { + color: red; +} +.b { + font-size: 24px; +} +``` + +### Rendering as Another Element + +You can use the `as` prop to change the element type. + +```tsx +import { Text } from '@devup-ui/react' + +function App() { + return ( + + This is Text component. + + ) +} +``` + +The Text component defined above will render like this: + +```tsx +function App() { + return

This is Text component.

+} +``` + +```css +.a { + color: red; +} +.b { + font-size: 24px; +} ``` diff --git a/apps/landing/src/app/(detail)/docs/api/v-stack/page.mdx b/apps/landing/src/app/(detail)/docs/api/v-stack/page.mdx index de54b927..9133ae7f 100644 --- a/apps/landing/src/app/(detail)/docs/api/v-stack/page.mdx +++ b/apps/landing/src/app/(detail)/docs/api/v-stack/page.mdx @@ -14,20 +14,88 @@ It has a `display: flex` style with `flex-direction: column`. ## How to use -```typescript -const before = ( - - - - - -) - -const after = ( -
-
-
-
-
-) +```tsx +import { Box, VStack } from '@devup-ui/react' + +function App() { + return ( + + + + + + ) +} +``` + +The VStack component defined above will render like this: + +```tsx +function App() { + return ( +
+
+
+
+
+ ) +} ``` + +```css +.a { + background: blue; +} +.b { + height: 100px; +} +.c { + width: 100px; +} +.d { + display: flex; +} +.e { + display: flex; +} +.f { + flex-direction: column; +} +``` + +If you pass a number without a unit to a style property, it will be automatically scaled by 4. +This means 1 equals 4px, 2 equals 8px, and so on. + +However, the following properties are exceptions and **are not multiplied by 4**: + +- `opacity` +- `flex` +- `z-index` +- `line-clamp` +- `font-weight` +- `line-height` +- `scale` +- `aspect-ratio` +- `flex-grow` +- `flex-shrink` +- `order` +- `grid-column`, `grid-column-start`, `grid-column-end` +- `grid-row`, `grid-row-start`, `grid-row-end` +- `animation-iteration-count` +- `tab-size`, `moz-tab-size`, `-webkit-line-clamp` + +
+ +Class names and style properties are resolved in the following order: + +1. Generate class names for child components. + - Compute class names and style properties coming from each child (including component defaults, utility classes, and props). + +2. Remove duplicate component properties. + - Deduplicate only when both the `key:value` pair and the `style-order` match. + +3. If the key:value matches but the `style-order` differs, the property is not removed — the later/higher-priority style will take precedence. + - Example: In other words, the `display: flex` implemented internally by `Center` and the `display: flex` provided directly by the user have different style-orders, so they are not removed, and the final style is applied according to priority. + +4. Generate the parent component’s className based on the merged result. + - After child classNames are generated and duplicates (per rules above) removed, compute/merge the parent className and final style output. diff --git a/apps/landing/src/app/(detail)/docs/core-concepts/no-dependencies/page.mdx b/apps/landing/src/app/(detail)/docs/core-concepts/no-dependencies/page.mdx new file mode 100644 index 00000000..1ee234ea --- /dev/null +++ b/apps/landing/src/app/(detail)/docs/core-concepts/no-dependencies/page.mdx @@ -0,0 +1,64 @@ +export const metadata = { + title: "Core-Concepts", + alternates: { + canonical: '/docs/core-concepts/no-dependencies', + } + +} + +# No Dependencies + +Devup UI converts pure React source code without additional UI runtime code. + +This section explains what “No Dependencies” means in practice, why it matters, and how Devup UI achieves it without requiring client-side style engines, extra plugins, or manual pre-generation steps. + +## Motivation + +- Many CSS-in-JS libraries rely on JavaScript at runtime to compute styles, inject `