@snksergio/design-system 0.1.0

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 (73) hide show
  1. package/README.md +260 -0
  2. package/dist-lib/chunks/app-shell-BNTvOETJ.mjs +2681 -0
  3. package/dist-lib/chunks/app-shell-BNTvOETJ.mjs.map +1 -0
  4. package/dist-lib/chunks/app-shell-CDy42aNI.mjs +2663 -0
  5. package/dist-lib/chunks/app-shell-CDy42aNI.mjs.map +1 -0
  6. package/dist-lib/chunks/app-shell-mocks-kWIVSzLs.mjs +208 -0
  7. package/dist-lib/chunks/app-shell-mocks-kWIVSzLs.mjs.map +1 -0
  8. package/dist-lib/chunks/app-shell-mocks-oO_IV3Gw.mjs +207 -0
  9. package/dist-lib/chunks/app-shell-mocks-oO_IV3Gw.mjs.map +1 -0
  10. package/dist-lib/chunks/badge-B_2Zt52o.mjs +797 -0
  11. package/dist-lib/chunks/badge-B_2Zt52o.mjs.map +1 -0
  12. package/dist-lib/chunks/badge-DKpXURa1.mjs +813 -0
  13. package/dist-lib/chunks/badge-DKpXURa1.mjs.map +1 -0
  14. package/dist-lib/chunks/chat-v2-mocks-BV9Wha_Z.mjs +192 -0
  15. package/dist-lib/chunks/chat-v2-mocks-BV9Wha_Z.mjs.map +1 -0
  16. package/dist-lib/chunks/chat-v2-mocks-DvZRkhmz.mjs +193 -0
  17. package/dist-lib/chunks/chat-v2-mocks-DvZRkhmz.mjs.map +1 -0
  18. package/dist-lib/chunks/chip-group-CsKBBHW2.mjs +796 -0
  19. package/dist-lib/chunks/chip-group-CsKBBHW2.mjs.map +1 -0
  20. package/dist-lib/chunks/chip-group-D3D0i72q.mjs +780 -0
  21. package/dist-lib/chunks/chip-group-D3D0i72q.mjs.map +1 -0
  22. package/dist-lib/chunks/clientes-showcase-mocks-BMfbNNJh.mjs +185 -0
  23. package/dist-lib/chunks/clientes-showcase-mocks-BMfbNNJh.mjs.map +1 -0
  24. package/dist-lib/chunks/clientes-showcase-mocks-Cq9u3nGZ.mjs +169 -0
  25. package/dist-lib/chunks/clientes-showcase-mocks-Cq9u3nGZ.mjs.map +1 -0
  26. package/dist-lib/chunks/input-374MpdBL.mjs +72 -0
  27. package/dist-lib/chunks/input-374MpdBL.mjs.map +1 -0
  28. package/dist-lib/chunks/input-DF4XAWmr.mjs +56 -0
  29. package/dist-lib/chunks/input-DF4XAWmr.mjs.map +1 -0
  30. package/dist-lib/chunks/page-header-Dw-3wqAG.mjs +75 -0
  31. package/dist-lib/chunks/page-header-Dw-3wqAG.mjs.map +1 -0
  32. package/dist-lib/chunks/page-header-mC1gGtOI.mjs +76 -0
  33. package/dist-lib/chunks/page-header-mC1gGtOI.mjs.map +1 -0
  34. package/dist-lib/chunks/panel-Ds15whqp.mjs +9717 -0
  35. package/dist-lib/chunks/panel-Ds15whqp.mjs.map +1 -0
  36. package/dist-lib/chunks/panel-bzNmFlEZ.mjs +9737 -0
  37. package/dist-lib/chunks/panel-bzNmFlEZ.mjs.map +1 -0
  38. package/dist-lib/chunks/useTheme-BUPLZBMs.mjs +66 -0
  39. package/dist-lib/chunks/useTheme-BUPLZBMs.mjs.map +1 -0
  40. package/dist-lib/chunks/useTheme-Dee4mo-A.mjs +65 -0
  41. package/dist-lib/chunks/useTheme-Dee4mo-A.mjs.map +1 -0
  42. package/dist-lib/index.cjs +1207 -0
  43. package/dist-lib/index.cjs.map +1 -0
  44. package/dist-lib/index.d.ts +2 -0
  45. package/dist-lib/index.mjs +1209 -0
  46. package/dist-lib/index.mjs.map +1 -0
  47. package/dist-lib/preview/chat.cjs +1120 -0
  48. package/dist-lib/preview/chat.cjs.map +1 -0
  49. package/dist-lib/preview/chat.d.ts +6 -0
  50. package/dist-lib/preview/chat.mjs +1120 -0
  51. package/dist-lib/preview/chat.mjs.map +1 -0
  52. package/dist-lib/preview/clientes.cjs +897 -0
  53. package/dist-lib/preview/clientes.cjs.map +1 -0
  54. package/dist-lib/preview/clientes.d.ts +6 -0
  55. package/dist-lib/preview/clientes.mjs +897 -0
  56. package/dist-lib/preview/clientes.mjs.map +1 -0
  57. package/dist-lib/preview/dashboard.cjs +733 -0
  58. package/dist-lib/preview/dashboard.cjs.map +1 -0
  59. package/dist-lib/preview/dashboard.d.ts +4 -0
  60. package/dist-lib/preview/dashboard.mjs +733 -0
  61. package/dist-lib/preview/dashboard.mjs.map +1 -0
  62. package/dist-lib/preview/mocks.cjs +15 -0
  63. package/dist-lib/preview/mocks.cjs.map +1 -0
  64. package/dist-lib/preview/mocks.d.ts +2 -0
  65. package/dist-lib/preview/mocks.mjs +15 -0
  66. package/dist-lib/preview/mocks.mjs.map +1 -0
  67. package/dist-lib/theme.css +668 -0
  68. package/dist-lib/tokens.cjs +915 -0
  69. package/dist-lib/tokens.cjs.map +1 -0
  70. package/dist-lib/tokens.d.ts +2 -0
  71. package/dist-lib/tokens.mjs +915 -0
  72. package/dist-lib/tokens.mjs.map +1 -0
  73. package/package.json +142 -0
@@ -0,0 +1,915 @@
1
+ const brand = {
2
+ 600: "oklch(0.5248 0.1415 150.9)"
3
+ };
4
+ const brandContrast = {
5
+ 400: "oklch(0.7289 0.1571 162.3)"
6
+ };
7
+ const gray = {
8
+ 50: "oklch(0.973 0 0)",
9
+ 100: "oklch(0.94 0 0)",
10
+ 150: "oklch(0.931 0 0)",
11
+ 200: "oklch(0.9076 0 0)",
12
+ 300: "oklch(0.8761 0 0)",
13
+ 400: "oklch(0.7025 0 0)",
14
+ 500: "oklch(0.4997 0 0)",
15
+ 600: "oklch(0.36 0 0)",
16
+ 800: "oklch(0.2645 0 0)",
17
+ 900: "oklch(0.205 0 0)",
18
+ 950: "oklch(0.15 0 0)"
19
+ };
20
+ const danger = {
21
+ 500: "oklch(0.6368 0.2078 25.33)"
22
+ };
23
+ const success = {
24
+ 500: "oklch(0.66 0.135 161)"
25
+ };
26
+ const warning = {
27
+ 500: "oklch(0.81 0.160 81)"
28
+ };
29
+ const info = {
30
+ 500: "oklch(0.62 0.210 280)"
31
+ };
32
+ const white = "oklch(1 0 0)";
33
+ const black = "oklch(0 0 0)";
34
+ const bg$1 = {
35
+ // Surfaces (sólidos)
36
+ canvas: white,
37
+ // body, página
38
+ surface: white,
39
+ // cards, drawer
40
+ "surface-elevated": white,
41
+ // popovers, modais
42
+ "surface-panels": white,
43
+ // página de fundo
44
+ sidebar: "oklch(0.9516 0.0027 106.45)",
45
+ // mineral-100 — calidez sidebar (sem primitive equiv)
46
+ // Backgrounds neutros (sólidos cinza no light)
47
+ subtle: gray[50],
48
+ muted: gray[50],
49
+ emphasis: gray[100],
50
+ // neutro mais visível que muted (sem semântica de "active")
51
+ input: white,
52
+ accent: white,
53
+ // light: bg-accent = branco (item ativo destaca por contraste)
54
+ // Brand (derivam do brand[600])
55
+ brand: brand[600],
56
+ "brand-subtle": `color-mix(in oklch, ${brand[600]} 14%, transparent)`,
57
+ "brand-hover": `color-mix(in oklch, ${brand[600]} 90%, black)`,
58
+ "brand-subtle-hover": `color-mix(in oklch, ${brand[600]} 22%, transparent)`,
59
+ // Status (sólido + muted alpha — ×4 cores)
60
+ danger: danger[500],
61
+ "danger-muted": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,
62
+ "danger-hover": `color-mix(in oklch, ${danger[500]} 90%, black)`,
63
+ "danger-muted-hover": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,
64
+ success: success[500],
65
+ "success-muted": `color-mix(in oklch, ${success[500]} 14%, transparent)`,
66
+ "success-hover": `color-mix(in oklch, ${success[500]} 90%, black)`,
67
+ "success-muted-hover": `color-mix(in oklch, ${success[500]} 22%, transparent)`,
68
+ warning: warning[500],
69
+ "warning-muted": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,
70
+ "warning-hover": `color-mix(in oklch, ${warning[500]} 90%, black)`,
71
+ "warning-muted-hover": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,
72
+ info: info[500],
73
+ "info-muted": `color-mix(in oklch, ${info[500]} 14%, transparent)`,
74
+ "info-hover": `color-mix(in oklch, ${info[500]} 90%, black)`,
75
+ "info-muted-hover": `color-mix(in oklch, ${info[500]} 22%, transparent)`,
76
+ // Hover dos neutros — sólidos cinza no light
77
+ "muted-hover": "oklch(0.95 0 0)",
78
+ "input-hover": gray[50],
79
+ // 0.973 — sutil sobre input=white
80
+ "accent-hover": "oklch(0.84 0 0)",
81
+ // Sidebar item states — active = branco (contrasta com sidebar mineral-100), hover = mineral subtle
82
+ "sidebar-accent": white,
83
+ "sidebar-accent-hover": "oklch(0.92 0.0068 115.72)",
84
+ // Tabela — sólidos
85
+ "table": white,
86
+ "table-head": gray[50],
87
+ // Hover sutil: gray[50] (~2.7% diff de white) em vez de gray[100] (6% — forte demais).
88
+ // Mesmo tom do table-head, mantém hierarquia visual sem competir com cells selected.
89
+ "table-row-hover": gray[50],
90
+ // Linha selecionada — alpha brand discreto (6%); hover sobe pra 10%
91
+ // (não usar `bg-brand-subtle` 14% — forte demais como bg de row)
92
+ "table-row-selected": `color-mix(in oklch, ${brand[600]} 6%, transparent)`,
93
+ "table-row-selected-hover": `color-mix(in oklch, ${brand[600]} 10%, transparent)`,
94
+ // Dropdown/Popover — referencia bg-canvas (white no light)
95
+ "dropdown": "var(--color-bg-canvas)"
96
+ };
97
+ const fg$1 = {
98
+ // Hierarquia
99
+ strong: gray[950],
100
+ default: gray[950],
101
+ muted: gray[500],
102
+ // labels, helpers (light)
103
+ subtle: gray[400],
104
+ // placeholders, hints
105
+ disabled: gray[400],
106
+ // Brand
107
+ brand: brand[600],
108
+ // Status
109
+ danger: danger[500],
110
+ success: success[500],
111
+ warning: warning[500],
112
+ info: info[500],
113
+ // Sobre fundos sólidos (on-*)
114
+ "on-brand": white,
115
+ "on-danger": white,
116
+ "on-success": white,
117
+ "on-warning": black,
118
+ // amarelo claro → preto pra contraste
119
+ "on-info": white
120
+ };
121
+ const border$1 = {
122
+ default: gray[200],
123
+ // borda padrão
124
+ subtle: gray[150],
125
+ // dividers, controles
126
+ input: gray[300],
127
+ // inputs / fields
128
+ sidebar: "oklch(0.9076 0.0068 115.72)",
129
+ // mineral-200
130
+ brand: brand[600],
131
+ "brand-subtle": `color-mix(in oklch, ${brand[600]} 36%, transparent)`,
132
+ "danger-muted": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,
133
+ "success-muted": `color-mix(in oklch, ${success[500]} 36%, transparent)`,
134
+ "warning-muted": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,
135
+ "info-muted": `color-mix(in oklch, ${info[500]} 36%, transparent)`,
136
+ // Tabela
137
+ table: gray[150]
138
+ };
139
+ const ring$1 = {
140
+ brand: `color-mix(in oklch, ${brand[600]} 22%, transparent)`,
141
+ danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,
142
+ success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,
143
+ warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,
144
+ info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,
145
+ secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`
146
+ };
147
+ const overlay$1 = {
148
+ // Scrim de backdrop (modais, drawers)
149
+ scrim: "oklch(0 0 0 / 0.55)",
150
+ // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)
151
+ // — consumido pela utility `outline-float`. Light: cinza medium 12%.
152
+ // Valor anterior (6%) era visualmente imperceptível em backgrounds claros;
153
+ // 12% mantém o efeito "halo sutil" mas com presença visual real.
154
+ float: "oklch(0.55 0 0 / 0.12)"
155
+ };
156
+ const colorLight = { bg: bg$1, fg: fg$1, border: border$1, ring: ring$1, overlay: overlay$1 };
157
+ const bg = {
158
+ // Surfaces sólidas
159
+ canvas: gray[900],
160
+ // body
161
+ surface: "oklch(0.225 0 0)",
162
+ // cards, drawer (entre gray-900 e gray-800)
163
+ "surface-elevated": "oklch(0.225 0 0)",
164
+ "surface-panels": gray[900],
165
+ sidebar: "oklch(0.225 0 0)",
166
+ // Backgrounds neutros (alpha overlay — adapta ao surface debaixo)
167
+ subtle: "oklch(1 0 0 / 0.01)",
168
+ muted: "oklch(1 0 0 / 0.03)",
169
+ emphasis: `color-mix(in oklch, ${white} 12%, transparent)`,
170
+ // mesmo visual do bg-accent (sem semântica de "active")
171
+ input: "oklch(1 0 0 / 0.04)",
172
+ accent: "oklch(1 0 0 / 0.12)",
173
+ // Brand (dark usa brandContrast — verde brilhante)
174
+ brand: brandContrast[400],
175
+ "brand-subtle": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,
176
+ "brand-hover": `color-mix(in oklch, ${brandContrast[400]} 90%, black)`,
177
+ "brand-subtle-hover": `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,
178
+ // Status (sólido + muted alpha — ×4 cores)
179
+ danger: danger[500],
180
+ "danger-muted": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,
181
+ "danger-hover": `color-mix(in oklch, ${danger[500]} 90%, white)`,
182
+ "danger-muted-hover": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,
183
+ success: success[500],
184
+ "success-muted": `color-mix(in oklch, ${success[500]} 14%, transparent)`,
185
+ "success-hover": `color-mix(in oklch, ${success[500]} 90%, white)`,
186
+ "success-muted-hover": `color-mix(in oklch, ${success[500]} 22%, transparent)`,
187
+ warning: warning[500],
188
+ "warning-muted": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,
189
+ "warning-hover": `color-mix(in oklch, ${warning[500]} 90%, white)`,
190
+ "warning-muted-hover": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,
191
+ info: info[500],
192
+ "info-muted": `color-mix(in oklch, ${info[500]} 14%, transparent)`,
193
+ "info-hover": `color-mix(in oklch, ${info[500]} 90%, white)`,
194
+ "info-muted-hover": `color-mix(in oklch, ${info[500]} 22%, transparent)`,
195
+ // Hover dos neutros — alphas sobem 1 tier
196
+ "muted-hover": "oklch(1 0 0 / 0.08)",
197
+ "input-hover": "oklch(1 0 0 / 0.08)",
198
+ "accent-hover": "oklch(1 0 0 / 0.16)",
199
+ // Sidebar item states — alphas
200
+ "sidebar-accent": "oklch(1 0 0 / 0.08)",
201
+ "sidebar-accent-hover": "oklch(1 0 0 / 0.12)",
202
+ // Tabela — sólidos pra suportar sticky columns sem vazamento
203
+ "table": "oklch(0.225 0 0)",
204
+ // mesmo bg-surface
205
+ "table-head": "oklch(0.252 0 0)",
206
+ // gray-850 — head sticky
207
+ "table-row-hover": "oklch(0.252 0 0)",
208
+ // Linha selecionada — alpha brandContrast 10%; hover sobe pra 14%
209
+ // (no dark precisa de alpha levemente maior pra ficar visível sobre surface escuro)
210
+ "table-row-selected": `color-mix(in oklch, ${brandContrast[400]} 10%, transparent)`,
211
+ "table-row-selected-hover": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,
212
+ // Dropdown/Popover — frosted-glass: bg-canvas com 70% opacidade
213
+ // (combina com backdrop-blur no componente pra efeito vidro fosco)
214
+ "dropdown": "color-mix(in oklab, var(--color-bg-canvas) 70%, transparent)"
215
+ };
216
+ const fg = {
217
+ // Hierarquia
218
+ strong: white,
219
+ // 100% — títulos
220
+ default: "oklch(0.98 0 0)",
221
+ // texto padrão (sem primitive equiv exato)
222
+ muted: gray[400],
223
+ // labels, helpers
224
+ subtle: `color-mix(in oklch, ${gray[400]} 70%, transparent)`,
225
+ // placeholders
226
+ disabled: gray[600],
227
+ // Brand
228
+ brand: brandContrast[400],
229
+ // Status
230
+ danger: danger[500],
231
+ success: success[500],
232
+ warning: warning[500],
233
+ info: info[500],
234
+ // Sobre fundos sólidos (on-*) — dark inverte: verde brilhante, vermelho saturado, etc
235
+ "on-brand": black,
236
+ // preto sobre verde brilhante
237
+ "on-danger": white,
238
+ "on-success": black,
239
+ "on-warning": black,
240
+ "on-info": white
241
+ };
242
+ const border = {
243
+ default: gray[800],
244
+ subtle: "oklch(1 0 0 / 0.04)",
245
+ input: "oklch(1 0 0 / 0.08)",
246
+ sidebar: gray[800],
247
+ brand: brandContrast[400],
248
+ "brand-subtle": `color-mix(in oklch, ${brandContrast[400]} 36%, transparent)`,
249
+ "danger-muted": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,
250
+ "success-muted": `color-mix(in oklch, ${success[500]} 36%, transparent)`,
251
+ "warning-muted": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,
252
+ "info-muted": `color-mix(in oklch, ${info[500]} 36%, transparent)`,
253
+ // Tabela
254
+ table: gray[800]
255
+ };
256
+ const ring = {
257
+ brand: `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,
258
+ danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,
259
+ success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,
260
+ warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,
261
+ info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,
262
+ secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`
263
+ };
264
+ const overlay = {
265
+ // Scrim de backdrop (modais, drawers)
266
+ scrim: "oklch(0 0 0 / 0.55)",
267
+ // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)
268
+ // — consumido pela utility `outline-float`. Dark: branco 8%.
269
+ // Valor anterior (4%) era visualmente imperceptível em surfaces escuras;
270
+ // 8% mantém o efeito "halo sutil" mas com presença visual real.
271
+ float: "oklch(1 0 0 / 0.08)"
272
+ };
273
+ const colorDark = { bg, fg, border, ring, overlay };
274
+ const BASE = 4;
275
+ const sp = (n) => `${n * BASE}px`;
276
+ const scale = {
277
+ 0: sp(0),
278
+ // 0px
279
+ 0.5: sp(0.5),
280
+ // 2px ← hairline
281
+ 1: sp(1),
282
+ // 4px ← xs
283
+ 1.5: sp(1.5),
284
+ // 6px
285
+ 2: sp(2),
286
+ // 8px ← sm
287
+ 2.5: sp(2.5),
288
+ // 10px
289
+ 3: sp(3),
290
+ // 14px
291
+ 4: sp(4),
292
+ // 16px ← base (1 unit)
293
+ 5: sp(5),
294
+ // 20px
295
+ 6: sp(6),
296
+ // 24px ← lg
297
+ 7: sp(7),
298
+ // 28px
299
+ 8: sp(8),
300
+ // 32px ← xl
301
+ 9: sp(9),
302
+ // 36px
303
+ 10: sp(10),
304
+ // 40px
305
+ 11: sp(11),
306
+ // 44px ← touch target min
307
+ 12: sp(12),
308
+ // 48px ← touch target ideal
309
+ 14: sp(14)
310
+ };
311
+ const unified = {
312
+ "2xs": scale[0.5],
313
+ // 2px — hairline, border-like gaps
314
+ xs: scale[1],
315
+ // 4px — icon-to-text tight, checkbox gap, tag gap
316
+ sm: scale[1.5],
317
+ // 6px — button icon gap (xxs/xs), badge gap, tabs
318
+ md: scale[2],
319
+ // 8px — button icon gap (sm/md), form field gap, input padding
320
+ lg: scale[2.5],
321
+ // 10px — compact card padding
322
+ xl: scale[3],
323
+ // 12px — button padding (xs), info box gap, card row gap
324
+ "2xl": scale[4],
325
+ // 16px — card padding (sm), section gap, info box padding
326
+ "3xl": scale[5],
327
+ // 20px — spacer médio
328
+ "4xl": scale[6],
329
+ // 24px — card gap padrão, card padding (default), section gap
330
+ "5xl": scale[7],
331
+ // 28px — spacer grande
332
+ "6xl": scale[8],
333
+ // 32px — section major gap
334
+ "7xl": scale[12]
335
+ // 48px — page-level gap
336
+ };
337
+ const space = {
338
+ base: scale[4],
339
+ // 16px — DEFAULT: uma unidade espacial do sistema
340
+ 0: scale[0],
341
+ px: { px: "1px", raw: 1 },
342
+ ...unified
343
+ };
344
+ const gap = {
345
+ base: scale[6],
346
+ // 24px — DEFAULT: card/section internal gap
347
+ ...unified
348
+ };
349
+ const pad = {
350
+ base: scale[3],
351
+ // 12px — DEFAULT: button/input padding horizontal
352
+ ...unified
353
+ };
354
+ const spacing = { space, gap, pad };
355
+ const comp = {
356
+ base: scale[10],
357
+ // 40px — DEFAULT: button md, input md (desktop)
358
+ "3xs": scale[4],
359
+ // 16px — badge micro
360
+ "2xs": scale[5],
361
+ // 20px — badge md, switch
362
+ xs: scale[6],
363
+ // 24px — compact chip, small tag
364
+ sm: scale[7],
365
+ // 28px — tabs item
366
+ md: scale[8],
367
+ // 32px — button xs, input xs
368
+ lg: scale[9],
369
+ // 36px — button sm, input sm
370
+ xl: scale[10],
371
+ // 40px — mesmo valor que base
372
+ "2xl": scale[11],
373
+ // 44px — WCAG touch target
374
+ "3xl": scale[12],
375
+ // 48px — confortável
376
+ "4xl": scale[14]
377
+ // 56px — hero CTA
378
+ };
379
+ const sizing = { comp };
380
+ const RADIUS_BASE = "0.625rem";
381
+ const radius = {
382
+ base: RADIUS_BASE,
383
+ // 10px — DEFAULT componentes interativos (= lg)
384
+ none: "0px",
385
+ // 0px — sharp corners
386
+ xs: `${RADIUS_BASE} * 0.4`,
387
+ // 4px — sutil
388
+ sm: `${RADIUS_BASE} * 0.6`,
389
+ // 6px — tabs indicator
390
+ md: `${RADIUS_BASE} * 0.8`,
391
+ // 8px — inputs menores
392
+ lg: RADIUS_BASE,
393
+ // 10px — igual ao knob (alias de base)
394
+ xl: `${RADIUS_BASE} * 1.4`,
395
+ // 14px — modais, painéis
396
+ "2xl": `${RADIUS_BASE} * 1.8`,
397
+ // 18px — textarea, select content
398
+ "3xl": `${RADIUS_BASE} * 2.2`,
399
+ // 22px — badges, componentes menores
400
+ "4xl": `${RADIUS_BASE} * 2.6`,
401
+ // 26px — antigo valor de base (retido pra casos específicos)
402
+ full: "9999px"
403
+ // pill — avatars, chips
404
+ };
405
+ const borderWidth = {
406
+ none: "0px",
407
+ xs: "1px",
408
+ // padrão — separadores, inputs, cards
409
+ sm: "2px",
410
+ // ênfase — foco, hover de botão outline
411
+ md: "4px"
412
+ // forte — accent, progress indicator
413
+ };
414
+ const outline = {
415
+ width: "2px",
416
+ // largura do outline de foco
417
+ offset: "2px",
418
+ // espaço entre elemento e outline
419
+ style: "solid"
420
+ };
421
+ const divider = {
422
+ width: "1px",
423
+ style: "solid"
424
+ };
425
+ const shape = { radius, RADIUS_BASE, borderWidth, outline, divider };
426
+ const shadow = {
427
+ // ── Light mode ───────────────────────────────────────────────────────────────
428
+ light: {
429
+ none: "none",
430
+ sm: "0 1px 2px oklch(0 0 0 / 0.04)",
431
+ md: "rgba(145, 158, 171, 0.18) 0 0 2px 0, rgba(145, 158, 171, 0.12) 0 12px 24px -4px",
432
+ lg: "0 8px 24px oklch(0 0 0 / 0.08)",
433
+ xl: "0 12px 32px oklch(0 0 0 / 0.08)",
434
+ "2xl": "0 24px 56px oklch(0 0 0 / 0.16)",
435
+ aside: "-8px 0 24px oklch(0 0 0 / 0.12)",
436
+ // Focus ring brand-tinted (composite — usado direto em box-shadow)
437
+ ring: `0 0 0 3px color-mix(in oklch, ${brand[600]} 22%, transparent)`,
438
+ "ring-danger": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,
439
+ "ring-warning": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,
440
+ "ring-success": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,
441
+ "ring-info": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`
442
+ },
443
+ // ── Dark mode ────────────────────────────────────────────────────────────────
444
+ dark: {
445
+ none: "none",
446
+ sm: "none",
447
+ md: `0 0 0 1px ${gray[800]}`,
448
+ lg: "0 8px 24px oklch(0 0 0 / 0.30)",
449
+ xl: "0 12px 32px oklch(0 0 0 / 0.40)",
450
+ "2xl": "0 24px 56px oklch(0 0 0 / 0.45)",
451
+ aside: "-8px 0 24px oklch(0 0 0 / 0.40)",
452
+ // Focus ring brand-contrast-tinted (dark usa brandContrast)
453
+ ring: `0 0 0 3px color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,
454
+ "ring-danger": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,
455
+ "ring-warning": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,
456
+ "ring-success": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,
457
+ "ring-info": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`
458
+ }
459
+ };
460
+ const opacity = {
461
+ // Estados interativos
462
+ disabled: 0.38,
463
+ hover: 0.08,
464
+ focus: 0.12,
465
+ pressed: 0.12,
466
+ dragged: 0.16,
467
+ // Visibilidade
468
+ invisible: 0,
469
+ muted: 0.5,
470
+ subtle: 0.7,
471
+ full: 1,
472
+ // Overlay de background (scrims de modal)
473
+ "scrim-light": 0.32,
474
+ "scrim-dark": 0.64
475
+ };
476
+ const blur = {
477
+ sm: "blur(4px)",
478
+ md: "blur(8px)",
479
+ lg: "blur(16px)",
480
+ xl: "blur(24px)"
481
+ };
482
+ const zIndex = {
483
+ hide: -1,
484
+ base: 0,
485
+ dropdown: 100,
486
+ sticky: 200,
487
+ overlay: 300,
488
+ modal: 400,
489
+ popover: 500,
490
+ toast: 600,
491
+ tooltip: 700
492
+ };
493
+ const elevation = { shadow, opacity, blur, zIndex };
494
+ const fontFamily = {
495
+ sans: "var(--font-sans, 'Geist', system-ui, -apple-system, sans-serif)",
496
+ mono: "var(--font-mono, 'Geist Mono', 'Fira Code', monospace)"
497
+ };
498
+ const fontWeight = {
499
+ regular: "400",
500
+ medium: "500",
501
+ semibold: "600",
502
+ bold: "700"
503
+ };
504
+ const display = {
505
+ "display-2xl": {
506
+ fontSize: "clamp(2.5rem, calc(1.568rem + 3.978vw), 4.75rem)",
507
+ lineHeight: "1.1",
508
+ fontWeight: fontWeight.bold,
509
+ letterSpacing: "-0.02em",
510
+ fontFamily: fontFamily.sans
511
+ },
512
+ "display-xl": {
513
+ fontSize: "clamp(2.25rem, calc(1.603rem + 2.762vw), 3.8125rem)",
514
+ lineHeight: "1.1",
515
+ fontWeight: fontWeight.bold,
516
+ letterSpacing: "-0.02em",
517
+ fontFamily: fontFamily.sans
518
+ },
519
+ "display-lg": {
520
+ fontSize: "clamp(2rem, calc(1.560rem + 1.878vw), 3.0625rem)",
521
+ lineHeight: "1.15",
522
+ fontWeight: fontWeight.semibold,
523
+ letterSpacing: "-0.01em",
524
+ fontFamily: fontFamily.sans
525
+ },
526
+ "display-md": {
527
+ fontSize: "clamp(1.75rem, calc(1.465rem + 1.215vw), 2.4375rem)",
528
+ lineHeight: "1.15",
529
+ fontWeight: fontWeight.semibold,
530
+ letterSpacing: "-0.01em",
531
+ fontFamily: fontFamily.sans
532
+ }
533
+ };
534
+ const heading = {
535
+ "heading-xl": {
536
+ fontSize: "clamp(2.25rem, calc(1.732rem + 2.210vw), 3.5rem)",
537
+ lineHeight: "1.15",
538
+ fontWeight: fontWeight.medium,
539
+ letterSpacing: "-0.01em",
540
+ fontFamily: fontFamily.sans
541
+ },
542
+ "heading-lg": {
543
+ fontSize: "clamp(2rem, calc(1.586rem + 1.768vw), 3rem)",
544
+ lineHeight: "1.2",
545
+ fontWeight: fontWeight.medium,
546
+ letterSpacing: "-0.01em",
547
+ fontFamily: fontFamily.sans
548
+ },
549
+ "heading-md": {
550
+ fontSize: "clamp(1.75rem, calc(1.439rem + 1.326vw), 2.5rem)",
551
+ lineHeight: "1.2",
552
+ fontWeight: fontWeight.medium,
553
+ letterSpacing: "-0.01em",
554
+ fontFamily: fontFamily.sans
555
+ },
556
+ "heading-sm": {
557
+ fontSize: "clamp(1.5rem, calc(1.293rem + 0.884vw), 2rem)",
558
+ lineHeight: "1.25",
559
+ fontWeight: fontWeight.medium,
560
+ letterSpacing: "-0.005em",
561
+ fontFamily: fontFamily.sans
562
+ },
563
+ "heading-xs": {
564
+ fontSize: "1.5rem",
565
+ // 24px
566
+ lineHeight: "2rem",
567
+ // 32px
568
+ fontWeight: fontWeight.medium,
569
+ letterSpacing: "0em",
570
+ fontFamily: fontFamily.sans
571
+ }
572
+ // NOTE: heading-2xs removido — era duplicata pura de title-lg (ambos 20px/500/0em).
573
+ // Consumidores migrados para text-title-lg.
574
+ };
575
+ const title = {
576
+ "title-lg": {
577
+ fontSize: "1.25rem",
578
+ // 20px
579
+ lineHeight: "1.75rem",
580
+ // 28px
581
+ fontWeight: fontWeight.medium,
582
+ letterSpacing: "0em",
583
+ fontFamily: fontFamily.sans
584
+ },
585
+ "title-md": {
586
+ fontSize: "1rem",
587
+ // 16px
588
+ lineHeight: "1.5rem",
589
+ // 24px
590
+ fontWeight: fontWeight.medium,
591
+ letterSpacing: "0em",
592
+ fontFamily: fontFamily.sans
593
+ },
594
+ "title-sm": {
595
+ fontSize: "0.875rem",
596
+ // 14px
597
+ lineHeight: "1.25rem",
598
+ // 20px
599
+ fontWeight: fontWeight.medium,
600
+ letterSpacing: "0em",
601
+ fontFamily: fontFamily.sans
602
+ }
603
+ };
604
+ const label = {
605
+ "label-xl": {
606
+ fontSize: "1.5rem",
607
+ // 24px
608
+ lineHeight: "2rem",
609
+ // 32px
610
+ fontWeight: fontWeight.medium,
611
+ letterSpacing: "-0.015em",
612
+ fontFamily: fontFamily.sans
613
+ },
614
+ "label-lg": {
615
+ fontSize: "1.125rem",
616
+ // 18px
617
+ lineHeight: "1.5rem",
618
+ // 24px
619
+ fontWeight: fontWeight.medium,
620
+ letterSpacing: "-0.015em",
621
+ fontFamily: fontFamily.sans
622
+ },
623
+ "label-md": {
624
+ fontSize: "1rem",
625
+ // 16px
626
+ lineHeight: "1.5rem",
627
+ // 24px
628
+ fontWeight: fontWeight.medium,
629
+ letterSpacing: "-0.011em",
630
+ fontFamily: fontFamily.sans
631
+ },
632
+ "label-sm": {
633
+ fontSize: "0.875rem",
634
+ // 14px
635
+ lineHeight: "1.25rem",
636
+ // 20px
637
+ fontWeight: fontWeight.medium,
638
+ letterSpacing: "-0.006em",
639
+ fontFamily: fontFamily.sans
640
+ },
641
+ "label-xs": {
642
+ fontSize: "0.75rem",
643
+ // 12px
644
+ lineHeight: "1rem",
645
+ // 16px
646
+ fontWeight: fontWeight.medium,
647
+ letterSpacing: "0em",
648
+ fontFamily: fontFamily.sans
649
+ },
650
+ // ★ NOVO — preenche tier 11px no namespace label (interactive, weight 500).
651
+ // Casos: micro label, hint count, rail tooltip.
652
+ "label-2xs": {
653
+ fontSize: "0.6875rem",
654
+ // 11px
655
+ lineHeight: "0.875rem",
656
+ // 14px
657
+ fontWeight: fontWeight.medium,
658
+ letterSpacing: "0em",
659
+ fontFamily: fontFamily.sans
660
+ },
661
+ // ★ NOVO — preenche tier 13px no namespace label (body default interativo do projeto).
662
+ // Casos: button sm, dropdown item, input value, tab default.
663
+ "label-base": {
664
+ fontSize: "0.8125rem",
665
+ // 13px
666
+ lineHeight: "1.125rem",
667
+ // 18px
668
+ fontWeight: fontWeight.medium,
669
+ letterSpacing: "-0.003em",
670
+ fontFamily: fontFamily.sans
671
+ }
672
+ };
673
+ const paragraph = {
674
+ "paragraph-xl": {
675
+ fontSize: "1.5rem",
676
+ // 24px
677
+ lineHeight: "2rem",
678
+ // 32px
679
+ fontWeight: fontWeight.regular,
680
+ letterSpacing: "-0.015em",
681
+ fontFamily: fontFamily.sans
682
+ },
683
+ "paragraph-lg": {
684
+ fontSize: "1.125rem",
685
+ // 18px
686
+ lineHeight: "1.5rem",
687
+ // 24px
688
+ fontWeight: fontWeight.regular,
689
+ letterSpacing: "-0.015em",
690
+ fontFamily: fontFamily.sans
691
+ },
692
+ "paragraph-md": {
693
+ fontSize: "1rem",
694
+ // 16px
695
+ lineHeight: "1.5rem",
696
+ // 24px
697
+ fontWeight: fontWeight.regular,
698
+ letterSpacing: "-0.011em",
699
+ fontFamily: fontFamily.sans
700
+ },
701
+ "paragraph-sm": {
702
+ fontSize: "0.875rem",
703
+ // 14px
704
+ lineHeight: "1.25rem",
705
+ // 20px
706
+ fontWeight: fontWeight.regular,
707
+ letterSpacing: "-0.006em",
708
+ fontFamily: fontFamily.sans
709
+ },
710
+ "paragraph-xs": {
711
+ fontSize: "0.75rem",
712
+ // 12px
713
+ lineHeight: "1rem",
714
+ // 16px
715
+ fontWeight: fontWeight.regular,
716
+ letterSpacing: "0em",
717
+ fontFamily: fontFamily.sans
718
+ },
719
+ // ★ NOVO — preenche tier 13px no namespace paragraph (body default do projeto).
720
+ // Casos: body small, msg bubble, table cell, command item, dropdown item.
721
+ "paragraph-base": {
722
+ fontSize: "0.8125rem",
723
+ // 13px
724
+ lineHeight: "1.125rem",
725
+ // 18px
726
+ fontWeight: fontWeight.regular,
727
+ letterSpacing: "-0.003em",
728
+ fontFamily: fontFamily.sans
729
+ }
730
+ };
731
+ const caption = {
732
+ "caption-md": {
733
+ fontSize: "0.8125rem",
734
+ // 13px
735
+ lineHeight: "1.125rem",
736
+ // 18px
737
+ fontWeight: fontWeight.regular,
738
+ letterSpacing: "0em",
739
+ fontFamily: fontFamily.sans
740
+ },
741
+ "caption-sm": {
742
+ fontSize: "0.6875rem",
743
+ // 11px
744
+ lineHeight: "0.875rem",
745
+ // 14px
746
+ fontWeight: fontWeight.regular,
747
+ letterSpacing: "0em",
748
+ fontFamily: fontFamily.sans
749
+ },
750
+ // ★ NOVO — preenche tier 10px (faltava completamente no DS).
751
+ // Casos: micro caption (bubble meta, conv ID, history meta).
752
+ "caption-xs": {
753
+ fontSize: "0.625rem",
754
+ // 10px
755
+ lineHeight: "0.75rem",
756
+ // 12px
757
+ fontWeight: fontWeight.regular,
758
+ letterSpacing: "0em",
759
+ fontFamily: fontFamily.sans
760
+ }
761
+ };
762
+ const subheading = {
763
+ "subheading-md": {
764
+ fontSize: "1rem",
765
+ // 16px
766
+ lineHeight: "1.5rem",
767
+ // 24px
768
+ fontWeight: fontWeight.medium,
769
+ letterSpacing: "0.06em",
770
+ fontFamily: fontFamily.sans
771
+ },
772
+ "subheading-sm": {
773
+ fontSize: "0.875rem",
774
+ // 14px
775
+ lineHeight: "1.25rem",
776
+ // 20px
777
+ fontWeight: fontWeight.medium,
778
+ letterSpacing: "0.06em",
779
+ fontFamily: fontFamily.sans
780
+ },
781
+ "subheading-xs": {
782
+ fontSize: "0.75rem",
783
+ // 12px
784
+ lineHeight: "1rem",
785
+ // 16px
786
+ fontWeight: fontWeight.medium,
787
+ letterSpacing: "0.04em",
788
+ fontFamily: fontFamily.sans
789
+ },
790
+ "subheading-2xs": {
791
+ fontSize: "0.6875rem",
792
+ // 11px
793
+ lineHeight: "0.75rem",
794
+ // 12px
795
+ fontWeight: fontWeight.medium,
796
+ letterSpacing: "0.02em",
797
+ fontFamily: fontFamily.sans
798
+ },
799
+ // ★ NOVO — variante "strong" weight 700 + tracking apertado (+0.06em).
800
+ // Substitui o pattern literal `text-[Npx] font-bold tracking-[0.06em] uppercase`.
801
+ // Casos: FILTERS/CATEGORIAS section title, table thead, MenuSidebar section header.
802
+ "subheading-strong-md": {
803
+ fontSize: "0.6875rem",
804
+ // 11px
805
+ lineHeight: "0.875rem",
806
+ // 14px
807
+ fontWeight: fontWeight.bold,
808
+ letterSpacing: "0.06em",
809
+ fontFamily: fontFamily.sans
810
+ },
811
+ // ★ NOVO — versão 10px do strong subheading.
812
+ // Casos: chip counter, unread badge, header tab count, agent rank.
813
+ "subheading-strong-sm": {
814
+ fontSize: "0.625rem",
815
+ // 10px
816
+ lineHeight: "0.75rem",
817
+ // 12px
818
+ fontWeight: fontWeight.bold,
819
+ letterSpacing: "0.06em",
820
+ fontFamily: fontFamily.sans
821
+ }
822
+ };
823
+ const code = {
824
+ "code-md": {
825
+ fontSize: "1rem",
826
+ // 16px
827
+ lineHeight: "1.6",
828
+ fontWeight: fontWeight.regular,
829
+ letterSpacing: "0em",
830
+ fontFamily: fontFamily.mono
831
+ },
832
+ "code-sm": {
833
+ fontSize: "0.8125rem",
834
+ // 13px
835
+ lineHeight: "1.6",
836
+ fontWeight: fontWeight.regular,
837
+ letterSpacing: "0em",
838
+ fontFamily: fontFamily.mono
839
+ }
840
+ };
841
+ const typography = {
842
+ ...display,
843
+ ...heading,
844
+ ...title,
845
+ ...label,
846
+ ...paragraph,
847
+ ...caption,
848
+ ...subheading,
849
+ ...code
850
+ };
851
+ const duration = {
852
+ instant: "0ms",
853
+ "x-fast": "100ms",
854
+ // hover states, focus rings
855
+ fast: "150ms",
856
+ // simples (opacity, color)
857
+ moderate: "200ms",
858
+ // entradas de elementos
859
+ slow: "300ms",
860
+ // modais, drawers, expansões
861
+ "x-slow": "400ms",
862
+ // page transitions
863
+ deliberate: "500ms"
864
+ // animações complexas, onboarding
865
+ };
866
+ const easing = {
867
+ // Productive
868
+ "standard": "cubic-bezier(0.2, 0, 0.38, 0.9)",
869
+ // entra e sai
870
+ "entrance-productive": "cubic-bezier(0, 0, 0.38, 0.9)",
871
+ // entra
872
+ "exit-productive": "cubic-bezier(0.2, 0, 1, 0.9)",
873
+ // sai
874
+ // Expressive
875
+ "emphasized": "cubic-bezier(0.2, 0, 0, 1)",
876
+ // enfatizado
877
+ "emphasized-decelerate": "cubic-bezier(0.05, 0.7, 0.1, 1)",
878
+ // entra (expressive)
879
+ "emphasized-accelerate": "cubic-bezier(0.3, 0, 0.8, 0.15)",
880
+ // sai (expressive)
881
+ // Utilitários
882
+ "linear": "linear",
883
+ "spring": "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
884
+ // ligeiro bounce
885
+ };
886
+ const motionPresets = {
887
+ // Component transitions (button, badge, input, switch)
888
+ "component": `${duration.moderate} ease-out`,
889
+ // Color shift (tabs item color)
890
+ "color-shift": `${duration.slow} ease-out`,
891
+ // Spring (tabs indicator slide)
892
+ "spring": `${duration.slow} cubic-bezier(0.65, 0, 0.35, 1)`,
893
+ // Existing presets
894
+ "hover-color": `${duration.fast} ${easing.standard}`,
895
+ "hover-transform": `${duration["x-fast"]} ${easing["entrance-productive"]}`,
896
+ "fade-in": `${duration.moderate} ${easing["emphasized-decelerate"]}`,
897
+ "fade-out": `${duration.fast} ${easing["emphasized-accelerate"]}`,
898
+ "slide-in": `${duration.slow} ${easing["emphasized-decelerate"]}`,
899
+ "slide-out": `${duration.moderate} ${easing["emphasized-accelerate"]}`,
900
+ "expand": `${duration.slow} ${easing.emphasized}`,
901
+ "collapse": `${duration.moderate} ${easing["emphasized-accelerate"]}`
902
+ };
903
+ export {
904
+ colorDark,
905
+ colorLight,
906
+ duration,
907
+ easing,
908
+ elevation,
909
+ motionPresets,
910
+ shape,
911
+ sizing,
912
+ spacing,
913
+ typography
914
+ };
915
+ //# sourceMappingURL=tokens.mjs.map