@sbkbs/ui 1.0.6 → 2.0.0-beta.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 (210) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/MIGRATION.md +96 -0
  3. package/README.md +221 -115
  4. package/dist/assets/favicon/apple-touch-icon.png +0 -0
  5. package/dist/assets/favicon/favicon-96x96.png +0 -0
  6. package/dist/assets/favicon/favicon.ico +0 -0
  7. package/dist/assets/favicon/favicon.svg +1 -0
  8. package/dist/assets/favicon/site.webmanifest +21 -0
  9. package/dist/assets/favicon/web-app-manifest-192x192.png +0 -0
  10. package/dist/assets/favicon/web-app-manifest-512x512.png +0 -0
  11. package/dist/base.css +38 -0
  12. package/dist/components/Accordion/Accordion.d.ts +13 -1
  13. package/dist/components/Accordion/Accordion.js +100 -52
  14. package/dist/components/Accordion/Accordion.js.map +1 -1
  15. package/dist/components/Alert/Alert.d.ts +17 -4
  16. package/dist/components/Alert/Alert.js +64 -20
  17. package/dist/components/Alert/Alert.js.map +1 -1
  18. package/dist/components/Avatar/Avatar.d.ts +12 -6
  19. package/dist/components/Avatar/Avatar.js +66 -0
  20. package/dist/components/Avatar/Avatar.js.map +1 -0
  21. package/dist/components/Badge/Badge.d.ts +11 -2
  22. package/dist/components/Badge/Badge.js +42 -30
  23. package/dist/components/Badge/Badge.js.map +1 -1
  24. package/dist/components/Breadcrumb/Breadcrumb.d.ts +5 -2
  25. package/dist/components/Breadcrumb/Breadcrumb.js +23 -16
  26. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  27. package/dist/components/Button/Button.d.ts +10 -8
  28. package/dist/components/Button/Button.js +73 -114
  29. package/dist/components/Button/Button.js.map +1 -1
  30. package/dist/components/Card/Card.d.ts +33 -3
  31. package/dist/components/Card/Card.js +91 -30
  32. package/dist/components/Card/Card.js.map +1 -1
  33. package/dist/components/Checkbox/Checkbox.d.ts +4 -1
  34. package/dist/components/Checkbox/Checkbox.js +32 -31
  35. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  36. package/dist/components/Chip/Chip.d.ts +7 -1
  37. package/dist/components/Chip/Chip.js +19 -9
  38. package/dist/components/Chip/Chip.js.map +1 -1
  39. package/dist/components/Combobox/Combobox.d.ts +10 -2
  40. package/dist/components/Combobox/Combobox.js +146 -133
  41. package/dist/components/Combobox/Combobox.js.map +1 -1
  42. package/dist/components/Divider/Divider.d.ts +7 -1
  43. package/dist/components/Divider/Divider.js +28 -12
  44. package/dist/components/Divider/Divider.js.map +1 -1
  45. package/dist/components/DropdownMenu/DropdownMenu.d.ts +33 -0
  46. package/dist/components/DropdownMenu/DropdownMenu.js +147 -0
  47. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  48. package/dist/components/EmptyState/EmptyState.d.ts +7 -1
  49. package/dist/components/EmptyState/EmptyState.js +28 -19
  50. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  51. package/dist/components/Field/Field.d.ts +21 -0
  52. package/dist/components/Field/Field.js +35 -0
  53. package/dist/components/Field/Field.js.map +1 -0
  54. package/dist/components/FileUpload/FileUpload.d.ts +9 -2
  55. package/dist/components/FileUpload/FileUpload.js +128 -102
  56. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  57. package/dist/components/Footer/Footer.d.ts +19 -6
  58. package/dist/components/Footer/Footer.js +47 -115
  59. package/dist/components/Footer/Footer.js.map +1 -1
  60. package/dist/components/GlassPanel/GlassPanel.d.ts +18 -0
  61. package/dist/components/GlassPanel/GlassPanel.js +39 -0
  62. package/dist/components/GlassPanel/GlassPanel.js.map +1 -0
  63. package/dist/components/Header/Header.d.ts +25 -14
  64. package/dist/components/Header/Header.js +88 -148
  65. package/dist/components/Header/Header.js.map +1 -1
  66. package/dist/components/Highlight/Highlight.d.ts +13 -0
  67. package/dist/components/Highlight/Highlight.js +18 -0
  68. package/dist/components/Highlight/Highlight.js.map +1 -0
  69. package/dist/components/Icon/Icon.d.ts +21 -0
  70. package/dist/components/Icon/Icon.js +31 -0
  71. package/dist/components/Icon/Icon.js.map +1 -0
  72. package/dist/components/IconButton/IconButton.d.ts +12 -0
  73. package/dist/components/IconButton/IconButton.js +49 -0
  74. package/dist/components/IconButton/IconButton.js.map +1 -0
  75. package/dist/components/Input/Input.d.ts +3 -2
  76. package/dist/components/Input/Input.js +51 -69
  77. package/dist/components/Input/Input.js.map +1 -1
  78. package/dist/components/Layout/Layout.d.ts +2 -0
  79. package/dist/components/Layout/Layout.js +24 -18
  80. package/dist/components/Layout/Layout.js.map +1 -1
  81. package/dist/components/Logo/Logo.d.ts +27 -0
  82. package/dist/components/Logo/Logo.js +107 -0
  83. package/dist/components/Logo/Logo.js.map +1 -0
  84. package/dist/components/MiniCard/MiniCard.d.ts +21 -0
  85. package/dist/components/MiniCard/MiniCard.js +90 -0
  86. package/dist/components/MiniCard/MiniCard.js.map +1 -0
  87. package/dist/components/Modal/Modal.d.ts +16 -3
  88. package/dist/components/Modal/Modal.js +124 -93
  89. package/dist/components/Modal/Modal.js.map +1 -1
  90. package/dist/components/Navigation/Navigation.d.ts +1 -0
  91. package/dist/components/Navigation/Navigation.js +14 -14
  92. package/dist/components/Navigation/Navigation.js.map +1 -1
  93. package/dist/components/NumberInput/NumberInput.d.ts +5 -2
  94. package/dist/components/NumberInput/NumberInput.js +98 -128
  95. package/dist/components/NumberInput/NumberInput.js.map +1 -1
  96. package/dist/components/PageHeader/PageHeader.d.ts +8 -1
  97. package/dist/components/PageHeader/PageHeader.js +26 -25
  98. package/dist/components/PageHeader/PageHeader.js.map +1 -1
  99. package/dist/components/Pagination/Pagination.d.ts +15 -2
  100. package/dist/components/Pagination/Pagination.js +68 -34
  101. package/dist/components/Pagination/Pagination.js.map +1 -1
  102. package/dist/components/Paragraph/Paragraph.d.ts +8 -2
  103. package/dist/components/Paragraph/Paragraph.js +39 -36
  104. package/dist/components/Paragraph/Paragraph.js.map +1 -1
  105. package/dist/components/Popover/Popover.d.ts +12 -1
  106. package/dist/components/Popover/Popover.js +49 -37
  107. package/dist/components/Popover/Popover.js.map +1 -1
  108. package/dist/components/ProgressBar/ProgressBar.d.ts +12 -6
  109. package/dist/components/ProgressBar/ProgressBar.js +71 -0
  110. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  111. package/dist/components/Radio/Radio.d.ts +2 -1
  112. package/dist/components/Radio/Radio.js +27 -31
  113. package/dist/components/Radio/Radio.js.map +1 -1
  114. package/dist/components/SectionHeader/SectionHeader.d.ts +6 -1
  115. package/dist/components/SectionHeader/SectionHeader.js +14 -12
  116. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  117. package/dist/components/Select/Select.d.ts +6 -2
  118. package/dist/components/Select/Select.js +47 -35
  119. package/dist/components/Select/Select.js.map +1 -1
  120. package/dist/components/SideNav/SideNav.d.ts +55 -0
  121. package/dist/components/SideNav/SideNav.js +141 -0
  122. package/dist/components/SideNav/SideNav.js.map +1 -0
  123. package/dist/components/Skeleton/Skeleton.d.ts +12 -1
  124. package/dist/components/Skeleton/Skeleton.js +33 -18
  125. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  126. package/dist/components/Spinner/Spinner.d.ts +11 -3
  127. package/dist/components/Spinner/Spinner.js +57 -0
  128. package/dist/components/Spinner/Spinner.js.map +1 -0
  129. package/dist/components/Stepper/Stepper.d.ts +1 -1
  130. package/dist/components/Stepper/Stepper.js +41 -53
  131. package/dist/components/Stepper/Stepper.js.map +1 -1
  132. package/dist/components/Subtitle/Subtitle.d.ts +9 -3
  133. package/dist/components/Subtitle/Subtitle.js +29 -35
  134. package/dist/components/Subtitle/Subtitle.js.map +1 -1
  135. package/dist/components/Switch/Switch.d.ts +2 -1
  136. package/dist/components/Switch/Switch.js +45 -33
  137. package/dist/components/Switch/Switch.js.map +1 -1
  138. package/dist/components/Table/Table.d.ts +19 -1
  139. package/dist/components/Table/Table.js +48 -11
  140. package/dist/components/Table/Table.js.map +1 -1
  141. package/dist/components/Tabs/Tabs.d.ts +16 -2
  142. package/dist/components/Tabs/Tabs.js +80 -44
  143. package/dist/components/Tabs/Tabs.js.map +1 -1
  144. package/dist/components/Tag/Tag.d.ts +8 -1
  145. package/dist/components/Tag/Tag.js +27 -12
  146. package/dist/components/Tag/Tag.js.map +1 -1
  147. package/dist/components/Textarea/Textarea.d.ts +3 -1
  148. package/dist/components/Textarea/Textarea.js +36 -40
  149. package/dist/components/Textarea/Textarea.js.map +1 -1
  150. package/dist/components/Title/Title.d.ts +9 -3
  151. package/dist/components/Title/Title.js +42 -42
  152. package/dist/components/Title/Title.js.map +1 -1
  153. package/dist/components/Toast/Toast.d.ts +39 -11
  154. package/dist/components/Toast/Toast.js +130 -76
  155. package/dist/components/Toast/Toast.js.map +1 -1
  156. package/dist/components/Tooltip/Tooltip.d.ts +12 -2
  157. package/dist/components/Tooltip/Tooltip.js +50 -32
  158. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  159. package/dist/components/Typography/weight.d.ts +9 -0
  160. package/dist/components/Typography/weight.js +5 -0
  161. package/dist/components/Typography/weight.js.map +1 -0
  162. package/dist/fonts.css +8 -0
  163. package/dist/index.cjs +2 -0
  164. package/dist/index.cjs.map +1 -0
  165. package/dist/index.d.ts +55 -43
  166. package/dist/index.js +118 -83
  167. package/dist/index.js.map +1 -1
  168. package/dist/reset.css +9 -0
  169. package/dist/styles.css +1 -0
  170. package/dist/tailwind.css +153 -0
  171. package/dist/theme/ThemeProvider.d.ts +21 -3
  172. package/dist/theme/ThemeProvider.js +57 -18
  173. package/dist/theme/ThemeProvider.js.map +1 -1
  174. package/dist/theme/tokens.d.ts +43 -0
  175. package/dist/theme/tokens.js +39 -0
  176. package/dist/theme/tokens.js.map +1 -0
  177. package/dist/theme.css +296 -263
  178. package/dist/tokens.css +327 -0
  179. package/dist/utils/cn.d.ts +2 -2
  180. package/dist/utils/cn.js +19 -4
  181. package/dist/utils/cn.js.map +1 -1
  182. package/dist/utils/styles.d.ts +37 -0
  183. package/dist/utils/styles.js +35 -0
  184. package/dist/utils/styles.js.map +1 -0
  185. package/package.json +140 -117
  186. package/dist/components/Accordion/Accordion.stories.d.ts +0 -7
  187. package/dist/components/Alert/Alert.stories.d.ts +0 -8
  188. package/dist/components/Badge/Badge.stories.d.ts +0 -8
  189. package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -8
  190. package/dist/components/Button/Button.stories.d.ts +0 -7
  191. package/dist/components/Card/Card.stories.d.ts +0 -8
  192. package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -7
  193. package/dist/components/Combobox/Combobox.stories.d.ts +0 -9
  194. package/dist/components/Feedback/Feedback.stories.d.ts +0 -5
  195. package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
  196. package/dist/components/Input/Input.stories.d.ts +0 -9
  197. package/dist/components/Modal/Modal.stories.d.ts +0 -8
  198. package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -8
  199. package/dist/components/Pagination/Pagination.stories.d.ts +0 -8
  200. package/dist/components/Radio/Radio.stories.d.ts +0 -7
  201. package/dist/components/Select/Select.stories.d.ts +0 -8
  202. package/dist/components/Stepper/Stepper.stories.d.ts +0 -8
  203. package/dist/components/Switch/Switch.stories.d.ts +0 -8
  204. package/dist/components/Tabs/Tabs.stories.d.ts +0 -8
  205. package/dist/components/Textarea/Textarea.stories.d.ts +0 -7
  206. package/dist/components/Toast/Toast.stories.d.ts +0 -8
  207. package/dist/oficios-ui.css +0 -1
  208. package/dist/oficios-ui.umd.cjs +0 -2
  209. package/dist/oficios-ui.umd.cjs.map +0 -1
  210. package/dist/sbk-icon.png +0 -0
@@ -1,40 +1,34 @@
1
- import { jsx as v } from "react/jsx-runtime";
2
- const h = ({
1
+ import { jsx as f } from "react/jsx-runtime";
2
+ import { cn as r } from "../../utils/cn.js";
3
+ import { weightClass as g } from "../Typography/weight.js";
4
+ const n = { xs: "text-xs", sm: "text-sm", md: "text-base", lg: "text-lg" }, c = { left: "text-left", center: "text-center", right: "text-right" }, b = ({
3
5
  as: t = "p",
4
6
  size: e = "md",
5
- weight: o = "normal",
6
- align: n = "left",
7
- muted: a = !1,
8
- italic: s = !1,
9
- children: i,
10
- className: r = "",
11
- ...l
12
- }) => {
13
- const m = t, f = {
14
- xs: "text-[var(--font-size-xs)]",
15
- sm: "text-[var(--font-size-sm)]",
16
- md: "text-[var(--font-size-base)]",
17
- lg: "text-[var(--font-size-lg)]"
18
- }, c = {
19
- normal: "font-[var(--font-weight-normal)]",
20
- medium: "font-[var(--font-weight-medium)]",
21
- semibold: "font-[var(--font-weight-semibold)]"
22
- }, x = {
23
- left: "text-left",
24
- center: "text-center",
25
- right: "text-right"
26
- }, g = [
27
- "m-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]",
28
- f[e],
29
- c[o],
30
- x[n],
31
- s ? "italic" : "not-italic",
32
- a ? "text-[var(--text-muted)] opacity-80" : "",
33
- r
34
- ].filter(Boolean).join(" ");
35
- return /* @__PURE__ */ v(m, { className: g, ...l, children: i });
36
- };
7
+ weight: s = "semibold",
8
+ align: l = "left",
9
+ muted: m = !1,
10
+ italic: i = !1,
11
+ children: x,
12
+ className: o,
13
+ ...a
14
+ }) => /* @__PURE__ */ f(
15
+ t,
16
+ {
17
+ className: r(
18
+ "m-0 font-sbk leading-snug",
19
+ n[e],
20
+ g(s),
21
+ c[l],
22
+ m ? "text-sbk-fg-muted" : "text-sbk-fg",
23
+ i && "italic",
24
+ o
25
+ ),
26
+ ...a,
27
+ children: x
28
+ }
29
+ );
30
+ b.displayName = "Subtitle";
37
31
  export {
38
- h as Subtitle
32
+ b as Subtitle
39
33
  };
40
34
  //# sourceMappingURL=Subtitle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Subtitle.js","sources":["../../../src/components/Subtitle/Subtitle.tsx"],"sourcesContent":["import type React from 'react';\n\nexport interface SubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'normal' | 'medium' | 'semibold';\n}\n\nexport const Subtitle: React.FC<SubtitleProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<SubtitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)]',\n sm: 'text-[var(--font-size-sm)]',\n md: 'text-[var(--font-size-base)]',\n lg: 'text-[var(--font-size-lg)]',\n };\n const weightClassMap: Record<NonNullable<SubtitleProps['weight']>, string> = {\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n };\n const alignClassMap: Record<NonNullable<SubtitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const combinedClass = [\n 'm-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)] opacity-80' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n"],"names":["Subtitle","as","size","weight","align","muted","italic","children","className","props","Component","sizeClassMap","weightClassMap","alignClassMap","combinedClass"],"mappings":";AAYO,MAAMA,IAAoC,CAAC;AAAA,EAChD,IAAAC,IAAK;AAAA,EACL,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAYT,GACZU,IAAmE;AAAA,IACvE,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAEAC,IAAuE;AAAA,IAC3E,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,EAAA,GAENC,IAAqE;AAAA,IACzE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA,GAEHC,IAAgB;AAAA,IACpB;AAAA,IACAH,EAAaT,CAAI;AAAA,IACjBU,EAAeT,CAAM;AAAA,IACrBU,EAAcT,CAAK;AAAA,IACnBE,IAAS,WAAW;AAAA,IACpBD,IAAQ,wCAAwC;AAAA,IAChDG;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACGE,GAAA,EAAU,WAAWI,GAAgB,GAAGL,GACtC,UAAAF,GACH;AAEJ;"}
1
+ {"version":3,"file":"Subtitle.js","sources":["../../../src/components/Subtitle/Subtitle.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\nimport { type TextWeight, weightClass } from '../Typography/weight';\n\nexport interface SubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'p' | 'span' | 'div' | 'h2' | 'h3' | 'h4';\n children: React.ReactNode;\n italic?: boolean;\n /** Cor secundária (Chumbo Leve). */\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Padrão: semibold (brand book: subtítulos em Seminegrito). */\n weight?: TextWeight;\n}\n\nconst SIZE_CLASS = { xs: 'text-xs', sm: 'text-sm', md: 'text-base', lg: 'text-lg' } as const;\nconst ALIGN_CLASS = { left: 'text-left', center: 'text-center', right: 'text-right' } as const;\n\nexport const Subtitle = ({\n as: Tag = 'p',\n size = 'md',\n weight = 'semibold',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className,\n ...props\n}: SubtitleProps) => (\n <Tag\n className={cn(\n 'm-0 font-sbk leading-snug',\n SIZE_CLASS[size],\n weightClass(weight),\n ALIGN_CLASS[align],\n muted ? 'text-sbk-fg-muted' : 'text-sbk-fg',\n italic && 'italic',\n className,\n )}\n {...props}\n >\n {children}\n </Tag>\n);\n\nSubtitle.displayName = 'Subtitle';\n"],"names":["SIZE_CLASS","ALIGN_CLASS","Subtitle","Tag","size","weight","align","muted","italic","children","className","props","jsx","cn","weightClass"],"mappings":";;;AAgBA,MAAMA,IAAa,EAAE,IAAI,WAAW,IAAI,WAAW,IAAI,aAAa,IAAI,UAAA,GAClEC,IAAc,EAAE,MAAM,aAAa,QAAQ,eAAe,OAAO,aAAA,GAE1DC,IAAW,CAAC;AAAA,EACvB,IAAIC,IAAM;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAACT;AAAA,EAAA;AAAA,IACC,WAAWU;AAAA,MACT;AAAA,MACAb,EAAWI,CAAI;AAAA,MACfU,EAAYT,CAAM;AAAA,MAClBJ,EAAYK,CAAK;AAAA,MACjBC,IAAQ,sBAAsB;AAAA,MAC9BC,KAAU;AAAA,MACVE;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IAEH,UAAAF;AAAA,EAAA;AACH;AAGFP,EAAS,cAAc;"}
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  export interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {
3
3
  checked?: boolean;
4
- label?: string;
4
+ label?: React.ReactNode;
5
5
  onCheckedChange?: (checked: boolean) => void;
6
+ size?: 'sm' | 'md';
6
7
  }
7
8
  export declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
@@ -1,37 +1,49 @@
1
- import { jsxs as n, jsx as t } from "react/jsx-runtime";
2
- import m from "react";
3
- import { cn as s } from "../../utils/cn.js";
4
- const f = m.forwardRef(
5
- ({ checked: r = !1, onCheckedChange: i, label: e, className: a, ...o }, l) => /* @__PURE__ */ n("div", { className: s("inline-flex items-center gap-2", a), children: [
6
- /* @__PURE__ */ t(
7
- "button",
8
- {
9
- ref: l,
10
- "aria-checked": r,
11
- className: s(
12
- "relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]",
13
- r ? "border-[var(--md-primary)] bg-[var(--md-primary)]" : "border-[var(--md-outline)] bg-[var(--md-surface-container-high)]"
14
- ),
15
- onClick: () => i == null ? void 0 : i(!r),
16
- role: "switch",
17
- type: "button",
18
- ...o,
19
- children: /* @__PURE__ */ t(
20
- "span",
21
- {
22
- className: s(
23
- "inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition",
24
- r ? "translate-x-5" : "translate-x-0.5"
25
- )
26
- }
27
- )
28
- }
29
- ),
30
- e && /* @__PURE__ */ t("span", { className: "text-sm text-[var(--text-primary)]", children: e })
31
- ] })
1
+ import { jsxs as b, jsx as o } from "react/jsx-runtime";
2
+ import f, { useId as p } from "react";
3
+ import { cn as i } from "../../utils/cn.js";
4
+ import { focusRing as x, transitionColors as w, buttonReset as N } from "../../utils/styles.js";
5
+ const k = { sm: "h-5 w-9", md: "h-6 w-11" }, y = { sm: "size-4", md: "size-5" }, R = { sm: "translate-x-4", md: "translate-x-5" }, g = f.forwardRef(
6
+ ({ checked: r = !1, onCheckedChange: t, label: n, size: s = "md", className: l, id: m, disabled: e, ...c }, d) => {
7
+ const u = p(), a = m ?? u;
8
+ return /* @__PURE__ */ b("div", { className: i("inline-flex items-center gap-2", e && "opacity-60", l), children: [
9
+ /* @__PURE__ */ o(
10
+ "button",
11
+ {
12
+ ref: d,
13
+ "aria-checked": r,
14
+ className: i(
15
+ N,
16
+ "relative inline-flex shrink-0 cursor-pointer items-center rounded-full border disabled:cursor-not-allowed",
17
+ k[s],
18
+ w,
19
+ x,
20
+ r ? "border-sbk-primary bg-sbk-primary" : "border-sbk-line-strong bg-sbk-surface-sunken"
21
+ ),
22
+ disabled: e,
23
+ id: a,
24
+ onClick: () => t == null ? void 0 : t(!r),
25
+ role: "switch",
26
+ type: "button",
27
+ ...c,
28
+ children: /* @__PURE__ */ o(
29
+ "span",
30
+ {
31
+ "aria-hidden": "true",
32
+ className: i(
33
+ "inline-block rounded-full bg-sbk-branco shadow-sbk-sm transition-transform duration-150 motion-reduce:transition-none",
34
+ y[s],
35
+ r ? R[s] : "translate-x-0.5"
36
+ )
37
+ }
38
+ )
39
+ }
40
+ ),
41
+ n && /* @__PURE__ */ o("label", { className: "cursor-pointer text-sm font-light text-sbk-fg", htmlFor: a, children: n })
42
+ ] });
43
+ }
32
44
  );
33
- f.displayName = "Switch";
45
+ g.displayName = "Switch";
34
46
  export {
35
- f as Switch
47
+ g as Switch
36
48
  };
37
49
  //# sourceMappingURL=Switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.js","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange'\n> {\n checked?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked = false, onCheckedChange, label, className, ...props }, ref) => {\n return (\n <div className={cn('inline-flex items-center gap-2', className)}>\n <button\n ref={ref}\n aria-checked={checked}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]',\n checked\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)]'\n : 'border-[var(--md-outline)] bg-[var(--md-surface-container-high)]',\n )}\n onClick={() => onCheckedChange?.(!checked)}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cn(\n 'inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition',\n checked ? 'translate-x-5' : 'translate-x-0.5',\n )}\n />\n </button>\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n"],"names":["Switch","React","checked","onCheckedChange","label","className","props","ref","cn","jsx"],"mappings":";;;AAYO,MAAMA,IAASC,EAAM;AAAA,EAC1B,CAAC,EAAE,SAAAC,IAAU,IAAO,iBAAAC,GAAiB,OAAAC,GAAO,WAAAC,GAAW,GAAGC,EAAA,GAASC,wBAE9D,OAAA,EAAI,WAAWC,EAAG,kCAAkCH,CAAS,GAC5D,UAAA;AAAA,IAAA,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,gBAAcL;AAAA,QACd,WAAWM;AAAA,UACT;AAAA,UACAN,IACI,sDACA;AAAA,QAAA;AAAA,QAEN,SAAS,MAAMC,KAAA,gBAAAA,EAAkB,CAACD;AAAA,QAClC,MAAK;AAAA,QACL,MAAK;AAAA,QACJ,GAAGI;AAAA,QAEJ,UAAA,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD;AAAA,cACT;AAAA,cACAN,IAAU,kBAAkB;AAAA,YAAA;AAAA,UAC9B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAEDE,KAAS,gBAAAK,EAAC,QAAA,EAAK,WAAU,sCAAsC,UAAAL,EAAA,CAAM;AAAA,EAAA,GACxE;AAGN;AAEAJ,EAAO,cAAc;"}
1
+ {"version":3,"file":"Switch.js","sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import React, { useId } from 'react';\nimport { cn } from '../../utils/cn';\nimport { buttonReset, focusRing, transitionColors } from '../../utils/styles';\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange'\n> {\n checked?: boolean;\n label?: React.ReactNode;\n onCheckedChange?: (checked: boolean) => void;\n size?: 'sm' | 'md';\n}\n\nconst TRACK = { sm: 'h-5 w-9', md: 'h-6 w-11' } as const;\nconst THUMB = { sm: 'size-4', md: 'size-5' } as const;\nconst THUMB_ON = { sm: 'translate-x-4', md: 'translate-x-5' } as const;\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n { checked = false, onCheckedChange, label, size = 'md', className, id, disabled, ...props },\n ref,\n ) => {\n const autoId = useId();\n const switchId = id ?? autoId;\n\n return (\n <div className={cn('inline-flex items-center gap-2', disabled && 'opacity-60', className)}>\n <button\n ref={ref}\n aria-checked={checked}\n className={cn(\n buttonReset,\n 'relative inline-flex shrink-0 cursor-pointer items-center rounded-full border disabled:cursor-not-allowed',\n TRACK[size],\n transitionColors,\n focusRing,\n checked\n ? 'border-sbk-primary bg-sbk-primary'\n : 'border-sbk-line-strong bg-sbk-surface-sunken',\n )}\n disabled={disabled}\n id={switchId}\n onClick={() => onCheckedChange?.(!checked)}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-block rounded-full bg-sbk-branco shadow-sbk-sm transition-transform duration-150 motion-reduce:transition-none',\n THUMB[size],\n checked ? THUMB_ON[size] : 'translate-x-0.5',\n )}\n />\n </button>\n {label && (\n <label className=\"cursor-pointer text-sm font-light text-sbk-fg\" htmlFor={switchId}>\n {label}\n </label>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n"],"names":["TRACK","THUMB","THUMB_ON","Switch","React","checked","onCheckedChange","label","size","className","id","disabled","props","ref","autoId","useId","switchId","jsxs","cn","jsx","buttonReset","transitionColors","focusRing"],"mappings":";;;;AAcA,MAAMA,IAAQ,EAAE,IAAI,WAAW,IAAI,WAAA,GAC7BC,IAAQ,EAAE,IAAI,UAAU,IAAI,SAAA,GAC5BC,IAAW,EAAE,IAAI,iBAAiB,IAAI,gBAAA,GAE/BC,IAASC,EAAM;AAAA,EAC1B,CACE,EAAE,SAAAC,IAAU,IAAO,iBAAAC,GAAiB,OAAAC,GAAO,MAAAC,IAAO,MAAM,WAAAC,GAAW,IAAAC,GAAI,UAAAC,GAAU,GAAGC,EAAA,GACpFC,MACG;AACH,UAAMC,IAASC,EAAA,GACTC,IAAWN,KAAMI;AAEvB,WACE,gBAAAG,EAAC,SAAI,WAAWC,EAAG,kCAAkCP,KAAY,cAAcF,CAAS,GACtF,UAAA;AAAA,MAAA,gBAAAU;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAN;AAAA,UACA,gBAAcR;AAAA,UACd,WAAWa;AAAA,YACTE;AAAA,YACA;AAAA,YACApB,EAAMQ,CAAI;AAAA,YACVa;AAAA,YACAC;AAAA,YACAjB,IACI,sCACA;AAAA,UAAA;AAAA,UAEN,UAAAM;AAAA,UACA,IAAIK;AAAA,UACJ,SAAS,MAAMV,KAAA,gBAAAA,EAAkB,CAACD;AAAA,UAClC,MAAK;AAAA,UACL,MAAK;AAAA,UACJ,GAAGO;AAAA,UAEJ,UAAA,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAWD;AAAA,gBACT;AAAA,gBACAjB,EAAMO,CAAI;AAAA,gBACVH,IAAUH,EAASM,CAAI,IAAI;AAAA,cAAA;AAAA,YAC7B;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAEDD,KACC,gBAAAY,EAAC,SAAA,EAAM,WAAU,iDAAgD,SAASH,GACvE,UAAAT,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAJ,EAAO,cAAc;"}
@@ -1,4 +1,22 @@
1
1
  import type React from 'react';
2
2
  export interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {
3
+ /** Legenda da tabela (visível ou apenas para leitores de tela com `captionHidden`). */
4
+ caption?: React.ReactNode;
5
+ captionHidden?: boolean;
6
+ /** Linhas mais baixas. */
7
+ dense?: boolean;
8
+ /** Realce de hover nas linhas do corpo. Padrão: true. */
9
+ hoverable?: boolean;
10
+ /** Linhas zebradas. */
11
+ striped?: boolean;
12
+ /** Classe do container com rolagem horizontal. */
13
+ wrapperClassName?: string;
3
14
  }
4
- export declare const Table: React.FC<TableProps>;
15
+ /**
16
+ * Tabela estilizada. Use <thead>/<tbody> com <th scope="col"> normalmente;
17
+ * o estilo das células é aplicado pelo componente.
18
+ */
19
+ export declare const Table: {
20
+ ({ caption, captionHidden, dense, hoverable, striped, className, wrapperClassName, children, ...props }: TableProps): import("react/jsx-runtime").JSX.Element;
21
+ displayName: string;
22
+ };
@@ -1,17 +1,54 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { cn as d } from "../../utils/cn.js";
3
- const b = ({ className: e, children: o, ...a }) => /* @__PURE__ */ r("div", { className: "overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]", children: /* @__PURE__ */ r(
4
- "table",
1
+ import { jsx as s, jsxs as h } from "react/jsx-runtime";
2
+ import { cn as t } from "../../utils/cn.js";
3
+ const f = ({
4
+ caption: e,
5
+ captionHidden: r = !1,
6
+ dense: d = !1,
7
+ hoverable: l = !0,
8
+ striped: b = !1,
9
+ className: o,
10
+ wrapperClassName: a,
11
+ children: n,
12
+ ..._
13
+ }) => /* @__PURE__ */ s(
14
+ "div",
5
15
  {
6
- className: d(
7
- "w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left",
8
- e
16
+ className: t(
17
+ "overflow-x-auto rounded-sbk-sm border border-sbk-line bg-sbk-surface",
18
+ a
9
19
  ),
10
- ...a,
11
- children: o
20
+ children: /* @__PURE__ */ h(
21
+ "table",
22
+ {
23
+ className: t(
24
+ "w-full border-collapse text-left text-sm text-sbk-fg",
25
+ "[&_th]:bg-sbk-surface-sunken [&_th]:font-semibold [&_th]:text-sbk-fg-heading [&_th]:text-xs [&_th]:uppercase [&_th]:tracking-wide",
26
+ "[&_td]:font-light [&_td]:border-t [&_td]:border-sbk-line",
27
+ d ? "[&_td]:px-3 [&_td]:py-2 [&_th]:px-3 [&_th]:py-2" : "[&_td]:px-4 [&_td]:py-3 [&_th]:px-4 [&_th]:py-3",
28
+ l && "[&_tbody_tr:hover]:bg-sbk-surface-hover",
29
+ b && "[&_tbody_tr:nth-child(even)]:bg-sbk-surface-sunken",
30
+ o
31
+ ),
32
+ ..._,
33
+ children: [
34
+ e && /* @__PURE__ */ s(
35
+ "caption",
36
+ {
37
+ className: t(
38
+ "px-4 py-3 text-left text-sm font-semibold text-sbk-fg-heading",
39
+ r && "sr-only"
40
+ ),
41
+ children: e
42
+ }
43
+ ),
44
+ n
45
+ ]
46
+ }
47
+ )
12
48
  }
13
- ) });
49
+ );
50
+ f.displayName = "Table";
14
51
  export {
15
- b as Table
52
+ f as Table
16
53
  };
17
54
  //# sourceMappingURL=Table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {}\n\nexport const Table: React.FC<TableProps> = ({ className, children, ...props }) => {\n return (\n <div className=\"overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]\">\n <table\n className={cn(\n 'w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left',\n className,\n )}\n {...props}\n >\n {children}\n </table>\n </div>\n );\n};\n"],"names":["Table","className","children","props","jsx","cn"],"mappings":";;AAKO,MAAMA,IAA8B,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,QAElE,gBAAAC,EAAC,OAAA,EAAI,WAAU,yFACb,UAAA,gBAAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEH,UAAAD;AAAA,EAAA;AAAA,GAEL;"}
1
+ {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Legenda da tabela (visível ou apenas para leitores de tela com `captionHidden`). */\n caption?: React.ReactNode;\n captionHidden?: boolean;\n /** Linhas mais baixas. */\n dense?: boolean;\n /** Realce de hover nas linhas do corpo. Padrão: true. */\n hoverable?: boolean;\n /** Linhas zebradas. */\n striped?: boolean;\n /** Classe do container com rolagem horizontal. */\n wrapperClassName?: string;\n}\n\n/**\n * Tabela estilizada. Use <thead>/<tbody> com <th scope=\"col\"> normalmente;\n * o estilo das células é aplicado pelo componente.\n */\nexport const Table = ({\n caption,\n captionHidden = false,\n dense = false,\n hoverable = true,\n striped = false,\n className,\n wrapperClassName,\n children,\n ...props\n}: TableProps) => (\n <div\n className={cn(\n 'overflow-x-auto rounded-sbk-sm border border-sbk-line bg-sbk-surface',\n wrapperClassName,\n )}\n >\n <table\n className={cn(\n 'w-full border-collapse text-left text-sm text-sbk-fg',\n '[&_th]:bg-sbk-surface-sunken [&_th]:font-semibold [&_th]:text-sbk-fg-heading [&_th]:text-xs [&_th]:uppercase [&_th]:tracking-wide',\n '[&_td]:font-light [&_td]:border-t [&_td]:border-sbk-line',\n dense\n ? '[&_td]:px-3 [&_td]:py-2 [&_th]:px-3 [&_th]:py-2'\n : '[&_td]:px-4 [&_td]:py-3 [&_th]:px-4 [&_th]:py-3',\n hoverable && '[&_tbody_tr:hover]:bg-sbk-surface-hover',\n striped && '[&_tbody_tr:nth-child(even)]:bg-sbk-surface-sunken',\n className,\n )}\n {...props}\n >\n {caption && (\n <caption\n className={cn(\n 'px-4 py-3 text-left text-sm font-semibold text-sbk-fg-heading',\n captionHidden && 'sr-only',\n )}\n >\n {caption}\n </caption>\n )}\n {children}\n </table>\n </div>\n);\n\nTable.displayName = 'Table';\n"],"names":["Table","caption","captionHidden","dense","hoverable","striped","className","wrapperClassName","children","props","jsx","cn","jsxs"],"mappings":";;AAqBO,MAAMA,IAAQ,CAAC;AAAA,EACpB,SAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAGF,UAAA,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWD;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAR,IACI,oDACA;AAAA,UACJC,KAAa;AAAA,UACbC,KAAW;AAAA,UACXC;AAAA,QAAA;AAAA,QAED,GAAGG;AAAA,QAEH,UAAA;AAAA,UAAAR,KACC,gBAAAS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC;AAAA,gBACT;AAAA,gBACAT,KAAiB;AAAA,cAAA;AAAA,cAGlB,UAAAD;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AACF;AAGFR,EAAM,cAAc;"}
@@ -1,11 +1,25 @@
1
1
  import type React from 'react';
2
2
  export interface TabItem {
3
3
  content: React.ReactNode;
4
+ disabled?: boolean;
5
+ icon?: React.ReactNode;
4
6
  id: string;
5
- label: string;
7
+ label: React.ReactNode;
6
8
  }
7
9
  export interface TabsProps {
10
+ /** Rótulo acessível da lista de abas. */
11
+ 'aria-label'?: string;
12
+ className?: string;
8
13
  defaultTabId?: string;
9
14
  items: TabItem[];
15
+ onTabChange?: (id: string) => void;
16
+ /** Aba ativa controlada externamente. */
17
+ tabId?: string;
18
+ /** `pill`: segmentado. `line`: sublinhado. Padrão: pill. */
19
+ variant?: 'pill' | 'line';
10
20
  }
11
- export declare const Tabs: React.FC<TabsProps>;
21
+ /** Abas (padrão ARIA tabs com ativação automática): setas, Home e End. */
22
+ export declare const Tabs: {
23
+ ({ items, defaultTabId, tabId, onTabChange, variant, className, "aria-label": ariaLabel, }: TabsProps): import("react/jsx-runtime").JSX.Element;
24
+ displayName: string;
25
+ };
@@ -1,62 +1,98 @@
1
- import { jsxs as v, jsx as i } from "react/jsx-runtime";
2
- import { useState as p } from "react";
3
- import { cn as f } from "../../utils/cn.js";
4
- const x = ({ items: n, defaultTabId: s }) => {
5
- var b;
6
- const [d, l] = p(s ?? ((b = n[0]) == null ? void 0 : b.id)), a = n.find((r) => r.id === d) ?? n[0], c = Math.max(
7
- 0,
8
- n.findIndex((r) => r.id === (a == null ? void 0 : a.id))
9
- ), t = (r) => {
10
- const e = n[r];
11
- if (!e)
12
- return;
13
- l(e.id);
14
- const o = document.getElementById(`tab-${e.id}`);
15
- o == null || o.focus();
1
+ import { jsxs as k, jsx as c } from "react/jsx-runtime";
2
+ import { useState as j, useId as z, useRef as K } from "react";
3
+ import { cn as h } from "../../utils/cn.js";
4
+ import { transitionColors as S, buttonReset as _ } from "../../utils/styles.js";
5
+ const q = {
6
+ pill: {
7
+ list: "inline-flex flex-wrap gap-1 rounded-sbk-sm bg-sbk-surface-sunken p-1",
8
+ tab: "rounded-sbk-xs px-3 py-1.5",
9
+ active: "bg-sbk-surface text-sbk-fg-heading shadow-sbk-sm",
10
+ idle: "text-sbk-fg-muted hover:text-sbk-fg"
11
+ },
12
+ line: {
13
+ list: "flex flex-wrap gap-4 border-b border-sbk-line",
14
+ tab: "-mb-px border-b-2 px-1 py-2.5",
15
+ active: "border-sbk-primary text-sbk-fg-heading",
16
+ idle: "border-transparent text-sbk-fg-muted hover:border-sbk-line-strong hover:text-sbk-fg"
17
+ }
18
+ }, B = ({
19
+ items: i,
20
+ defaultTabId: m,
21
+ tabId: f,
22
+ onTabChange: r,
23
+ variant: y = "pill",
24
+ className: w,
25
+ "aria-label": $
26
+ }) => {
27
+ var x;
28
+ const [A, N] = j(m ?? ((x = i.find((e) => !e.disabled)) == null ? void 0 : x.id)), I = f ?? A, l = z(), u = K(null), t = i.find((e) => e.id === I) ?? i[0], o = q[y], p = (e) => {
29
+ f === void 0 && N(e), r == null || r(e);
30
+ }, R = (e, a) => {
31
+ var v, g;
32
+ const s = i.map((b, D) => b.disabled ? -1 : D).filter((b) => b >= 0), n = s.indexOf(a), d = {
33
+ ArrowRight: s[(n + 1) % s.length],
34
+ ArrowLeft: s[(n - 1 + s.length) % s.length],
35
+ Home: s[0],
36
+ End: s[s.length - 1]
37
+ }[e.key];
38
+ d !== void 0 && (e.preventDefault(), p(i[d].id), (g = (v = u.current) == null ? void 0 : v.querySelectorAll('[role="tab"]')[d]) == null || g.focus());
16
39
  };
17
- return /* @__PURE__ */ v("div", { className: "grid gap-3", children: [
18
- /* @__PURE__ */ i(
40
+ return /* @__PURE__ */ k("div", { className: h("grid gap-3", w), children: [
41
+ /* @__PURE__ */ c(
19
42
  "div",
20
43
  {
44
+ ref: u,
45
+ "aria-label": $,
21
46
  "aria-orientation": "horizontal",
22
- className: "inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1",
47
+ className: o.list,
23
48
  role: "tablist",
24
- children: n.map((r, e) => /* @__PURE__ */ i(
25
- "button",
26
- {
27
- "aria-controls": `panel-${r.id}`,
28
- "aria-selected": d === r.id,
29
- className: f(
30
- "rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition",
31
- d === r.id ? "bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]" : "text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"
32
- ),
33
- id: `tab-${r.id}`,
34
- onClick: () => l(r.id),
35
- onKeyDown: (o) => {
36
- o.key === "ArrowRight" ? (o.preventDefault(), t((e + 1) % n.length)) : o.key === "ArrowLeft" ? (o.preventDefault(), t((e - 1 + n.length) % n.length)) : o.key === "Home" ? (o.preventDefault(), t(0)) : o.key === "End" && (o.preventDefault(), t(n.length - 1));
49
+ children: i.map((e, a) => {
50
+ const s = e.id === (t == null ? void 0 : t.id);
51
+ return /* @__PURE__ */ k(
52
+ "button",
53
+ {
54
+ "aria-controls": `${l}-panel-${e.id}`,
55
+ "aria-selected": s,
56
+ className: h(
57
+ _,
58
+ "inline-flex cursor-pointer items-center gap-2 text-sm font-semibold disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:size-4",
59
+ "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sbk-focus focus-visible:outline-solid",
60
+ S,
61
+ o.tab,
62
+ s ? o.active : o.idle
63
+ ),
64
+ disabled: e.disabled,
65
+ id: `${l}-tab-${e.id}`,
66
+ onClick: () => p(e.id),
67
+ onKeyDown: (n) => R(n, a),
68
+ role: "tab",
69
+ tabIndex: s ? 0 : -1,
70
+ type: "button",
71
+ children: [
72
+ e.icon && /* @__PURE__ */ c("span", { "aria-hidden": "true", className: "inline-flex", children: e.icon }),
73
+ e.label
74
+ ]
37
75
  },
38
- role: "tab",
39
- tabIndex: e === c ? 0 : -1,
40
- type: "button",
41
- children: r.label
42
- },
43
- r.id
44
- ))
76
+ e.id
77
+ );
78
+ })
45
79
  }
46
80
  ),
47
- /* @__PURE__ */ i(
81
+ t && /* @__PURE__ */ c(
48
82
  "div",
49
83
  {
50
- "aria-labelledby": `tab-${(a == null ? void 0 : a.id) ?? ""}`,
51
- className: "rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4",
52
- id: `panel-${(a == null ? void 0 : a.id) ?? ""}`,
84
+ "aria-labelledby": `${l}-tab-${t.id}`,
85
+ className: "rounded-sbk-sm font-light text-sbk-fg focus-visible:outline-2 focus-visible:outline-sbk-focus focus-visible:outline-solid",
86
+ id: `${l}-panel-${t.id}`,
53
87
  role: "tabpanel",
54
- children: a == null ? void 0 : a.content
88
+ tabIndex: 0,
89
+ children: t.content
55
90
  }
56
91
  )
57
92
  ] });
58
93
  };
94
+ B.displayName = "Tabs";
59
95
  export {
60
- x as Tabs
96
+ B as Tabs
61
97
  };
62
98
  //# sourceMappingURL=Tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import type React from 'react';\nimport { useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n content: React.ReactNode;\n id: string;\n label: string;\n}\n\nexport interface TabsProps {\n defaultTabId?: string;\n items: TabItem[];\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ items, defaultTabId }) => {\n const [activeTab, setActiveTab] = useState(defaultTabId ?? items[0]?.id);\n const selected = items.find((item) => item.id === activeTab) ?? items[0];\n const selectedIndex = Math.max(\n 0,\n items.findIndex((item) => item.id === selected?.id),\n );\n\n const moveFocus = (nextIndex: number) => {\n const item = items[nextIndex];\n if (!item) {\n return;\n }\n setActiveTab(item.id);\n const tab = document.getElementById(`tab-${item.id}`);\n tab?.focus();\n };\n\n return (\n <div className=\"grid gap-3\">\n <div\n aria-orientation=\"horizontal\"\n className=\"inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1\"\n role=\"tablist\"\n >\n {items.map((item, index) => (\n <button\n aria-controls={`panel-${item.id}`}\n aria-selected={activeTab === item.id}\n className={cn(\n 'rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition',\n activeTab === item.id\n ? 'bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]'\n : 'text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`tab-${item.id}`}\n key={item.id}\n onClick={() => setActiveTab(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n moveFocus((index + 1) % items.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n moveFocus((index - 1 + items.length) % items.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n moveFocus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n moveFocus(items.length - 1);\n }\n }}\n role=\"tab\"\n tabIndex={index === selectedIndex ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n aria-labelledby={`tab-${selected?.id ?? ''}`}\n className=\"rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4\"\n id={`panel-${selected?.id ?? ''}`}\n role=\"tabpanel\"\n >\n {selected?.content}\n </div>\n </div>\n );\n};\n"],"names":["Tabs","items","defaultTabId","activeTab","setActiveTab","useState","_a","selected","item","selectedIndex","moveFocus","nextIndex","tab","jsxs","jsx","index","cn","e"],"mappings":";;;AAeO,MAAMA,IAA4B,CAAC,EAAE,OAAAC,GAAO,cAAAC,QAAmB;;AACpE,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAASH,OAAgBI,IAAAL,EAAM,CAAC,MAAP,gBAAAK,EAAU,GAAE,GACjEC,IAAWN,EAAM,KAAK,CAACO,MAASA,EAAK,OAAOL,CAAS,KAAKF,EAAM,CAAC,GACjEQ,IAAgB,KAAK;AAAA,IACzB;AAAA,IACAR,EAAM,UAAU,CAACO,MAASA,EAAK,QAAOD,KAAA,gBAAAA,EAAU,GAAE;AAAA,EAAA,GAG9CG,IAAY,CAACC,MAAsB;AACvC,UAAMH,IAAOP,EAAMU,CAAS;AAC5B,QAAI,CAACH;AACH;AAEF,IAAAJ,EAAaI,EAAK,EAAE;AACpB,UAAMI,IAAM,SAAS,eAAe,OAAOJ,EAAK,EAAE,EAAE;AACpD,IAAAI,KAAA,QAAAA,EAAK;AAAA,EACP;AAEA,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,oBAAiB;AAAA,QACjB,WAAU;AAAA,QACV,MAAK;AAAA,QAEJ,UAAAb,EAAM,IAAI,CAACO,GAAMO,MAChB,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,iBAAe,SAASN,EAAK,EAAE;AAAA,YAC/B,iBAAeL,MAAcK,EAAK;AAAA,YAClC,WAAWQ;AAAA,cACT;AAAA,cACAb,MAAcK,EAAK,KACf,kFACA;AAAA,YAAA;AAAA,YAEN,IAAI,OAAOA,EAAK,EAAE;AAAA,YAElB,SAAS,MAAMJ,EAAaI,EAAK,EAAE;AAAA,YACnC,WAAW,CAACS,MAAM;AAChB,cAAIA,EAAE,QAAQ,gBACZA,EAAE,eAAA,GACFP,GAAWK,IAAQ,KAAKd,EAAM,MAAM,KAC3BgB,EAAE,QAAQ,eACnBA,EAAE,eAAA,GACFP,GAAWK,IAAQ,IAAId,EAAM,UAAUA,EAAM,MAAM,KAC1CgB,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACFP,EAAU,CAAC,KACFO,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACFP,EAAUT,EAAM,SAAS,CAAC;AAAA,YAE9B;AAAA,YACA,MAAK;AAAA,YACL,UAAUc,MAAUN,IAAgB,IAAI;AAAA,YACxC,MAAK;AAAA,YAEJ,UAAAD,EAAK;AAAA,UAAA;AAAA,UArBDA,EAAK;AAAA,QAAA,CAuBb;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,mBAAiB,QAAOP,KAAA,gBAAAA,EAAU,OAAM,EAAE;AAAA,QAC1C,WAAU;AAAA,QACV,IAAI,UAASA,KAAA,gBAAAA,EAAU,OAAM,EAAE;AAAA,QAC/B,MAAK;AAAA,QAEJ,UAAAA,KAAA,gBAAAA,EAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,GACF;AAEJ;"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import type React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\nimport { buttonReset, transitionColors } from '../../utils/styles';\n\nexport interface TabItem {\n content: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n id: string;\n label: React.ReactNode;\n}\n\nexport interface TabsProps {\n /** Rótulo acessível da lista de abas. */\n 'aria-label'?: string;\n className?: string;\n defaultTabId?: string;\n items: TabItem[];\n onTabChange?: (id: string) => void;\n /** Aba ativa controlada externamente. */\n tabId?: string;\n /** `pill`: segmentado. `line`: sublinhado. Padrão: pill. */\n variant?: 'pill' | 'line';\n}\n\nconst TAB_VARIANT = {\n pill: {\n list: 'inline-flex flex-wrap gap-1 rounded-sbk-sm bg-sbk-surface-sunken p-1',\n tab: 'rounded-sbk-xs px-3 py-1.5',\n active: 'bg-sbk-surface text-sbk-fg-heading shadow-sbk-sm',\n idle: 'text-sbk-fg-muted hover:text-sbk-fg',\n },\n line: {\n list: 'flex flex-wrap gap-4 border-b border-sbk-line',\n tab: '-mb-px border-b-2 px-1 py-2.5',\n active: 'border-sbk-primary text-sbk-fg-heading',\n idle: 'border-transparent text-sbk-fg-muted hover:border-sbk-line-strong hover:text-sbk-fg',\n },\n} as const;\n\n/** Abas (padrão ARIA tabs com ativação automática): setas, Home e End. */\nexport const Tabs = ({\n items,\n defaultTabId,\n tabId,\n onTabChange,\n variant = 'pill',\n className,\n 'aria-label': ariaLabel,\n}: TabsProps) => {\n const [internal, setInternal] = useState(defaultTabId ?? items.find((i) => !i.disabled)?.id);\n const activeId = tabId ?? internal;\n const baseId = useId();\n const listRef = useRef<HTMLDivElement>(null);\n const selected = items.find((item) => item.id === activeId) ?? items[0];\n const styles = TAB_VARIANT[variant];\n\n const select = (id: string) => {\n if (tabId === undefined) setInternal(id);\n onTabChange?.(id);\n };\n\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\n const enabled = items.map((it, i) => (it.disabled ? -1 : i)).filter((i) => i >= 0);\n const pos = enabled.indexOf(index);\n const next: Record<string, number | undefined> = {\n ArrowRight: enabled[(pos + 1) % enabled.length],\n ArrowLeft: enabled[(pos - 1 + enabled.length) % enabled.length],\n Home: enabled[0],\n End: enabled[enabled.length - 1],\n };\n const target = next[e.key];\n if (target === undefined) return;\n e.preventDefault();\n select(items[target].id);\n listRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')[target]?.focus();\n };\n\n return (\n <div className={cn('grid gap-3', className)}>\n <div\n ref={listRef}\n aria-label={ariaLabel}\n aria-orientation=\"horizontal\"\n className={styles.list}\n role=\"tablist\"\n >\n {items.map((item, index) => {\n const isActive = item.id === selected?.id;\n return (\n <button\n key={item.id}\n aria-controls={`${baseId}-panel-${item.id}`}\n aria-selected={isActive}\n className={cn(\n buttonReset,\n 'inline-flex cursor-pointer items-center gap-2 text-sm font-semibold disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:size-4',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sbk-focus focus-visible:outline-solid',\n transitionColors,\n styles.tab,\n isActive ? styles.active : styles.idle,\n )}\n disabled={item.disabled}\n id={`${baseId}-tab-${item.id}`}\n onClick={() => select(item.id)}\n onKeyDown={(e) => onKeyDown(e, index)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n {item.icon && (\n <span aria-hidden=\"true\" className=\"inline-flex\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n );\n })}\n </div>\n {selected && (\n <div\n aria-labelledby={`${baseId}-tab-${selected.id}`}\n className=\"rounded-sbk-sm font-light text-sbk-fg focus-visible:outline-2 focus-visible:outline-sbk-focus focus-visible:outline-solid\"\n id={`${baseId}-panel-${selected.id}`}\n role=\"tabpanel\"\n tabIndex={0}\n >\n {selected.content}\n </div>\n )}\n </div>\n );\n};\n\nTabs.displayName = 'Tabs';\n"],"names":["TAB_VARIANT","Tabs","items","defaultTabId","tabId","onTabChange","variant","className","ariaLabel","internal","setInternal","useState","_a","i","activeId","baseId","useId","listRef","useRef","selected","item","styles","select","id","onKeyDown","index","enabled","it","pos","target","_b","cn","jsx","isActive","jsxs","buttonReset","transitionColors","e"],"mappings":"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"}
@@ -1,5 +1,12 @@
1
1
  import type React from 'react';
2
2
  export interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ icon?: React.ReactNode;
3
4
  onRemove?: () => void;
5
+ /** Rótulo acessível do botão de remover. Padrão: "Remover". */
6
+ removeLabel?: string;
4
7
  }
5
- export declare const Tag: React.FC<TagProps>;
8
+ /** Etiqueta de metadado, opcionalmente removível. */
9
+ export declare const Tag: {
10
+ ({ className, children, icon, onRemove, removeLabel, ...props }: TagProps): import("react/jsx-runtime").JSX.Element;
11
+ displayName: string;
12
+ };
@@ -1,29 +1,44 @@
1
- import { jsxs as o, jsx as n } from "react/jsx-runtime";
2
- import { cn as s } from "../../utils/cn.js";
3
- const l = ({ className: e, children: t, onRemove: r, ...a }) => /* @__PURE__ */ o(
1
+ import { jsxs as f, jsx as t } from "react/jsx-runtime";
2
+ import { X as l } from "lucide-react";
3
+ import { cn as n } from "../../utils/cn.js";
4
+ import { focusRing as m, buttonReset as b } from "../../utils/styles.js";
5
+ const u = ({
6
+ className: o,
7
+ children: e,
8
+ icon: s,
9
+ onRemove: r,
10
+ removeLabel: i = "Remover",
11
+ ...a
12
+ }) => /* @__PURE__ */ f(
4
13
  "span",
5
14
  {
6
- className: s(
7
- "inline-flex items-center gap-1 rounded-[var(--border-radius-sm)] border border-[var(--border-color)] bg-[var(--bg-secondary)] px-2.5 py-1 text-xs text-[var(--text-secondary)]",
8
- e
15
+ className: n(
16
+ "inline-flex items-center gap-1.5 rounded-sbk-xs border border-sbk-line bg-sbk-surface px-2.5 py-1 text-xs font-light text-sbk-fg [&_svg]:size-3.5",
17
+ o
9
18
  ),
10
19
  ...a,
11
20
  children: [
12
- t,
13
- r && /* @__PURE__ */ n(
21
+ s && /* @__PURE__ */ t("span", { "aria-hidden": "true", className: "inline-flex text-sbk-fg-muted", children: s }),
22
+ e,
23
+ r && /* @__PURE__ */ t(
14
24
  "button",
15
25
  {
16
- "aria-label": "Remover tag",
17
- className: "inline-flex h-4 w-4 items-center justify-center rounded-full text-[var(--text-muted)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]",
26
+ "aria-label": typeof e == "string" ? `${i} ${e}` : i,
27
+ className: n(
28
+ b,
29
+ "-mr-1 inline-flex size-4 cursor-pointer items-center justify-center rounded-full text-sbk-fg-muted hover:bg-sbk-surface-hover hover:text-sbk-fg",
30
+ m
31
+ ),
18
32
  onClick: r,
19
33
  type: "button",
20
- children: "×"
34
+ children: /* @__PURE__ */ t(l, { "aria-hidden": "true" })
21
35
  }
22
36
  )
23
37
  ]
24
38
  }
25
39
  );
40
+ u.displayName = "Tag";
26
41
  export {
27
- l as Tag
42
+ u as Tag
28
43
  };
29
44
  //# sourceMappingURL=Tag.js.map