@miethe/ui 0.2.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 (251) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +1536 -0
  3. package/dist/bulk-actions/Button.d.ts +28 -0
  4. package/dist/bulk-actions/Button.d.ts.map +1 -0
  5. package/dist/bulk-actions/Button.js +45 -0
  6. package/dist/bulk-actions/Button.js.map +1 -0
  7. package/dist/bulk-actions/bulk-action-bar.d.ts +91 -0
  8. package/dist/bulk-actions/bulk-action-bar.d.ts.map +1 -0
  9. package/dist/bulk-actions/bulk-action-bar.js +94 -0
  10. package/dist/bulk-actions/bulk-action-bar.js.map +1 -0
  11. package/dist/bulk-actions/index.d.ts +5 -0
  12. package/dist/bulk-actions/index.d.ts.map +1 -0
  13. package/dist/bulk-actions/index.js +7 -0
  14. package/dist/bulk-actions/index.js.map +1 -0
  15. package/dist/bulk-actions/utils.d.ts +6 -0
  16. package/dist/bulk-actions/utils.d.ts.map +1 -0
  17. package/dist/bulk-actions/utils.js +9 -0
  18. package/dist/bulk-actions/utils.js.map +1 -0
  19. package/dist/components/ui/alert.d.ts +9 -0
  20. package/dist/components/ui/alert.d.ts.map +1 -0
  21. package/dist/components/ui/alert.js +23 -0
  22. package/dist/components/ui/alert.js.map +1 -0
  23. package/dist/components/ui/button.d.ts +12 -0
  24. package/dist/components/ui/button.d.ts.map +1 -0
  25. package/dist/components/ui/button.js +34 -0
  26. package/dist/components/ui/button.js.map +1 -0
  27. package/dist/components/ui/collapsible.d.ts +6 -0
  28. package/dist/components/ui/collapsible.d.ts.map +1 -0
  29. package/dist/components/ui/collapsible.js +7 -0
  30. package/dist/components/ui/collapsible.js.map +1 -0
  31. package/dist/components/ui/skeleton.d.ts +4 -0
  32. package/dist/components/ui/skeleton.d.ts.map +1 -0
  33. package/dist/components/ui/skeleton.js +7 -0
  34. package/dist/components/ui/skeleton.js.map +1 -0
  35. package/dist/content-viewer/ContentPane.d.ts +107 -0
  36. package/dist/content-viewer/ContentPane.d.ts.map +1 -0
  37. package/dist/content-viewer/ContentPane.js +247 -0
  38. package/dist/content-viewer/ContentPane.js.map +1 -0
  39. package/dist/content-viewer/ContentViewerProvider.d.ts +83 -0
  40. package/dist/content-viewer/ContentViewerProvider.d.ts.map +1 -0
  41. package/dist/content-viewer/ContentViewerProvider.js +92 -0
  42. package/dist/content-viewer/ContentViewerProvider.js.map +1 -0
  43. package/dist/content-viewer/FileTree.d.ts +71 -0
  44. package/dist/content-viewer/FileTree.d.ts.map +1 -0
  45. package/dist/content-viewer/FileTree.js +294 -0
  46. package/dist/content-viewer/FileTree.js.map +1 -0
  47. package/dist/content-viewer/adapters.d.ts +101 -0
  48. package/dist/content-viewer/adapters.d.ts.map +1 -0
  49. package/dist/content-viewer/adapters.js +32 -0
  50. package/dist/content-viewer/adapters.js.map +1 -0
  51. package/dist/content-viewer/index.d.ts +8 -0
  52. package/dist/content-viewer/index.d.ts.map +1 -0
  53. package/dist/content-viewer/index.js +5 -0
  54. package/dist/content-viewer/index.js.map +1 -0
  55. package/dist/diff/DiffViewer.d.ts +112 -0
  56. package/dist/diff/DiffViewer.d.ts.map +1 -0
  57. package/dist/diff/DiffViewer.js +414 -0
  58. package/dist/diff/DiffViewer.js.map +1 -0
  59. package/dist/diff/diff.d.ts +32 -0
  60. package/dist/diff/diff.d.ts.map +1 -0
  61. package/dist/diff/diff.js +8 -0
  62. package/dist/diff/diff.js.map +1 -0
  63. package/dist/diff/index.d.ts +4 -0
  64. package/dist/diff/index.d.ts.map +1 -0
  65. package/dist/diff/index.js +3 -0
  66. package/dist/diff/index.js.map +1 -0
  67. package/dist/display/FilePreviewPane.d.ts +31 -0
  68. package/dist/display/FilePreviewPane.d.ts.map +1 -0
  69. package/dist/display/FilePreviewPane.js +144 -0
  70. package/dist/display/FilePreviewPane.js.map +1 -0
  71. package/dist/display/FrontmatterDisplay.d.ts +33 -0
  72. package/dist/display/FrontmatterDisplay.d.ts.map +1 -0
  73. package/dist/display/FrontmatterDisplay.js +79 -0
  74. package/dist/display/FrontmatterDisplay.js.map +1 -0
  75. package/dist/display/index.d.ts +5 -0
  76. package/dist/display/index.d.ts.map +1 -0
  77. package/dist/display/index.js +4 -0
  78. package/dist/display/index.js.map +1 -0
  79. package/dist/editor/MarkdownEditor.d.ts +28 -0
  80. package/dist/editor/MarkdownEditor.d.ts.map +1 -0
  81. package/dist/editor/MarkdownEditor.js +160 -0
  82. package/dist/editor/MarkdownEditor.js.map +1 -0
  83. package/dist/editor/SplitPreview.d.ts +28 -0
  84. package/dist/editor/SplitPreview.d.ts.map +1 -0
  85. package/dist/editor/SplitPreview.js +34 -0
  86. package/dist/editor/SplitPreview.js.map +1 -0
  87. package/dist/editor/index.d.ts +5 -0
  88. package/dist/editor/index.d.ts.map +1 -0
  89. package/dist/editor/index.js +4 -0
  90. package/dist/editor/index.js.map +1 -0
  91. package/dist/filters/filters-dropdown.d.ts +24 -0
  92. package/dist/filters/filters-dropdown.d.ts.map +1 -0
  93. package/dist/filters/filters-dropdown.js +36 -0
  94. package/dist/filters/filters-dropdown.js.map +1 -0
  95. package/dist/filters/index.d.ts +9 -0
  96. package/dist/filters/index.d.ts.map +1 -0
  97. package/dist/filters/index.js +5 -0
  98. package/dist/filters/index.js.map +1 -0
  99. package/dist/filters/sort-dropdown.d.ts +13 -0
  100. package/dist/filters/sort-dropdown.d.ts.map +1 -0
  101. package/dist/filters/sort-dropdown.js +20 -0
  102. package/dist/filters/sort-dropdown.js.map +1 -0
  103. package/dist/filters/tag-filter-popover.d.ts +39 -0
  104. package/dist/filters/tag-filter-popover.d.ts.map +1 -0
  105. package/dist/filters/tag-filter-popover.js +72 -0
  106. package/dist/filters/tag-filter-popover.js.map +1 -0
  107. package/dist/filters/tool-filter-popover.d.ts +42 -0
  108. package/dist/filters/tool-filter-popover.d.ts.map +1 -0
  109. package/dist/filters/tool-filter-popover.js +67 -0
  110. package/dist/filters/tool-filter-popover.js.map +1 -0
  111. package/dist/hooks/use-debounce.d.ts +9 -0
  112. package/dist/hooks/use-debounce.d.ts.map +1 -0
  113. package/dist/hooks/use-debounce.js +21 -0
  114. package/dist/hooks/use-debounce.js.map +1 -0
  115. package/dist/hooks/use-intersection-observer.d.ts +11 -0
  116. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  117. package/dist/hooks/use-intersection-observer.js +25 -0
  118. package/dist/hooks/use-intersection-observer.js.map +1 -0
  119. package/dist/index.d.ts +10 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +10 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/pickers/EntityPickerDialog.d.ts +233 -0
  124. package/dist/pickers/EntityPickerDialog.d.ts.map +1 -0
  125. package/dist/pickers/EntityPickerDialog.js +355 -0
  126. package/dist/pickers/EntityPickerDialog.js.map +1 -0
  127. package/dist/pickers/EntityPickerViewToggle.d.ts +8 -0
  128. package/dist/pickers/EntityPickerViewToggle.d.ts.map +1 -0
  129. package/dist/pickers/EntityPickerViewToggle.js +17 -0
  130. package/dist/pickers/EntityPickerViewToggle.js.map +1 -0
  131. package/dist/pickers/index.d.ts +5 -0
  132. package/dist/pickers/index.d.ts.map +1 -0
  133. package/dist/pickers/index.js +3 -0
  134. package/dist/pickers/index.js.map +1 -0
  135. package/dist/primitives/Badge.d.ts +16 -0
  136. package/dist/primitives/Badge.d.ts.map +1 -0
  137. package/dist/primitives/Badge.js +43 -0
  138. package/dist/primitives/Badge.js.map +1 -0
  139. package/dist/primitives/BaseArtifactModal.d.ts +114 -0
  140. package/dist/primitives/BaseArtifactModal.d.ts.map +1 -0
  141. package/dist/primitives/BaseArtifactModal.js +76 -0
  142. package/dist/primitives/BaseArtifactModal.js.map +1 -0
  143. package/dist/primitives/Dialog.d.ts +20 -0
  144. package/dist/primitives/Dialog.d.ts.map +1 -0
  145. package/dist/primitives/Dialog.js +24 -0
  146. package/dist/primitives/Dialog.js.map +1 -0
  147. package/dist/primitives/DropdownMenu.d.ts +28 -0
  148. package/dist/primitives/DropdownMenu.d.ts.map +1 -0
  149. package/dist/primitives/DropdownMenu.js +34 -0
  150. package/dist/primitives/DropdownMenu.js.map +1 -0
  151. package/dist/primitives/EnterpriseOwnerBadge.d.ts +9 -0
  152. package/dist/primitives/EnterpriseOwnerBadge.d.ts.map +1 -0
  153. package/dist/primitives/EnterpriseOwnerBadge.js +12 -0
  154. package/dist/primitives/EnterpriseOwnerBadge.js.map +1 -0
  155. package/dist/primitives/GroupedSelect.d.ts +30 -0
  156. package/dist/primitives/GroupedSelect.d.ts.map +1 -0
  157. package/dist/primitives/GroupedSelect.js +47 -0
  158. package/dist/primitives/GroupedSelect.js.map +1 -0
  159. package/dist/primitives/Input.d.ts +6 -0
  160. package/dist/primitives/Input.d.ts.map +1 -0
  161. package/dist/primitives/Input.js +9 -0
  162. package/dist/primitives/Input.js.map +1 -0
  163. package/dist/primitives/LockIcon.d.ts +11 -0
  164. package/dist/primitives/LockIcon.d.ts.map +1 -0
  165. package/dist/primitives/LockIcon.js +15 -0
  166. package/dist/primitives/LockIcon.js.map +1 -0
  167. package/dist/primitives/MaskedSecretInput.d.ts +16 -0
  168. package/dist/primitives/MaskedSecretInput.d.ts.map +1 -0
  169. package/dist/primitives/MaskedSecretInput.js +42 -0
  170. package/dist/primitives/MaskedSecretInput.js.map +1 -0
  171. package/dist/primitives/ModalHeader.d.ts +66 -0
  172. package/dist/primitives/ModalHeader.d.ts.map +1 -0
  173. package/dist/primitives/ModalHeader.js +58 -0
  174. package/dist/primitives/ModalHeader.js.map +1 -0
  175. package/dist/primitives/Popover.d.ts +9 -0
  176. package/dist/primitives/Popover.d.ts.map +1 -0
  177. package/dist/primitives/Popover.js +13 -0
  178. package/dist/primitives/Popover.js.map +1 -0
  179. package/dist/primitives/ScrollArea.d.ts +6 -0
  180. package/dist/primitives/ScrollArea.d.ts.map +1 -0
  181. package/dist/primitives/ScrollArea.js +11 -0
  182. package/dist/primitives/ScrollArea.js.map +1 -0
  183. package/dist/primitives/SearchableCombobox.d.ts +30 -0
  184. package/dist/primitives/SearchableCombobox.d.ts.map +1 -0
  185. package/dist/primitives/SearchableCombobox.js +124 -0
  186. package/dist/primitives/SearchableCombobox.js.map +1 -0
  187. package/dist/primitives/SearchablePickerDialog.d.ts +20 -0
  188. package/dist/primitives/SearchablePickerDialog.d.ts.map +1 -0
  189. package/dist/primitives/SearchablePickerDialog.js +78 -0
  190. package/dist/primitives/SearchablePickerDialog.js.map +1 -0
  191. package/dist/primitives/StatusBadge.d.ts +21 -0
  192. package/dist/primitives/StatusBadge.d.ts.map +1 -0
  193. package/dist/primitives/StatusBadge.js +25 -0
  194. package/dist/primitives/StatusBadge.js.map +1 -0
  195. package/dist/primitives/TabNavigation.d.ts +68 -0
  196. package/dist/primitives/TabNavigation.d.ts.map +1 -0
  197. package/dist/primitives/TabNavigation.js +74 -0
  198. package/dist/primitives/TabNavigation.js.map +1 -0
  199. package/dist/primitives/Tabs.d.ts +8 -0
  200. package/dist/primitives/Tabs.d.ts.map +1 -0
  201. package/dist/primitives/Tabs.js +14 -0
  202. package/dist/primitives/Tabs.js.map +1 -0
  203. package/dist/primitives/Tooltip.d.ts +8 -0
  204. package/dist/primitives/Tooltip.d.ts.map +1 -0
  205. package/dist/primitives/Tooltip.js +12 -0
  206. package/dist/primitives/Tooltip.js.map +1 -0
  207. package/dist/primitives/VerticalTabNavigation.d.ts +75 -0
  208. package/dist/primitives/VerticalTabNavigation.d.ts.map +1 -0
  209. package/dist/primitives/VerticalTabNavigation.js +166 -0
  210. package/dist/primitives/VerticalTabNavigation.js.map +1 -0
  211. package/dist/primitives/ViewModeToggle.d.ts +12 -0
  212. package/dist/primitives/ViewModeToggle.d.ts.map +1 -0
  213. package/dist/primitives/ViewModeToggle.js +56 -0
  214. package/dist/primitives/ViewModeToggle.js.map +1 -0
  215. package/dist/primitives/WizardShell.d.ts +81 -0
  216. package/dist/primitives/WizardShell.d.ts.map +1 -0
  217. package/dist/primitives/WizardShell.js +73 -0
  218. package/dist/primitives/WizardShell.js.map +1 -0
  219. package/dist/primitives/index.d.ts +38 -0
  220. package/dist/primitives/index.d.ts.map +1 -0
  221. package/dist/primitives/index.js +24 -0
  222. package/dist/primitives/index.js.map +1 -0
  223. package/dist/primitives/utils.d.ts +6 -0
  224. package/dist/primitives/utils.d.ts.map +1 -0
  225. package/dist/primitives/utils.js +9 -0
  226. package/dist/primitives/utils.js.map +1 -0
  227. package/dist/types/index.d.ts +63 -0
  228. package/dist/types/index.d.ts.map +1 -0
  229. package/dist/types/index.js +9 -0
  230. package/dist/types/index.js.map +1 -0
  231. package/dist/utils/frontmatter.d.ts +63 -0
  232. package/dist/utils/frontmatter.d.ts.map +1 -0
  233. package/dist/utils/frontmatter.js +345 -0
  234. package/dist/utils/frontmatter.js.map +1 -0
  235. package/dist/utils/index.d.ts +6 -0
  236. package/dist/utils/index.d.ts.map +1 -0
  237. package/dist/utils/index.js +6 -0
  238. package/dist/utils/index.js.map +1 -0
  239. package/dist/utils/perf-marks.d.ts +28 -0
  240. package/dist/utils/perf-marks.d.ts.map +1 -0
  241. package/dist/utils/perf-marks.js +45 -0
  242. package/dist/utils/perf-marks.js.map +1 -0
  243. package/dist/utils/readme-utils.d.ts +67 -0
  244. package/dist/utils/readme-utils.d.ts.map +1 -0
  245. package/dist/utils/readme-utils.js +164 -0
  246. package/dist/utils/readme-utils.js.map +1 -0
  247. package/dist/utils/type-colors.d.ts +70 -0
  248. package/dist/utils/type-colors.d.ts.map +1 -0
  249. package/dist/utils/type-colors.js +118 -0
  250. package/dist/utils/type-colors.js.map +1 -0
  251. package/package.json +131 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupedSelect.js","sourceRoot":"","sources":["../../src/primitives/GroupedSelect.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
3
+ }
4
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
5
+ export { Input };
6
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/primitives/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;CAAG;AAElF,QAAA,MAAM,KAAK,qFAcV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from './utils';
4
+ const Input = React.forwardRef(({ className, type, ...props }, ref) => {
5
+ return (_jsx("input", { type: type, className: cn('flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', className), ref: ref, ...props }));
6
+ });
7
+ Input.displayName = 'Input';
8
+ export { Input };
9
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../src/primitives/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CACX,8VAA8V,EAC9V,SAAS,CACV,EACD,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface LockIconProps {
2
+ className?: string;
3
+ tooltip?: string;
4
+ }
5
+ /**
6
+ * Lock indicator for artifacts with enforce_override=True.
7
+ * Renders a small lock icon with an accessible tooltip explaining the enforced state.
8
+ * Keyboard-accessible via Radix UI Tooltip primitives.
9
+ */
10
+ export declare function LockIcon({ className, tooltip }: LockIconProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=LockIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LockIcon.d.ts","sourceRoot":"","sources":["../../src/primitives/LockIcon.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAyB,EAAE,EAAE,aAAa,2CAyB/E"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Lock } from 'lucide-react';
4
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip';
5
+ import { cn } from './utils';
6
+ const DEFAULT_TOOLTIP = 'This artifact cannot be modified \u2014 enforced by your organization';
7
+ /**
8
+ * Lock indicator for artifacts with enforce_override=True.
9
+ * Renders a small lock icon with an accessible tooltip explaining the enforced state.
10
+ * Keyboard-accessible via Radix UI Tooltip primitives.
11
+ */
12
+ export function LockIcon({ className, tooltip = DEFAULT_TOOLTIP }) {
13
+ return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, "aria-label": tooltip, children: _jsx("span", { className: cn('inline-flex items-center justify-center text-muted-foreground', className), role: "img", "aria-label": tooltip, children: _jsx(Lock, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }) }) }), _jsx(TooltipContent, { children: _jsx("p", { children: tooltip }) })] }) }));
14
+ }
15
+ //# sourceMappingURL=LockIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LockIcon.js","sourceRoot":"","sources":["../../src/primitives/LockIcon.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,eAAe,GAAG,uEAAuE,CAAC;AAOhG;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,eAAe,EAAiB;IAC9E,OAAO,CACL,KAAC,eAAe,cACd,MAAC,OAAO,eACN,KAAC,cAAc,IACb,OAAO,sBACK,OAAO,YAEnB,eACE,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,EACD,IAAI,EAAC,KAAK,gBACE,OAAO,YAEnB,KAAC,IAAI,IAAC,SAAS,EAAC,sBAAsB,iBAAa,MAAM,GAAG,GACvD,GACQ,EACjB,KAAC,cAAc,cACb,sBAAI,OAAO,GAAK,GACD,IACT,GACM,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface MaskedSecretInputProps {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ placeholder?: string;
5
+ /** When true, a copy-to-clipboard button is rendered alongside the toggle. */
6
+ showCopyButton?: boolean;
7
+ /** Always required — used as the accessible label for the input. */
8
+ label: string;
9
+ disabled?: boolean;
10
+ }
11
+ declare function MaskedSecretInput({ value, onChange, placeholder, showCopyButton, label, disabled, }: MaskedSecretInputProps): import("react/jsx-runtime").JSX.Element;
12
+ declare namespace MaskedSecretInput {
13
+ var displayName: string;
14
+ }
15
+ export { MaskedSecretInput };
16
+ //# sourceMappingURL=MaskedSecretInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskedSecretInput.d.ts","sourceRoot":"","sources":["../../src/primitives/MaskedSecretInput.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iBAAS,iBAAiB,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,cAAsB,EACtB,KAAK,EACL,QAAgB,GACjB,EAAE,sBAAsB,2CAyGxB;kBAhHQ,iBAAiB;;;AAoH1B,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Eye, EyeOff, Copy, Check } from 'lucide-react';
5
+ import { Input } from './Input';
6
+ import { cn } from './utils';
7
+ function MaskedSecretInput({ value, onChange, placeholder, showCopyButton = false, label, disabled = false, }) {
8
+ const [revealed, setRevealed] = React.useState(false);
9
+ const [copied, setCopied] = React.useState(false);
10
+ const copyTimeoutRef = React.useRef(null);
11
+ // Stable id for label/input association
12
+ const idRef = React.useRef(`masked-secret-${Math.random().toString(36).slice(2, 9)}`);
13
+ // Clean up timeout on unmount
14
+ React.useEffect(() => {
15
+ return () => {
16
+ if (copyTimeoutRef.current !== null) {
17
+ clearTimeout(copyTimeoutRef.current);
18
+ }
19
+ };
20
+ }, []);
21
+ const toggleRevealed = React.useCallback(() => {
22
+ setRevealed((prev) => !prev);
23
+ }, []);
24
+ const handleCopy = React.useCallback(async () => {
25
+ if (!value)
26
+ return;
27
+ try {
28
+ await navigator.clipboard.writeText(value);
29
+ setCopied(true);
30
+ copyTimeoutRef.current = setTimeout(() => setCopied(false), 2000);
31
+ }
32
+ catch {
33
+ // Clipboard API unavailable — fail silently
34
+ }
35
+ }, [value]);
36
+ return (_jsxs("div", { className: "flex w-full flex-col gap-1.5", children: [_jsx("label", { htmlFor: idRef.current, className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: label }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(Input, { id: idRef.current, type: revealed ? 'text' : 'password', value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, disabled: disabled, autoComplete: "off", spellCheck: false,
37
+ // Reserve space on the right for the action buttons
38
+ className: cn('pr-10', showCopyButton && 'pr-[4.5rem]'), "aria-label": label }), _jsxs("div", { className: "absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1", children: [showCopyButton && (_jsx("button", { type: "button", onClick: handleCopy, disabled: disabled || !value, "aria-label": copied ? 'Copied' : 'Copy to clipboard', className: cn('flex h-6 w-6 items-center justify-center rounded transition-colors', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'disabled:pointer-events-none disabled:opacity-40'), children: copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-green-500", "aria-hidden": "true" })) : (_jsx(Copy, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) })), _jsx("button", { type: "button", onClick: toggleRevealed, disabled: disabled, "aria-label": revealed ? 'Hide value' : 'Show value', "aria-pressed": revealed, className: cn('flex h-6 w-6 items-center justify-center rounded transition-colors', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'disabled:pointer-events-none disabled:opacity-40'), children: revealed ? (_jsx(EyeOff, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) : (_jsx(Eye, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) })] })] })] }));
39
+ }
40
+ MaskedSecretInput.displayName = 'MaskedSecretInput';
41
+ export { MaskedSecretInput };
42
+ //# sourceMappingURL=MaskedSecretInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskedSecretInput.js","sourceRoot":"","sources":["../../src/primitives/MaskedSecretInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Modal Header Component
3
+ *
4
+ * A reusable modal header wrapper that provides consistent styling for dialogs.
5
+ * Includes optional icon, title, description, and actions slot.
6
+ *
7
+ * @example Basic usage
8
+ * ```tsx
9
+ * <ModalHeader title="Artifact Details" />
10
+ * ```
11
+ *
12
+ * @example With icon and description
13
+ * ```tsx
14
+ * <ModalHeader
15
+ * icon={Package}
16
+ * title="Artifact Details"
17
+ * description="View and manage artifact configuration"
18
+ * />
19
+ * ```
20
+ *
21
+ * @example With actions
22
+ * ```tsx
23
+ * <ModalHeader
24
+ * icon={Package}
25
+ * iconClassName="text-primary"
26
+ * title="Artifact Details"
27
+ * actions={<Button variant="ghost" size="sm">Edit</Button>}
28
+ * />
29
+ * ```
30
+ */
31
+ import * as React from 'react';
32
+ export interface ModalHeaderProps {
33
+ /** Icon component to display before the title */
34
+ icon?: React.ComponentType<{
35
+ className?: string;
36
+ }>;
37
+ /** Additional CSS classes for the icon */
38
+ iconClassName?: string;
39
+ /** Modal title (required) */
40
+ title: string;
41
+ /** Optional description text below the title */
42
+ description?: string;
43
+ /** Optional actions slot for buttons on the right side */
44
+ actions?: React.ReactNode;
45
+ /** Additional CSS classes for the header container */
46
+ className?: string;
47
+ }
48
+ /**
49
+ * ModalHeader - Consistent modal header layout
50
+ *
51
+ * Provides a standardized header structure with:
52
+ * - Optional icon with customizable styling
53
+ * - Title using DialogTitle for accessibility
54
+ * - Optional description using DialogDescription
55
+ * - Actions slot that floats right in the title row
56
+ * - Border bottom styling for visual separation
57
+ *
58
+ * @param icon - Optional icon component
59
+ * @param iconClassName - CSS classes for the icon
60
+ * @param title - Modal title (required)
61
+ * @param description - Optional description text
62
+ * @param actions - Optional React node for action buttons
63
+ * @param className - Additional CSS classes for the header
64
+ */
65
+ export declare function ModalHeader({ icon: Icon, iconClassName, title, description, actions, className, }: ModalHeaderProps): import("react/jsx-runtime").JSX.Element;
66
+ //# sourceMappingURL=ModalHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../src/primitives/ModalHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EAAE,IAAI,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,2CAWlB"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Modal Header Component
3
+ *
4
+ * A reusable modal header wrapper that provides consistent styling for dialogs.
5
+ * Includes optional icon, title, description, and actions slot.
6
+ *
7
+ * @example Basic usage
8
+ * ```tsx
9
+ * <ModalHeader title="Artifact Details" />
10
+ * ```
11
+ *
12
+ * @example With icon and description
13
+ * ```tsx
14
+ * <ModalHeader
15
+ * icon={Package}
16
+ * title="Artifact Details"
17
+ * description="View and manage artifact configuration"
18
+ * />
19
+ * ```
20
+ *
21
+ * @example With actions
22
+ * ```tsx
23
+ * <ModalHeader
24
+ * icon={Package}
25
+ * iconClassName="text-primary"
26
+ * title="Artifact Details"
27
+ * actions={<Button variant="ghost" size="sm">Edit</Button>}
28
+ * />
29
+ * ```
30
+ */
31
+ 'use client';
32
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
33
+ import { cn } from './utils';
34
+ import { DialogHeader, DialogTitle, DialogDescription } from './Dialog';
35
+ // ============================================================================
36
+ // Component
37
+ // ============================================================================
38
+ /**
39
+ * ModalHeader - Consistent modal header layout
40
+ *
41
+ * Provides a standardized header structure with:
42
+ * - Optional icon with customizable styling
43
+ * - Title using DialogTitle for accessibility
44
+ * - Optional description using DialogDescription
45
+ * - Actions slot that floats right in the title row
46
+ * - Border bottom styling for visual separation
47
+ *
48
+ * @param icon - Optional icon component
49
+ * @param iconClassName - CSS classes for the icon
50
+ * @param title - Modal title (required)
51
+ * @param description - Optional description text
52
+ * @param actions - Optional React node for action buttons
53
+ * @param className - Additional CSS classes for the header
54
+ */
55
+ export function ModalHeader({ icon: Icon, iconClassName, title, description, actions, className, }) {
56
+ return (_jsxs(DialogHeader, { className: cn('border-b px-6 pb-4 pt-6', className), children: [_jsxs(DialogTitle, { className: "flex items-center gap-3", children: [Icon && _jsx(Icon, { className: cn('h-5 w-5 flex-shrink-0', iconClassName), "aria-hidden": "true" }), _jsx("span", { className: "flex-1 truncate", children: title }), actions && _jsx("div", { className: "flex flex-shrink-0 items-center gap-2", children: actions })] }), description && _jsx(DialogDescription, { className: "mt-1.5 pl-8", children: description })] }));
57
+ }
58
+ //# sourceMappingURL=ModalHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalHeader.js","sourceRoot":"","sources":["../../src/primitives/ModalHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAqBxE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EAAE,IAAI,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,GACQ;IACjB,OAAO,CACL,MAAC,YAAY,IAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,aAC/D,MAAC,WAAW,IAAC,SAAS,EAAC,yBAAyB,aAC7C,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,aAAa,CAAC,iBAAc,MAAM,GAAG,EAC3F,eAAM,SAAS,EAAC,iBAAiB,YAAE,KAAK,GAAQ,EAC/C,OAAO,IAAI,cAAK,SAAS,EAAC,uCAAuC,YAAE,OAAO,GAAO,IACtE,EACb,WAAW,IAAI,KAAC,iBAAiB,IAAC,SAAS,EAAC,aAAa,YAAE,WAAW,GAAqB,IAC/E,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
4
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare const PopoverClose: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };
9
+ //# sourceMappingURL=Popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,aAAa,4GAA0B,CAAC;AAE9C,QAAA,MAAM,YAAY,8GAAyB,CAAC;AAE5C,QAAA,MAAM,cAAc,gKAgBlB,CAAC;AAGH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
5
+ import { cn } from './utils';
6
+ const Popover = PopoverPrimitive.Root;
7
+ const PopoverTrigger = PopoverPrimitive.Trigger;
8
+ const PopoverAnchor = PopoverPrimitive.Anchor;
9
+ const PopoverClose = PopoverPrimitive.Close;
10
+ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn('z-50 w-72 origin-[--radix-popover-content-transform-origin] rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className), ...props }) })));
11
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
12
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };
13
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEhD,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAE9C,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAE5C,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAGrC,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACpE,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,8dAA8d,EAC9d,SAAS,CACV,KACG,KAAK,GACT,GACsB,CAC3B,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
3
+ declare const ScrollArea: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const ScrollBar: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ export { ScrollArea, ScrollBar };
6
+ //# sourceMappingURL=ScrollArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../src/primitives/ScrollArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAInE,QAAA,MAAM,UAAU,+JAed,CAAC;AAGH,QAAA,MAAM,SAAS,wKAiBb,CAAC;AAGH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
5
+ import { cn } from './utils';
6
+ const ScrollArea = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(ScrollAreaPrimitive.Root, { ref: ref, className: cn('relative overflow-hidden', className), ...props, children: [_jsx(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children: children }), _jsx(ScrollBar, {}), _jsx(ScrollAreaPrimitive.Corner, {})] })));
7
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
8
+ const ScrollBar = React.forwardRef(({ className, orientation = 'vertical', ...props }, ref) => (_jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, { ref: ref, orientation: orientation, className: cn('flex touch-none select-none transition-colors', orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]', orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]', className), ...props, children: _jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" }) })));
9
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
10
+ export { ScrollArea, ScrollBar };
11
+ //# sourceMappingURL=ScrollArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.js","sourceRoot":"","sources":["../../src/primitives/ScrollArea.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5C,MAAC,mBAAmB,CAAC,IAAI,IACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,KAChD,KAAK,aAET,KAAC,mBAAmB,CAAC,QAAQ,IAAC,SAAS,EAAC,iCAAiC,YACtE,QAAQ,GACoB,EAC/B,KAAC,SAAS,KAAG,EACb,KAAC,mBAAmB,CAAC,MAAM,KAAG,IACL,CAC5B,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9D,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5D,KAAC,mBAAmB,CAAC,mBAAmB,IACtC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,WAAW,KAAK,UAAU,IAAI,oDAAoD,EAClF,WAAW,KAAK,YAAY,IAAI,sDAAsD,EACtF,SAAS,CACV,KACG,KAAK,YAET,KAAC,mBAAmB,CAAC,eAAe,IAAC,SAAS,EAAC,wCAAwC,GAAG,GAClD,CAC3C,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ export interface SearchableComboboxProps<T> {
3
+ /** Called with search query after debounce (300ms) */
4
+ onSearch: (query: string) => void;
5
+ /** Called when user selects an item */
6
+ onSelect: (item: T) => void;
7
+ /** Render function for each item in the dropdown */
8
+ renderItem: (item: T) => React.ReactNode;
9
+ /** Key extractor for React list rendering */
10
+ getItemKey: (item: T) => string;
11
+ /** Items to display in the dropdown */
12
+ items: T[];
13
+ /** Whether search is in progress */
14
+ loading?: boolean;
15
+ /** Placeholder text for search input */
16
+ placeholder?: string;
17
+ /** Message when no results found */
18
+ emptyMessage?: string;
19
+ /** Label for accessibility */
20
+ 'aria-label'?: string;
21
+ /** Additional className for the container */
22
+ className?: string;
23
+ /** Whether the combobox is disabled */
24
+ disabled?: boolean;
25
+ }
26
+ declare const SearchableCombobox: <T>(props: SearchableComboboxProps<T> & {
27
+ ref?: React.ForwardedRef<HTMLDivElement>;
28
+ }) => React.ReactElement | null;
29
+ export { SearchableCombobox };
30
+ //# sourceMappingURL=SearchableCombobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchableCombobox.d.ts","sourceRoot":"","sources":["../../src/primitives/SearchableCombobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,sDAAsD;IACtD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uCAAuC;IACvC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,oDAAoD;IACpD,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACzC,6CAA6C;IAC7C,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAChC,uCAAuC;IACvC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6OD,QAAA,MAAM,kBAAkB,EAAgD,CAAC,CAAC,EACxE,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KAC7E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,124 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cn } from './utils';
5
+ const DEBOUNCE_MS = 300;
6
+ function SearchableComboboxInner(props, _ref) {
7
+ const { onSearch, onSelect, renderItem, getItemKey, items, loading = false, placeholder = 'Search…', emptyMessage = 'No results found', 'aria-label': ariaLabel, className, disabled = false, } = props;
8
+ const [inputValue, setInputValue] = React.useState('');
9
+ const [isOpen, setIsOpen] = React.useState(false);
10
+ const [highlightedIndex, setHighlightedIndex] = React.useState(-1);
11
+ const containerRef = React.useRef(null);
12
+ const inputRef = React.useRef(null);
13
+ const debounceRef = React.useRef(null);
14
+ // Stable unique IDs for ARIA attributes
15
+ const idRef = React.useRef(`combobox-${Math.random().toString(36).slice(2, 9)}`);
16
+ const listboxId = `${idRef.current}-listbox`;
17
+ const getOptionId = (index) => `${idRef.current}-option-${index}`;
18
+ // Determine whether the dropdown should show
19
+ const showDropdown = isOpen && !disabled && (loading || items.length > 0 || inputValue.length > 0);
20
+ // Reset highlighted index when items change
21
+ React.useEffect(() => {
22
+ setHighlightedIndex(-1);
23
+ }, [items]);
24
+ // Click-outside handler
25
+ React.useEffect(() => {
26
+ function handleClickOutside(event) {
27
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
28
+ setIsOpen(false);
29
+ setHighlightedIndex(-1);
30
+ }
31
+ }
32
+ document.addEventListener('mousedown', handleClickOutside);
33
+ return () => {
34
+ document.removeEventListener('mousedown', handleClickOutside);
35
+ };
36
+ }, []);
37
+ // Cleanup debounce timer on unmount
38
+ React.useEffect(() => {
39
+ return () => {
40
+ if (debounceRef.current !== null) {
41
+ clearTimeout(debounceRef.current);
42
+ }
43
+ };
44
+ }, []);
45
+ const handleInputChange = React.useCallback((event) => {
46
+ const value = event.target.value;
47
+ setInputValue(value);
48
+ setIsOpen(true);
49
+ setHighlightedIndex(-1);
50
+ if (debounceRef.current !== null) {
51
+ clearTimeout(debounceRef.current);
52
+ }
53
+ debounceRef.current = setTimeout(() => {
54
+ onSearch(value);
55
+ }, DEBOUNCE_MS);
56
+ }, [onSearch]);
57
+ const handleInputFocus = React.useCallback(() => {
58
+ if (!disabled) {
59
+ setIsOpen(true);
60
+ }
61
+ }, [disabled]);
62
+ const handleSelect = React.useCallback((item) => {
63
+ onSelect(item);
64
+ setIsOpen(false);
65
+ setHighlightedIndex(-1);
66
+ inputRef.current?.focus();
67
+ }, [onSelect]);
68
+ const handleKeyDown = React.useCallback((event) => {
69
+ if (!showDropdown) {
70
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
71
+ setIsOpen(true);
72
+ }
73
+ return;
74
+ }
75
+ switch (event.key) {
76
+ case 'ArrowDown': {
77
+ event.preventDefault();
78
+ setHighlightedIndex((prev) => {
79
+ const next = prev < items.length - 1 ? prev + 1 : 0;
80
+ return next;
81
+ });
82
+ break;
83
+ }
84
+ case 'ArrowUp': {
85
+ event.preventDefault();
86
+ setHighlightedIndex((prev) => {
87
+ const next = prev > 0 ? prev - 1 : items.length - 1;
88
+ return next;
89
+ });
90
+ break;
91
+ }
92
+ case 'Enter': {
93
+ if (highlightedIndex >= 0 && highlightedIndex < items.length) {
94
+ event.preventDefault();
95
+ handleSelect(items[highlightedIndex]);
96
+ }
97
+ break;
98
+ }
99
+ case 'Escape': {
100
+ event.preventDefault();
101
+ setIsOpen(false);
102
+ setHighlightedIndex(-1);
103
+ break;
104
+ }
105
+ default:
106
+ break;
107
+ }
108
+ }, [showDropdown, items, highlightedIndex, handleSelect]);
109
+ const activedescendant = highlightedIndex >= 0 && showDropdown ? getOptionId(highlightedIndex) : undefined;
110
+ return (_jsxs("div", { ref: containerRef, className: cn('relative w-full', className), children: [_jsx("input", { ref: inputRef, type: "text", role: "combobox", "aria-expanded": showDropdown, "aria-controls": listboxId, "aria-activedescendant": activedescendant, "aria-autocomplete": "list", "aria-label": ariaLabel, value: inputValue, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, autoComplete: "off", className: cn('flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', 'disabled:cursor-not-allowed disabled:opacity-50', 'transition-colors') }), showDropdown && (_jsx("ul", { id: listboxId, role: "listbox", "aria-label": ariaLabel ? `${ariaLabel} options` : 'Options', className: cn('absolute z-50 mt-1 max-h-64 w-full overflow-auto', 'rounded-md border border-border bg-popover text-popover-foreground shadow-md', 'py-1'), children: loading ? (_jsxs("li", { className: "flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground", role: "option", "aria-selected": false, children: [_jsx("span", { "aria-hidden": "true", className: "h-3.5 w-3.5 shrink-0 animate-spin rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground" }), "Searching\u2026"] })) : items.length === 0 ? (_jsx("li", { className: "px-3 py-2 text-sm text-muted-foreground", role: "option", "aria-selected": false, "aria-disabled": "true", children: emptyMessage })) : (items.map((item, index) => {
111
+ const isHighlighted = index === highlightedIndex;
112
+ return (_jsx("li", { id: getOptionId(index), role: "option", "aria-selected": isHighlighted, onMouseDown: (e) => {
113
+ // Prevent blur on the input before the click is processed
114
+ e.preventDefault();
115
+ handleSelect(item);
116
+ }, onMouseEnter: () => setHighlightedIndex(index), className: cn('cursor-pointer px-3 py-2 text-sm', 'select-none outline-none', isHighlighted
117
+ ? 'bg-accent text-accent-foreground'
118
+ : 'hover:bg-accent/50 hover:text-accent-foreground'), children: renderItem(item) }, getItemKey(item)));
119
+ })) }))] }));
120
+ }
121
+ // Generic forwardRef workaround — TypeScript requires this pattern for generic components
122
+ const SearchableCombobox = React.forwardRef(SearchableComboboxInner);
123
+ export { SearchableCombobox };
124
+ //# sourceMappingURL=SearchableCombobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchableCombobox.js","sourceRoot":"","sources":["../../src/primitives/SearchableCombobox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ export interface SearchablePickerDialogProps<T> {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ title: string;
6
+ searchPlaceholder?: string;
7
+ emptyMessage?: string;
8
+ items: T[];
9
+ renderItem: (item: T) => React.ReactNode;
10
+ getItemId: (item: T) => string;
11
+ getItemLabel: (item: T) => string;
12
+ onConfirm: (selectedIds: string[]) => void;
13
+ onCancel: () => void;
14
+ isLoading?: boolean;
15
+ }
16
+ declare const SearchablePickerDialog: <T>(props: SearchablePickerDialogProps<T> & {
17
+ ref?: React.ForwardedRef<HTMLDivElement>;
18
+ }) => React.ReactElement | null;
19
+ export { SearchablePickerDialog };
20
+ //# sourceMappingURL=SearchablePickerDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchablePickerDialog.d.ts","sourceRoot":"","sources":["../../src/primitives/SearchablePickerDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACzC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqOD,QAAA,MAAM,sBAAsB,EAAoD,CAAC,CAAC,EAChF,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KACjF,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,CAAC"}