@sbkbs/ui 1.0.6 → 2.0.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 +327 -294
  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,56 +1,104 @@
1
- import { jsx as l, jsxs as p } from "react/jsx-runtime";
2
- import { useState as h, useRef as v } from "react";
3
- import { cn as w } from "../../utils/cn.js";
4
- const A = ({ items: g, defaultOpenId: b }) => {
5
- const [x, y] = h(b ?? null), o = v(null);
6
- return /* @__PURE__ */ l("div", { className: "grid gap-2", ref: o, children: g.map((t) => {
7
- const n = x === t.id, d = `accordion-trigger-${t.id}`, i = `accordion-panel-${t.id}`;
8
- return /* @__PURE__ */ p(
9
- "div",
10
- {
11
- className: "overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]",
12
- children: [
13
- /* @__PURE__ */ p(
14
- "button",
15
- {
16
- "aria-controls": i,
17
- "aria-expanded": n,
18
- className: "flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",
19
- id: d,
20
- onKeyDown: (r) => {
21
- var s, c, u, f;
22
- if (!o.current)
23
- return;
24
- const e = Array.from(
25
- o.current.querySelectorAll('[id^="accordion-trigger-"]')
26
- ), a = e.findIndex((m) => m.id === d);
27
- a === -1 || e.length === 0 || (r.key === "ArrowDown" ? (r.preventDefault(), (s = e[(a + 1) % e.length]) == null || s.focus()) : r.key === "ArrowUp" ? (r.preventDefault(), (c = e[(a - 1 + e.length) % e.length]) == null || c.focus()) : r.key === "Home" ? (r.preventDefault(), (u = e[0]) == null || u.focus()) : r.key === "End" && (r.preventDefault(), (f = e[e.length - 1]) == null || f.focus()));
28
- },
29
- onClick: () => y((r) => r === t.id ? null : t.id),
30
- type: "button",
31
- children: [
32
- t.title,
33
- /* @__PURE__ */ l("span", { className: w("transition", n ? "rotate-180" : ""), children: "⌄" })
34
- ]
35
- }
36
- ),
37
- n && /* @__PURE__ */ l(
38
- "div",
39
- {
40
- "aria-labelledby": d,
41
- className: "bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]",
42
- id: i,
43
- role: "region",
44
- children: t.content
45
- }
46
- )
47
- ]
48
- },
49
- t.id
50
- );
51
- }) });
1
+ import { jsx as s, jsxs as b } from "react/jsx-runtime";
2
+ import { useState as w, useRef as v, useId as N } from "react";
3
+ import { ChevronDown as A } from "lucide-react";
4
+ import { cn as n } from "../../utils/cn.js";
5
+ import { transitionColors as I, buttonReset as D } from "../../utils/styles.js";
6
+ const $ = ({
7
+ items: f,
8
+ defaultOpenId: i,
9
+ defaultOpenIds: g,
10
+ type: m = "single",
11
+ variant: d = "separated",
12
+ className: p
13
+ }) => {
14
+ const [h, k] = w(
15
+ g ?? (i ? [i] : [])
16
+ ), a = v(null), l = N(), x = (e) => k(
17
+ (o) => o.includes(e) ? o.filter((t) => t !== e) : m === "single" ? [e] : [...o, e]
18
+ ), y = (e) => {
19
+ var c, u;
20
+ const o = Array.from(
21
+ ((c = a.current) == null ? void 0 : c.querySelectorAll(
22
+ "[data-accordion-trigger]:not(:disabled)"
23
+ )) ?? []
24
+ ), t = o.indexOf(e.currentTarget), r = {
25
+ ArrowDown: (t + 1) % o.length,
26
+ ArrowUp: (t - 1 + o.length) % o.length,
27
+ Home: 0,
28
+ End: o.length - 1
29
+ };
30
+ e.key in r && (e.preventDefault(), (u = o[r[e.key]]) == null || u.focus());
31
+ };
32
+ return /* @__PURE__ */ s(
33
+ "div",
34
+ {
35
+ ref: a,
36
+ className: n(
37
+ d === "separated" ? "grid gap-2" : "divide-y divide-sbk-line overflow-hidden rounded-sbk-sm border border-sbk-line",
38
+ p
39
+ ),
40
+ children: f.map((e) => {
41
+ const o = h.includes(e.id), t = `${l}-trigger-${e.id}`, r = `${l}-panel-${e.id}`;
42
+ return /* @__PURE__ */ b(
43
+ "div",
44
+ {
45
+ className: n(
46
+ d === "separated" && "overflow-hidden rounded-sbk-sm border border-sbk-line",
47
+ "bg-sbk-surface"
48
+ ),
49
+ children: [
50
+ /* @__PURE__ */ s("h3", { className: "m-0", children: /* @__PURE__ */ b(
51
+ "button",
52
+ {
53
+ "aria-controls": r,
54
+ "aria-expanded": o,
55
+ className: n(
56
+ D,
57
+ "flex w-full cursor-pointer items-center justify-between gap-3 px-4 py-3 text-left text-sm font-semibold text-sbk-fg hover:bg-sbk-surface-hover disabled:cursor-not-allowed disabled:opacity-50",
58
+ "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-sbk-focus focus-visible:outline-solid",
59
+ I
60
+ ),
61
+ "data-accordion-trigger": "",
62
+ disabled: e.disabled,
63
+ id: t,
64
+ onClick: () => x(e.id),
65
+ onKeyDown: y,
66
+ type: "button",
67
+ children: [
68
+ e.title,
69
+ /* @__PURE__ */ s(
70
+ A,
71
+ {
72
+ "aria-hidden": "true",
73
+ className: n(
74
+ "size-4 shrink-0 text-sbk-fg-muted transition-transform duration-200 motion-reduce:transition-none",
75
+ o && "rotate-180"
76
+ )
77
+ }
78
+ )
79
+ ]
80
+ }
81
+ ) }),
82
+ o && /* @__PURE__ */ s(
83
+ "div",
84
+ {
85
+ "aria-labelledby": t,
86
+ className: "px-4 pb-4 pt-1 text-sm font-light text-sbk-fg-muted animate-sbk-fade-in motion-reduce:animate-none",
87
+ id: r,
88
+ role: "region",
89
+ children: e.content
90
+ }
91
+ )
92
+ ]
93
+ },
94
+ e.id
95
+ );
96
+ })
97
+ }
98
+ );
52
99
  };
100
+ $.displayName = "Accordion";
53
101
  export {
54
- A as Accordion
102
+ $ as Accordion
55
103
  };
56
104
  //# sourceMappingURL=Accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItem {\n content: React.ReactNode;\n id: string;\n title: React.ReactNode;\n}\n\nexport interface AccordionProps {\n defaultOpenId?: string;\n items: AccordionItem[];\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({ items, defaultOpenId }) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId ?? null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <div className=\"grid gap-2\" ref={rootRef}>\n {items.map((item) => {\n const isOpen = openId === item.id;\n const triggerId = `accordion-trigger-${item.id}`;\n const panelId = `accordion-panel-${item.id}`;\n return (\n <div\n className=\"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]\"\n key={item.id}\n >\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\n id={triggerId}\n onKeyDown={(event) => {\n if (!rootRef.current) {\n return;\n }\n const buttons = Array.from(\n rootRef.current.querySelectorAll<HTMLButtonElement>('[id^=\"accordion-trigger-\"]'),\n );\n const currentIndex = buttons.findIndex((btn) => btn.id === triggerId);\n if (currentIndex === -1 || buttons.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n buttons[(currentIndex + 1) % buttons.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n buttons[(currentIndex - 1 + buttons.length) % buttons.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n buttons[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n buttons[buttons.length - 1]?.focus();\n }\n }}\n onClick={() => setOpenId((prev) => (prev === item.id ? null : item.id))}\n type=\"button\"\n >\n {item.title}\n <span className={cn('transition', isOpen ? 'rotate-180' : '')}>⌄</span>\n </button>\n {isOpen && (\n <div\n aria-labelledby={triggerId}\n className=\"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]\"\n id={panelId}\n role=\"region\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["Accordion","items","defaultOpenId","openId","setOpenId","useState","rootRef","useRef","jsx","item","isOpen","triggerId","panelId","jsxs","event","buttons","currentIndex","btn","_a","_b","_c","_d","prev","cn"],"mappings":";;;AAeO,MAAMA,IAAsC,CAAC,EAAE,OAAAC,GAAO,eAAAC,QAAoB;AAC/E,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAwBH,KAAiB,IAAI,GACnEI,IAAUC,EAA8B,IAAI;AAElD,SACE,gBAAAC,EAAC,SAAI,WAAU,cAAa,KAAKF,GAC9B,UAAAL,EAAM,IAAI,CAACQ,MAAS;AACnB,UAAMC,IAASP,MAAWM,EAAK,IACzBE,IAAY,qBAAqBF,EAAK,EAAE,IACxCG,IAAU,mBAAmBH,EAAK,EAAE;AAC1C,WACE,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,iBAAeD;AAAA,cACf,iBAAeF;AAAA,cACf,WAAU;AAAA,cACV,IAAIC;AAAA,cACJ,WAAW,CAACG,MAAU;;AACpB,oBAAI,CAACR,EAAQ;AACX;AAEF,sBAAMS,IAAU,MAAM;AAAA,kBACpBT,EAAQ,QAAQ,iBAAoC,4BAA4B;AAAA,gBAAA,GAE5EU,IAAeD,EAAQ,UAAU,CAACE,MAAQA,EAAI,OAAON,CAAS;AACpE,gBAAIK,MAAiB,MAAMD,EAAQ,WAAW,MAG1CD,EAAM,QAAQ,eAChBA,EAAM,eAAA,IACNI,IAAAH,GAASC,IAAe,KAAKD,EAAQ,MAAM,MAA3C,QAAAG,EAA8C,WACrCJ,EAAM,QAAQ,aACvBA,EAAM,eAAA,IACNK,IAAAJ,GAASC,IAAe,IAAID,EAAQ,UAAUA,EAAQ,MAAM,MAA5D,QAAAI,EAA+D,WACtDL,EAAM,QAAQ,UACvBA,EAAM,eAAA,IACNM,IAAAL,EAAQ,CAAC,MAAT,QAAAK,EAAY,WACHN,EAAM,QAAQ,UACvBA,EAAM,eAAA,IACNO,IAAAN,EAAQA,EAAQ,SAAS,CAAC,MAA1B,QAAAM,EAA6B;AAAA,cAEjC;AAAA,cACA,SAAS,MAAMjB,EAAU,CAACkB,MAAUA,MAASb,EAAK,KAAK,OAAOA,EAAK,EAAG;AAAA,cACtE,MAAK;AAAA,cAEJ,UAAA;AAAA,gBAAAA,EAAK;AAAA,gBACN,gBAAAD,EAAC,UAAK,WAAWe,EAAG,cAAcb,IAAS,eAAe,EAAE,GAAG,UAAA,IAAA,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEjEA,KACC,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,mBAAiBG;AAAA,cACjB,WAAU;AAAA,cACV,IAAIC;AAAA,cACJ,MAAK;AAAA,cAEJ,UAAAH,EAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACR;AAAA,MAAA;AAAA,MA9CGA,EAAK;AAAA,IAAA;AAAA,EAkDhB,CAAC,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { useId, useRef, useState } from 'react';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { buttonReset, transitionColors } from '../../utils/styles';\r\n\r\nexport interface AccordionItem {\r\n content: React.ReactNode;\r\n disabled?: boolean;\r\n id: string;\r\n title: React.ReactNode;\r\n}\r\n\r\nexport interface AccordionProps {\r\n className?: string;\r\n /** Item aberto inicialmente (modo single). */\r\n defaultOpenId?: string;\r\n /** Itens abertos inicialmente (modo multiple). */\r\n defaultOpenIds?: string[];\r\n items: AccordionItem[];\r\n /** `single`: um item aberto por vez. `multiple`: vários. Padrão: single. */\r\n type?: 'single' | 'multiple';\r\n /** `separated`: cards independentes. `flush`: lista contínua com divisórias. */\r\n variant?: 'separated' | 'flush';\r\n}\r\n\r\nexport const Accordion = ({\r\n items,\r\n defaultOpenId,\r\n defaultOpenIds,\r\n type = 'single',\r\n variant = 'separated',\r\n className,\r\n}: AccordionProps) => {\r\n const [openIds, setOpenIds] = useState<string[]>(\r\n defaultOpenIds ?? (defaultOpenId ? [defaultOpenId] : []),\r\n );\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const baseId = useId();\r\n\r\n const toggle = (id: string) =>\r\n setOpenIds((prev) =>\r\n prev.includes(id) ? prev.filter((x) => x !== id) : type === 'single' ? [id] : [...prev, id],\r\n );\r\n\r\n const onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\r\n const buttons = Array.from(\r\n rootRef.current?.querySelectorAll<HTMLButtonElement>(\r\n '[data-accordion-trigger]:not(:disabled)',\r\n ) ?? [],\r\n );\r\n const index = buttons.indexOf(event.currentTarget);\r\n const targets: Record<string, number> = {\r\n ArrowDown: (index + 1) % buttons.length,\r\n ArrowUp: (index - 1 + buttons.length) % buttons.length,\r\n Home: 0,\r\n End: buttons.length - 1,\r\n };\r\n if (event.key in targets) {\r\n event.preventDefault();\r\n buttons[targets[event.key]]?.focus();\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={cn(\r\n variant === 'separated'\r\n ? 'grid gap-2'\r\n : 'divide-y divide-sbk-line overflow-hidden rounded-sbk-sm border border-sbk-line',\r\n className,\r\n )}\r\n >\r\n {items.map((item) => {\r\n const isOpen = openIds.includes(item.id);\r\n const triggerId = `${baseId}-trigger-${item.id}`;\r\n const panelId = `${baseId}-panel-${item.id}`;\r\n return (\r\n <div\r\n key={item.id}\r\n className={cn(\r\n variant === 'separated' && 'overflow-hidden rounded-sbk-sm border border-sbk-line',\r\n 'bg-sbk-surface',\r\n )}\r\n >\r\n <h3 className=\"m-0\">\r\n <button\r\n aria-controls={panelId}\r\n aria-expanded={isOpen}\r\n className={cn(\r\n buttonReset,\r\n 'flex w-full cursor-pointer items-center justify-between gap-3 px-4 py-3 text-left text-sm font-semibold text-sbk-fg hover:bg-sbk-surface-hover disabled:cursor-not-allowed disabled:opacity-50',\r\n 'focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-sbk-focus focus-visible:outline-solid',\r\n transitionColors,\r\n )}\r\n data-accordion-trigger=\"\"\r\n disabled={item.disabled}\r\n id={triggerId}\r\n onClick={() => toggle(item.id)}\r\n onKeyDown={onKeyDown}\r\n type=\"button\"\r\n >\r\n {item.title}\r\n <ChevronDown\r\n aria-hidden=\"true\"\r\n className={cn(\r\n 'size-4 shrink-0 text-sbk-fg-muted transition-transform duration-200 motion-reduce:transition-none',\r\n isOpen && 'rotate-180',\r\n )}\r\n />\r\n </button>\r\n </h3>\r\n {isOpen && (\r\n <div\r\n aria-labelledby={triggerId}\r\n className=\"px-4 pb-4 pt-1 text-sm font-light text-sbk-fg-muted animate-sbk-fade-in motion-reduce:animate-none\"\r\n id={panelId}\r\n role=\"region\"\r\n >\r\n {item.content}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nAccordion.displayName = 'Accordion';\r\n"],"names":["Accordion","items","defaultOpenId","defaultOpenIds","type","variant","className","openIds","setOpenIds","useState","rootRef","useRef","baseId","useId","toggle","id","prev","x","onKeyDown","event","buttons","_a","index","targets","_b","jsx","cn","item","isOpen","triggerId","panelId","jsxs","buttonReset","transitionColors","ChevronDown"],"mappings":";;;;;AA0BO,MAAMA,IAAY,CAAC;AAAA,EACxB,OAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,WAAAC;AACF,MAAsB;AACpB,QAAM,CAACC,GAASC,CAAU,IAAIC;AAAA,IAC5BN,MAAmBD,IAAgB,CAACA,CAAa,IAAI,CAAA;AAAA,EAAC,GAElDQ,IAAUC,EAAuB,IAAI,GACrCC,IAASC,EAAA,GAETC,IAAS,CAACC,MACdP;AAAA,IAAW,CAACQ,MACVA,EAAK,SAASD,CAAE,IAAIC,EAAK,OAAO,CAACC,MAAMA,MAAMF,CAAE,IAAIX,MAAS,WAAW,CAACW,CAAE,IAAI,CAAC,GAAGC,GAAMD,CAAE;AAAA,EAAA,GAGxFG,IAAY,CAACC,MAAkD;;AACnE,UAAMC,IAAU,MAAM;AAAA,QACpBC,IAAAX,EAAQ,YAAR,gBAAAW,EAAiB;AAAA,QACf;AAAA,YACG,CAAA;AAAA,IAAC,GAEFC,IAAQF,EAAQ,QAAQD,EAAM,aAAa,GAC3CI,IAAkC;AAAA,MACtC,YAAYD,IAAQ,KAAKF,EAAQ;AAAA,MACjC,UAAUE,IAAQ,IAAIF,EAAQ,UAAUA,EAAQ;AAAA,MAChD,MAAM;AAAA,MACN,KAAKA,EAAQ,SAAS;AAAA,IAAA;AAExB,IAAID,EAAM,OAAOI,MACfJ,EAAM,eAAA,IACNK,IAAAJ,EAAQG,EAAQJ,EAAM,GAAG,CAAC,MAA1B,QAAAK,EAA6B;AAAA,EAEjC;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKf;AAAA,MACL,WAAWgB;AAAA,QACTrB,MAAY,cACR,eACA;AAAA,QACJC;AAAA,MAAA;AAAA,MAGD,UAAAL,EAAM,IAAI,CAAC0B,MAAS;AACnB,cAAMC,IAASrB,EAAQ,SAASoB,EAAK,EAAE,GACjCE,IAAY,GAAGjB,CAAM,YAAYe,EAAK,EAAE,IACxCG,IAAU,GAAGlB,CAAM,UAAUe,EAAK,EAAE;AAC1C,eACE,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWL;AAAA,cACTrB,MAAY,eAAe;AAAA,cAC3B;AAAA,YAAA;AAAA,YAGF,UAAA;AAAA,cAAA,gBAAAoB,EAAC,MAAA,EAAG,WAAU,OACZ,UAAA,gBAAAM;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,iBAAeD;AAAA,kBACf,iBAAeF;AAAA,kBACf,WAAWF;AAAA,oBACTM;AAAA,oBACA;AAAA,oBACA;AAAA,oBACAC;AAAA,kBAAA;AAAA,kBAEF,0BAAuB;AAAA,kBACvB,UAAUN,EAAK;AAAA,kBACf,IAAIE;AAAA,kBACJ,SAAS,MAAMf,EAAOa,EAAK,EAAE;AAAA,kBAC7B,WAAAT;AAAA,kBACA,MAAK;AAAA,kBAEJ,UAAA;AAAA,oBAAAS,EAAK;AAAA,oBACN,gBAAAF;AAAA,sBAACS;AAAA,sBAAA;AAAA,wBACC,eAAY;AAAA,wBACZ,WAAWR;AAAA,0BACT;AAAA,0BACAE,KAAU;AAAA,wBAAA;AAAA,sBACZ;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,cAAA,GAEJ;AAAA,cACCA,KACC,gBAAAH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,mBAAiBI;AAAA,kBACjB,WAAU;AAAA,kBACV,IAAIC;AAAA,kBACJ,MAAK;AAAA,kBAEJ,UAAAH,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,UAzCGA,EAAK;AAAA,QAAA;AAAA,MA6ChB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA3B,EAAU,cAAc;"}
@@ -1,6 +1,19 @@
1
1
  import type React from 'react';
2
- export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
3
- title?: string;
4
- tone?: 'info' | 'success' | 'warning' | 'error';
2
+ export type AlertTone = 'info' | 'success' | 'warning' | 'error';
3
+ export interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
4
+ /** Ações (botões/links) exibidas abaixo do texto. */
5
+ action?: React.ReactNode;
6
+ /** Ícone customizado. `false` remove o ícone. */
7
+ icon?: React.ReactNode | false;
8
+ onClose?: () => void;
9
+ title?: React.ReactNode;
10
+ tone?: AlertTone;
5
11
  }
6
- export declare const Alert: React.FC<AlertProps>;
12
+ /**
13
+ * Mensagem de feedback persistente na página.
14
+ * `error` e `warning` usam role="alert" (anúncio imediato); `info` e `success` usam role="status".
15
+ */
16
+ export declare const Alert: {
17
+ ({ title, tone, icon, action, onClose, children, className, role, ...props }: AlertProps): import("react/jsx-runtime").JSX.Element;
18
+ displayName: string;
19
+ };
@@ -1,32 +1,76 @@
1
- import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
- import { cn as d } from "../../utils/cn.js";
3
- const l = ({
4
- title: r,
5
- tone: o = "info",
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
+ import { XCircle as k, AlertTriangle as u, CheckCircle2 as h, Info as p, X as N } from "lucide-react";
3
+ import { cn as r } from "../../utils/cn.js";
4
+ import { focusRing as v, buttonReset as w } from "../../utils/styles.js";
5
+ const I = {
6
+ info: { box: "border-sbk-info/30 bg-sbk-info-subtle", icon: "text-sbk-info-fg", Icon: p },
7
+ success: {
8
+ box: "border-sbk-success/30 bg-sbk-success-subtle",
9
+ icon: "text-sbk-success-fg",
10
+ Icon: h
11
+ },
12
+ warning: {
13
+ box: "border-sbk-warning/30 bg-sbk-warning-subtle",
14
+ icon: "text-sbk-warning-fg",
15
+ Icon: u
16
+ },
17
+ error: {
18
+ box: "border-sbk-error/30 bg-sbk-error-subtle",
19
+ icon: "text-sbk-error-fg",
20
+ Icon: k
21
+ }
22
+ }, C = ({
23
+ title: t,
24
+ tone: s = "info",
25
+ icon: n,
26
+ action: o,
27
+ onClose: i,
6
28
  children: a,
7
- className: t,
8
- ...s
29
+ className: b,
30
+ role: l,
31
+ ...d
9
32
  }) => {
10
- const c = {
11
- info: "border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]",
12
- success: "border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]",
13
- warning: "border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]",
14
- error: "border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]"
15
- }[o];
16
- return /* @__PURE__ */ n(
33
+ const { box: f, icon: g, Icon: m } = I[s], x = s === "error" || s === "warning";
34
+ return /* @__PURE__ */ c(
17
35
  "div",
18
36
  {
19
- className: d("rounded-[var(--border-radius-md)] border p-4", c, t),
20
- role: "alert",
21
- ...s,
37
+ className: r("flex items-start gap-3 rounded-sbk-sm border p-4 text-sbk-fg", f, b),
38
+ role: l ?? (x ? "alert" : "status"),
39
+ ...d,
22
40
  children: [
23
- r && /* @__PURE__ */ e("p", { className: "mb-1 text-sm font-semibold", children: r }),
24
- /* @__PURE__ */ e("div", { className: "text-sm leading-relaxed", children: a })
41
+ n !== !1 && /* @__PURE__ */ e(
42
+ "span",
43
+ {
44
+ "aria-hidden": "true",
45
+ className: r("mt-0.5 inline-flex shrink-0 [&_svg]:size-5", g),
46
+ children: n ?? /* @__PURE__ */ e(m, { strokeWidth: 1.75 })
47
+ }
48
+ ),
49
+ /* @__PURE__ */ c("div", { className: "grid min-w-0 flex-1 gap-1", children: [
50
+ t && /* @__PURE__ */ e("p", { className: "m-0 text-sm font-semibold text-sbk-fg-heading", children: t }),
51
+ a && /* @__PURE__ */ e("div", { className: "text-sm font-light leading-relaxed", children: a }),
52
+ o && /* @__PURE__ */ e("div", { className: "mt-2 flex flex-wrap gap-2", children: o })
53
+ ] }),
54
+ i && /* @__PURE__ */ e(
55
+ "button",
56
+ {
57
+ "aria-label": "Fechar alerta",
58
+ className: r(
59
+ w,
60
+ "inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-sbk-xs text-sbk-fg-muted hover:bg-sbk-surface-hover hover:text-sbk-fg",
61
+ v
62
+ ),
63
+ onClick: i,
64
+ type: "button",
65
+ children: /* @__PURE__ */ e(N, { "aria-hidden": "true", className: "size-4" })
66
+ }
67
+ )
25
68
  ]
26
69
  }
27
70
  );
28
71
  };
72
+ C.displayName = "Alert";
29
73
  export {
30
- l as Alert
74
+ C as Alert
31
75
  };
32
76
  //# sourceMappingURL=Alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.js","sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n tone = 'info',\n children,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]',\n success:\n 'border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]',\n warning:\n 'border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]',\n error: 'border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]',\n }[tone];\n\n return (\n <div\n className={cn('rounded-[var(--border-radius-md)] border p-4', toneClass, className)}\n role=\"alert\"\n {...props}\n >\n {title && <p className=\"mb-1 text-sm font-semibold\">{title}</p>}\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n};\n"],"names":["Alert","title","tone","children","className","props","toneClass","jsxs","cn","jsx"],"mappings":";;AAQO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAY;AAAA,IAChB,MAAM;AAAA,IACN,SACE;AAAA,IACF,SACE;AAAA,IACF,OAAO;AAAA,EAAA,EACPJ,CAAI;AAEN,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,gDAAgDF,GAAWF,CAAS;AAAA,MAClF,MAAK;AAAA,MACJ,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAJ,KAAS,gBAAAQ,EAAC,KAAA,EAAE,WAAU,8BAA8B,UAAAR,GAAM;AAAA,QAC3D,gBAAAQ,EAAC,OAAA,EAAI,WAAU,2BAA2B,UAAAN,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzD;"}
1
+ {"version":3,"file":"Alert.js","sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from 'lucide-react';\r\nimport { cn } from '../../utils/cn';\r\nimport { buttonReset, focusRing } from '../../utils/styles';\r\n\r\nexport type AlertTone = 'info' | 'success' | 'warning' | 'error';\r\n\r\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Ações (botões/links) exibidas abaixo do texto. */\r\n action?: React.ReactNode;\r\n /** Ícone customizado. `false` remove o ícone. */\r\n icon?: React.ReactNode | false;\r\n onClose?: () => void;\r\n title?: React.ReactNode;\r\n tone?: AlertTone;\r\n}\r\n\r\nconst TONE: Record<AlertTone, { box: string; icon: string; Icon: typeof Info }> = {\r\n info: { box: 'border-sbk-info/30 bg-sbk-info-subtle', icon: 'text-sbk-info-fg', Icon: Info },\r\n success: {\r\n box: 'border-sbk-success/30 bg-sbk-success-subtle',\r\n icon: 'text-sbk-success-fg',\r\n Icon: CheckCircle2,\r\n },\r\n warning: {\r\n box: 'border-sbk-warning/30 bg-sbk-warning-subtle',\r\n icon: 'text-sbk-warning-fg',\r\n Icon: AlertTriangle,\r\n },\r\n error: {\r\n box: 'border-sbk-error/30 bg-sbk-error-subtle',\r\n icon: 'text-sbk-error-fg',\r\n Icon: XCircle,\r\n },\r\n};\r\n\r\n/**\r\n * Mensagem de feedback persistente na página.\r\n * `error` e `warning` usam role=\"alert\" (anúncio imediato); `info` e `success` usam role=\"status\".\r\n */\r\nexport const Alert = ({\r\n title,\r\n tone = 'info',\r\n icon,\r\n action,\r\n onClose,\r\n children,\r\n className,\r\n role,\r\n ...props\r\n}: AlertProps) => {\r\n const { box, icon: iconColor, Icon } = TONE[tone];\r\n const urgent = tone === 'error' || tone === 'warning';\r\n\r\n return (\r\n <div\r\n className={cn('flex items-start gap-3 rounded-sbk-sm border p-4 text-sbk-fg', box, className)}\r\n role={role ?? (urgent ? 'alert' : 'status')}\r\n {...props}\r\n >\r\n {icon !== false && (\r\n <span\r\n aria-hidden=\"true\"\r\n className={cn('mt-0.5 inline-flex shrink-0 [&_svg]:size-5', iconColor)}\r\n >\r\n {icon ?? <Icon strokeWidth={1.75} />}\r\n </span>\r\n )}\r\n <div className=\"grid min-w-0 flex-1 gap-1\">\r\n {title && <p className=\"m-0 text-sm font-semibold text-sbk-fg-heading\">{title}</p>}\r\n {children && <div className=\"text-sm font-light leading-relaxed\">{children}</div>}\r\n {action && <div className=\"mt-2 flex flex-wrap gap-2\">{action}</div>}\r\n </div>\r\n {onClose && (\r\n <button\r\n aria-label=\"Fechar alerta\"\r\n className={cn(\r\n buttonReset,\r\n 'inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-sbk-xs text-sbk-fg-muted hover:bg-sbk-surface-hover hover:text-sbk-fg',\r\n focusRing,\r\n )}\r\n onClick={onClose}\r\n type=\"button\"\r\n >\r\n <X aria-hidden=\"true\" className=\"size-4\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nAlert.displayName = 'Alert';\r\n"],"names":["TONE","Info","CheckCircle2","AlertTriangle","XCircle","Alert","title","tone","icon","action","onClose","children","className","role","props","box","iconColor","Icon","urgent","jsxs","cn","jsx","buttonReset","focusRing","X"],"mappings":";;;;AAiBA,MAAMA,IAA4E;AAAA,EAChF,MAAM,EAAE,KAAK,yCAAyC,MAAM,oBAAoB,MAAMC,EAAA;AAAA,EACtF,SAAS;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAMC;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAMC;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAMC;AAAA,EAAA;AAEV,GAMaC,IAAQ,CAAC;AAAA,EACpB,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,GAAGC;AACL,MAAkB;AAChB,QAAM,EAAE,KAAAC,GAAK,MAAMC,GAAW,MAAAC,EAAA,IAASjB,EAAKO,CAAI,GAC1CW,IAASX,MAAS,WAAWA,MAAS;AAE5C,SACE,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,gEAAgEL,GAAKH,CAAS;AAAA,MAC5F,MAAMC,MAASK,IAAS,UAAU;AAAA,MACjC,GAAGJ;AAAA,MAEH,UAAA;AAAA,QAAAN,MAAS,MACR,gBAAAa;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAWD,EAAG,8CAA8CJ,CAAS;AAAA,YAEpE,UAAAR,KAAQ,gBAAAa,EAACJ,GAAA,EAAK,aAAa,KAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAGtC,gBAAAE,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAA;AAAA,UAAAb,KAAS,gBAAAe,EAAC,KAAA,EAAE,WAAU,iDAAiD,UAAAf,GAAM;AAAA,UAC7EK,KAAY,gBAAAU,EAAC,OAAA,EAAI,WAAU,sCAAsC,UAAAV,GAAS;AAAA,UAC1EF,KAAU,gBAAAY,EAAC,OAAA,EAAI,WAAU,6BAA6B,UAAAZ,EAAA,CAAO;AAAA,QAAA,GAChE;AAAA,QACCC,KACC,gBAAAW;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,WAAWD;AAAA,cACTE;AAAA,cACA;AAAA,cACAC;AAAA,YAAA;AAAA,YAEF,SAASb;AAAA,YACT,MAAK;AAAA,YAEL,UAAA,gBAAAW,EAACG,GAAA,EAAE,eAAY,QAAO,WAAU,SAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAC3C;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAnB,EAAM,cAAc;"}
@@ -1,11 +1,17 @@
1
1
  import type React from 'react';
2
2
  export interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {
3
- /** Texto alternativo / label acessível para a imagem ou iniciais. */
3
+ /** Nome da pessoa: usado como label acessível e para gerar as iniciais. */
4
4
  alt: string;
5
- /** URL da imagem. Se ausente ou falhar no carregamento, exibe as iniciais. */
6
- src?: string;
7
- size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
8
- /** Formato do avatar. Padrão: 'circle' */
9
5
  shape?: 'circle' | 'square';
6
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
7
+ /** URL da imagem. Se ausente ou com erro, exibe as iniciais. */
8
+ src?: string;
9
+ /** Indicador de presença. */
10
+ status?: 'online' | 'offline' | 'busy';
10
11
  }
11
- export declare const Avatar: React.FC<AvatarProps>;
12
+ /** Extrai até 2 iniciais. Ex.: "Carlos Augusto" gera "CA". */
13
+ export declare const getInitials: (name: string) => string;
14
+ export declare const Avatar: {
15
+ ({ src, alt, size, shape, status, className, ...props }: AvatarProps): import("react/jsx-runtime").JSX.Element;
16
+ displayName: string;
17
+ };
@@ -0,0 +1,66 @@
1
+ import { jsxs as f, jsx as n } from "react/jsx-runtime";
2
+ import { useState as g } from "react";
3
+ import { cn as o } from "../../utils/cn.js";
4
+ const u = {
5
+ xs: "size-6 text-[0.625rem]",
6
+ sm: "size-8 text-xs",
7
+ md: "size-10 text-sm",
8
+ lg: "size-12 text-base",
9
+ xl: "size-16 text-lg"
10
+ }, p = {
11
+ online: "bg-sbk-success",
12
+ offline: "bg-sbk-line-strong",
13
+ busy: "bg-sbk-error"
14
+ }, x = { online: "online", offline: "offline", busy: "ocupado" }, S = (s) => s.trim().split(/\s+/).filter(Boolean).slice(0, 2).map((e) => {
15
+ var r;
16
+ return ((r = e[0]) == null ? void 0 : r.toUpperCase()) ?? "";
17
+ }).join(""), h = ({
18
+ src: s,
19
+ alt: e,
20
+ size: r = "md",
21
+ shape: l = "circle",
22
+ status: i,
23
+ className: t,
24
+ ...a
25
+ }) => {
26
+ const [c, m] = g(!1), b = s && !c, d = i ? `${e} (${x[i]})` : e;
27
+ return /* @__PURE__ */ f("span", { className: o("relative inline-flex shrink-0", t), ...a, children: [
28
+ /* @__PURE__ */ n(
29
+ "span",
30
+ {
31
+ "aria-label": d,
32
+ className: o(
33
+ "inline-flex select-none items-center justify-center overflow-hidden bg-sbk-ciano font-semibold text-sbk-branco",
34
+ l === "circle" ? "rounded-full" : "rounded-sbk-sm",
35
+ u[r]
36
+ ),
37
+ role: "img",
38
+ children: b ? /* @__PURE__ */ n(
39
+ "img",
40
+ {
41
+ alt: "",
42
+ className: "size-full object-cover",
43
+ onError: () => m(!0),
44
+ src: s
45
+ }
46
+ ) : /* @__PURE__ */ n("span", { "aria-hidden": "true", children: S(e) })
47
+ }
48
+ ),
49
+ i && /* @__PURE__ */ n(
50
+ "span",
51
+ {
52
+ "aria-hidden": "true",
53
+ className: o(
54
+ "absolute bottom-0 right-0 size-2.5 rounded-full ring-2 ring-sbk-surface",
55
+ p[i]
56
+ )
57
+ }
58
+ )
59
+ ] });
60
+ };
61
+ h.displayName = "Avatar";
62
+ export {
63
+ h as Avatar,
64
+ S as getInitials
65
+ };
66
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { useState } from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /** Nome da pessoa: usado como label acessível e para gerar as iniciais. */\r\n alt: string;\r\n shape?: 'circle' | 'square';\r\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n /** URL da imagem. Se ausente ou com erro, exibe as iniciais. */\r\n src?: string;\r\n /** Indicador de presença. */\r\n status?: 'online' | 'offline' | 'busy';\r\n}\r\n\r\nconst SIZE_CLASS: Record<NonNullable<AvatarProps['size']>, string> = {\r\n xs: 'size-6 text-[0.625rem]',\r\n sm: 'size-8 text-xs',\r\n md: 'size-10 text-sm',\r\n lg: 'size-12 text-base',\r\n xl: 'size-16 text-lg',\r\n};\r\n\r\nconst STATUS_CLASS = {\r\n online: 'bg-sbk-success',\r\n offline: 'bg-sbk-line-strong',\r\n busy: 'bg-sbk-error',\r\n} as const;\r\nconst STATUS_LABEL = { online: 'online', offline: 'offline', busy: 'ocupado' } as const;\r\n\r\n/** Extrai até 2 iniciais. Ex.: \"Carlos Augusto\" gera \"CA\". */\r\nexport const getInitials = (name: string): string =>\r\n name\r\n .trim()\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((word) => word[0]?.toUpperCase() ?? '')\r\n .join('');\r\n\r\nexport const Avatar = ({\r\n src,\r\n alt,\r\n size = 'md',\r\n shape = 'circle',\r\n status,\r\n className,\r\n ...props\r\n}: AvatarProps) => {\r\n const [imgError, setImgError] = useState(false);\r\n const showImage = src && !imgError;\r\n const label = status ? `${alt} (${STATUS_LABEL[status]})` : alt;\r\n\r\n return (\r\n <span className={cn('relative inline-flex shrink-0', className)} {...props}>\r\n <span\r\n aria-label={label}\r\n className={cn(\r\n 'inline-flex select-none items-center justify-center overflow-hidden bg-sbk-ciano font-semibold text-sbk-branco',\r\n shape === 'circle' ? 'rounded-full' : 'rounded-sbk-sm',\r\n SIZE_CLASS[size],\r\n )}\r\n role=\"img\"\r\n >\r\n {showImage ? (\r\n <img\r\n alt=\"\"\r\n className=\"size-full object-cover\"\r\n onError={() => setImgError(true)}\r\n src={src}\r\n />\r\n ) : (\r\n <span aria-hidden=\"true\">{getInitials(alt)}</span>\r\n )}\r\n </span>\r\n {status && (\r\n <span\r\n aria-hidden=\"true\"\r\n className={cn(\r\n 'absolute bottom-0 right-0 size-2.5 rounded-full ring-2 ring-sbk-surface',\r\n STATUS_CLASS[status],\r\n )}\r\n />\r\n )}\r\n </span>\r\n );\r\n};\r\n\r\nAvatar.displayName = 'Avatar';\r\n"],"names":["SIZE_CLASS","STATUS_CLASS","STATUS_LABEL","getInitials","name","word","_a","Avatar","src","alt","size","shape","status","className","props","imgError","setImgError","useState","showImage","label","jsxs","cn","jsx"],"mappings":";;;AAeA,MAAMA,IAA+D;AAAA,EACnE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAe;AAAA,EACnB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR,GACMC,IAAe,EAAE,QAAQ,UAAU,SAAS,WAAW,MAAM,UAAA,GAGtDC,IAAc,CAACC,MAC1BA,EACG,KAAA,EACA,MAAM,KAAK,EACX,OAAO,OAAO,EACd,MAAM,GAAG,CAAC,EACV,IAAI,CAACC;;AAAS,WAAAC,IAAAD,EAAK,CAAC,MAAN,gBAAAC,EAAS,kBAAiB;AAAA,CAAE,EAC1C,KAAK,EAAE,GAECC,IAAS,CAAC;AAAA,EACrB,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,MAAmB;AACjB,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxCC,IAAYV,KAAO,CAACO,GACpBI,IAAQP,IAAS,GAAGH,CAAG,KAAKP,EAAaU,CAAM,CAAC,MAAMH;AAE5D,SACE,gBAAAW,EAAC,UAAK,WAAWC,EAAG,iCAAiCR,CAAS,GAAI,GAAGC,GACnE,UAAA;AAAA,IAAA,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAYH;AAAA,QACZ,WAAWE;AAAA,UACT;AAAA,UACAV,MAAU,WAAW,iBAAiB;AAAA,UACtCX,EAAWU,CAAI;AAAA,QAAA;AAAA,QAEjB,MAAK;AAAA,QAEJ,UAAAQ,IACC,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,WAAU;AAAA,YACV,SAAS,MAAMN,EAAY,EAAI;AAAA,YAC/B,KAAAR;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAAc,EAAC,QAAA,EAAK,eAAY,QAAQ,UAAAnB,EAAYM,CAAG,EAAA,CAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAG9CG,KACC,gBAAAU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAWD;AAAA,UACT;AAAA,UACApB,EAAaW,CAAM;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAEAL,EAAO,cAAc;"}
@@ -1,6 +1,15 @@
1
1
  import type React from 'react';
2
+ export type BadgeTone = 'neutral' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
2
3
  export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
4
+ /** Ponto colorido antes do texto (status). */
5
+ dot?: boolean;
3
6
  size?: 'sm' | 'md';
4
- tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';
7
+ tone?: BadgeTone;
8
+ /** `solid`: fundo cheio. `subtle`: fundo suave com texto colorido. Padrão: solid. */
9
+ variant?: 'solid' | 'subtle';
5
10
  }
6
- export declare const Badge: React.FC<BadgeProps>;
11
+ /** Etiqueta curta de status ou contagem (formato pill da SBK IA). */
12
+ export declare const Badge: {
13
+ ({ size, tone, variant, dot, className, children, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
14
+ displayName: string;
15
+ };
@@ -1,35 +1,47 @@
1
- import { jsx as s } from "react/jsx-runtime";
1
+ import { jsxs as o, jsx as k } from "react/jsx-runtime";
2
2
  import { cn as i } from "../../utils/cn.js";
3
- const l = ({
4
- size: r = "md",
3
+ const g = {
4
+ neutral: "bg-sbk-surface-sunken text-sbk-fg-muted border border-sbk-line",
5
+ primary: "bg-sbk-primary text-sbk-on-primary",
6
+ secondary: "bg-sbk-secondary text-sbk-on-secondary",
7
+ success: "bg-sbk-success text-sbk-on-state",
8
+ warning: "bg-sbk-warning text-sbk-on-state",
9
+ error: "bg-sbk-error text-sbk-on-state",
10
+ info: "bg-sbk-info text-sbk-on-state"
11
+ }, c = {
12
+ neutral: "bg-sbk-surface-sunken text-sbk-fg-muted",
13
+ primary: "bg-sbk-primary-subtle text-sbk-primary dark:text-sbk-fg",
14
+ secondary: "bg-sbk-primary-subtle text-sbk-secondary dark:text-sbk-fg",
15
+ success: "bg-sbk-success-subtle text-sbk-success-fg",
16
+ warning: "bg-sbk-warning-subtle text-sbk-warning-fg",
17
+ error: "bg-sbk-error-subtle text-sbk-error-fg",
18
+ info: "bg-sbk-info-subtle text-sbk-info-fg"
19
+ }, d = ({
20
+ size: s = "md",
5
21
  tone: e = "neutral",
6
- className: t,
7
- children: a,
8
- ...n
9
- }) => {
10
- const o = {
11
- neutral: "bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",
12
- primary: "bg-[var(--md-primary)] text-[var(--md-on-primary)]",
13
- success: "bg-[var(--success-color)] text-white",
14
- warning: "bg-[var(--warning-color)] text-white",
15
- error: "bg-[var(--md-error)] text-[var(--md-on-error)]",
16
- info: "bg-[var(--info-color)] text-white"
17
- }[e];
18
- return /* @__PURE__ */ s(
19
- "span",
20
- {
21
- className: i(
22
- "inline-flex items-center rounded-full font-medium leading-none",
23
- o,
24
- r === "sm" ? "px-2 py-0.5 text-[0.6875rem]" : "px-2.5 py-1 text-xs",
25
- t
26
- ),
27
- ...n,
28
- children: a
29
- }
30
- );
31
- };
22
+ variant: t = "solid",
23
+ dot: r = !1,
24
+ className: b,
25
+ children: n,
26
+ ...a
27
+ }) => /* @__PURE__ */ o(
28
+ "span",
29
+ {
30
+ className: i(
31
+ "inline-flex items-center gap-1.5 whitespace-nowrap rounded-full font-semibold leading-none",
32
+ s === "sm" ? "px-2 py-0.5 text-[0.6875rem]" : "px-2.5 py-1 text-xs",
33
+ (t === "solid" ? g : c)[e],
34
+ b
35
+ ),
36
+ ...a,
37
+ children: [
38
+ r && /* @__PURE__ */ k("span", { "aria-hidden": "true", className: "size-1.5 rounded-full bg-current" }),
39
+ n
40
+ ]
41
+ }
42
+ );
43
+ d.displayName = "Badge";
32
44
  export {
33
- l as Badge
45
+ d as Badge
34
46
  };
35
47
  //# sourceMappingURL=Badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md';\n tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n size = 'md',\n tone = 'neutral',\n className,\n children,\n ...props\n}) => {\n const toneClass = {\n neutral: 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]',\n primary: 'bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n success: 'bg-[var(--success-color)] text-white',\n warning: 'bg-[var(--warning-color)] text-white',\n error: 'bg-[var(--md-error)] text-[var(--md-on-error)]',\n info: 'bg-[var(--info-color)] text-white',\n }[tone];\n\n const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium leading-none',\n toneClass,\n sizeClass,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n};\n"],"names":["Badge","size","tone","className","children","props","toneClass","jsx","cn"],"mappings":";;AAQO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAY;AAAA,IAChB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EAAA,EACNJ,CAAI;AAIN,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAF;AAAA,QANYL,MAAS,OAAO,iCAAiC;AAAA,QAQ7DE;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import type React from 'react';\r\nimport { cn } from '../../utils/cn';\r\n\r\nexport type BadgeTone =\r\n | 'neutral'\r\n | 'primary'\r\n | 'secondary'\r\n | 'success'\r\n | 'warning'\r\n | 'error'\r\n | 'info';\r\n\r\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /** Ponto colorido antes do texto (status). */\r\n dot?: boolean;\r\n size?: 'sm' | 'md';\r\n tone?: BadgeTone;\r\n /** `solid`: fundo cheio. `subtle`: fundo suave com texto colorido. Padrão: solid. */\r\n variant?: 'solid' | 'subtle';\r\n}\r\n\r\nconst SOLID: Record<BadgeTone, string> = {\r\n neutral: 'bg-sbk-surface-sunken text-sbk-fg-muted border border-sbk-line',\r\n primary: 'bg-sbk-primary text-sbk-on-primary',\r\n secondary: 'bg-sbk-secondary text-sbk-on-secondary',\r\n success: 'bg-sbk-success text-sbk-on-state',\r\n warning: 'bg-sbk-warning text-sbk-on-state',\r\n error: 'bg-sbk-error text-sbk-on-state',\r\n info: 'bg-sbk-info text-sbk-on-state',\r\n};\r\n\r\nconst SUBTLE: Record<BadgeTone, string> = {\r\n neutral: 'bg-sbk-surface-sunken text-sbk-fg-muted',\r\n primary: 'bg-sbk-primary-subtle text-sbk-primary dark:text-sbk-fg',\r\n secondary: 'bg-sbk-primary-subtle text-sbk-secondary dark:text-sbk-fg',\r\n success: 'bg-sbk-success-subtle text-sbk-success-fg',\r\n warning: 'bg-sbk-warning-subtle text-sbk-warning-fg',\r\n error: 'bg-sbk-error-subtle text-sbk-error-fg',\r\n info: 'bg-sbk-info-subtle text-sbk-info-fg',\r\n};\r\n\r\n/** Etiqueta curta de status ou contagem (formato pill da SBK IA). */\r\nexport const Badge = ({\r\n size = 'md',\r\n tone = 'neutral',\r\n variant = 'solid',\r\n dot = false,\r\n className,\r\n children,\r\n ...props\r\n}: BadgeProps) => (\r\n <span\r\n className={cn(\r\n 'inline-flex items-center gap-1.5 whitespace-nowrap rounded-full font-semibold leading-none',\r\n size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs',\r\n (variant === 'solid' ? SOLID : SUBTLE)[tone],\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {dot && <span aria-hidden=\"true\" className=\"size-1.5 rounded-full bg-current\" />}\r\n {children}\r\n </span>\r\n);\r\n\r\nBadge.displayName = 'Badge';\r\n"],"names":["SOLID","SUBTLE","Badge","size","tone","variant","dot","className","children","props","jsxs","cn","jsx"],"mappings":";;AAqBA,MAAMA,IAAmC;AAAA,EACvC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR,GAEMC,IAAoC;AAAA,EACxC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR,GAGaC,IAAQ,CAAC;AAAA,EACpB,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,KAAAC,IAAM;AAAA,EACN,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAR,MAAS,OAAO,iCAAiC;AAAA,OAChDE,MAAY,UAAUL,IAAQC,GAAQG,CAAI;AAAA,MAC3CG;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEH,UAAA;AAAA,MAAAH,KAAO,gBAAAM,EAAC,QAAA,EAAK,eAAY,QAAO,WAAU,oCAAmC;AAAA,MAC7EJ;AAAA,IAAA;AAAA,EAAA;AACH;AAGFN,EAAM,cAAc;"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  export interface BreadcrumbItem {
3
3
  href?: string;
4
4
  label: React.ReactNode;
@@ -7,4 +7,7 @@ export interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {
7
7
  items: BreadcrumbItem[];
8
8
  separator?: React.ReactNode;
9
9
  }
10
- export declare const Breadcrumb: React.FC<BreadcrumbProps>;
10
+ export declare const Breadcrumb: {
11
+ ({ items, separator, className, ...props }: BreadcrumbProps): import("react/jsx-runtime").JSX.Element;
12
+ displayName: string;
13
+ };