@sbkbs/ui 1.0.3 → 1.0.5

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 (121) hide show
  1. package/README.md +115 -115
  2. package/dist/components/Accordion/Accordion.js +56 -0
  3. package/dist/components/Accordion/Accordion.js.map +1 -0
  4. package/dist/components/Accordion/Accordion.stories.d.ts +7 -0
  5. package/dist/components/Alert/Alert.js +32 -0
  6. package/dist/components/Alert/Alert.js.map +1 -0
  7. package/dist/components/Alert/Alert.stories.d.ts +8 -0
  8. package/dist/components/Badge/Badge.js +35 -0
  9. package/dist/components/Badge/Badge.js.map +1 -0
  10. package/dist/components/Badge/Badge.stories.d.ts +8 -0
  11. package/dist/components/Breadcrumb/Breadcrumb.d.ts +10 -0
  12. package/dist/components/Breadcrumb/Breadcrumb.js +26 -0
  13. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  14. package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -0
  15. package/dist/components/Button/Button.js +122 -0
  16. package/dist/components/Button/Button.js.map +1 -0
  17. package/dist/components/Card/Card.js +33 -0
  18. package/dist/components/Card/Card.js.map +1 -0
  19. package/dist/components/Card/Card.stories.d.ts +8 -0
  20. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  21. package/dist/components/Checkbox/Checkbox.js +36 -0
  22. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  23. package/dist/components/Checkbox/Checkbox.stories.d.ts +7 -0
  24. package/dist/components/Chip/Chip.js +19 -0
  25. package/dist/components/Chip/Chip.js.map +1 -0
  26. package/dist/components/Combobox/Combobox.d.ts +17 -0
  27. package/dist/components/Combobox/Combobox.js +143 -0
  28. package/dist/components/Combobox/Combobox.js.map +1 -0
  29. package/dist/components/Combobox/Combobox.stories.d.ts +9 -0
  30. package/dist/components/Divider/Divider.js +22 -0
  31. package/dist/components/Divider/Divider.js.map +1 -0
  32. package/dist/components/EmptyState/EmptyState.js +29 -0
  33. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  34. package/dist/components/FileUpload/FileUpload.d.ts +13 -0
  35. package/dist/components/FileUpload/FileUpload.js +116 -0
  36. package/dist/components/FileUpload/FileUpload.js.map +1 -0
  37. package/dist/components/FileUpload/FileUpload.stories.d.ts +10 -0
  38. package/dist/components/Footer/Footer.js +54 -0
  39. package/dist/components/Footer/Footer.js.map +1 -0
  40. package/dist/components/Header/Header.js +114 -0
  41. package/dist/components/Header/Header.js.map +1 -0
  42. package/dist/components/Input/Input.d.ts +2 -2
  43. package/dist/components/Input/Input.js +78 -0
  44. package/dist/components/Input/Input.js.map +1 -0
  45. package/dist/components/Input/Input.stories.d.ts +9 -0
  46. package/dist/components/Layout/Layout.js +41 -0
  47. package/dist/components/Layout/Layout.js.map +1 -0
  48. package/dist/components/Modal/Modal.js +113 -0
  49. package/dist/components/Modal/Modal.js.map +1 -0
  50. package/dist/components/Modal/Modal.stories.d.ts +8 -0
  51. package/dist/components/Navigation/Navigation.js +26 -0
  52. package/dist/components/Navigation/Navigation.js.map +1 -0
  53. package/dist/components/NumberInput/NumberInput.d.ts +12 -0
  54. package/dist/components/NumberInput/NumberInput.js +135 -0
  55. package/dist/components/NumberInput/NumberInput.js.map +1 -0
  56. package/dist/components/NumberInput/NumberInput.stories.d.ts +8 -0
  57. package/dist/components/PageHeader/PageHeader.js +29 -0
  58. package/dist/components/PageHeader/PageHeader.js.map +1 -0
  59. package/dist/components/Pagination/Pagination.js +50 -0
  60. package/dist/components/Pagination/Pagination.js.map +1 -0
  61. package/dist/components/Pagination/Pagination.stories.d.ts +8 -0
  62. package/dist/components/Paragraph/Paragraph.js +41 -0
  63. package/dist/components/Paragraph/Paragraph.js.map +1 -0
  64. package/dist/components/Popover/Popover.js +57 -0
  65. package/dist/components/Popover/Popover.js.map +1 -0
  66. package/dist/components/Radio/Radio.d.ts +2 -2
  67. package/dist/components/Radio/Radio.js +36 -0
  68. package/dist/components/Radio/Radio.js.map +1 -0
  69. package/dist/components/Radio/Radio.stories.d.ts +7 -0
  70. package/dist/components/SectionHeader/SectionHeader.js +19 -0
  71. package/dist/components/SectionHeader/SectionHeader.js.map +1 -0
  72. package/dist/components/Select/Select.d.ts +2 -2
  73. package/dist/components/Select/Select.js +45 -0
  74. package/dist/components/Select/Select.js.map +1 -0
  75. package/dist/components/Select/Select.stories.d.ts +8 -0
  76. package/dist/components/Skeleton/Skeleton.js +25 -0
  77. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  78. package/dist/components/Stepper/Stepper.d.ts +13 -0
  79. package/dist/components/Stepper/Stepper.js +97 -0
  80. package/dist/components/Stepper/Stepper.js.map +1 -0
  81. package/dist/components/Stepper/Stepper.stories.d.ts +8 -0
  82. package/dist/components/Subtitle/Subtitle.js +40 -0
  83. package/dist/components/Subtitle/Subtitle.js.map +1 -0
  84. package/dist/components/Switch/Switch.d.ts +2 -2
  85. package/dist/components/Switch/Switch.js +37 -0
  86. package/dist/components/Switch/Switch.js.map +1 -0
  87. package/dist/components/Switch/Switch.stories.d.ts +8 -0
  88. package/dist/components/Table/Table.js +17 -0
  89. package/dist/components/Table/Table.js.map +1 -0
  90. package/dist/components/Tabs/Tabs.js +62 -0
  91. package/dist/components/Tabs/Tabs.js.map +1 -0
  92. package/dist/components/Tabs/Tabs.stories.d.ts +8 -0
  93. package/dist/components/Tag/Tag.js +29 -0
  94. package/dist/components/Tag/Tag.js.map +1 -0
  95. package/dist/components/Textarea/Textarea.d.ts +2 -2
  96. package/dist/components/Textarea/Textarea.js +46 -0
  97. package/dist/components/Textarea/Textarea.js.map +1 -0
  98. package/dist/components/Textarea/Textarea.stories.d.ts +7 -0
  99. package/dist/components/Title/Title.js +47 -0
  100. package/dist/components/Title/Title.js.map +1 -0
  101. package/dist/components/Toast/Toast.js +110 -0
  102. package/dist/components/Toast/Toast.js.map +1 -0
  103. package/dist/components/Toast/Toast.stories.d.ts +8 -0
  104. package/dist/components/Tooltip/Tooltip.js +36 -0
  105. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  106. package/dist/index.d.ts +10 -5
  107. package/dist/index.js +88 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/oficios-ui.css +1 -1
  110. package/dist/oficios-ui.umd.cjs +1 -1
  111. package/dist/oficios-ui.umd.cjs.map +1 -1
  112. package/dist/theme/ThemeProvider.d.ts +1 -1
  113. package/dist/theme/ThemeProvider.js +22 -0
  114. package/dist/theme/ThemeProvider.js.map +1 -0
  115. package/dist/theme.css +54 -64
  116. package/dist/utils/cn.d.ts +7 -1
  117. package/dist/utils/cn.js +7 -0
  118. package/dist/utils/cn.js.map +1 -0
  119. package/package.json +50 -15
  120. package/dist/oficios-ui.js +0 -1386
  121. package/dist/oficios-ui.js.map +0 -1
@@ -9,5 +9,5 @@ interface ThemeProviderProps {
9
9
  children: ReactNode;
10
10
  defaultTheme?: Theme;
11
11
  }
12
- export declare const ThemeProvider: ({ children, defaultTheme, }: ThemeProviderProps) => import("react/jsx-runtime").JSX.Element;
12
+ export declare const ThemeProvider: ({ children, defaultTheme }: ThemeProviderProps) => import("react/jsx-runtime").JSX.Element;
13
13
  export {};
@@ -0,0 +1,22 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { useState as d, useEffect as u, useContext as c, createContext as h } from "react";
3
+ const n = h(void 0), f = () => {
4
+ const e = c(n);
5
+ if (!e)
6
+ throw new Error("useTheme must be used within a ThemeProvider");
7
+ return e;
8
+ }, l = ({ children: e, defaultTheme: o = "light" }) => {
9
+ const [t, i] = d(() => typeof window > "u" ? o : window.localStorage.getItem("theme") || o);
10
+ u(() => {
11
+ typeof window > "u" || (window.localStorage.setItem("theme", t), document.documentElement.setAttribute("data-theme", t));
12
+ }, [t]);
13
+ const m = () => {
14
+ i((r) => r === "dark" ? "light" : "dark");
15
+ };
16
+ return /* @__PURE__ */ s(n.Provider, { value: { theme: t, toggleTheme: m }, children: e });
17
+ };
18
+ export {
19
+ l as ThemeProvider,
20
+ f as useTheme
21
+ };
22
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider = ({ children, defaultTheme = 'light' }: ThemeProviderProps) => {\n const [theme, setTheme] = useState<Theme>(() => {\n if (typeof window === 'undefined') {\n return defaultTheme;\n }\n const saved = window.localStorage.getItem('theme');\n return (saved as Theme) || defaultTheme;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n window.localStorage.setItem('theme', theme);\n document.documentElement.setAttribute('data-theme', theme);\n }, [theme]);\n\n const toggleTheme = (): void => {\n setTheme((prev) => (prev === 'dark' ? 'light' : 'dark'));\n };\n\n return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>;\n};\n"],"names":["ThemeContext","createContext","useTheme","context","useContext","ThemeProvider","children","defaultTheme","theme","setTheme","useState","useEffect","toggleTheme","prev","jsx"],"mappings":";;AASA,MAAMA,IAAeC,EAA4C,MAAS,GAE7DC,IAAW,MAAwB;AAC9C,QAAMC,IAAUC,EAAWJ,CAAY;AACvC,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT,GAOaE,IAAgB,CAAC,EAAE,UAAAC,GAAU,cAAAC,IAAe,cAAkC;AACzF,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAgB,MACpC,OAAO,SAAW,MACbH,IAEK,OAAO,aAAa,QAAQ,OAAO,KACtBA,CAC5B;AAED,EAAAI,EAAU,MAAM;AACd,IAAI,OAAO,SAAW,QAGtB,OAAO,aAAa,QAAQ,SAASH,CAAK,GAC1C,SAAS,gBAAgB,aAAa,cAAcA,CAAK;AAAA,EAC3D,GAAG,CAACA,CAAK,CAAC;AAEV,QAAMI,IAAc,MAAY;AAC9B,IAAAH,EAAS,CAACI,MAAUA,MAAS,SAAS,UAAU,MAAO;AAAA,EACzD;AAEA,SAAO,gBAAAC,EAACd,EAAa,UAAb,EAAsB,OAAO,EAAE,OAAAQ,GAAO,aAAAI,KAAgB,UAAAN,GAAS;AACzE;"}
package/dist/theme.css CHANGED
@@ -3,8 +3,8 @@
3
3
  Guia de marca: cores e tipografia SBK
4
4
  ============================================================ */
5
5
 
6
- @import url("https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400;1,500&display=swap");
7
- @import url("https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700;800;900&display=swap");
6
+ @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400;1,500&display=swap');
7
+ @import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
8
8
 
9
9
  /* ============================================================
10
10
  GUIA DE MARCA - CORES (paleta fixa para referência e paletas)
@@ -17,8 +17,9 @@
17
17
  --brand-azul-acinzentado: #5f7b8d;
18
18
  --brand-cinza-medio: #4b4b4b;
19
19
  --brand-cinza-escuro: #24262d;
20
- --brand-off-white: #ffffff;
21
- --brand-neutral-75: rgba(255, 255, 255, 0.75);
20
+ --brand-off-white: #eef0f4; /* Off-White Gelo — cor de fundo oficial SBK */
21
+ --brand-off-white-gelo: #eef0f4; /* alias explícito */
22
+ --brand-neutral-75: rgba(238, 240, 244, 0.75);
22
23
  --brand-branco: #ffffff;
23
24
 
24
25
  /* DNA da marca - O Criador */
@@ -37,12 +38,11 @@
37
38
  Jakarta = headlines fortes; alta legibilidade; estrutura
38
39
  ============================================================ */
39
40
  :root {
40
- --font-primary:
41
- "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI",
42
- sans-serif;
43
- --font-secondary: "Plus Jakarta Sans", var(--font-primary);
41
+ --font-primary: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
42
+ --font-secondary: 'Plus Jakarta Sans', var(--font-primary);
44
43
  --font-heading: var(--font-primary);
45
44
  --font-body: var(--font-primary);
45
+ --font-logo: 'Sora', var(--font-primary); /* logo e títulos de marca */
46
46
  }
47
47
 
48
48
  html {
@@ -53,19 +53,11 @@ html {
53
53
  :root {
54
54
  --primary-color: var(--brand-verde-vibrante);
55
55
  --primary-color-dark: var(--brand-verde-profundo);
56
- --primary-color-light: color-mix(
57
- in srgb,
58
- var(--brand-verde-vibrante) 84%,
59
- white
60
- );
56
+ --primary-color-light: color-mix(in srgb, var(--brand-verde-vibrante) 84%, white);
61
57
  --primary-color-hover: var(--brand-verde-profundo);
62
58
  --md-primary: var(--brand-verde-vibrante);
63
59
  --md-on-primary: #ffffff;
64
- --md-primary-container: color-mix(
65
- in srgb,
66
- var(--brand-verde-vibrante) 18%,
67
- white
68
- );
60
+ --md-primary-container: color-mix(in srgb, var(--brand-verde-vibrante) 18%, white);
69
61
  --md-on-primary-container: var(--brand-grafite-azulado);
70
62
  --secondary-color: var(--brand-grafite-azulado);
71
63
  /* Tokens semânticos para integração com Tailwind */
@@ -80,11 +72,7 @@ html {
80
72
  --md-secondary: var(--brand-grafite-azulado);
81
73
  --md-on-secondary: #ffffff;
82
74
  --md-outline: var(--brand-azul-acinzentado);
83
- --md-outline-variant: color-mix(
84
- in srgb,
85
- var(--brand-azul-acinzentado) 35%,
86
- white
87
- );
75
+ --md-outline-variant: color-mix(in srgb, var(--brand-azul-acinzentado) 35%, white);
88
76
  --success-color: #22c55e;
89
77
  --success-color-light: #4ade80;
90
78
  --error-color: #ef4444;
@@ -103,39 +91,29 @@ html {
103
91
  --md-on-surface: var(--brand-grafite-azulado);
104
92
  --accent-color: var(--primary-color);
105
93
  --accent-color-hover: var(--primary-color-hover);
106
- --bg-primary: var(--brand-neutral-75);
94
+ --gradient-espectro-turquesa: linear-gradient(
95
+ 135deg,
96
+ #01b2aa 0%,
97
+ #1f3a3a 100%
98
+ ); /* Espectro Turquesa — expressão visual primária SBK */
99
+ --bg-page: var(--brand-off-white-gelo); /* fundo de página — Off-White Gelo */
100
+ --bg-primary: var(--brand-off-white-gelo);
107
101
  --bg-secondary: #ffffff;
108
102
  --bg-tertiary: color-mix(in srgb, var(--brand-azul-acinzentado) 14%, white);
109
103
  --md-surface: #ffffff;
110
104
  --md-surface-container: var(--brand-neutral-75);
111
- --md-surface-container-high: color-mix(
112
- in srgb,
113
- var(--brand-azul-acinzentado) 14%,
114
- white
115
- );
116
- --border-color-hover: color-mix(
117
- in srgb,
118
- var(--brand-grafite-azulado) 32%,
119
- white
120
- );
105
+ --md-surface-container-high: color-mix(in srgb, var(--brand-azul-acinzentado) 14%, white);
106
+ --border-color-hover: color-mix(in srgb, var(--brand-grafite-azulado) 32%, white);
121
107
  --bg-card: #ffffff;
122
108
  --bg-card-hover: color-mix(in srgb, var(--brand-azul-acinzentado) 8%, white);
123
- --bg-card-border: color-mix(
124
- in srgb,
125
- var(--brand-azul-acinzentado) 28%,
126
- white
127
- );
109
+ --bg-card-border: color-mix(in srgb, var(--brand-azul-acinzentado) 28%, white);
128
110
  --text-primary: var(--brand-grafite-azulado);
129
111
  --text-secondary: var(--brand-cinza-escuro);
130
112
  --text-tertiary: var(--brand-cinza-medio);
131
113
  --text-muted: var(--brand-cinza-medio);
132
114
  --text-on-primary: #ffffff;
133
115
  --border-color: color-mix(in srgb, var(--brand-azul-acinzentado) 30%, white);
134
- --border-color-focus: color-mix(
135
- in srgb,
136
- var(--brand-verde-vibrante) 52%,
137
- transparent
138
- );
116
+ --border-color-focus: color-mix(in srgb, var(--brand-verde-vibrante) 52%, transparent);
139
117
  --shadow-xs: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.05);
140
118
  --shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.08);
141
119
  --shadow-md: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
@@ -166,6 +144,21 @@ html {
166
144
  --transition-colors:
167
145
  color var(--transition-base), background-color var(--transition-base),
168
146
  border-color var(--transition-base);
147
+
148
+ /* ============================================================
149
+ MOTION TOKENS — durações e easings padronizados
150
+ Uso: transition: opacity var(--motion-duration-fast) var(--motion-easing-standard)
151
+ ============================================================ */
152
+ --motion-duration-instant: 75ms; /* micro-feedback: ripple, checkbox tick */
153
+ --motion-duration-fast: 150ms; /* hover, focus, small state changes */
154
+ --motion-duration-normal: 250ms; /* entrada/saída de elementos pequenos */
155
+ --motion-duration-slow: 400ms; /* modais, drawers, page transitions */
156
+ --motion-duration-x-slow: 600ms; /* onboarding, animações elaboradas */
157
+
158
+ --motion-easing-standard: cubic-bezier(0.4, 0, 0.2, 1); /* padrão — entrada e saída suave */
159
+ --motion-easing-decelerate: cubic-bezier(0, 0, 0.2, 1); /* elementos entrando na tela */
160
+ --motion-easing-accelerate: cubic-bezier(0.4, 0, 1, 1); /* elementos saindo da tela */
161
+ --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* bounce suave para feedback */
169
162
  --z-index-dropdown: 1000;
170
163
  --z-index-modal-backdrop: 1040;
171
164
  --z-index-modal: 1050;
@@ -182,8 +175,9 @@ html {
182
175
  --spacing-3xl: 2.5rem;
183
176
  }
184
177
 
185
- [data-theme="dark"],
178
+ [data-theme='dark'],
186
179
  .theme-dark {
180
+ --bg-page: #0a0d12;
187
181
  --bg-primary: #0f141a;
188
182
  --bg-secondary: #161b22;
189
183
  --bg-tertiary: #1b222b;
@@ -199,11 +193,7 @@ html {
199
193
  --md-primary: var(--brand-verde-vibrante);
200
194
  --md-on-primary: #062126;
201
195
  --primary-color: var(--brand-verde-vibrante);
202
- --primary-color-light: color-mix(
203
- in srgb,
204
- var(--brand-verde-vibrante) 85%,
205
- white
206
- );
196
+ --primary-color-light: color-mix(in srgb, var(--brand-verde-vibrante) 85%, white);
207
197
  --primary-color-hover: var(--brand-verde-profundo);
208
198
  --secondary-color: var(--brand-azul-acinzentado);
209
199
  --color-primary: var(--primary-color);
@@ -229,73 +219,73 @@ html {
229
219
  PALETAS DE BOTÃO (guia de marca)
230
220
  Use data-button-palette no pai (ex.: body) ou prop palette no Button.
231
221
  ============================================================ */
232
- [data-button-palette="verde-vibrante"],
222
+ [data-button-palette='verde-vibrante'],
233
223
  .btn--palette-verde-vibrante.btn--primary {
234
224
  --md-primary: var(--brand-verde-vibrante);
235
225
  --primary-color-hover: var(--brand-verde-profundo);
236
226
  }
237
- [data-button-palette="verde-vibrante"] .btn--primary {
227
+ [data-button-palette='verde-vibrante'] .btn--primary {
238
228
  --md-primary: var(--brand-verde-vibrante);
239
229
  --primary-color-hover: var(--brand-verde-profundo);
240
230
  }
241
231
 
242
- [data-button-palette="verde-profundo"],
232
+ [data-button-palette='verde-profundo'],
243
233
  .btn--palette-verde-profundo.btn--primary {
244
234
  --md-primary: var(--brand-verde-profundo);
245
235
  --primary-color-hover: var(--brand-grafite-azulado);
246
236
  }
247
- [data-button-palette="verde-profundo"] .btn--primary {
237
+ [data-button-palette='verde-profundo'] .btn--primary {
248
238
  --md-primary: var(--brand-verde-profundo);
249
239
  --primary-color-hover: var(--brand-grafite-azulado);
250
240
  }
251
241
 
252
- [data-button-palette="grafite-azulado"],
242
+ [data-button-palette='grafite-azulado'],
253
243
  .btn--palette-grafite-azulado.btn--primary {
254
244
  --md-primary: var(--brand-grafite-azulado);
255
245
  --primary-color-hover: var(--brand-cinza-escuro);
256
246
  }
257
- [data-button-palette="grafite-azulado"] .btn--primary {
247
+ [data-button-palette='grafite-azulado'] .btn--primary {
258
248
  --md-primary: var(--brand-grafite-azulado);
259
249
  --primary-color-hover: var(--brand-cinza-escuro);
260
250
  }
261
251
 
262
- [data-button-palette="azul-acinzentado"],
252
+ [data-button-palette='azul-acinzentado'],
263
253
  .btn--palette-azul-acinzentado.btn--primary {
264
254
  --md-primary: var(--brand-azul-acinzentado);
265
255
  --primary-color-hover: var(--brand-grafite-azulado);
266
256
  }
267
- [data-button-palette="azul-acinzentado"] .btn--primary {
257
+ [data-button-palette='azul-acinzentado'] .btn--primary {
268
258
  --md-primary: var(--brand-azul-acinzentado);
269
259
  --primary-color-hover: var(--brand-grafite-azulado);
270
260
  }
271
261
 
272
- [data-button-palette="cinza-medio"],
262
+ [data-button-palette='cinza-medio'],
273
263
  .btn--palette-cinza-medio.btn--primary {
274
264
  --md-primary: var(--brand-cinza-medio);
275
265
  --primary-color-hover: var(--brand-cinza-escuro);
276
266
  }
277
- [data-button-palette="cinza-medio"] .btn--primary {
267
+ [data-button-palette='cinza-medio'] .btn--primary {
278
268
  --md-primary: var(--brand-cinza-medio);
279
269
  --primary-color-hover: var(--brand-cinza-escuro);
280
270
  }
281
271
 
282
- [data-button-palette="cinza-escuro"],
272
+ [data-button-palette='cinza-escuro'],
283
273
  .btn--palette-cinza-escuro.btn--primary {
284
274
  --md-primary: var(--brand-cinza-escuro);
285
275
  --primary-color-hover: var(--brand-preto);
286
276
  }
287
- [data-button-palette="cinza-escuro"] .btn--primary {
277
+ [data-button-palette='cinza-escuro'] .btn--primary {
288
278
  --md-primary: var(--brand-cinza-escuro);
289
279
  --primary-color-hover: var(--brand-preto);
290
280
  }
291
281
 
292
- [data-button-palette="off-white"],
282
+ [data-button-palette='off-white'],
293
283
  .btn--palette-off-white.btn--primary {
294
284
  --md-primary: var(--brand-off-white);
295
285
  --md-on-primary: var(--brand-grafite-azulado);
296
286
  --primary-color-hover: var(--brand-branco);
297
287
  }
298
- [data-button-palette="off-white"] .btn--primary {
288
+ [data-button-palette='off-white'] .btn--primary {
299
289
  --md-primary: var(--brand-off-white);
300
290
  --md-on-primary: var(--brand-grafite-azulado);
301
291
  --primary-color-hover: var(--brand-branco);
@@ -1 +1,7 @@
1
- export declare const cn: (...classes: Array<string | false | null | undefined>) => string;
1
+ import { type ClassValue } from 'clsx';
2
+ /**
3
+ * Utilitário de composição de classes Tailwind.
4
+ * Usa clsx para lógica condicional e tailwind-merge para resolver
5
+ * conflitos de classes (ex.: bg-red-500 + bg-blue-500 → bg-blue-500).
6
+ */
7
+ export declare const cn: (...inputs: ClassValue[]) => string;
@@ -0,0 +1,7 @@
1
+ import { clsx as r } from "clsx";
2
+ import { twMerge as t } from "tailwind-merge";
3
+ const e = (...o) => t(r(o));
4
+ export {
5
+ e as cn
6
+ };
7
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sources":["../../src/utils/cn.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utilitário de composição de classes Tailwind.\n * Usa clsx para lógica condicional e tailwind-merge para resolver\n * conflitos de classes (ex.: bg-red-500 + bg-blue-500 → bg-blue-500).\n */\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":";;AAQO,MAAMA,IAAK,IAAIC,MAAyBC,EAAQC,EAAKF,CAAM,CAAC;"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@sbkbs/ui",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Biblioteca de componentes UI SBK BS",
5
5
  "type": "module",
6
6
  "main": "./dist/oficios-ui.umd.cjs",
7
- "module": "./dist/oficios-ui.js",
7
+ "module": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
- "import": "./dist/oficios-ui.js",
12
+ "import": "./dist/index.js",
13
13
  "require": "./dist/oficios-ui.umd.cjs",
14
- "default": "./dist/oficios-ui.js"
14
+ "default": "./dist/index.js"
15
15
  },
16
16
  "./theme.css": "./dist/theme.css",
17
17
  "./styles.css": "./dist/oficios-ui.css"
@@ -26,43 +26,71 @@
26
26
  "clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
27
27
  "build": "vite build && tsc -p tsconfig.build.json && node -e \"require('fs').copyFileSync('src/theme/theme.css', 'dist/theme.css')\"",
28
28
  "dev": "vite build --watch",
29
- "prepublishOnly": "npm run clean && npm run build && npm run typecheck",
29
+ "prepublishOnly": "npm run clean && npm run build && npm run typecheck && npm run lint",
30
30
  "playground": "vite",
31
31
  "storybook": "storybook dev -p 6006",
32
32
  "build-storybook": "storybook build",
33
33
  "test:visual": "playwright test",
34
34
  "test": "vitest run",
35
+ "test:coverage": "vitest run --coverage",
35
36
  "test:watch": "vitest",
37
+ "lint": "eslint .",
38
+ "lint:fix": "eslint . --fix",
39
+ "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
40
+ "format:check": "prettier --check \"src/**/*.{ts,tsx,css}\"",
41
+ "prepare": "cd .. && husky",
36
42
  "publish:public": "npm publish --access public",
37
- "release:minor": "npm version minor && npm run publish:public",
38
- "release:major": "npm version major && npm run publish:public",
39
- "release:patch": "npm version patch && npm run publish:public",
43
+ "changeset": "changeset",
44
+ "changeset:version": "changeset version",
40
45
  "typecheck": "tsc --noEmit -p tsconfig.build.json"
41
46
  },
47
+ "lint-staged": {
48
+ "src/**/*.{ts,tsx}": [
49
+ "eslint --fix",
50
+ "prettier --write"
51
+ ],
52
+ "src/**/*.css": [
53
+ "prettier --write"
54
+ ]
55
+ },
42
56
  "peerDependencies": {
43
57
  "react": ">=18.0.0",
44
58
  "react-dom": ">=18.0.0"
45
59
  },
46
60
  "devDependencies": {
61
+ "@changesets/cli": "^2.31.0",
62
+ "@eslint/js": "^9.39.4",
63
+ "@playwright/test": "^1.59.1",
47
64
  "@storybook/addon-a11y": "^8.6.14",
48
65
  "@storybook/addon-essentials": "^8.6.14",
49
66
  "@storybook/react-vite": "^8.6.14",
50
- "@playwright/test": "^1.55.0",
67
+ "@tailwindcss/vite": "^4.2.2",
68
+ "@testing-library/dom": "^10.4.1",
51
69
  "@testing-library/jest-dom": "^6.8.0",
52
70
  "@testing-library/react": "^16.3.0",
71
+ "@types/node": "^25.6.0",
53
72
  "@types/react": "^18.2.43",
54
73
  "@types/react-dom": "^18.2.17",
55
- "jsdom": "^26.1.0",
74
+ "@typescript-eslint/eslint-plugin": "^8.58.2",
75
+ "@typescript-eslint/parser": "^8.58.2",
56
76
  "@vitejs/plugin-react": "^5.0.4",
57
- "autoprefixer": "^10.4.21",
58
- "postcss": "^8.5.6",
77
+ "@vitest/coverage-v8": "^2.1.9",
78
+ "eslint": "^9.39.4",
79
+ "eslint-config-prettier": "^10.1.8",
80
+ "eslint-plugin-jsx-a11y": "^6.10.2",
81
+ "eslint-plugin-react": "^7.37.5",
82
+ "eslint-plugin-react-hooks": "^7.1.1",
83
+ "husky": "^9.1.7",
84
+ "jsdom": "^26.1.0",
85
+ "lint-staged": "^16.4.0",
86
+ "prettier": "^3.8.3",
59
87
  "react": "^18.2.0",
60
88
  "react-dom": "^18.2.0",
61
- "tailwindcss": "^3.4.17",
89
+ "storybook": "^8.6.14",
90
+ "tailwindcss": "^4.2.2",
62
91
  "typescript": "^5.9.3",
63
- "vitest": "^2.1.8",
64
92
  "vite": "^6.3.5",
65
- "storybook": "^8.6.14"
93
+ "vitest": "^2.1.8"
66
94
  },
67
95
  "keywords": [
68
96
  "oficios",
@@ -75,5 +103,12 @@
75
103
  "license": "ISC",
76
104
  "publishConfig": {
77
105
  "access": "public"
106
+ },
107
+ "dependencies": {
108
+ "clsx": "^2.1.1",
109
+ "tailwind-merge": "^3.5.0"
110
+ },
111
+ "overrides": {
112
+ "vite": "$vite"
78
113
  }
79
114
  }