@adamarant/designsystem 0.11.2

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 (84) hide show
  1. package/README.md +101 -0
  2. package/dist/designsystem.css +13494 -0
  3. package/dist/designsystem.js +67 -0
  4. package/dist/designsystem.min.css +2 -0
  5. package/package.json +111 -0
  6. package/src/base/index.css +2 -0
  7. package/src/base/reset.css +119 -0
  8. package/src/base/typography.css +172 -0
  9. package/src/components/accordion.css +166 -0
  10. package/src/components/admin-layout.css +371 -0
  11. package/src/components/alert.css +159 -0
  12. package/src/components/avatar.css +109 -0
  13. package/src/components/badge.css +80 -0
  14. package/src/components/bottom-nav.css +125 -0
  15. package/src/components/bottom-sheet.css +146 -0
  16. package/src/components/breadcrumb.css +102 -0
  17. package/src/components/button.css +250 -0
  18. package/src/components/card.css +117 -0
  19. package/src/components/chip.css +79 -0
  20. package/src/components/collapsible.css +112 -0
  21. package/src/components/color-picker.css +82 -0
  22. package/src/components/combobox.css +420 -0
  23. package/src/components/command.css +210 -0
  24. package/src/components/context-menu.css +162 -0
  25. package/src/components/copy-button.css +106 -0
  26. package/src/components/custom-select.css +446 -0
  27. package/src/components/datepicker.css +301 -0
  28. package/src/components/description-list.css +100 -0
  29. package/src/components/divider.css +66 -0
  30. package/src/components/drawer.css +234 -0
  31. package/src/components/drop-zone.css +166 -0
  32. package/src/components/dropdown.css +169 -0
  33. package/src/components/empty-state.css +75 -0
  34. package/src/components/field.css +112 -0
  35. package/src/components/gallery.css +257 -0
  36. package/src/components/hero.css +111 -0
  37. package/src/components/icon-btn.css +103 -0
  38. package/src/components/index.css +74 -0
  39. package/src/components/input.css +311 -0
  40. package/src/components/kbd.css +54 -0
  41. package/src/components/media-library.css +230 -0
  42. package/src/components/modal.css +136 -0
  43. package/src/components/nav.css +198 -0
  44. package/src/components/number-input.css +163 -0
  45. package/src/components/pagination.css +175 -0
  46. package/src/components/pin-input.css +136 -0
  47. package/src/components/popover.css +111 -0
  48. package/src/components/progress.css +217 -0
  49. package/src/components/prose.css +337 -0
  50. package/src/components/result.css +80 -0
  51. package/src/components/scroll-area.css +73 -0
  52. package/src/components/search.css +311 -0
  53. package/src/components/segmented-control.css +94 -0
  54. package/src/components/skeleton.css +100 -0
  55. package/src/components/slider.css +133 -0
  56. package/src/components/sortable.css +70 -0
  57. package/src/components/spinner.css +60 -0
  58. package/src/components/star-rating.css +121 -0
  59. package/src/components/stat-card.css +44 -0
  60. package/src/components/table.css +359 -0
  61. package/src/components/tabs.css +215 -0
  62. package/src/components/tag.css +188 -0
  63. package/src/components/timeline.css +130 -0
  64. package/src/components/toast.css +90 -0
  65. package/src/components/toggle.css +173 -0
  66. package/src/components/toolbar.css +206 -0
  67. package/src/components/tooltip.css +167 -0
  68. package/src/components/truncated-text.css +75 -0
  69. package/src/index.css +21 -0
  70. package/src/js/theme.js +67 -0
  71. package/src/tokens/colors.css +256 -0
  72. package/src/tokens/index.css +11 -0
  73. package/src/tokens/shadows.css +55 -0
  74. package/src/tokens/spacing.css +82 -0
  75. package/src/tokens/tokens.json +413 -0
  76. package/src/tokens/typography.css +90 -0
  77. package/src/utilities/a11y.css +102 -0
  78. package/src/utilities/index.css +7 -0
  79. package/src/utilities/interactive.css +121 -0
  80. package/src/utilities/layout.css +273 -0
  81. package/src/utilities/sizing.css +85 -0
  82. package/src/utilities/spacing.css +204 -0
  83. package/src/utilities/states.css +182 -0
  84. package/src/utilities/text.css +381 -0
@@ -0,0 +1,256 @@
1
+ /* ==========================================================================
2
+ Design Tokens: Colors
3
+ Refined zinc palette, editorial warmth.
4
+ Light-first with elegant dark mode. Override any --ds-* variable to re-theme.
5
+ ========================================================================== */
6
+
7
+ /* Light theme (default) */
8
+ :root,
9
+ [data-theme="light"] {
10
+ /* --- Background — page-level only --- */
11
+ --ds-color-bg: #fafafa;
12
+
13
+ /* --- Surface — everything on top of bg --- */
14
+ --ds-color-surface: #ffffff;
15
+ --ds-color-surface-hover: #fafafa;
16
+ --ds-color-surface-muted: #e4e4e7;
17
+ --ds-color-surface-muted-hover: #d4d4d8;
18
+ --ds-color-surface-elevated: #f4f4f5;
19
+ --ds-color-surface-elevated-hover: #e4e4e7;
20
+ --ds-color-surface-active: #f4f4f5; /* same value as elevated, different semantics — selected/active state */
21
+
22
+ /* @deprecated — use surface-* instead. Will be removed in a future major.
23
+ Kept for backward compatibility with consumer projects. */
24
+ --ds-color-bg-subtle: #ffffff;
25
+ --ds-color-bg-muted: #e4e4e7;
26
+ --ds-color-bg-muted-hover: #d4d4d8;
27
+ --ds-color-bg-muted-active: #a1a1aa;
28
+ --ds-color-bg-elevated: #f4f4f5;
29
+ --ds-color-bg-elevated-hover: #e4e4e7;
30
+
31
+ /* --- Text — zinc hierarchy ---
32
+ Contrast ratios on --ds-color-bg (#fafafa):
33
+ --text: #09090b → ~19.3:1 ✅ WCAG AAA
34
+ --text-secondary: #52525b → ~7.6:1 ✅ WCAG AAA
35
+ --text-tertiary: #71717a → ~4.2:1 ✅ WCAG AA (large text), close to AAA
36
+ --text-disabled: #d4d4d8 → ~1.5:1 ⚠ Disabled state (exempt per WCAG 1.4.3)
37
+ --- */
38
+ --ds-color-text: #09090b;
39
+ --ds-color-text-secondary: #52525b;
40
+ --ds-color-text-tertiary: #71717a;
41
+ --ds-color-text-disabled: #d4d4d8;
42
+
43
+ /* --- Inverted (primary buttons: dark bg + light text) --- */
44
+ --ds-color-inverted: #18181b;
45
+ --ds-color-on-inverted: #fafafa;
46
+
47
+ /* --- Borders — solid zinc --- */
48
+ --ds-color-border: #e4e4e7;
49
+ --ds-color-border-hover: #d4d4d8;
50
+ --ds-color-border-active: #a1a1aa;
51
+ --ds-color-border-subtle: #f4f4f5;
52
+
53
+ /* --- Interactive --- */
54
+ --ds-color-interactive: #3f3f46;
55
+ --ds-color-interactive-hover: #27272a;
56
+ --ds-color-interactive-subtle: rgba(63, 63, 70, 0.1);
57
+ --ds-color-interactive-border: rgba(63, 63, 70, 0.2);
58
+
59
+ /* --- Brand (override per-project to match your identity) --- */
60
+ --ds-color-brand: #2563eb;
61
+ --ds-color-brand-hover: #1d4ed8;
62
+ --ds-color-brand-subtle: rgba(37, 99, 235, 0.1);
63
+ --ds-color-brand-border: rgba(37, 99, 235, 0.2);
64
+ --ds-color-on-brand: #ffffff;
65
+
66
+ /* --- Overlays --- */
67
+ --ds-color-overlay: rgba(0, 0, 0, 0.5);
68
+ --ds-color-overlay-subtle: rgba(0, 0, 0, 0.02);
69
+
70
+ /* @deprecated — use surface-hover / surface-active instead */
71
+ --ds-color-overlay-hover: rgba(0, 0, 0, 0.08);
72
+ --ds-color-overlay-active: rgba(0, 0, 0, 0.12);
73
+
74
+ /* @deprecated — use color-surface + backdrop-filter for glass effect.
75
+ Too specific as tokens. Kept for backward compat. */
76
+ --ds-color-nav-bg: rgba(250, 250, 250, 0.8);
77
+ --ds-color-nav-border: rgba(228, 228, 231, 0.6);
78
+
79
+ /* --- Selection --- */
80
+ --ds-color-selection-bg: #09090b;
81
+ --ds-color-selection-text: #fafafa;
82
+
83
+ /* --- Shadows --- */
84
+ --ds-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
85
+ --ds-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
86
+ --ds-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12);
87
+
88
+ /* --- Scrollbar --- */
89
+ --ds-scrollbar-thumb: #d4d4d4;
90
+ --ds-scrollbar-thumb-hover: #a3a3a3;
91
+
92
+ color-scheme: light;
93
+ }
94
+
95
+ /* Dark theme */
96
+ [data-theme="dark"] {
97
+ /* --- Background — page-level only --- */
98
+ --ds-color-bg: #09090b;
99
+
100
+ /* --- Surface --- */
101
+ --ds-color-surface: #0f0f11;
102
+ --ds-color-surface-hover: #18181b;
103
+ --ds-color-surface-muted: #18181b;
104
+ --ds-color-surface-muted-hover: #212124;
105
+ --ds-color-surface-elevated: #2d2d31;
106
+ --ds-color-surface-elevated-hover: #3a3a40;
107
+ --ds-color-surface-active: #27272a;
108
+
109
+ /* @deprecated */
110
+ --ds-color-bg-subtle: #0f0f11;
111
+ --ds-color-bg-muted: #18181b;
112
+ --ds-color-bg-muted-hover: #212124;
113
+ --ds-color-bg-muted-active: #3f3f46;
114
+ --ds-color-bg-elevated: #2d2d31;
115
+ --ds-color-bg-elevated-hover: #3a3a40;
116
+
117
+ /* --- Text ---
118
+ Contrast ratios on --ds-color-bg (#09090b):
119
+ --text: #fafafa → ~19.3:1 ✅ WCAG AAA
120
+ --text-secondary: #a1a1aa → ~7.6:1 ✅ WCAG AAA
121
+ --text-tertiary: #71717a → ~3.8:1 ⚠ Decorative/non-essential only (does not meet 4.5:1)
122
+ --text-disabled: #3f3f46 → ~2.0:1 ⚠ Disabled state (exempt per WCAG 1.4.3)
123
+ --- */
124
+ --ds-color-text: #fafafa;
125
+ --ds-color-text-secondary: #a1a1aa;
126
+ --ds-color-text-tertiary: #71717a;
127
+ --ds-color-text-disabled: #3f3f46;
128
+
129
+ /* --- Inverted (primary buttons: light bg + dark text) --- */
130
+ --ds-color-inverted: #fafafa;
131
+ --ds-color-on-inverted: #09090b;
132
+
133
+ /* --- Borders --- */
134
+ --ds-color-border: #27272a;
135
+ --ds-color-border-hover: #3f3f46;
136
+ --ds-color-border-active: #52525b;
137
+ --ds-color-border-subtle: #18181b;
138
+
139
+ /* --- Interactive --- */
140
+ --ds-color-interactive: #d4d4d8;
141
+ --ds-color-interactive-hover: #fafafa;
142
+ --ds-color-interactive-subtle: rgba(212, 212, 216, 0.1);
143
+ --ds-color-interactive-border: rgba(212, 212, 216, 0.2);
144
+
145
+ /* --- Brand --- */
146
+ --ds-color-brand: #3b82f6;
147
+ --ds-color-brand-hover: #60a5fa;
148
+ --ds-color-brand-subtle: rgba(59, 130, 246, 0.1);
149
+ --ds-color-brand-border: rgba(59, 130, 246, 0.2);
150
+ --ds-color-on-brand: #ffffff;
151
+
152
+ /* --- Overlays --- */
153
+ --ds-color-overlay: rgba(0, 0, 0, 0.7);
154
+ --ds-color-overlay-subtle: rgba(255, 255, 255, 0.03);
155
+
156
+ /* @deprecated */
157
+ --ds-color-overlay-hover: rgba(255, 255, 255, 0.1);
158
+ --ds-color-overlay-active: rgba(255, 255, 255, 0.15);
159
+
160
+ /* @deprecated */
161
+ --ds-color-nav-bg: rgba(9, 9, 11, 0.8);
162
+ --ds-color-nav-border: rgba(39, 39, 42, 0.6);
163
+
164
+ /* --- Selection --- */
165
+ --ds-color-selection-bg: #fafafa;
166
+ --ds-color-selection-text: #09090b;
167
+
168
+ /* --- Shadows (stronger in dark) --- */
169
+ --ds-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
170
+ --ds-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
171
+ --ds-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4);
172
+
173
+ /* --- Scrollbar --- */
174
+ --ds-scrollbar-thumb: #27272a;
175
+ --ds-scrollbar-thumb-hover: #3f3f46;
176
+
177
+ color-scheme: dark;
178
+ }
179
+
180
+ /* Shared tokens (same in both themes) */
181
+ :root {
182
+ /* --- Static (theme-independent, never change between light/dark) --- */
183
+ --ds-color-static-white: #fafafa;
184
+ --ds-color-static-black: #09090b;
185
+
186
+ /* --- Semantic Status --- */
187
+ --ds-color-success: #16a34a;
188
+ --ds-color-success-subtle: rgba(22, 163, 74, 0.1);
189
+ --ds-color-success-border: rgba(22, 163, 74, 0.2);
190
+
191
+ --ds-color-warning: #d97706;
192
+ --ds-color-warning-subtle: rgba(217, 119, 6, 0.1);
193
+ --ds-color-warning-border: rgba(217, 119, 6, 0.2);
194
+
195
+ --ds-color-error: #dc2626;
196
+ --ds-color-error-subtle: rgba(220, 38, 38, 0.1);
197
+ --ds-color-error-border: rgba(220, 38, 38, 0.2);
198
+
199
+ --ds-color-info: #2563eb;
200
+ --ds-color-info-subtle: rgba(37, 99, 235, 0.1);
201
+ --ds-color-info-border: rgba(37, 99, 235, 0.2);
202
+
203
+ /* @deprecated — use color-success/warning/error/info directly.
204
+ The -solid variant was identical in value and confusing in name.
205
+ Kept for backward compatibility. */
206
+ --ds-color-success-solid: #16a34a;
207
+ --ds-color-warning-solid: #d97706;
208
+ --ds-color-error-solid: #dc2626;
209
+ --ds-color-info-solid: #2563eb;
210
+
211
+ /* --- Accent Colors (for badges, categories) --- */
212
+ --ds-color-accent-blue: #2563eb;
213
+ --ds-color-accent-purple: #7c3aed;
214
+ --ds-color-accent-green: #16a34a;
215
+ --ds-color-accent-orange: #d97706;
216
+ --ds-color-accent-blue-subtle: rgba(37, 99, 235, 0.1);
217
+ --ds-color-accent-blue-border: rgba(37, 99, 235, 0.2);
218
+ --ds-color-accent-purple-subtle: rgba(124, 58, 237, 0.1);
219
+ --ds-color-accent-purple-border: rgba(124, 58, 237, 0.2);
220
+ --ds-color-accent-green-subtle: rgba(22, 163, 74, 0.1);
221
+ --ds-color-accent-green-border: rgba(22, 163, 74, 0.2);
222
+ --ds-color-accent-orange-subtle: rgba(217, 119, 6, 0.1);
223
+ --ds-color-accent-orange-border: rgba(217, 119, 6, 0.2);
224
+ }
225
+
226
+ /* Dark overrides for status/accent (brighter for contrast) */
227
+ [data-theme="dark"] {
228
+ --ds-color-success: #4ade80;
229
+ --ds-color-success-subtle: rgba(74, 222, 128, 0.1);
230
+ --ds-color-success-border: rgba(74, 222, 128, 0.2);
231
+
232
+ --ds-color-warning: #fbbf24;
233
+ --ds-color-warning-subtle: rgba(251, 191, 36, 0.1);
234
+ --ds-color-warning-border: rgba(251, 191, 36, 0.2);
235
+
236
+ --ds-color-error: #f87171;
237
+ --ds-color-error-subtle: rgba(248, 113, 113, 0.1);
238
+ --ds-color-error-border: rgba(248, 113, 113, 0.2);
239
+
240
+ --ds-color-info: #60a5fa;
241
+ --ds-color-info-subtle: rgba(96, 165, 250, 0.1);
242
+ --ds-color-info-border: rgba(96, 165, 250, 0.2);
243
+
244
+ --ds-color-accent-blue: #60a5fa;
245
+ --ds-color-accent-purple: #a78bfa;
246
+ --ds-color-accent-green: #4ade80;
247
+ --ds-color-accent-orange: #fbbf24;
248
+ --ds-color-accent-blue-subtle: rgba(96, 165, 250, 0.1);
249
+ --ds-color-accent-blue-border: rgba(96, 165, 250, 0.2);
250
+ --ds-color-accent-purple-subtle: rgba(167, 139, 250, 0.1);
251
+ --ds-color-accent-purple-border: rgba(167, 139, 250, 0.2);
252
+ --ds-color-accent-green-subtle: rgba(74, 222, 128, 0.1);
253
+ --ds-color-accent-green-border: rgba(74, 222, 128, 0.2);
254
+ --ds-color-accent-orange-subtle: rgba(251, 191, 36, 0.1);
255
+ --ds-color-accent-orange-border: rgba(251, 191, 36, 0.2);
256
+ }
@@ -0,0 +1,11 @@
1
+ /* ==========================================================================
2
+ Design Tokens — All tokens in one import
3
+
4
+ To override: just redeclare any --ds-* variable in your project's CSS.
5
+ Your values win. Nothing breaks.
6
+ ========================================================================== */
7
+
8
+ @import './colors.css';
9
+ @import './typography.css';
10
+ @import './spacing.css';
11
+ @import './shadows.css';
@@ -0,0 +1,55 @@
1
+ /* ==========================================================================
2
+ Design Tokens: Effects & Transitions
3
+ Expo easing, smooth editorial motion.
4
+ Shadows are defined per-theme in colors.css.
5
+ ========================================================================== */
6
+
7
+ :root {
8
+ /* --- Focus Ring --- */
9
+ --ds-ring-width: 2px;
10
+ --ds-ring-offset: 2px;
11
+ --ds-ring-color: var(--ds-color-border-active);
12
+
13
+ /* --- Transitions --- */
14
+ --ds-duration-fast: 100ms;
15
+ --ds-duration-normal: 200ms;
16
+ --ds-duration-slow: 400ms;
17
+ --ds-duration-slower: 800ms;
18
+
19
+ --ds-ease-default: ease;
20
+ --ds-ease-out: cubic-bezier(0, 0, 0.2, 1);
21
+ --ds-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
22
+ --ds-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
23
+
24
+ /* --- Backdrop Blur --- */
25
+ --ds-blur-sm: 4px;
26
+ --ds-blur-md: 12px;
27
+ --ds-blur-lg: 20px;
28
+
29
+ /* --- Indicator Sizes --- */
30
+ --ds-dot-size: 6px;
31
+
32
+ /* --- Accent Border --- */
33
+ --ds-accent-border-width: 3px;
34
+
35
+ /* --- Popover/Tooltip Offset --- */
36
+ --ds-offset-sm: 4px;
37
+ --ds-offset-md: 8px;
38
+
39
+ /* --- Opacity --- */
40
+ --ds-opacity-disabled: 0.5;
41
+ }
42
+
43
+ /* --- Reduced Motion ---
44
+ Zero out duration tokens so every component that uses
45
+ var(--ds-duration-*) transitions instantly.
46
+ Keyframe animations are handled per-component.
47
+ -------------------------------------------------------- */
48
+ @media (prefers-reduced-motion: reduce) {
49
+ :root {
50
+ --ds-duration-fast: 0s;
51
+ --ds-duration-normal: 0s;
52
+ --ds-duration-slow: 0s;
53
+ --ds-duration-slower: 0s;
54
+ }
55
+ }
@@ -0,0 +1,82 @@
1
+ /* ==========================================================================
2
+ Design Tokens: Spacing & Layout
3
+ Generous whitespace, responsive sections.
4
+ ========================================================================== */
5
+
6
+ /* Breakpoints (reference only — CSS cannot use vars in @media)
7
+ --ds-breakpoint-sm: 640px
8
+ --ds-breakpoint-md: 768px
9
+ --ds-breakpoint-lg: 1024px
10
+ --ds-breakpoint-xl: 1280px
11
+ */
12
+
13
+ :root {
14
+ /* --- Spacing Scale --- */
15
+ --ds-space-0: 0;
16
+ --ds-space-0-5: 0.125rem; /* 2px */
17
+ --ds-space-1: 0.25rem; /* 4px */
18
+ --ds-space-1-5: 0.375rem; /* 6px */
19
+ --ds-space-2: 0.5rem; /* 8px */
20
+ --ds-space-2-5: 0.625rem; /* 10px */
21
+ --ds-space-3: 0.75rem; /* 12px */
22
+ --ds-space-4: 1rem; /* 16px */
23
+ --ds-space-5: 1.25rem; /* 20px */
24
+ --ds-space-6: 1.5rem; /* 24px */
25
+ --ds-space-8: 2rem; /* 32px */
26
+ --ds-space-10: 2.5rem; /* 40px */
27
+ --ds-space-12: 3rem; /* 48px */
28
+ --ds-space-16: 4rem; /* 64px */
29
+ --ds-space-20: 5rem; /* 80px */
30
+ --ds-space-24: 6rem; /* 96px */
31
+ --ds-space-32: 8rem; /* 128px */
32
+
33
+ /* --- Component Height Scale ---
34
+ Inline components at the same size tier share the same height.
35
+ Button SM + Input SM = both 32px. Always.
36
+ Based on Radix Themes convention (multiples of 8).
37
+
38
+ --ds-size-1: 24px — xs (btn--xs, input--xs)
39
+ --ds-size-2: 32px — sm (btn--sm, input--sm)
40
+ --ds-size-3: 40px — md (btn, input — default)
41
+ --ds-size-4: 48px — lg (btn--lg, input--lg)
42
+ --ds-size-5: 56px — xl (btn--xl)
43
+ --ds-size-6: 64px — 2xl (btn--2xl) */
44
+ --ds-size-1: 1.5rem;
45
+ --ds-size-2: 2rem;
46
+ --ds-size-3: 2.5rem;
47
+ --ds-size-4: 3rem;
48
+ --ds-size-5: 3.5rem;
49
+ --ds-size-6: 4rem;
50
+
51
+ /* --- Component-Specific Heights --- */
52
+ --ds-search-bar-height: 3.5rem;
53
+ --ds-toolbar-row-height: 2.5rem;
54
+
55
+ /* --- Section Padding (responsive, generous) --- */
56
+ --ds-section-padding: clamp(80px, 12vw, 160px);
57
+
58
+ /* --- Container --- */
59
+ --ds-container-max: 1440px;
60
+ --ds-container-padding: clamp(8px, 5vw, 80px);
61
+ --ds-container-sm: 640px;
62
+ --ds-container-md: 768px;
63
+ --ds-container-lg: 1024px;
64
+
65
+ /* --- Border Radius (refined, slightly larger) --- */
66
+ --ds-radius-none: 0;
67
+ --ds-radius-sm: 6px;
68
+ --ds-radius-md: 8px;
69
+ --ds-radius-lg: 12px;
70
+ --ds-radius-xl: 16px;
71
+ --ds-radius-2xl: 20px;
72
+ --ds-radius-full: 9999px;
73
+
74
+ /* --- Z-Index Scale --- */
75
+ --ds-z-base: 0;
76
+ --ds-z-dropdown: 50;
77
+ --ds-z-sticky: 60;
78
+ --ds-z-overlay: 80;
79
+ --ds-z-modal: 100;
80
+ --ds-z-toast: 150;
81
+ --ds-z-tooltip: 200;
82
+ }