@burtson-labs/ui 0.14.0 → 0.15.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 (245) hide show
  1. package/LICENSES/DEPENDENCIES.txt +1 -1
  2. package/README.md +15 -11
  3. package/dist/components/accordion.d.ts +3 -3
  4. package/dist/components/accordion.js +13 -10
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/agent-run.d.ts +22 -0
  7. package/dist/components/agent-run.js +131 -0
  8. package/dist/components/agent-run.js.map +1 -0
  9. package/dist/components/alert-dialog.d.ts +12 -10
  10. package/dist/components/alert-dialog.js +29 -20
  11. package/dist/components/alert-dialog.js.map +1 -1
  12. package/dist/components/alert.d.ts +5 -3
  13. package/dist/components/alert.js +11 -7
  14. package/dist/components/alert.js.map +1 -1
  15. package/dist/components/app-shell.d.ts +7 -6
  16. package/dist/components/app-shell.js +21 -14
  17. package/dist/components/app-shell.js.map +1 -1
  18. package/dist/components/attachment.d.ts +3 -3
  19. package/dist/components/attachment.js +10 -7
  20. package/dist/components/attachment.js.map +1 -1
  21. package/dist/components/audio-player.d.ts +2 -2
  22. package/dist/components/audio-player.js +8 -6
  23. package/dist/components/audio-player.js.map +1 -1
  24. package/dist/components/avatar-upload.d.ts +19 -0
  25. package/dist/components/avatar-upload.js +359 -0
  26. package/dist/components/avatar-upload.js.map +1 -0
  27. package/dist/components/avatar.d.ts +3 -3
  28. package/dist/components/avatar.js +10 -7
  29. package/dist/components/avatar.js.map +1 -1
  30. package/dist/components/badge.d.ts +1 -1
  31. package/dist/components/badge.js +12 -10
  32. package/dist/components/badge.js.map +1 -1
  33. package/dist/components/breadcrumb.d.ts +8 -8
  34. package/dist/components/breadcrumb.js +24 -17
  35. package/dist/components/breadcrumb.js.map +1 -1
  36. package/dist/components/button.d.ts +8 -1
  37. package/dist/components/button.js +12 -3
  38. package/dist/components/button.js.map +1 -1
  39. package/dist/components/card.d.ts +8 -8
  40. package/dist/components/card.js +32 -23
  41. package/dist/components/card.js.map +1 -1
  42. package/dist/components/chat-history.d.ts +1 -1
  43. package/dist/components/chat-history.js +10 -9
  44. package/dist/components/chat-history.js.map +1 -1
  45. package/dist/components/chat-layout.d.ts +1 -1
  46. package/dist/components/chat-layout.js +7 -3
  47. package/dist/components/chat-layout.js.map +1 -1
  48. package/dist/components/checkbox-card.d.ts +2 -2
  49. package/dist/components/checkbox-card.js +9 -7
  50. package/dist/components/checkbox-card.js.map +1 -1
  51. package/dist/components/checkbox.d.ts +23 -2
  52. package/dist/components/checkbox.js +48 -6
  53. package/dist/components/checkbox.js.map +1 -1
  54. package/dist/components/collapsible.d.ts +2 -2
  55. package/dist/components/collapsible.js +7 -5
  56. package/dist/components/collapsible.js.map +1 -1
  57. package/dist/components/combobox.d.ts +14 -4
  58. package/dist/components/combobox.js +18 -8
  59. package/dist/components/combobox.js.map +1 -1
  60. package/dist/components/command.d.ts +68 -12
  61. package/dist/components/command.js +38 -25
  62. package/dist/components/command.js.map +1 -1
  63. package/dist/components/composer.d.ts +2 -2
  64. package/dist/components/composer.js +9 -7
  65. package/dist/components/composer.js.map +1 -1
  66. package/dist/components/connection-status.d.ts +3 -3
  67. package/dist/components/connection-status.js +18 -14
  68. package/dist/components/connection-status.js.map +1 -1
  69. package/dist/components/context-menu.d.ts +14 -13
  70. package/dist/components/context-menu.js +33 -23
  71. package/dist/components/context-menu.js.map +1 -1
  72. package/dist/components/conversation.d.ts +1 -1
  73. package/dist/components/conversation.js +6 -5
  74. package/dist/components/conversation.js.map +1 -1
  75. package/dist/components/copy-button.d.ts +1 -1
  76. package/dist/components/copy-button.js +3 -2
  77. package/dist/components/copy-button.js.map +1 -1
  78. package/dist/components/data-table.d.ts +7 -2
  79. package/dist/components/data-table.js +16 -42
  80. package/dist/components/data-table.js.map +1 -1
  81. package/dist/components/dialog.d.ts +18 -9
  82. package/dist/components/dialog.js +38 -22
  83. package/dist/components/dialog.js.map +1 -1
  84. package/dist/components/dropdown-menu.d.ts +14 -13
  85. package/dist/components/dropdown-menu.js +33 -23
  86. package/dist/components/dropdown-menu.js.map +1 -1
  87. package/dist/components/editor-tabs.d.ts +1 -1
  88. package/dist/components/editor-tabs.js +6 -5
  89. package/dist/components/editor-tabs.js.map +1 -1
  90. package/dist/components/empty-state.d.ts +5 -5
  91. package/dist/components/empty-state.js +16 -11
  92. package/dist/components/empty-state.js.map +1 -1
  93. package/dist/components/error-summary.d.ts +21 -0
  94. package/dist/components/error-summary.js +62 -0
  95. package/dist/components/error-summary.js.map +1 -0
  96. package/dist/components/field.d.ts +66 -7
  97. package/dist/components/field.js +151 -20
  98. package/dist/components/field.js.map +1 -1
  99. package/dist/components/form-actions.d.ts +18 -0
  100. package/dist/components/form-actions.js +30 -0
  101. package/dist/components/form-actions.js.map +1 -0
  102. package/dist/components/icon-button.d.ts +3 -1
  103. package/dist/components/icon-button.js +5 -3
  104. package/dist/components/icon-button.js.map +1 -1
  105. package/dist/components/input.d.ts +42 -7
  106. package/dist/components/input.js +53 -10
  107. package/dist/components/input.js.map +1 -1
  108. package/dist/components/kbd.d.ts +2 -2
  109. package/dist/components/kbd.js +7 -5
  110. package/dist/components/kbd.js.map +1 -1
  111. package/dist/components/label.d.ts +6 -1
  112. package/dist/components/label.js +10 -4
  113. package/dist/components/label.js.map +1 -1
  114. package/dist/components/markdown.d.ts +4 -3
  115. package/dist/components/markdown.js +7 -6
  116. package/dist/components/markdown.js.map +1 -1
  117. package/dist/components/menubar.d.ts +16 -14
  118. package/dist/components/menubar.js +39 -27
  119. package/dist/components/menubar.js.map +1 -1
  120. package/dist/components/message-actions.d.ts +3 -3
  121. package/dist/components/message-actions.js +15 -12
  122. package/dist/components/message-actions.js.map +1 -1
  123. package/dist/components/message.d.ts +1 -1
  124. package/dist/components/message.js +5 -3
  125. package/dist/components/message.js.map +1 -1
  126. package/dist/components/mobile-nav.d.ts +1 -1
  127. package/dist/components/mobile-nav.js +6 -5
  128. package/dist/components/mobile-nav.js.map +1 -1
  129. package/dist/components/native-select.d.ts +16 -0
  130. package/dist/components/native-select.js +33 -0
  131. package/dist/components/native-select.js.map +1 -0
  132. package/dist/components/navigation-menu.d.ts +12 -11
  133. package/dist/components/navigation-menu.js +32 -23
  134. package/dist/components/navigation-menu.js.map +1 -1
  135. package/dist/components/number-input.d.ts +23 -0
  136. package/dist/components/number-input.js +45 -0
  137. package/dist/components/number-input.js.map +1 -0
  138. package/dist/components/onboarding-checklist.d.ts +1 -1
  139. package/dist/components/onboarding-checklist.js +4 -3
  140. package/dist/components/onboarding-checklist.js.map +1 -1
  141. package/dist/components/page-header.d.ts +7 -6
  142. package/dist/components/page-header.js +22 -15
  143. package/dist/components/page-header.js.map +1 -1
  144. package/dist/components/pagination.d.ts +1 -1
  145. package/dist/components/pagination.js +3 -2
  146. package/dist/components/pagination.js.map +1 -1
  147. package/dist/components/popover.d.ts +13 -10
  148. package/dist/components/popover.js +23 -17
  149. package/dist/components/popover.js.map +1 -1
  150. package/dist/components/progress.d.ts +1 -1
  151. package/dist/components/progress.js +6 -5
  152. package/dist/components/progress.js.map +1 -1
  153. package/dist/components/radio-group.d.ts +22 -3
  154. package/dist/components/radio-group.js +51 -10
  155. package/dist/components/radio-group.js.map +1 -1
  156. package/dist/components/reasoning.d.ts +3 -3
  157. package/dist/components/reasoning.js +9 -7
  158. package/dist/components/reasoning.js.map +1 -1
  159. package/dist/components/scroll-area.d.ts +3 -2
  160. package/dist/components/scroll-area.js +10 -7
  161. package/dist/components/scroll-area.js.map +1 -1
  162. package/dist/components/secret-input.d.ts +3 -2
  163. package/dist/components/secret-input.js +6 -4
  164. package/dist/components/secret-input.js.map +1 -1
  165. package/dist/components/select.d.ts +11 -6
  166. package/dist/components/select.js +24 -18
  167. package/dist/components/select.js.map +1 -1
  168. package/dist/components/separator.d.ts +1 -1
  169. package/dist/components/separator.js +4 -3
  170. package/dist/components/separator.js.map +1 -1
  171. package/dist/components/sheet.d.ts +10 -8
  172. package/dist/components/sheet.js +31 -20
  173. package/dist/components/sheet.js.map +1 -1
  174. package/dist/components/skeleton.d.ts +2 -1
  175. package/dist/components/skeleton.js +6 -4
  176. package/dist/components/skeleton.js.map +1 -1
  177. package/dist/components/slider.d.ts +10 -6
  178. package/dist/components/slider.js +15 -7
  179. package/dist/components/slider.js.map +1 -1
  180. package/dist/components/source.d.ts +2 -2
  181. package/dist/components/source.js +9 -7
  182. package/dist/components/source.js.map +1 -1
  183. package/dist/components/spinner.d.ts +4 -2
  184. package/dist/components/spinner.js +4 -3
  185. package/dist/components/spinner.js.map +1 -1
  186. package/dist/components/stat-card.d.ts +27 -2
  187. package/dist/components/stat-card.js +69 -9
  188. package/dist/components/stat-card.js.map +1 -1
  189. package/dist/components/status.d.ts +7 -6
  190. package/dist/components/status.js +11 -5
  191. package/dist/components/status.js.map +1 -1
  192. package/dist/components/steps.d.ts +1 -1
  193. package/dist/components/steps.js +4 -3
  194. package/dist/components/steps.js.map +1 -1
  195. package/dist/components/switch.d.ts +46 -2
  196. package/dist/components/switch.js +85 -8
  197. package/dist/components/switch.js.map +1 -1
  198. package/dist/components/table.d.ts +29 -12
  199. package/dist/components/table.js +79 -34
  200. package/dist/components/table.js.map +1 -1
  201. package/dist/components/tabs.d.ts +9 -4
  202. package/dist/components/tabs.js +22 -13
  203. package/dist/components/tabs.js.map +1 -1
  204. package/dist/components/textarea.d.ts +6 -1
  205. package/dist/components/textarea.js +3 -3
  206. package/dist/components/textarea.js.map +1 -1
  207. package/dist/components/toast.d.ts +10 -6
  208. package/dist/components/toast.js +27 -18
  209. package/dist/components/toast.js.map +1 -1
  210. package/dist/components/toaster.d.ts +4 -2
  211. package/dist/components/toaster.js +6 -2
  212. package/dist/components/toaster.js.map +1 -1
  213. package/dist/components/tool-call.d.ts +3 -3
  214. package/dist/components/tool-call.js +16 -12
  215. package/dist/components/tool-call.js.map +1 -1
  216. package/dist/components/toolbar.d.ts +9 -4
  217. package/dist/components/toolbar.js +14 -9
  218. package/dist/components/toolbar.js.map +1 -1
  219. package/dist/components/tooltip.d.ts +3 -2
  220. package/dist/components/tooltip.js +7 -4
  221. package/dist/components/tooltip.js.map +1 -1
  222. package/dist/components/tour.js +2 -2
  223. package/dist/components/tour.js.map +1 -1
  224. package/dist/components/tree-view.d.ts +1 -1
  225. package/dist/components/tree-view.js +9 -5
  226. package/dist/components/tree-view.js.map +1 -1
  227. package/dist/components/voice-recorder.d.ts +1 -1
  228. package/dist/components/voice-recorder.js +4 -2
  229. package/dist/components/voice-recorder.js.map +1 -1
  230. package/dist/index.d.ts +8 -1
  231. package/dist/index.js +19 -12
  232. package/dist/lib/media.d.ts +18 -0
  233. package/dist/lib/media.js +34 -0
  234. package/dist/lib/media.js.map +1 -0
  235. package/dist/lib/utils.d.ts +32 -0
  236. package/dist/lib/utils.js +33 -1
  237. package/dist/lib/utils.js.map +1 -1
  238. package/dist/mui/index.js +20 -8
  239. package/dist/mui/index.js.map +1 -1
  240. package/dist/styles.css +1 -1
  241. package/dist/theme.css +36 -17
  242. package/dist/tokens.d.ts +78 -36
  243. package/dist/tokens.js +63 -32
  244. package/dist/tokens.js.map +1 -1
  245. package/package.json +5 -3
@@ -303,7 +303,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
303
303
 
304
304
  ====================
305
305
 
306
- @burtson-labs/icons@0.3.0 (ISC)
306
+ @burtson-labs/icons@0.5.0 (ISC)
307
307
  LICENSE
308
308
  ISC License
309
309
 
package/README.md CHANGED
@@ -58,9 +58,11 @@ npx shadcn@latest add https://ui.burtson.ai/r/button.json
58
58
 
59
59
  ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://icons.burtson.ai/svg-white/panel-grid.svg"/><img src="https://icons.burtson.ai/svg-black/panel-grid.svg" align="center" alt=""/></picture> Components
60
60
 
61
- Accordion · Alert · Alert Dialog · App Shell · Attachment · Audio Player · Avatar · Badge · Breadcrumb · Button · Card · Chat History · Chat Layout · Checkbox · Checkbox Card · Collapsible · Combobox · Command · Composer · Connection Status · Context Menu · Conversation · Copy Button · Data Table · Dialog · Dropdown Menu · Editor Tabs · Empty State · Field · Icon Button · Input · Kbd · Label · Markdown · Menubar · Message · Message Actions · Mobile Nav · Navigation Menu · Onboarding Checklist · Page Header · Pagination · Popover · Progress · Radio Group · Reasoning · Resizable · Scroll Area · Secret Input · Select · Separator · Sheet · Skeleton · Slider · Source · Spinner · Stat Card · Status · Steps · Switch · Table · Tabs · Textarea · Toast · Toaster · Tool Call · Toolbar · Tooltip · Tour · Tree View · Voice Recorder
61
+ Accordion · Agent Run · Alert · Alert Dialog · App Shell · Attachment · Audio Player · Avatar · Avatar Upload · Badge · Breadcrumb · Button · Card · Chat History · Chat Layout · Checkbox · Checkbox Card · Collapsible · Combobox · Command · Composer · Connection Status · Context Menu · Conversation · Copy Button · Data Table · Dialog · Dropdown Menu · Editor Tabs · Empty State · Error Summary · Field · Form Actions · Icon Button · Input · Kbd · Label · Markdown · Menubar · Message · Message Actions · Mobile Nav · Native Select · Navigation Menu · Number Input · Onboarding Checklist · Page Header · Pagination · Popover · Progress · Radio Group · Reasoning · Resizable · Scroll Area · Secret Input · Select · Separator · Sheet · Skeleton · Slider · Source · Spinner · Stat Card · Status · Steps · Switch · Table · Tabs · Textarea · Toast · Toaster · Tool Call · Toolbar · Tooltip · Tour · Tree View · Voice Recorder
62
62
 
63
- Live previews and code for each one are at [ui.burtson.ai](https://ui.burtson.ai/docs/components/button). Building a chat app? The [chat recipe](https://ui.burtson.ai/docs/recipes/chat) puts history, attachments, streaming, voice notes and full screen together, with the complete source.
63
+ Live previews, when-to-use notes, accessibility notes and code for each one are at [ui.burtson.ai](https://ui.burtson.ai/docs/components/button). Building a chat app? The [chat recipe](https://ui.burtson.ai/docs/recipes/chat) puts history, attachments, streaming, voice notes and full screen together, with the complete source. Building a form? `Field` wires label, help and error onto any control, `FieldGrid` lines fields up and `FormActions` places the buttons, on phones too.
64
+
65
+ Every control is at least 44px on touch screens, shows one focus style per kind of control (`focusRingClasses`, `fieldFocusClasses`) and meets 4.5:1 for text and 3:1 for boundaries in both palettes and any accent; a Playwright smoke in CI measures it.
64
66
 
65
67
  ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://icons.burtson.ai/svg-white/palette.svg"/><img src="https://icons.burtson.ai/svg-black/palette.svg" align="center" alt=""/></picture> Theming
66
68
 
@@ -80,7 +82,7 @@ import { createBurtsonTheme } from '@burtson-labs/ui/mui';
80
82
  createBurtsonTheme({ mode: 'dark', accent: '#2563eb', density: 'compact' });
81
83
  ```
82
84
 
83
- `@burtson-labs/ui/tokens` also exports `accentTokens(accent, mode)` for the CSS side, and the motion timing (`duration`, `easing`) and `elevation` levels that `theme.css` exposes as `--duration-*` and `--ease-*`.
85
+ `@burtson-labs/ui/tokens` also exports `accentTokens(accent, mode)` for the CSS side, the motion timing (`duration`, `easing`) that `theme.css` exposes as `--duration-*` and `--ease-*` and every `transition-*` utility runs on, the `elevation` levels (`shadow.lg` for floating surfaces, `shadow.xl` for modal ones) and the `layer` z-index scale (raised 10, chrome 40, overlay 50, toast 100).
84
86
 
85
87
  ## <picture><source media="(prefers-color-scheme: dark)" srcset="https://icons.burtson.ai/svg-white/terminal.svg"/><img src="https://icons.burtson.ai/svg-black/terminal.svg" align="center" alt=""/></picture> Develop
86
88
 
@@ -88,17 +90,19 @@ createBurtsonTheme({ mode: 'dark', accent: '#2563eb', density: 'compact' });
88
90
  npm install
89
91
  npm run dev # docs site with live components, http://localhost:5173
90
92
  npm run check # typecheck, lint, format, tests, package build, site build
93
+ npm run smoke # Playwright: touch targets, focus, overflow, keyboard (needs npm run site)
91
94
  ```
92
95
 
93
- | Path | What |
94
- | ----------------- | -------------------------------------------------------------------------------- |
95
- | `src/components/` | One file per component; also the registry source |
96
- | `src/tokens.ts` | Design tokens (edit here, then `npm run theme`) |
97
- | `src/mui/` | MUI theme adapter |
98
- | `site/` | Docs site for [ui.burtson.ai](https://ui.burtson.ai); demos in `site/src/demos/` |
99
- | `scripts/` | Package build, theme and registry generators, link-preview card |
96
+ | Path | What |
97
+ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
98
+ | `src/components/` | One file per component; also the registry source |
99
+ | `src/tokens.ts` | Design tokens (edit here, then `npm run theme`) |
100
+ | `src/mui/` | MUI theme adapter |
101
+ | `site/` | Docs site for [ui.burtson.ai](https://ui.burtson.ai); demos in `site/src/demos/`, notes in `site/src/usage.ts`; `/matrix` renders every component in every state |
102
+ | `e2e/` | Browser smoke (Playwright, Chromium at 1440 and 390 touch) |
103
+ | `scripts/` | Package build, theme and registry generators, link-preview card |
100
104
 
101
- Adding a component: write `src/components/<name>.tsx`, export it from `src/index.ts`, add a demo in `site/src/demos/<name>.tsx` and an entry in `site/src/docs.ts`. The registry picks it up on the next build.
105
+ Adding a component: write `src/components/<name>.tsx` (forwardRef, `data-slot` on every part, `focusRingClasses` or `fieldFocusClasses` for focus, 44px on touch), export it from `src/index.ts`, add a demo in `site/src/demos/<name>.tsx`, an entry in `site/src/docs.ts`, its notes in `site/src/usage.ts` and a cell in `site/src/matrix.tsx`. The registry picks it up on the next build.
102
106
 
103
107
  Linting and formatting follow [Burtson Labs frontend standards](https://github.com/Burtson-Labs/frontend-standards). Every push is audited by [Sentinel](https://github.com/Burtson-Labs/sentinel-audit).
104
108
 
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import * as AccordionPrimitive from '../primitives/vendor/radix/react-accordion';
3
3
  declare function Accordion(props: React.ComponentProps<typeof AccordionPrimitive.Root>): React.JSX.Element;
4
- declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.JSX.Element;
5
- declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): React.JSX.Element;
6
- declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.JSX.Element;
4
+ declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
7
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { cn } from "../lib/utils.js";
2
+ import { cn, focusRingClasses } from "../lib/utils.js";
3
3
  import { Content, Header, Item, Root, Trigger } from "../primitives/vendor/radix/react-accordion/accordion.js";
4
+ import * as React from "react";
4
5
  import ChevronDown from "@burtson-labs/icons/react/chevron-down";
5
- import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/components/accordion.tsx
8
8
  function Accordion(props) {
@@ -11,29 +11,32 @@ function Accordion(props) {
11
11
  ...props
12
12
  });
13
13
  }
14
- function AccordionItem({ className, ...props }) {
14
+ var AccordionItem = React.forwardRef(function AccordionItem({ className, ...props }, ref) {
15
15
  return /* @__PURE__ */ jsx(Item, {
16
+ ref,
16
17
  "data-slot": "accordion-item",
17
18
  className: cn("border-b last:border-b-0", className),
18
19
  ...props
19
20
  });
20
- }
21
- function AccordionTrigger({ className, children, ...props }) {
21
+ });
22
+ var AccordionTrigger = React.forwardRef(function AccordionTrigger({ className, children, ...props }, ref) {
22
23
  return /* @__PURE__ */ jsx(Header, {
23
24
  className: "flex",
24
25
  children: /* @__PURE__ */ jsxs(Trigger, {
26
+ ref,
25
27
  "data-slot": "accordion-trigger",
26
- className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-semibold transition-all outline-none hover:text-brand focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className),
28
+ className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-semibold transition-colors hover:text-brand disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", focusRingClasses, "focus-visible:outline-offset-[-2px]", className),
27
29
  ...props,
28
30
  children: [children, /* @__PURE__ */ jsx(ChevronDown, {
29
- className: "pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200",
31
+ className: "pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-(--duration-standard)",
30
32
  "aria-hidden": true
31
33
  })]
32
34
  })
33
35
  });
34
- }
35
- function AccordionContent({ className, children, ...props }) {
36
+ });
37
+ var AccordionContent = React.forwardRef(function AccordionContent({ className, children, ...props }, ref) {
36
38
  return /* @__PURE__ */ jsx(Content, {
39
+ ref,
37
40
  "data-slot": "accordion-content",
38
41
  className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
39
42
  ...props,
@@ -42,7 +45,7 @@ function AccordionContent({ className, children, ...props }) {
42
45
  children
43
46
  })
44
47
  });
45
- }
48
+ });
46
49
  //#endregion
47
50
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
48
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["AccordionPrimitive.Root","AccordionPrimitive.Item","AccordionPrimitive.Header","AccordionPrimitive.Trigger","AccordionPrimitive.Content"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import ChevronDown from '@burtson-labs/icons/react/chevron-down';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as AccordionPrimitive from '../primitives/vendor/radix/react-accordion';\n\nfunction Accordion(props: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-semibold transition-all outline-none hover:text-brand focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\"\n aria-hidden\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n"],"mappings":";;;;;;;AAMA,SAAS,UAAU,OAA6D;CAC9E,OAAO,oBAACA,MAAD;EAAyB,aAAU;EAAY,GAAI;CAAQ,CAAA;AACpE;AAEA,SAAS,cAAc,EACrB,WACA,GAAG,SACoD;CACvD,OACE,oBAACC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACuD;CAC1D,OACE,oBAACC,QAAD;EAA2B,WAAU;EACnC,UAAA,qBAACC,SAAD;GACE,aAAU;GACV,WAAW,GACT,uRACA,SACF;GACA,GAAI;GANN,UAAA,CAQG,UACD,oBAAC,aAAD;IACE,WAAU;IACV,eAAA;GACD,CAAA,CACyB;;CACH,CAAA;AAE/B;AAEA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACuD;CAC1D,OACE,oBAACC,SAAD;EACE,aAAU;EACV,WAAU;EACV,GAAI;EAEJ,UAAA,oBAAC,OAAD;GAAK,WAAW,GAAG,aAAa,SAAS;GAAI;EAAc,CAAA;CACjC,CAAA;AAEhC"}
1
+ {"version":3,"file":"accordion.js","names":["AccordionPrimitive.Root","AccordionPrimitive.Item","AccordionPrimitive.Header","AccordionPrimitive.Trigger","AccordionPrimitive.Content"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import ChevronDown from '@burtson-labs/icons/react/chevron-down';\nimport * as React from 'react';\n\nimport { cn, focusRingClasses } from '../lib/utils';\nimport * as AccordionPrimitive from '../primitives/vendor/radix/react-accordion';\n\nfunction Accordion(props: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nconst AccordionItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof AccordionPrimitive.Item>\n>(function AccordionItem({ className, ...props }, ref) {\n return (\n <AccordionPrimitive.Item\n ref={ref}\n data-slot=\"accordion-item\"\n className={cn('border-b last:border-b-0', className)}\n {...props}\n />\n );\n});\n\nconst AccordionTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof AccordionPrimitive.Trigger>\n>(function AccordionTrigger({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-semibold transition-colors hover:text-brand disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n focusRingClasses,\n 'focus-visible:outline-offset-[-2px]',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-(--duration-standard)\"\n aria-hidden\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n});\n\nconst AccordionContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof AccordionPrimitive.Content>\n>(function AccordionContent({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Content\n ref={ref}\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n});\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n"],"mappings":";;;;;;;AAMA,SAAS,UAAU,OAA6D;CAC9E,OAAO,oBAACA,MAAD;EAAyB,aAAU;EAAY,GAAI;CAAQ,CAAA;AACpE;AAEA,IAAM,gBAAgB,MAAM,WAG1B,SAAS,cAAc,EAAE,WAAW,GAAG,SAAS,KAAK;CACrD,OACE,oBAACC,MAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL,CAAC;AAED,IAAM,mBAAmB,MAAM,WAG7B,SAAS,iBAAiB,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK;CAClE,OACE,oBAACC,QAAD;EAA2B,WAAU;EACnC,UAAA,qBAACC,SAAD;GACO;GACL,aAAU;GACV,WAAW,GACT,yNACA,kBACA,uCACA,SACF;GACA,GAAI;GATN,UAAA,CAWG,UACD,oBAAC,aAAD;IACE,WAAU;IACV,eAAA;GACD,CAAA,CACyB;;CACH,CAAA;AAE/B,CAAC;AAED,IAAM,mBAAmB,MAAM,WAG7B,SAAS,iBAAiB,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK;CAClE,OACE,oBAACC,SAAD;EACO;EACL,aAAU;EACV,WAAU;EACV,GAAI;EAEJ,UAAA,oBAAC,OAAD;GAAK,WAAW,GAAG,aAAa,SAAS;GAAI;EAAc,CAAA;CACjC,CAAA;AAEhC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ export type AgentRunState = 'queued' | 'running' | 'waiting' | 'paused' | 'completed' | 'failed' | 'canceled';
3
+ export interface AgentRunStep {
4
+ id: string;
5
+ label: string;
6
+ state: AgentRunState;
7
+ detail?: React.ReactNode;
8
+ }
9
+ export interface AgentRunProps extends Omit<React.ComponentProps<'section'>, 'title'> {
10
+ title: string;
11
+ state: AgentRunState;
12
+ steps: AgentRunStep[];
13
+ /** Explain the current state, especially what a person needs to do next. */
14
+ summary?: React.ReactNode;
15
+ busy?: boolean;
16
+ onPause?: () => void;
17
+ onResume?: () => void;
18
+ onCancel?: () => void;
19
+ onRetry?: () => void;
20
+ }
21
+ /** A controlled run timeline. The application owns execution, cancellation and retry. */
22
+ export declare function AgentRun({ title, state, steps, summary, busy, onPause, onResume, onCancel, onRetry, children, className, ...props }: AgentRunProps): React.JSX.Element;
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ import { cn } from "../lib/utils.js";
3
+ import { Button } from "./button.js";
4
+ import { Spinner } from "./spinner.js";
5
+ import * as React from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import AlertCircle from "@burtson-labs/icons/react/alert-circle";
8
+ import Pause from "@burtson-labs/icons/react/pause";
9
+ import Check from "@burtson-labs/icons/react/check";
10
+ import Circle from "@burtson-labs/icons/react/circle";
11
+ //#region src/components/agent-run.tsx
12
+ var labels = {
13
+ queued: "Queued",
14
+ running: "Running",
15
+ waiting: "Needs your input",
16
+ paused: "Paused",
17
+ completed: "Completed",
18
+ failed: "Failed",
19
+ canceled: "Canceled"
20
+ };
21
+ function RunIcon({ state }) {
22
+ if (state === "running") return /* @__PURE__ */ jsx(Spinner, {
23
+ className: "size-4",
24
+ label: "Running"
25
+ });
26
+ return /* @__PURE__ */ jsx(state === "completed" ? Check : state === "failed" || state === "waiting" ? AlertCircle : state === "paused" ? Pause : Circle, {
27
+ "aria-hidden": true,
28
+ className: cn("size-4", state === "completed" && "text-success", state === "failed" && "text-destructive", state === "waiting" && "text-warning")
29
+ });
30
+ }
31
+ /** A controlled run timeline. The application owns execution, cancellation and retry. */
32
+ function AgentRun({ title, state, steps, summary, busy = false, onPause, onResume, onCancel, onRetry, children, className, ...props }) {
33
+ const id = React.useId();
34
+ const active = [
35
+ "queued",
36
+ "running",
37
+ "waiting",
38
+ "paused"
39
+ ].includes(state);
40
+ return /* @__PURE__ */ jsxs("section", {
41
+ "data-slot": "agent-run",
42
+ "data-state": state,
43
+ "aria-labelledby": id,
44
+ className: cn("min-w-0 overflow-hidden rounded-lg border border-border bg-surface", className),
45
+ ...props,
46
+ children: [
47
+ /* @__PURE__ */ jsxs("header", {
48
+ className: "grid gap-2 border-b border-border p-4",
49
+ children: [/* @__PURE__ */ jsxs("div", {
50
+ className: "flex flex-wrap items-center justify-between gap-2",
51
+ children: [/* @__PURE__ */ jsx("h3", {
52
+ id,
53
+ className: "min-w-0 text-sm font-semibold break-words",
54
+ children: title
55
+ }), /* @__PURE__ */ jsxs("span", {
56
+ role: "status",
57
+ className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground",
58
+ children: [/* @__PURE__ */ jsx(RunIcon, { state }), labels[state]]
59
+ })]
60
+ }), summary && /* @__PURE__ */ jsx("p", {
61
+ className: "text-sm leading-relaxed text-muted-foreground",
62
+ children: summary
63
+ })]
64
+ }),
65
+ /* @__PURE__ */ jsx("ol", {
66
+ className: "grid gap-4 p-4",
67
+ "aria-label": "Run steps",
68
+ children: steps.map((step) => /* @__PURE__ */ jsxs("li", {
69
+ className: "flex min-w-0 gap-3",
70
+ "aria-current": step.state === "running" || step.state === "waiting" ? "step" : void 0,
71
+ children: [/* @__PURE__ */ jsx("span", {
72
+ className: "mt-0.5 shrink-0",
73
+ children: /* @__PURE__ */ jsx(RunIcon, { state: step.state })
74
+ }), /* @__PURE__ */ jsxs("div", {
75
+ className: "grid min-w-0 flex-1 gap-1",
76
+ children: [/* @__PURE__ */ jsxs("span", {
77
+ className: "text-sm font-medium break-words",
78
+ children: [step.label, /* @__PURE__ */ jsxs("span", {
79
+ className: "sr-only",
80
+ children: [" — ", labels[step.state]]
81
+ })]
82
+ }), step.detail && /* @__PURE__ */ jsx("div", {
83
+ className: "text-xs leading-relaxed break-words text-muted-foreground",
84
+ children: step.detail
85
+ })]
86
+ })]
87
+ }, step.id))
88
+ }),
89
+ children && /* @__PURE__ */ jsx("div", {
90
+ className: "grid min-w-0 gap-3 border-t border-border p-4",
91
+ children
92
+ }),
93
+ (state === "running" && onPause || state === "paused" && onResume || state === "failed" && onRetry || active && onCancel) && /* @__PURE__ */ jsxs("footer", {
94
+ className: "flex flex-wrap justify-end gap-2 border-t border-border p-3",
95
+ "aria-busy": busy || void 0,
96
+ children: [
97
+ active && onCancel && /* @__PURE__ */ jsx(Button, {
98
+ variant: "ghost",
99
+ size: "sm",
100
+ disabled: busy,
101
+ onClick: onCancel,
102
+ children: "Cancel run"
103
+ }),
104
+ state === "running" && onPause && /* @__PURE__ */ jsx(Button, {
105
+ variant: "outline",
106
+ size: "sm",
107
+ disabled: busy,
108
+ onClick: onPause,
109
+ children: "Pause run"
110
+ }),
111
+ state === "paused" && onResume && /* @__PURE__ */ jsx(Button, {
112
+ size: "sm",
113
+ disabled: busy,
114
+ onClick: onResume,
115
+ children: "Resume run"
116
+ }),
117
+ state === "failed" && onRetry && /* @__PURE__ */ jsx(Button, {
118
+ size: "sm",
119
+ disabled: busy,
120
+ onClick: onRetry,
121
+ children: "Retry run"
122
+ })
123
+ ]
124
+ })
125
+ ]
126
+ });
127
+ }
128
+ //#endregion
129
+ export { AgentRun };
130
+
131
+ //# sourceMappingURL=agent-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.js","names":[],"sources":["../../src/components/agent-run.tsx"],"sourcesContent":["import AlertCircle from '@burtson-labs/icons/react/alert-circle';\nimport Check from '@burtson-labs/icons/react/check';\nimport Circle from '@burtson-labs/icons/react/circle';\nimport Pause from '@burtson-labs/icons/react/pause';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { Button } from './button';\nimport { Spinner } from './spinner';\n\nexport type AgentRunState =\n 'queued' | 'running' | 'waiting' | 'paused' | 'completed' | 'failed' | 'canceled';\nexport interface AgentRunStep {\n id: string;\n label: string;\n state: AgentRunState;\n detail?: React.ReactNode;\n}\nexport interface AgentRunProps extends Omit<React.ComponentProps<'section'>, 'title'> {\n title: string;\n state: AgentRunState;\n steps: AgentRunStep[];\n /** Explain the current state, especially what a person needs to do next. */\n summary?: React.ReactNode;\n busy?: boolean;\n onPause?: () => void;\n onResume?: () => void;\n onCancel?: () => void;\n onRetry?: () => void;\n}\nconst labels: Record<AgentRunState, string> = {\n queued: 'Queued',\n running: 'Running',\n waiting: 'Needs your input',\n paused: 'Paused',\n completed: 'Completed',\n failed: 'Failed',\n canceled: 'Canceled',\n};\nfunction RunIcon({ state }: { state: AgentRunState }) {\n if (state === 'running') return <Spinner className=\"size-4\" label=\"Running\" />;\n const Icon =\n state === 'completed'\n ? Check\n : state === 'failed' || state === 'waiting'\n ? AlertCircle\n : state === 'paused'\n ? Pause\n : Circle;\n return (\n <Icon\n aria-hidden\n className={cn(\n 'size-4',\n state === 'completed' && 'text-success',\n state === 'failed' && 'text-destructive',\n state === 'waiting' && 'text-warning',\n )}\n />\n );\n}\n\n/** A controlled run timeline. The application owns execution, cancellation and retry. */\nexport function AgentRun({\n title,\n state,\n steps,\n summary,\n busy = false,\n onPause,\n onResume,\n onCancel,\n onRetry,\n children,\n className,\n ...props\n}: AgentRunProps) {\n const id = React.useId();\n const active = ['queued', 'running', 'waiting', 'paused'].includes(state);\n return (\n <section\n data-slot=\"agent-run\"\n data-state={state}\n aria-labelledby={id}\n className={cn(\n 'min-w-0 overflow-hidden rounded-lg border border-border bg-surface',\n className,\n )}\n {...props}\n >\n <header className=\"grid gap-2 border-b border-border p-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <h3 id={id} className=\"min-w-0 text-sm font-semibold break-words\">\n {title}\n </h3>\n <span\n role=\"status\"\n className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\"\n >\n <RunIcon state={state} />\n {labels[state]}\n </span>\n </div>\n {summary && <p className=\"text-sm leading-relaxed text-muted-foreground\">{summary}</p>}\n </header>\n <ol className=\"grid gap-4 p-4\" aria-label=\"Run steps\">\n {steps.map((step) => (\n <li\n key={step.id}\n className=\"flex min-w-0 gap-3\"\n aria-current={step.state === 'running' || step.state === 'waiting' ? 'step' : undefined}\n >\n <span className=\"mt-0.5 shrink-0\">\n <RunIcon state={step.state} />\n </span>\n <div className=\"grid min-w-0 flex-1 gap-1\">\n <span className=\"text-sm font-medium break-words\">\n {step.label}\n <span className=\"sr-only\"> — {labels[step.state]}</span>\n </span>\n {step.detail && (\n <div className=\"text-xs leading-relaxed break-words text-muted-foreground\">\n {step.detail}\n </div>\n )}\n </div>\n </li>\n ))}\n </ol>\n {children && <div className=\"grid min-w-0 gap-3 border-t border-border p-4\">{children}</div>}\n {((state === 'running' && onPause) ||\n (state === 'paused' && onResume) ||\n (state === 'failed' && onRetry) ||\n (active && onCancel)) && (\n <footer\n className=\"flex flex-wrap justify-end gap-2 border-t border-border p-3\"\n aria-busy={busy || undefined}\n >\n {active && onCancel && (\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onCancel}>\n Cancel run\n </Button>\n )}\n {state === 'running' && onPause && (\n <Button variant=\"outline\" size=\"sm\" disabled={busy} onClick={onPause}>\n Pause run\n </Button>\n )}\n {state === 'paused' && onResume && (\n <Button size=\"sm\" disabled={busy} onClick={onResume}>\n Resume run\n </Button>\n )}\n {state === 'failed' && onRetry && (\n <Button size=\"sm\" disabled={busy} onClick={onRetry}>\n Retry run\n </Button>\n )}\n </footer>\n )}\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;AA+BA,IAAM,SAAwC;CAC5C,QAAQ;CACR,SAAS;CACT,SAAS;CACT,QAAQ;CACR,WAAW;CACX,QAAQ;CACR,UAAU;AACZ;AACA,SAAS,QAAQ,EAAE,SAAmC;CACpD,IAAI,UAAU,WAAW,OAAO,oBAAC,SAAD;EAAS,WAAU;EAAS,OAAM;CAAW,CAAA;CAS7E,OACE,oBARA,UAAU,cACN,QACA,UAAU,YAAY,UAAU,YAC9B,cACA,UAAU,WACR,QACA,QAER;EACE,eAAA;EACA,WAAW,GACT,UACA,UAAU,eAAe,gBACzB,UAAU,YAAY,oBACtB,UAAU,aAAa,cACzB;CACD,CAAA;AAEL;;AAGA,SAAgB,SAAS,EACvB,OACA,OACA,OACA,SACA,OAAO,OACP,SACA,UACA,UACA,SACA,UACA,WACA,GAAG,SACa;CAChB,MAAM,KAAK,MAAM,MAAM;CACvB,MAAM,SAAS;EAAC;EAAU;EAAW;EAAW;CAAQ,CAAC,CAAC,SAAS,KAAK;CACxE,OACE,qBAAC,WAAD;EACE,aAAU;EACV,cAAY;EACZ,mBAAiB;EACjB,WAAW,GACT,sEACA,SACF;EACA,GAAI;EARN,UAAA;GAUE,qBAAC,UAAD;IAAQ,WAAU;IAAlB,UAAA,CACE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,oBAAC,MAAD;MAAQ;MAAI,WAAU;MACnB,UAAA;KACC,CAAA,GACJ,qBAAC,QAAD;MACE,MAAK;MACL,WAAU;MAFZ,UAAA,CAIE,oBAAC,SAAD,EAAgB,MAAQ,CAAA,GACvB,OAAO,MACJ;KACH,CAAA,CAAA;IACJ,CAAA,GAAA,WAAW,oBAAC,KAAD;KAAG,WAAU;KAAiD,UAAA;IAAW,CAAA,CAC/E;;GACR,oBAAC,MAAD;IAAI,WAAU;IAAiB,cAAW;IACvC,UAAA,MAAM,KAAK,SACV,qBAAC,MAAD;KAEE,WAAU;KACV,gBAAc,KAAK,UAAU,aAAa,KAAK,UAAU,YAAY,SAAS,KAAA;KAHhF,UAAA,CAKE,oBAAC,QAAD;MAAM,WAAU;MACd,UAAA,oBAAC,SAAD,EAAS,OAAO,KAAK,MAAQ,CAAA;KACzB,CAAA,GACN,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,qBAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACG,KAAK,OACN,qBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA0B,OAAI,OAAO,KAAK,MAAa;OACnD,CAAA,CAAA;MACL,CAAA,GAAA,KAAK,UACJ,oBAAC,OAAD;OAAK,WAAU;OACZ,UAAA,KAAK;MACH,CAAA,CAEJ;KACH,CAAA,CAAA;IAlBG,GAAA,KAAK,EAkBR,CACL;GACC,CAAA;GACH,YAAY,oBAAC,OAAD;IAAK,WAAU;IAAiD;GAAc,CAAA;IACxF,UAAU,aAAa,WACvB,UAAU,YAAY,YACtB,UAAU,YAAY,WACtB,UAAU,aACX,qBAAC,UAAD;IACE,WAAU;IACV,aAAW,QAAQ,KAAA;IAFrB,UAAA;KAIG,UAAU,YACT,oBAAC,QAAD;MAAQ,SAAQ;MAAQ,MAAK;MAAK,UAAU;MAAM,SAAS;MAAU,UAAA;KAE7D,CAAA;KAET,UAAU,aAAa,WACtB,oBAAC,QAAD;MAAQ,SAAQ;MAAU,MAAK;MAAK,UAAU;MAAM,SAAS;MAAS,UAAA;KAE9D,CAAA;KAET,UAAU,YAAY,YACrB,oBAAC,QAAD;MAAQ,MAAK;MAAK,UAAU;MAAM,SAAS;MAAU,UAAA;KAE7C,CAAA;KAET,UAAU,YAAY,WACrB,oBAAC,QAAD;MAAQ,MAAK;MAAK,UAAU;MAAM,SAAS;MAAS,UAAA;KAE5C,CAAA;IAEJ;;EAEH;;AAEb"}
@@ -6,15 +6,17 @@ import * as AlertDialogPrimitive from '../primitives/vendor/radix/react-alert-di
6
6
  * answers it; Escape still cancels. Focus starts on Cancel.
7
7
  */
8
8
  declare function AlertDialog(props: React.ComponentProps<typeof AlertDialogPrimitive.Root>): React.JSX.Element;
9
- declare function AlertDialogTrigger(props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): React.JSX.Element;
10
- declare function AlertDialogContent({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content>): React.JSX.Element;
11
- declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
12
- declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
13
- declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>): React.JSX.Element;
14
- declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>): React.JSX.Element;
15
- /** The confirming button. `destructive` paints it as a danger action. */
16
- declare function AlertDialogAction({ className, destructive, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Action> & {
9
+ declare const AlertDialogTrigger: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
10
+ declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const AlertDialogHeader: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const AlertDialogFooter: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
14
+ declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
15
+ export interface AlertDialogActionProps extends React.ComponentProps<typeof AlertDialogPrimitive.Action> {
16
+ /** Paints the confirming button as a danger action. */
17
17
  destructive?: boolean;
18
- }): React.JSX.Element;
19
- declare function AlertDialogCancel({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>): React.JSX.Element;
18
+ }
19
+ /** The confirming button. */
20
+ declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogActionProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
21
+ declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
20
22
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, };
@@ -2,7 +2,8 @@
2
2
  import { cn } from "../lib/utils.js";
3
3
  import { Action, Cancel, Content, Description, Overlay, Portal, Root, Title, Trigger } from "../primitives/vendor/radix/react-alert-dialog/alert-dialog.js";
4
4
  import { buttonVariants } from "./button.js";
5
- import "react";
5
+ import { overlayClasses } from "./dialog.js";
6
+ import * as React from "react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  //#region src/components/alert-dialog.tsx
8
9
  /**
@@ -16,65 +17,73 @@ function AlertDialog(props) {
16
17
  ...props
17
18
  });
18
19
  }
19
- function AlertDialogTrigger(props) {
20
+ var AlertDialogTrigger = React.forwardRef(function AlertDialogTrigger(props, ref) {
20
21
  return /* @__PURE__ */ jsx(Trigger, {
22
+ ref,
21
23
  "data-slot": "alert-dialog-trigger",
22
24
  ...props
23
25
  });
24
- }
25
- function AlertDialogContent({ className, ...props }) {
26
+ });
27
+ var AlertDialogContent = React.forwardRef(function AlertDialogContent({ className, ...props }, ref) {
26
28
  return /* @__PURE__ */ jsxs(Portal, { children: [/* @__PURE__ */ jsx(Overlay, {
27
29
  "data-slot": "alert-dialog-overlay",
28
- className: "fixed inset-0 z-50 bg-black/55 backdrop-blur-[3px] data-[state=closed]:animate-fade-out data-[state=open]:animate-fade-in"
30
+ className: overlayClasses
29
31
  }), /* @__PURE__ */ jsx(Content, {
32
+ ref,
30
33
  "data-slot": "alert-dialog-content",
31
- className: cn("fixed top-1/2 left-1/2 z-50 grid [--bl-scale:0.95] [--bl-ty:8px] w-[calc(100%-2rem)] max-w-md max-h-[calc(100dvh-2rem)] overflow-y-auto overscroll-contain -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border-strong bg-surface-raised p-5 text-foreground shadow-[0_24px_80px_rgb(0_0_0_/_0.28)] outline-none data-[state=closed]:animate-out data-[state=open]:animate-in sm:p-6", className),
34
+ className: cn("fixed top-1/2 left-1/2 z-50 grid [--bl-scale:0.95] [--bl-ty:8px] w-[calc(100%-2rem)] max-w-md max-h-[calc(100dvh-2rem)] overflow-y-auto overscroll-contain -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border-strong bg-surface-raised p-5 text-foreground shadow-xl outline-none data-[state=closed]:animate-out data-[state=open]:animate-in sm:p-6", className),
32
35
  ...props
33
36
  })] });
34
- }
35
- function AlertDialogHeader({ className, ...props }) {
37
+ });
38
+ var AlertDialogHeader = React.forwardRef(function AlertDialogHeader({ className, ...props }, ref) {
36
39
  return /* @__PURE__ */ jsx("div", {
40
+ ref,
37
41
  "data-slot": "alert-dialog-header",
38
42
  className: cn("grid gap-1.5", className),
39
43
  ...props
40
44
  });
41
- }
42
- function AlertDialogFooter({ className, ...props }) {
45
+ });
46
+ var AlertDialogFooter = React.forwardRef(function AlertDialogFooter({ className, ...props }, ref) {
43
47
  return /* @__PURE__ */ jsx("div", {
48
+ ref,
44
49
  "data-slot": "alert-dialog-footer",
45
50
  className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
46
51
  ...props
47
52
  });
48
- }
49
- function AlertDialogTitle({ className, ...props }) {
53
+ });
54
+ var AlertDialogTitle = React.forwardRef(function AlertDialogTitle({ className, ...props }, ref) {
50
55
  return /* @__PURE__ */ jsx(Title, {
56
+ ref,
51
57
  "data-slot": "alert-dialog-title",
52
58
  className: cn("text-base font-semibold tracking-[-0.02em]", className),
53
59
  ...props
54
60
  });
55
- }
56
- function AlertDialogDescription({ className, ...props }) {
61
+ });
62
+ var AlertDialogDescription = React.forwardRef(function AlertDialogDescription({ className, ...props }, ref) {
57
63
  return /* @__PURE__ */ jsx(Description, {
64
+ ref,
58
65
  "data-slot": "alert-dialog-description",
59
66
  className: cn("text-sm leading-5 text-muted-foreground", className),
60
67
  ...props
61
68
  });
62
- }
63
- /** The confirming button. `destructive` paints it as a danger action. */
64
- function AlertDialogAction({ className, destructive = false, ...props }) {
69
+ });
70
+ /** The confirming button. */
71
+ var AlertDialogAction = React.forwardRef(function AlertDialogAction({ className, destructive = false, ...props }, ref) {
65
72
  return /* @__PURE__ */ jsx(Action, {
73
+ ref,
66
74
  "data-slot": "alert-dialog-action",
67
75
  className: cn(buttonVariants({ variant: destructive ? "destructive" : "default" }), className),
68
76
  ...props
69
77
  });
70
- }
71
- function AlertDialogCancel({ className, ...props }) {
78
+ });
79
+ var AlertDialogCancel = React.forwardRef(function AlertDialogCancel({ className, ...props }, ref) {
72
80
  return /* @__PURE__ */ jsx(Cancel, {
81
+ ref,
73
82
  "data-slot": "alert-dialog-cancel",
74
83
  className: cn(buttonVariants({ variant: "outline" }), className),
75
84
  ...props
76
85
  });
77
- }
86
+ });
78
87
  //#endregion
79
88
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger };
80
89
 
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive.Root","AlertDialogPrimitive.Trigger","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as AlertDialogPrimitive from '../primitives/vendor/radix/react-alert-dialog';\n\nimport { buttonVariants } from './button';\n\n/**\n * A confirmation that interrupts: \"Delete 3 keys?\", \"Revoke access?\". Unlike\n * Dialog it has no close button and ignores outside clicks, so the person\n * answers it; Escape still cancels. Focus starts on Cancel.\n */\nfunction AlertDialog(props: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger(props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogContent({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return (\n <AlertDialogPrimitive.Portal>\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className=\"fixed inset-0 z-50 bg-black/55 backdrop-blur-[3px] data-[state=closed]:animate-fade-out data-[state=open]:animate-fade-in\"\n />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n 'fixed top-1/2 left-1/2 z-50 grid [--bl-scale:0.95] [--bl-ty:8px] w-[calc(100%-2rem)] max-w-md max-h-[calc(100dvh-2rem)] overflow-y-auto overscroll-contain -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border-strong bg-surface-raised p-5 text-foreground shadow-[0_24px_80px_rgb(0_0_0_/_0.28)] outline-none data-[state=closed]:animate-out data-[state=open]:animate-in sm:p-6',\n className,\n )}\n {...props}\n />\n </AlertDialogPrimitive.Portal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"alert-dialog-header\" className={cn('grid gap-1.5', className)} {...props} />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn('text-base font-semibold tracking-[-0.02em]', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm leading-5 text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** The confirming button. `destructive` paints it as a danger action. */\nfunction AlertDialogAction({\n className,\n destructive = false,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> & { destructive?: boolean }) {\n return (\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(\n buttonVariants({ variant: destructive ? 'destructive' : 'default' }),\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(buttonVariants({ variant: 'outline' }), className)}\n {...props}\n />\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n"],"mappings":";;;;;;;;;;;;AAYA,SAAS,YAAY,OAA+D;CAClF,OAAO,oBAACA,MAAD;EAA2B,aAAU;EAAe,GAAI;CAAQ,CAAA;AACzE;AAEA,SAAS,mBAAmB,OAAkE;CAC5F,OAAO,oBAACC,SAAD;EAA8B,aAAU;EAAuB,GAAI;CAAQ,CAAA;AACpF;AAEA,SAAS,mBAAmB,EAC1B,WACA,GAAG,SACyD;CAC5D,OACE,qBAACC,QAAD,EAAA,UAAA,CACE,oBAACC,SAAD;EACE,aAAU;EACV,WAAU;CACX,CAAA,GACD,oBAACC,SAAD;EACE,aAAU;EACV,WAAW,GACT,2YACA,SACF;EACA,GAAI;CACL,CAAA,CAC0B,EAAA,CAAA;AAEjC;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAsC;CAC/E,OACE,oBAAC,OAAD;EAAK,aAAU;EAAsB,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE/F;AAEA,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAsC;CAC/E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,0DAA0D,SAAS;EACjF,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8CAA8C,SAAS;EACrE,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,oBAACC,aAAD;EACE,aAAU;EACV,WAAW,GAAG,2CAA2C,SAAS;EAClE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,kBAAkB,EACzB,WACA,cAAc,OACd,GAAG,SACoF;CACvF,OACE,oBAACC,QAAD;EACE,aAAU;EACV,WAAW,GACT,eAAe,EAAE,SAAS,cAAc,gBAAgB,UAAU,CAAC,GACnE,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SACwD;CAC3D,OACE,oBAACC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,eAAe,EAAE,SAAS,UAAU,CAAC,GAAG,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive.Root","AlertDialogPrimitive.Trigger","AlertDialogPrimitive.Portal","AlertDialogPrimitive.Overlay","AlertDialogPrimitive.Content","AlertDialogPrimitive.Title","AlertDialogPrimitive.Description","AlertDialogPrimitive.Action","AlertDialogPrimitive.Cancel"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as AlertDialogPrimitive from '../primitives/vendor/radix/react-alert-dialog';\n\nimport { buttonVariants } from './button';\nimport { overlayClasses } from './dialog';\n\n/**\n * A confirmation that interrupts: \"Delete 3 keys?\", \"Revoke access?\". Unlike\n * Dialog it has no close button and ignores outside clicks, so the person\n * answers it; Escape still cancels. Focus starts on Cancel.\n */\nfunction AlertDialog(props: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nconst AlertDialogTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof AlertDialogPrimitive.Trigger>\n>(function AlertDialogTrigger(props, ref) {\n return <AlertDialogPrimitive.Trigger ref={ref} data-slot=\"alert-dialog-trigger\" {...props} />;\n});\n\nconst AlertDialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof AlertDialogPrimitive.Content>\n>(function AlertDialogContent({ className, ...props }, ref) {\n return (\n <AlertDialogPrimitive.Portal>\n <AlertDialogPrimitive.Overlay data-slot=\"alert-dialog-overlay\" className={overlayClasses} />\n <AlertDialogPrimitive.Content\n ref={ref}\n data-slot=\"alert-dialog-content\"\n className={cn(\n 'fixed top-1/2 left-1/2 z-50 grid [--bl-scale:0.95] [--bl-ty:8px] w-[calc(100%-2rem)] max-w-md max-h-[calc(100dvh-2rem)] overflow-y-auto overscroll-contain -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border-strong bg-surface-raised p-5 text-foreground shadow-xl outline-none data-[state=closed]:animate-out data-[state=open]:animate-in sm:p-6',\n className,\n )}\n {...props}\n />\n </AlertDialogPrimitive.Portal>\n );\n});\n\nconst AlertDialogHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function AlertDialogHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-dialog-header\"\n className={cn('grid gap-1.5', className)}\n {...props}\n />\n );\n },\n);\n\nconst AlertDialogFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function AlertDialogFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n },\n);\n\nconst AlertDialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentProps<typeof AlertDialogPrimitive.Title>\n>(function AlertDialogTitle({ className, ...props }, ref) {\n return (\n <AlertDialogPrimitive.Title\n ref={ref}\n data-slot=\"alert-dialog-title\"\n className={cn('text-base font-semibold tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nconst AlertDialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentProps<typeof AlertDialogPrimitive.Description>\n>(function AlertDialogDescription({ className, ...props }, ref) {\n return (\n <AlertDialogPrimitive.Description\n ref={ref}\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm leading-5 text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport interface AlertDialogActionProps extends React.ComponentProps<\n typeof AlertDialogPrimitive.Action\n> {\n /** Paints the confirming button as a danger action. */\n destructive?: boolean;\n}\n\n/** The confirming button. */\nconst AlertDialogAction = React.forwardRef<HTMLButtonElement, AlertDialogActionProps>(\n function AlertDialogAction({ className, destructive = false, ...props }, ref) {\n return (\n <AlertDialogPrimitive.Action\n ref={ref}\n data-slot=\"alert-dialog-action\"\n className={cn(\n buttonVariants({ variant: destructive ? 'destructive' : 'default' }),\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nconst AlertDialogCancel = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof AlertDialogPrimitive.Cancel>\n>(function AlertDialogCancel({ className, ...props }, ref) {\n return (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n data-slot=\"alert-dialog-cancel\"\n className={cn(buttonVariants({ variant: 'outline' }), className)}\n {...props}\n />\n );\n});\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,YAAY,OAA+D;CAClF,OAAO,oBAACA,MAAD;EAA2B,aAAU;EAAe,GAAI;CAAQ,CAAA;AACzE;AAEA,IAAM,qBAAqB,MAAM,WAG/B,SAAS,mBAAmB,OAAO,KAAK;CACxC,OAAO,oBAACC,SAAD;EAAmC;EAAK,aAAU;EAAuB,GAAI;CAAQ,CAAA;AAC9F,CAAC;AAED,IAAM,qBAAqB,MAAM,WAG/B,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAAS,KAAK;CAC1D,OACE,qBAACC,QAAD,EAAA,UAAA,CACE,oBAACC,SAAD;EAA8B,aAAU;EAAuB,WAAW;CAAiB,CAAA,GAC3F,oBAACC,SAAD;EACO;EACL,aAAU;EACV,WAAW,GACT,8WACA,SACF;EACA,GAAI;CACL,CAAA,CAC0B,EAAA,CAAA;AAEjC,CAAC;AAED,IAAM,oBAAoB,MAAM,WAC9B,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAS,KAAK;CACvD,OACE,oBAAC,OAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,gBAAgB,SAAS;EACvC,GAAI;CACL,CAAA;AAEL,CACF;AAEA,IAAM,oBAAoB,MAAM,WAC9B,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAS,KAAK;CACvD,OACE,oBAAC,OAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,0DAA0D,SAAS;EACjF,GAAI;CACL,CAAA;AAEL,CACF;AAEA,IAAM,mBAAmB,MAAM,WAG7B,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAS,KAAK;CACxD,OACE,oBAACC,OAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,8CAA8C,SAAS;EACrE,GAAI;CACL,CAAA;AAEL,CAAC;AAED,IAAM,yBAAyB,MAAM,WAGnC,SAAS,uBAAuB,EAAE,WAAW,GAAG,SAAS,KAAK;CAC9D,OACE,oBAACC,aAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,2CAA2C,SAAS;EAClE,GAAI;CACL,CAAA;AAEL,CAAC;;AAUD,IAAM,oBAAoB,MAAM,WAC9B,SAAS,kBAAkB,EAAE,WAAW,cAAc,OAAO,GAAG,SAAS,KAAK;CAC5E,OACE,oBAACC,QAAD;EACO;EACL,aAAU;EACV,WAAW,GACT,eAAe,EAAE,SAAS,cAAc,gBAAgB,UAAU,CAAC,GACnE,SACF;EACA,GAAI;CACL,CAAA;AAEL,CACF;AAEA,IAAM,oBAAoB,MAAM,WAG9B,SAAS,kBAAkB,EAAE,WAAW,GAAG,SAAS,KAAK;CACzD,OACE,oBAACC,QAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,eAAe,EAAE,SAAS,UAAU,CAAC,GAAG,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL,CAAC"}
@@ -3,7 +3,9 @@ import * as React from 'react';
3
3
  declare const alertVariants: (props?: ({
4
4
  variant?: "destructive" | "success" | "warning" | "info" | "brand" | "default" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
- declare function Alert({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>): React.JSX.Element;
7
- declare function AlertTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
8
- declare function AlertDescription({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
6
+ export interface AlertProps extends React.ComponentProps<'div'>, VariantProps<typeof alertVariants> {
7
+ }
8
+ declare const Alert: React.ForwardRefExoticComponent<Omit<AlertProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const AlertTitle: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const AlertDescription: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
11
  export { Alert, AlertDescription, AlertTitle, alertVariants };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/utils.js";
3
- import "react";
3
+ import * as React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { cva } from "class-variance-authority";
6
6
  //#region src/components/alert.tsx
@@ -15,28 +15,32 @@ var alertVariants = cva("group/alert relative grid w-full grid-cols-1 has-[>svg]
15
15
  } },
16
16
  defaultVariants: { variant: "default" }
17
17
  });
18
- function Alert({ className, variant, ...props }) {
18
+ var Alert = React.forwardRef(function Alert({ className, variant, ...props }, ref) {
19
19
  return /* @__PURE__ */ jsx("div", {
20
+ ref,
20
21
  "data-slot": "alert",
22
+ "data-variant": variant ?? "default",
21
23
  role: "alert",
22
24
  className: cn(alertVariants({ variant }), className),
23
25
  ...props
24
26
  });
25
- }
26
- function AlertTitle({ className, ...props }) {
27
+ });
28
+ var AlertTitle = React.forwardRef(function AlertTitle({ className, ...props }, ref) {
27
29
  return /* @__PURE__ */ jsx("div", {
30
+ ref,
28
31
  "data-slot": "alert-title",
29
32
  className: cn("font-semibold tracking-[-0.01em]", className),
30
33
  ...props
31
34
  });
32
- }
33
- function AlertDescription({ className, ...props }) {
35
+ });
36
+ var AlertDescription = React.forwardRef(function AlertDescription({ className, ...props }, ref) {
34
37
  return /* @__PURE__ */ jsx("div", {
38
+ ref,
35
39
  "data-slot": "alert-description",
36
40
  className: cn("col-start-1 group-has-[>svg]/alert:col-start-2 text-[13px] leading-5 text-muted-foreground", className),
37
41
  ...props
38
42
  });
39
- }
43
+ });
40
44
  //#endregion
41
45
  export { Alert, AlertDescription, AlertTitle, alertVariants };
42
46
 
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","names":[],"sources":["../../src/components/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nconst alertVariants = cva(\n 'group/alert relative grid w-full grid-cols-1 has-[>svg]:grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 rounded-lg border px-4 py-3.5 text-sm shadow-xs [&>svg]:mt-0.5 [&>svg]:size-4',\n {\n variants: {\n variant: {\n default: 'border-border bg-surface text-foreground [&>svg]:text-muted-foreground',\n brand: 'border-brand/25 bg-brand-soft/70 text-foreground [&>svg]:text-brand',\n success: 'border-success/25 bg-success/10 text-foreground [&>svg]:text-success',\n warning: 'border-warning/25 bg-warning/10 text-foreground [&>svg]:text-warning',\n destructive:\n 'border-destructive/25 bg-destructive/10 text-foreground [&>svg]:text-destructive',\n info: 'border-info/25 bg-info/10 text-foreground [&>svg]:text-info',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('font-semibold tracking-[-0.01em]', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'col-start-1 group-has-[>svg]/alert:col-start-2 text-[13px] leading-5 text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertDescription, AlertTitle, alertVariants };\n"],"mappings":";;;;;;AAKA,IAAM,gBAAgB,IACpB,gLACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,OAAO;EACP,SAAS;EACT,SAAS;EACT,aACE;EACF,MAAM;CACR,EACF;CACA,iBAAiB,EAAE,SAAS,UAAU;AACxC,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,GAAG,SACgE;CACnE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAsC;CAC9E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,8FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"alert.js","names":[],"sources":["../../src/components/alert.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nconst alertVariants = cva(\n 'group/alert relative grid w-full grid-cols-1 has-[>svg]:grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 rounded-lg border px-4 py-3.5 text-sm shadow-xs [&>svg]:mt-0.5 [&>svg]:size-4',\n {\n variants: {\n variant: {\n default: 'border-border bg-surface text-foreground [&>svg]:text-muted-foreground',\n brand: 'border-brand/25 bg-brand-soft/70 text-foreground [&>svg]:text-brand',\n success: 'border-success/25 bg-success/10 text-foreground [&>svg]:text-success',\n warning: 'border-warning/25 bg-warning/10 text-foreground [&>svg]:text-warning',\n destructive:\n 'border-destructive/25 bg-destructive/10 text-foreground [&>svg]:text-destructive',\n info: 'border-info/25 bg-info/10 text-foreground [&>svg]:text-info',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nexport interface AlertProps\n extends React.ComponentProps<'div'>, VariantProps<typeof alertVariants> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { className, variant, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"alert\"\n data-variant={variant ?? 'default'}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n});\n\nconst AlertTitle = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function AlertTitle({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('font-semibold tracking-[-0.01em]', className)}\n {...props}\n />\n );\n },\n);\n\nconst AlertDescription = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n function AlertDescription({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-description\"\n className={cn(\n 'col-start-1 group-has-[>svg]/alert:col-start-2 text-[13px] leading-5 text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nexport { Alert, AlertDescription, AlertTitle, alertVariants };\n"],"mappings":";;;;;;AAKA,IAAM,gBAAgB,IACpB,gLACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,OAAO;EACP,SAAS;EACT,SAAS;EACT,aACE;EACF,MAAM;CACR,EACF;CACA,iBAAiB,EAAE,SAAS,UAAU;AACxC,CACF;AAKA,IAAM,QAAQ,MAAM,WAAuC,SAAS,MAClE,EAAE,WAAW,SAAS,GAAG,SACzB,KACA;CACA,OACE,oBAAC,OAAD;EACO;EACL,aAAU;EACV,gBAAc,WAAW;EACzB,MAAK;EACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL,CAAA;AAEL,CAAC;AAED,IAAM,aAAa,MAAM,WACvB,SAAS,WAAW,EAAE,WAAW,GAAG,SAAS,KAAK;CAChD,OACE,oBAAC,OAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL,CACF;AAEA,IAAM,mBAAmB,MAAM,WAC7B,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAS,KAAK;CACtD,OACE,oBAAC,OAAD;EACO;EACL,aAAU;EACV,WAAW,GACT,8FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL,CACF"}