atomsystem 0.1.48 โ†’ 0.1.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +147 -55
  2. package/atom.design.md +155 -0
  3. package/atom.uxPattern.md +431 -0
  4. package/components/ui/Badge.tsx +20 -0
  5. package/components/ui/Button.tsx +33 -0
  6. package/components/ui/Card.tsx +20 -0
  7. package/components/ui/Input.tsx +35 -0
  8. package/components/ui/Modal.tsx +54 -0
  9. package/components/ui/index.ts +5 -0
  10. package/css/atom-ui.css +216 -0
  11. package/dist/cli.cjs +105 -0
  12. package/dist/cli.cjs.map +1 -0
  13. package/dist/cli.d.cts +1 -0
  14. package/dist/cli.d.ts +1 -0
  15. package/dist/cli.js +97 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/index.cjs +7897 -0
  18. package/dist/index.cjs.map +1 -0
  19. package/dist/index.d.cts +218 -0
  20. package/dist/index.d.ts +218 -0
  21. package/dist/index.js +7845 -451
  22. package/dist/index.js.map +1 -0
  23. package/package.json +120 -81
  24. package/presets/default.design.md +155 -0
  25. package/presets/uxPattern.md +431 -0
  26. package/skills/atomsystem.skill.md +104 -0
  27. package/tokens/token.json +319 -0
  28. package/tokens/tokens.json +318 -976
  29. package/app/templates/Animations/Animation.tsx +0 -282
  30. package/app/templates/Badge/Badge.tsx +0 -28
  31. package/app/templates/Badge/badge.css +0 -28
  32. package/app/templates/Button/Button.tsx +0 -31
  33. package/app/templates/Button/button.css +0 -135
  34. package/app/templates/Card/Card.tsx +0 -50
  35. package/app/templates/Card/card.css +0 -17
  36. package/app/templates/Checkbox/Checkbox.tsx +0 -55
  37. package/app/templates/Checkbox/checkbox.css +0 -38
  38. package/app/templates/CodeBlock/CodeBlock.tsx +0 -68
  39. package/app/templates/Collapse/Collapse.tsx +0 -207
  40. package/app/templates/Collapse/collapse.css +0 -24
  41. package/app/templates/Dropdown/Dropdown.css +0 -112
  42. package/app/templates/Dropdown/Dropdown.tsx +0 -103
  43. package/app/templates/Input/Input.tsx +0 -29
  44. package/app/templates/Input/input.css +0 -24
  45. package/app/templates/Label/Label.tsx +0 -22
  46. package/app/templates/Modal/Modal.tsx +0 -71
  47. package/app/templates/Modal/modal.css +0 -98
  48. package/app/templates/Navigation/Navigation.tsx +0 -169
  49. package/app/templates/Navigation/navigation.css +0 -59
  50. package/app/templates/Pagination/Pagination.tsx +0 -104
  51. package/app/templates/Pagination/pagination.css +0 -66
  52. package/app/templates/Radio/Radio.tsx +0 -45
  53. package/app/templates/Radio/radio.css +0 -29
  54. package/app/templates/Select/Select.tsx +0 -143
  55. package/app/templates/Select/select.css +0 -47
  56. package/app/templates/Sidebar/Sidebar.tsx +0 -139
  57. package/app/templates/Sidebar/sidebar.css +0 -4
  58. package/app/templates/TOC/TOC.tsx +0 -165
  59. package/app/templates/Tab/Tab.tsx +0 -117
  60. package/app/templates/Tab/tab.css +0 -56
  61. package/app/templates/Table/Table.tsx +0 -54
  62. package/app/templates/Table/table.css +0 -58
  63. package/app/templates/Theme/Theme.tsx +0 -122
  64. package/app/templates/Toast/Toast.tsx +0 -106
  65. package/app/templates/Toast/toast.css +0 -69
  66. package/build/build-tokens.js +0 -223
  67. package/build/css/_variables.css +0 -251
  68. package/build/typescript/theme.ts +0 -6
  69. package/css/text.css +0 -18
package/package.json CHANGED
@@ -1,81 +1,120 @@
1
- {
2
- "name": "atomsystem",
3
- "version": "0.1.48",
4
- "type": "module",
5
- "homepage": "https://system.atomground.com",
6
- "bin": {
7
- "atomsystem": "dist/index.js"
8
- },
9
- "files": [
10
- "dist",
11
- "tokens",
12
- "tailwind.config.ts",
13
- "build",
14
- "app/templates",
15
- "css"
16
- ],
17
- "scripts": {
18
- "dev": "node build/build-tokens.js && next dev --webpack",
19
- "build": "next build",
20
- "start": "next start",
21
- "lint": "next lint",
22
- "token-build": "node build/build-tokens.js",
23
- "cli:build": "tsup src/index.ts --format esm --clean --shims --target node20 --no-splitting",
24
- "cli:dev": "tsx src/index.ts"
25
- },
26
- "peerDependencies": {
27
- "sd-tailwindcss-transformer": "^2.0.0",
28
- "style-dictionary": "^4.2.0"
29
- },
30
- "dependencies": {
31
- "@emotion/react": "^11.14.0",
32
- "@emotion/styled": "^11.14.1",
33
- "@gsap/react": "^2.1.2",
34
- "@mdx-js/loader": "^3.1.0",
35
- "@mdx-js/react": "^3.1.0",
36
- "@mui/icons-material": "^7.3.9",
37
- "@mui/material": "^7.3.9",
38
- "@next/mdx": "^15.4.6",
39
- "@next/third-parties": "^15.0.3",
40
- "@tailwindcss/postcss": "^4.2.2",
41
- "@tokens-studio/sd-transforms": "^1.3.0",
42
- "@types/mdx": "^2.0.13",
43
- "chalk": "^5.6.2",
44
- "clsx": "^2.1.1",
45
- "commander": "^14.0.3",
46
- "gsap": "^3.12.7",
47
- "highlight.js": "^11.11.1",
48
- "inquirer": "^12.4.2",
49
- "lucide-react": "^1.7.0",
50
- "next": "^16.2.4",
51
- "ora": "^9.3.0",
52
- "prompts": "^2.4.2",
53
- "react": "^19.2.5",
54
- "react-dom": "^19.2.5",
55
- "react-modal": "^3.16.3",
56
- "react-responsive": "^10.0.1",
57
- "remark-gfm": "^4.0.1",
58
- "sd-tailwindcss-transformer": "^2.0.0",
59
- "style-dictionary": "^4.2.0",
60
- "tailwind-merge": "^3.5.0",
61
- "zod": "^4.3.6"
62
- },
63
- "devDependencies": {
64
- "@types/node": "^20.19.39",
65
- "@types/prompts": "^2.4.9",
66
- "@types/react": "^18.3.28",
67
- "@types/react-dom": "^18.3.7",
68
- "@types/react-modal": "^3.16.3",
69
- "@vitest/browser": "^3.1.1",
70
- "@vitest/coverage-v8": "^3.1.1",
71
- "eslint": "^8",
72
- "eslint-config-next": "15.0.3",
73
- "playwright": "^1.51.1",
74
- "postcss": "^8.5.10",
75
- "tailwindcss": "^4.2.2",
76
- "tsup": "^8.5.1",
77
- "tsx": "^4.21.0",
78
- "typescript": "^5.9.3",
79
- "vitest": "^3.1.1"
80
- }
81
- }
1
+ {
2
+ "name": "atomsystem",
3
+ "version": "0.1.50",
4
+ "type": "module",
5
+ "homepage": "https://system.atomground.com",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/jsy1023/AtomDesignToken.git"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "bin": {
14
+ "atomsystem": "dist/cli.js"
15
+ },
16
+ "main": "./dist/index.cjs",
17
+ "module": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js",
23
+ "require": "./dist/index.cjs"
24
+ },
25
+ "./token.json": "./tokens/token.json",
26
+ "./tokens": "./tokens/tokens.json",
27
+ "./design.md": "./presets/default.design.md",
28
+ "./uxPattern.md": "./presets/uxPattern.md",
29
+ "./skill": "./skills/atomsystem.skill.md",
30
+ "./components/*": "./components/ui/*.tsx",
31
+ "./css/atom-ui.css": "./css/atom-ui.css",
32
+ "./package.json": "./package.json"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "tokens",
37
+ "presets",
38
+ "skills",
39
+ "components/ui",
40
+ "css",
41
+ "atom.design.md",
42
+ "atom.uxPattern.md",
43
+ "tailwind.config.ts"
44
+ ],
45
+ "scripts": {
46
+ "dev": "next dev",
47
+ "build": "next build",
48
+ "prepublishOnly": "npm run build:lib",
49
+ "generate:dist": "tsx scripts/generate-package-distribution.ts",
50
+ "build:lib": "npm run generate:dist && tsup",
51
+ "pack:lib": "npm run build:lib && npm pack",
52
+ "example:mib": "npm --prefix examples/mib-browser run dev",
53
+ "example:mib:build": "npm --prefix examples/mib-browser run build",
54
+ "example:mib:test": "npm --prefix examples/mib-browser run test:e2e",
55
+ "start": "next start",
56
+ "lint": "next lint",
57
+ "test:e2e": "playwright test",
58
+ "test:e2e:ui": "playwright test --ui",
59
+ "test:e2e:report": "playwright show-report"
60
+ },
61
+ "peerDependencies": {
62
+ "sd-tailwindcss-transformer": "^2.0.0",
63
+ "style-dictionary": "^4.2.0"
64
+ },
65
+ "dependencies": {
66
+ "@codemirror/lang-json": "^6.0.2",
67
+ "@emotion/react": "^11.14.0",
68
+ "@emotion/styled": "^11.14.1",
69
+ "@gsap/react": "^2.1.2",
70
+ "@mdx-js/loader": "^3.1.0",
71
+ "@mdx-js/react": "^3.1.0",
72
+ "@mui/icons-material": "^7.3.9",
73
+ "@mui/material": "^7.3.9",
74
+ "@next/mdx": "^15.4.6",
75
+ "@next/third-parties": "^15.0.3",
76
+ "@tailwindcss/postcss": "^4.2.2",
77
+ "@tokens-studio/sd-transforms": "^1.3.0",
78
+ "@types/mdx": "^2.0.13",
79
+ "@uiw/codemirror-theme-vscode": "^4.25.9",
80
+ "@uiw/react-codemirror": "^4.25.9",
81
+ "chalk": "^5.6.2",
82
+ "clsx": "^2.1.1",
83
+ "commander": "^14.0.3",
84
+ "gsap": "^3.12.7",
85
+ "highlight.js": "^11.11.1",
86
+ "inquirer": "^12.4.2",
87
+ "lucide-react": "^1.7.0",
88
+ "next": "^15.0.3",
89
+ "ora": "^9.3.0",
90
+ "prompts": "^2.4.2",
91
+ "react": "^19.2.5",
92
+ "react-dom": "^19.2.5",
93
+ "react-modal": "^3.16.3",
94
+ "react-responsive": "^10.0.1",
95
+ "remark-gfm": "^4.0.1",
96
+ "sd-tailwindcss-transformer": "^2.0.0",
97
+ "style-dictionary": "^4.2.0",
98
+ "tailwind-merge": "^3.5.0",
99
+ "zod": "^4.3.6"
100
+ },
101
+ "devDependencies": {
102
+ "@playwright/test": "^1.64.0",
103
+ "@types/node": "^20.19.39",
104
+ "@types/prompts": "^2.4.9",
105
+ "@types/react": "^18.3.28",
106
+ "@types/react-dom": "^18.3.7",
107
+ "@types/react-modal": "^3.16.3",
108
+ "@vitest/browser": "^3.1.1",
109
+ "@vitest/coverage-v8": "^3.1.1",
110
+ "eslint": "^8",
111
+ "eslint-config-next": "15.0.3",
112
+ "playwright": "^1.51.1",
113
+ "postcss": "^8.5.10",
114
+ "tailwindcss": "^4.2.2",
115
+ "tsup": "^8.5.1",
116
+ "tsx": "^4.21.0",
117
+ "typescript": "^5.9.3",
118
+ "vitest": "^3.1.1"
119
+ }
120
+ }
@@ -0,0 +1,155 @@
1
+ # ๐Ÿ›๏ธ AtomSystem Universal Design Guide (atom.design.md)
2
+
3
+ > **Universal Design Token & Framework-Agnostic Design System**
4
+ > ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(SSOT)๊ณผ ์ œ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ตฌํ•˜๋Š” ๋ชจ๋˜ UI ๋””์ž์ธ ์ง€์นจ์„œ์ž…๋‹ˆ๋‹ค.
5
+
6
+ ---
7
+
8
+ ## 1. ํ•ต์‹ฌ ๋””์ž์ธ ์ฒ ํ•™ (Design Principles)
9
+
10
+ ### 01. ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› (Single Source of Truth)
11
+ > **๋ชจ๋“  ๋””์ž์ธ ๊ฒฐ์ •์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.**
12
+
13
+ Figma, ๋งˆํฌ๋‹ค์šด ๊ฐ€์ด๋“œ, JSON ํ† ํฐ ํŒŒ์ผ ์ค‘ ์–ด๋А ํ•˜๋‚˜๊ฐ€ ๊ธฐ์ค€์ด ๋˜๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ฝ”๋“œ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜๋กœ HEX ์ฝ”๋“œ๋‚˜ ๋งค์ง ๋„˜๋ฒ„๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์„ ์—„๊ฒฉํžˆ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
14
+
15
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
16
+ - โœ… ๋ชจ๋“  ์ƒ‰์ƒ, ์—ฌ๋ฐฑ, ๊ณก๋ฅ ์€ ๋ฐ˜๋“œ์‹œ var(--atom-*) ์‹œ๋งจํ‹ฑ ํ† ํฐ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
17
+ - โœ… ์‹ ๊ทœ ์Šคํƒ€์ผ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ํ† ํฐ ๋ช…์„ธ์„œ(tokens.json)์— ๋จผ์ € ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
18
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
19
+ - โŒ ์ปดํฌ๋„ŒํŠธ CSS/Tailwind์— #3182F6, 16px ๋“ฑ์˜ ์›์ฒœ ๊ฐ’์„ ์ธ๋ผ์ธ์œผ๋กœ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
20
+ - โŒ ํŽ˜์ด์ง€๋ณ„๋กœ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ํ…Œ๋งˆ ๋ณ€์ˆ˜๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
21
+ * **ํ‘œ์ค€ ์ฐธ์กฐ**: `W3C DTCG Format Specification ยง1.1`
22
+
23
+ ---
24
+
25
+ ### 02. ์ œ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ (Zero Runtime Overhead)
26
+ > **๋ธŒ๋ผ์šฐ์ € ๋Ÿฐํƒ€์ž„ ๊ณ„์‚ฐ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.**
27
+
28
+ CSS-in-JS์˜ ๋Ÿฐํƒ€์ž„ ํŒŒ์‹ฑ ๋น„์šฉ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค ํŒฝ์ฐฝ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ CSS Custom Properties(--*)์™€ ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ ์‚ฌ์ „ ์ปดํŒŒ์ผํ•˜์—ฌ 0ms์˜ ์Šคํƒ€์ผ ์ฃผ์ž… ์†๋„๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
29
+
30
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
31
+ - โœ… CSS ํ‘œ์ค€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„ ๋ ˆ๋ฒจ์—์„œ ์ฆ‰๊ฐ์ ์ธ ํ…Œ๋งˆ ์ „ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
32
+ - โœ… ์ •์  CSS ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•˜์—ฌ ์ดˆ๊ธฐ ํŽ˜์ธํŠธ(FCP) ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
33
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
34
+ - โŒ ๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์—ฐ์‚ฐํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ๋ฌด๊ฑฐ์šด ๋™์  CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
35
+ - โŒ ํ…Œ๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ์ „์—ญ ์ƒํƒœ ๊ตฌ๋…์„ ๋‚จ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
36
+ * **ํ‘œ์ค€ ์ฐธ์กฐ**: `Performance Budget & Core Web Vitals Standard`
37
+
38
+ ---
39
+
40
+ ### 03. 3๊ณ„์ธต ํ† ํฐ ์•„ํ‚คํ…์ฒ˜ (3-Tier Token Hierarchy)
41
+ > **์›์ฒœ ํ† ํฐ(Global) -> ์˜๋„ ํ† ํฐ(Semantic) -> ์ปดํฌ๋„ŒํŠธ ํ† ํฐ(Component)**
42
+
43
+ ์›์ฒœ ๊ฐ’๊ณผ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์‚ฌ์ด์— ๋ฐ˜๋“œ์‹œ "์˜๋„(Semantic)" ๊ณ„์ธต์„ ๋‘ก๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ๊ณ„์ธต์ด ์กด์žฌํ•ด์•ผ๋งŒ ๋‹คํฌ ๋ชจ๋“œ, ๊ณ ๋Œ€๋น„ ๋ชจ๋“œ, ๋ฉ€ํ‹ฐ ๋ธŒ๋žœ๋“œ ํ…Œ๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์Šคํƒ€์ผ์„ ์ผ๊ด„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
44
+
45
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
46
+ - โœ… UI ์Šคํƒ€์ผ๋ง ์‹œ ํ•ญ์ƒ Tier 2(Semantic: --atom-bg-surface, --atom-color-primary)๋ฅผ ์ตœ์šฐ์„ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
47
+ - โœ… ๋‹คํฌ ํ…Œ๋งˆ์—์„œ๋Š” Tier 1(ํŒ”๋ ˆํŠธ)์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Tier 2์˜ ์ฐธ์กฐ ๋งํฌ๋งŒ ์Šค์œ„์นญํ•ฉ๋‹ˆ๋‹ค.
48
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
49
+ - โŒ ์ปดํฌ๋„ŒํŠธ์—์„œ Tier 1 ์›์ฒœ ํ† ํฐ(var(--blue-500))์„ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
50
+ - โŒ ์ปดํฌ๋„ŒํŠธ ํ† ํฐ(Tier 3)์„ ๋ฒ”์šฉ ๋ ˆ์ด์•„์›ƒ ์Šคํƒ€์ผ์— ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ํ˜ผ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
51
+ * **ํ‘œ์ค€ ์ฐธ์กฐ**: `W3C DTCG 2025.10 ยง3 Alias & Inheritance`
52
+
53
+ ---
54
+
55
+ ### 04. ํ”„๋ ˆ์ž„์›Œํฌ ๋ถˆ๊ฐ€์ง€๋ก  (Framework-Agnostic)
56
+ > **React, Vue, Svelte, Angular, Vanilla HTML ์–ด๋””์„œ๋‚˜ 100% ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.**
57
+
58
+ ๋””์ž์ธ ์‹œ์Šคํ…œ์€ ํŠน์ • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. CSS ํ‘œ์ค€๊ณผ ์›น ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด ์—ฌ๋Ÿฌ ๊ธฐ์ˆ  ์Šคํƒ์ด ํ˜ผ์žฌํ•˜๋”๋ผ๋„ ์™„๋ฒฝํ•œ ๋””์ž์ธ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
59
+
60
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
61
+ - โœ… ์›น ํ‘œ์ค€ CSS ๋ณ€์ˆ˜์™€ ํ‘œ์ค€ HTML5 ์‹œ๋งจํ‹ฑ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
62
+ - โœ… ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋ ˆ๊ฑฐ์‹œ jQuery ํ™˜๊ฒฝ์—์„œ๋„ ํด๋ž˜์Šค๋ช…๋งŒ์œผ๋กœ ๋™์ผ ์Šคํƒ€์ผ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
63
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
64
+ - โŒ ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ(React hook ๋“ฑ)๊ฐ€ ์—†์œผ๋ฉด ์Šคํƒ€์ผ์ด ๊นจ์ง€๋Š” ๋น„ํ‘œ์ค€ ์˜์กด์„ฑ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
65
+
66
+ ---
67
+
68
+ ### 05. ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ช…๋ช… ๊ทœ๊ฒฉ (Predictable Naming Convention)
69
+ > **์นดํ…Œ๊ณ ๋ฆฌ-๊ฐœ๋…-๋ณ€ํ˜•-์ƒํƒœ ์ˆœ์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ณ„์ธตํ™”๋œ ๋„ค์ด๋ฐ์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.**
70
+
71
+ ํ† ํฐ์˜ ์ด๋ฆ„์„ ๋ณด๋ฉด ์–ด๋–ค ์œ ํ˜•์ด๋ฉฐ ์–ด๋””์— ์“ฐ์ด๋Š”์ง€ ๊ฐœ๋ฐœ์ž์™€ ๋””์ž์ด๋„ˆ๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. W3C DTCG์˜ ๋„ค์ด๋ฐ ๊ถŒ๊ณ ์— ๋”ฐ๋ผ [namespace]-[category]-[concept]-[variant]-[state] ํ˜•ํƒœ๋ฅผ ํ‘œ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.
72
+
73
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
74
+ - โœ… ๊ทœ๊ฒฉ์— ๋งž์ถ˜ ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ(์˜ˆ: --atom-color-primary-hover, --atom-space-4)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
75
+ - โœ… ๋‹จ์ถ•์–ด ์ถ•์•ฝ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
76
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
77
+ - โŒ ๊ฐœ์ธ์ ์ธ ์„ ํ˜ธ์— ๋”ฐ๋ฅธ ์ž์˜์  ์ถ•์•ฝ(์˜ˆ: --at-clr-pr-h)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
78
+ - โŒ ๋ฌธ๋งฅ์ด ์—†๋Š” ๋ชจํ˜ธํ•œ ์ด๋ฆ„(์˜ˆ: --atom-color-1, --atom-size-box)์„ ์„ ์–ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
79
+ * **ํ‘œ์ค€ ์ฐธ์กฐ**: `W3C DTCG Specification ยง2 Token Names`
80
+
81
+ ---
82
+
83
+ ### 06. ์ ‘๊ทผ์„ฑ ๋ณด์žฅ (Accessibility by Default)
84
+ > **๋ชจ๋“  ์‹œ๋งจํ‹ฑ ์ƒ‰์ƒ ์Œ์€ WCAG 2.1 AA ๊ธฐ์ค€ 4.5:1 ์ด์ƒ์˜ ๋ช…๋„ ๋Œ€๋น„๋ฅผ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.**
85
+
86
+ ์ ‘๊ทผ์„ฑ์€ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๋””์ž์ธ ํ† ํฐ ์ƒ์„ฑ ์‹œ์ ์— ์ž๋™์œผ๋กœ ๊ฒ€์ฆ๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ์›์น™์ž…๋‹ˆ๋‹ค. ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ์ „๊ฒฝ ํ…์ŠคํŠธ ์ƒ‰์ƒ์˜ ํ† ํฐ ํŽ˜์–ด๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋†’์€ ๊ฐ€๋…์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
87
+
88
+ * **๊ถŒ์žฅ ์‹ค์ฒœ (DO)**:
89
+ - โœ… ํ…์ŠคํŠธ์™€ ๋ฐฐ๊ฒฝ ํ† ํฐ ๊ฒฐํ•ฉ ์‹œ 4.5:1(์ผ๋ฐ˜ ํ…์ŠคํŠธ) ๋˜๋Š” 3:1(๋Œ€ํ˜• ํ…์ŠคํŠธ) ๋ช…๋„ ๋Œ€๋น„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
90
+ - โœ… ์ƒ‰์ƒ ๊ตฌ๋ถ„์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์‹œ๊ฐ์  ํžŒํŠธ(์•„์ด์ฝ˜, ๋ฐ‘์ค„, ๋ช…๋„ ์ฐจ์ด)๋ฅผ ๋ณ‘ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
91
+ * **์ง€์–‘ ์•ˆํ‹ฐํŒจํ„ด (DON'T)**:
92
+ - โŒ ํฌ์ปค์Šค ๋ง(Focus Ring) ๋ฐ ์•„์›ƒ๋ผ์ธ์„ ์ž„์˜๋กœ ์ œ๊ฑฐ(outline: none)ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
93
+ - โŒ ํ๋ฆฐ ํšŒ์ƒ‰ ํ…์ŠคํŠธ ํ† ํฐ์„ ๋ณธ๋ฌธ ํ•„์ˆ˜ ์ •๋ณด ํ‘œ์‹œ์— ๋‚จ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
94
+ * **ํ‘œ์ค€ ์ฐธ์กฐ**: `W3C Web Content Accessibility Guidelines (WCAG 2.1 AA)`
95
+
96
+ ---
97
+
98
+ ## 2. ๋””์ž์ธ ํ† ํฐ ์‚ฌ์–‘ (Design Token Specifications)
99
+
100
+ ### ๐ŸŽจ ์‹œ๋งจํ‹ฑ ์ปฌ๋Ÿฌ ํ† ํฐ
101
+ | ๋ถ„๋ฅ˜ | ํ† ํฐ ๋ณ€์ˆ˜๋ช… | ๊ธฐ๋ณธ๊ฐ’ | ์šฉ๋„ ๋ฐ ์„ค๋ช… |
102
+ | :--- | :--- | :--- | :--- |
103
+ | brand | `--atom-color-primary` | `#3182f6` | ์ฃผ์š” ์•ก์…˜ ๋ฒ„ํŠผ, ํ™œ์„ฑ ํƒญ, ๋ธŒ๋žœ๋“œ ๊ฐ•์กฐ ์˜์—ญ์˜ ํ•ต์‹ฌ ์ƒ‰์ƒ |
104
+ | brand | `--atom-color-primary-hover` | `#1b64da` | Primary ์ปดํฌ๋„ŒํŠธ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ์ ์šฉ๋˜๋Š” ๋”ฅ ํ†ค |
105
+ | brand | `--atom-color-primary-subtle` | `#e8f3ff` | ๋ฐฐ์ง€ ๋ฐฐ๊ฒฝ, ํ™œ์„ฑ ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ, ์„ ํƒ ํ•˜์ด๋ผ์ดํŠธ ๋ฐฐ๊ฒฝ |
106
+ | surface | `--atom-bg-primary` | `#ffffff` | ์›น ์ „์ฒด ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ ์บ”๋ฒ„์Šค ๋ฐฐ๊ฒฝ (๋‹คํฌ๋ชจ๋“œ: #090a0f) |
107
+ | surface | `--atom-bg-surface` | `#f8f9fa` | ์นด๋“œ, ๋ชจ๋‹ฌ ๋‹ค์ด์–ผ๋กœ๊ทธ, ํŒจ๋„, ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ๋ฐ”ํƒ•์ƒ‰ |
108
+ | surface | `--atom-bg-muted` | `#f1f3f5` | ๋น„ํ™œ์„ฑํ™”๋œ ํผ ํ•„๋“œ, ํƒœ๊ทธ ์นฉ, ๋ณด์กฐ ์˜์—ญ ๋ฐฐ๊ฒฝ |
109
+ | text | `--atom-text-primary` | `#191f28` | ๊ฐ€์žฅ ๋†’์€ ๋ช…๋„ ๋Œ€๋น„๋ฅผ ๊ฐ–๋Š” ํ•ต์‹ฌ ๋ณธ๋ฌธ ๋ฐ ํ—ค๋“œ๋ผ์ธ ํ…์ŠคํŠธ |
110
+ | text | `--atom-text-secondary` | `#8b95a1` | ์„ค๋ช…๋ฌธ, ๋ถ€๊ฐ€ ๋ผ๋ฒจ, ํ”Œ๋ ˆ์ด์Šคํ™€๋”, ์„œ๋ธŒ ํ…์ŠคํŠธ |
111
+ | text | `--atom-text-muted` | `#b0b8c1` | ํƒ€์ž„์Šคํƒฌํ”„, ๋น„ํ™œ์„ฑํ™”๋œ ๋ผ๋ฒจ, ์žฅ์‹์„ฑ ํžŒํŠธ ํ…์ŠคํŠธ |
112
+ | border | `--atom-border-subtle` | `#f2f4f6` | ์นด๋“œ ๊ตฌ๋ถ„์„ , ๋ฆฌ์ŠคํŠธ ๊ฒฝ๊ณ„์„  ๋“ฑ ๋ถ€๋“œ๋Ÿฌ์šด ๋ถ„๋ฆฌ์„  |
113
+ | border | `--atom-border-strong` | `#e5e8eb` | ์ธํ’‹ ํ•„๋“œ ์™ธ๊ณฝ์„ , ๋ช…ํ™•ํ•œ ์•„์›ƒ๋ผ์ธ ๋ฒ„ํŠผ, ๋ชจ๋‹ฌ ๊ฒฝ๊ณ„์„  |
114
+ | status | `--atom-status-success` | `#10b981` | ์„ฑ๊ณต ์™„๋ฃŒ ์•Œ๋ฆผ, ์˜จ๋ผ์ธ ์ƒํƒœ, ์†ก๊ธˆ ์™„๋ฃŒ ์ƒํƒœ |
115
+ | status | `--atom-status-danger` | `#f43f5e` | ํผ ์œ ํšจ์„ฑ ์—๋Ÿฌ, ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€, ์‚ญ์ œ ๋“ฑ ํŒŒ๊ดด์  ์•ก์…˜ |
116
+ | status | `--atom-status-warning` | `#f59e0b` | ์ฃผ์˜ ์•Œ๋ฆผ, ๋Œ€๊ธฐ ์ค‘์ธ ์ƒํƒœ, ๊ฒฐ์ œ ๋ณด๋ฅ˜ |
117
+
118
+ ### ๐Ÿ“ ๋ผ์šด๋”ฉ (Border Radius)
119
+ | ํ† ํฐ ๋ณ€์ˆ˜๋ช… | ๊ฐ’ | ์„ค๋ช… |
120
+ | :--- | :--- | :--- |
121
+ | `--atom-radius-none` | `0px` | ๋‹จ๋‹จํ•œ ํ…Œํฌ๋‹ˆ์ปฌ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ํ”Œ๋žซ ๋””์ž์ธ |
122
+ | `--atom-radius-sm` | `6px` | ํƒœ๊ทธ ๋ฐฐ์ง€, ๋ฏธ๋‹ˆ ์ธํ’‹, ์ •๋ฐ€ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์ปจํŠธ๋กค |
123
+ | `--atom-radius-md` | `10px` | ์ผ๋ฐ˜์ ์ธ ๋ฒ„ํŠผ, ์ธํ’‹ ํ•„๋“œ, ํˆดํŒ |
124
+ | `--atom-radius-lg` | `16px` | ์นด๋“œ, ๋Œ€ํ™”์ƒ์ž ๋ชจ๋‹ฌ, ์ฃผ์š” ๋ชจ๋ฐ”์ผ ์‹œํŠธ |
125
+ | `--atom-radius-xl` | `24px` | ๋ฐ”ํ…€์‹œํŠธ ์ตœ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ, ํžˆ์–ด๋กœ ๋ฐฐ๋„ˆ ์นด๋“œ |
126
+ | `--atom-radius-full` | `9999px` | ํ•„ํ„ฐ ์นฉ, ํ”Œ๋กœํŒ… ์•ก์…˜ ๋ฒ„ํŠผ(FAB), ์›ํ˜• ์•„๋ฐ”ํƒ€ |
127
+
128
+ ### ๐Ÿ”ฒ ๊ทธ๋ฆผ์ž (Elevation Shadows)
129
+ | ํ† ํฐ ๋ณ€์ˆ˜๋ช… | ๊ฐ’ | ์„ค๋ช… |
130
+ | :--- | :--- | :--- |
131
+ | `--atom-shadow-sm` | `0 1px 2px 0 rgb(0 0 0 / 0.05)` | ๊ธฐ๋ณธ ์นด๋“œ, ์ธํ’‹ ํฌ์ปค์Šค ์ƒํƒœ, ๋ฏธ์„ธํ•œ ๊ตฌ๋ถ„ |
132
+ | `--atom-shadow-md` | `0 4px 6px -1px rgb(0 0 0 / 0.1)` | ํ˜ธ๋ฒ„๋œ ์นด๋“œ, ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด, ํŒ์˜ค๋ฒ„ ํˆดํŒ |
133
+ | `--atom-shadow-lg` | `0 10px 15px -3px rgb(0 0 0 / 0.1)` | ํ”Œ๋กœํŒ… ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”, ํ† ์ŠคํŠธ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ |
134
+ | `--atom-shadow-xl` | `0 20px 25px -5px rgb(0 0 0 / 0.15)` | ํ™”๋ฉด ์ตœ์ƒ๋‹จ ๋ ˆ์ด์–ด์˜ ๋ชจ๋‹ฌ ๋‹ค์ด์–ผ๋กœ๊ทธ, ๋ฐ”ํ…€์‹œํŠธ |
135
+
136
+ ### ๐Ÿ“ ์—ฌ๋ฐฑ ์ฒ™๋„ (Spacing Scale)
137
+ | ํ† ํฐ ๋ณ€์ˆ˜๋ช… | ํ”ฝ์…€ | REM |
138
+ | :--- | :--- | :--- |
139
+ | `--atom-space-1` | 4px | 4px |
140
+ | `--atom-space-2` | 8px | 8px |
141
+ | `--atom-space-3` | 12px | 12px |
142
+ | `--atom-space-4` | 16px | 16px |
143
+ | `--atom-space-5` | 20px | 20px |
144
+ | `--atom-space-6` | 24px | 24px |
145
+ | `--atom-space-8` | 32px | 32px |
146
+ | `--atom-space-12` | 48px | 48px |
147
+ | `--atom-space-16` | 64px | 64px |
148
+
149
+ ---
150
+
151
+ ## 3. ๋ธŒ๋žœ๋“œ ํ”„๋ฆฌ์…‹ (Presets)
152
+ - **ํ† ์Šค ์Šคํƒ€์ผ (Toss) (`toss`)**: ๋ฉ”์ธ ์ƒ‰์ƒ `#3182f6`, ๊ธฐ๋ณธ ๊ณก๋ฅ  `16px` โ€” Vivid Blue, 16px ๋ณผ๋“œ ๋ผ์šด๋”ฉ, ์‹œ์›ํ•œ ์—ฌ๋ฐฑ๊ณผ ๊ทน๋„์˜ ๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ฆ˜
153
+ - **๋‹น๊ทผ ์Šคํƒ€์ผ (Daangn) (`daangn`)**: ๋ฉ”์ธ ์ƒ‰์ƒ `#ff6f0f`, ๊ธฐ๋ณธ ๊ณก๋ฅ  `12px` โ€” Warm Orange, 12px ์†Œํ”„ํŠธ ๋ผ์šด๋”ฉ, ์นœ๊ทผํ•˜๊ณ  ๋”ฐ๋œปํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ์„ฑ
154
+ - **๋ชจ๋˜ ๋ฐ”์ด์˜ฌ๋ › (Violet Tech) (`hyper-violet`)**: ๋ฉ”์ธ ์ƒ‰์ƒ `#7c3aed`, ๊ธฐ๋ณธ ๊ณก๋ฅ  `8px` โ€” ์„ธ๋ จ๋œ ๋ณด๋ผ์ƒ‰ ํ…Œํฌ ๊ฐ์„ฑ, 8px ์ƒคํ”„ ๋ผ์šด๋”ฉ, ๊ฐœ๋ฐœ์ž/B2B ์ตœ์ ํ™”
155
+ - **์—์ฝ” ์—๋ฉ”๋ž„๋“œ (Emerald) (`forest-emerald`)**: ๋ฉ”์ธ ์ƒ‰์ƒ `#10b981`, ๊ธฐ๋ณธ ๊ณก๋ฅ  `14px` โ€” ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ํŽธ์•ˆํ•œ ๋”ฅ ๊ทธ๋ฆฐ, ํ•€ํ…Œํฌ ์ž์‚ฐ ๋ฐ ์›ฐ๋‹ˆ์Šค ์„œ๋น„์Šค์šฉ