@parallelworks/ui 0.44.0 → 0.46.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 (637) hide show
  1. package/README.md +348 -25
  2. package/dist/ai/agent/diff.d.ts +2 -1
  3. package/dist/ai/agent/diff.js +4 -12
  4. package/dist/ai/agent/diffHighlight.d.ts +1 -1
  5. package/dist/ai/agent/diffHighlight.js +4 -3
  6. package/dist/ai/agent/index.d.ts +2 -1
  7. package/dist/ai/agent/permissions.d.ts +1 -1
  8. package/dist/ai/agent/permissions.js +1 -1
  9. package/dist/ai/agent/toolStrings.d.ts +37 -0
  10. package/dist/ai/agent/toolStrings.js +35 -0
  11. package/dist/ai/agent/toolfmt.d.ts +8 -3
  12. package/dist/ai/agent/toolfmt.js +50 -65
  13. package/dist/ai/ai.css +22 -35
  14. package/dist/ai/components/AllocationSelector.js +2 -2
  15. package/dist/ai/components/AttachmentManager.js +28 -29
  16. package/dist/ai/components/AttachmentUpload.js +25 -30
  17. package/dist/ai/components/BlockedGroupBanner.js +2 -2
  18. package/dist/ai/components/BranchNavigator.js +3 -4
  19. package/dist/ai/components/ChatEmptyState.js +8 -7
  20. package/dist/ai/components/ChatInput.js +10 -12
  21. package/dist/ai/components/ChatLayout.js +3 -3
  22. package/dist/ai/components/ChatMessage.js +49 -61
  23. package/dist/ai/components/ChatMessageList.js +46 -42
  24. package/dist/ai/components/ChatSidebar.js +26 -34
  25. package/dist/ai/components/ChatStage.d.ts +1 -1
  26. package/dist/ai/components/ChatStage.js +2 -2
  27. package/dist/ai/components/ComposerChrome.js +3 -4
  28. package/dist/ai/components/DragOverlay.js +6 -4
  29. package/dist/ai/components/ModelSelector.js +14 -15
  30. package/dist/ai/components/PastedText.js +18 -14
  31. package/dist/ai/components/ProviderIssueBanner.js +3 -4
  32. package/dist/ai/components/Reasoning.d.ts +12 -6
  33. package/dist/ai/components/Reasoning.js +31 -18
  34. package/dist/ai/components/ShareDialog.js +25 -28
  35. package/dist/ai/components/SlashMenu.js +3 -3
  36. package/dist/ai/components/agent/ActivityLine.d.ts +0 -5
  37. package/dist/ai/components/agent/ActivityLine.js +17 -54
  38. package/dist/ai/components/agent/AgentMessageParts.js +139 -149
  39. package/dist/ai/components/conversationActions.js +16 -16
  40. package/dist/ai/core/ChatProvider.d.ts +2 -4
  41. package/dist/ai/core/ChatProvider.js +25 -38
  42. package/dist/ai/core/exportConversation.js +4 -4
  43. package/dist/ai/core/pasteLanguage.d.ts +1 -1
  44. package/dist/ai/core/pasteLanguage.js +1 -1
  45. package/dist/ai/core/sidebarState.d.ts +8 -6
  46. package/dist/ai/core/sidebarState.js +21 -28
  47. package/dist/ai/core/useKeyboardShortcuts.js +14 -5
  48. package/dist/ai/index.d.ts +4 -5
  49. package/dist/ai/index.js +7 -7
  50. package/dist/ai/strings.d.ts +14 -31
  51. package/dist/ai/strings.js +19 -39
  52. package/dist/ai/types.d.ts +0 -5
  53. package/dist/ai/ui/ConversationSidebar.d.ts +12 -9
  54. package/dist/ai/ui/ConversationSidebar.js +43 -87
  55. package/dist/ai/ui/Markdown.d.ts +3 -6
  56. package/dist/ai/ui/Markdown.js +6 -73
  57. package/dist/ai/ui/Notice.js +10 -12
  58. package/dist/ai/ui/chip.d.ts +2 -2
  59. package/dist/ai/ui/chip.js +1 -1
  60. package/dist/ai/ui/sidebar.d.ts +4 -20
  61. package/dist/ai/ui/sidebar.js +30 -67
  62. package/dist/ai/utils.d.ts +0 -1
  63. package/dist/ai/utils.js +1 -14
  64. package/dist/brandIcons.d.ts +51 -0
  65. package/dist/brandIcons.js +75 -0
  66. package/dist/components/Avatar.d.ts +3 -1
  67. package/dist/components/Avatar.js +34 -28
  68. package/dist/components/Button.d.ts +12 -7
  69. package/dist/components/Button.js +39 -44
  70. package/dist/components/Callout.js +18 -12
  71. package/dist/components/Card.d.ts +18 -8
  72. package/dist/components/Card.js +17 -6
  73. package/dist/components/Checkbox.d.ts +9 -0
  74. package/dist/components/Checkbox.js +30 -0
  75. package/dist/components/Combobox.d.ts +9 -1
  76. package/dist/components/Combobox.js +71 -44
  77. package/dist/components/ConfirmModal.js +11 -11
  78. package/dist/components/ContextMenu.d.ts +2 -8
  79. package/dist/components/ContextMenu.js +2 -29
  80. package/dist/components/CopyToClipboard.js +17 -36
  81. package/dist/components/CreateModal.d.ts +3 -24
  82. package/dist/components/CreateModal.js +46 -113
  83. package/dist/components/DatePicker.d.ts +31 -0
  84. package/dist/components/DatePicker.js +191 -0
  85. package/dist/components/DescriptionList.js +4 -4
  86. package/dist/components/Disclosure.d.ts +34 -0
  87. package/dist/components/Disclosure.js +46 -0
  88. package/dist/components/Drawer.d.ts +47 -0
  89. package/dist/components/Drawer.js +120 -0
  90. package/dist/components/EmptyState.d.ts +15 -10
  91. package/dist/components/EmptyState.js +13 -8
  92. package/dist/components/ExternalLink.d.ts +8 -0
  93. package/dist/components/ExternalLink.js +29 -0
  94. package/dist/components/Field.d.ts +70 -0
  95. package/dist/components/Field.js +159 -0
  96. package/dist/components/HoverCard.js +11 -14
  97. package/dist/components/IconButton.d.ts +16 -13
  98. package/dist/components/IconButton.js +27 -18
  99. package/dist/components/InfoTip.js +16 -23
  100. package/dist/components/Input.d.ts +10 -9
  101. package/dist/components/Input.js +54 -96
  102. package/dist/components/LetterBadge.js +2 -2
  103. package/dist/components/Loader.d.ts +15 -8
  104. package/dist/components/Loader.js +29 -19
  105. package/dist/components/Markdown.d.ts +7 -1
  106. package/dist/components/Markdown.js +2 -0
  107. package/dist/components/MarkdownImpl.d.ts +1 -1
  108. package/dist/components/MarkdownImpl.js +55 -14
  109. package/dist/components/Menu.js +13 -15
  110. package/dist/components/MenuEntries.js +11 -16
  111. package/dist/components/Meter.d.ts +48 -0
  112. package/dist/components/Meter.js +94 -0
  113. package/dist/components/Modal.js +11 -14
  114. package/dist/components/NumberInput.d.ts +25 -0
  115. package/dist/components/NumberInput.js +55 -0
  116. package/dist/components/Overview.js +12 -10
  117. package/dist/components/PageHeader.d.ts +2 -3
  118. package/dist/components/PageHeader.js +30 -21
  119. package/dist/components/Pagination.d.ts +27 -14
  120. package/dist/components/Pagination.js +86 -25
  121. package/dist/components/Popover.d.ts +47 -0
  122. package/dist/components/Popover.js +63 -0
  123. package/dist/components/Provider.d.ts +200 -83
  124. package/dist/components/Provider.js +203 -121
  125. package/dist/components/Radio.d.ts +1 -1
  126. package/dist/components/Radio.js +4 -4
  127. package/dist/components/RefreshButton.d.ts +15 -0
  128. package/dist/components/RefreshButton.js +53 -0
  129. package/dist/components/RunStatusIcon.d.ts +12 -0
  130. package/dist/components/RunStatusIcon.js +84 -0
  131. package/dist/components/SearchInput.d.ts +16 -0
  132. package/dist/components/SearchInput.js +52 -0
  133. package/dist/components/Section.d.ts +28 -0
  134. package/dist/components/Section.js +76 -0
  135. package/dist/components/SegmentedControl.d.ts +7 -11
  136. package/dist/components/SegmentedControl.js +25 -56
  137. package/dist/components/Select.d.ts +5 -1
  138. package/dist/components/Select.js +43 -44
  139. package/dist/components/SettingModeOption.d.ts +3 -5
  140. package/dist/components/SettingModeOption.js +5 -6
  141. package/dist/components/SettingsCard.d.ts +32 -19
  142. package/dist/components/SettingsCard.js +40 -13
  143. package/dist/components/Skeleton.d.ts +22 -0
  144. package/dist/components/Skeleton.js +34 -0
  145. package/dist/components/Slider.d.ts +16 -0
  146. package/dist/components/Slider.js +30 -0
  147. package/dist/components/Sort.js +4 -6
  148. package/dist/components/StatusBadge.d.ts +5 -3
  149. package/dist/components/StatusBadge.js +10 -33
  150. package/dist/components/StatusIcons.d.ts +0 -4
  151. package/dist/components/StatusIcons.js +5 -13
  152. package/dist/components/Switch.d.ts +5 -1
  153. package/dist/components/Switch.js +23 -6
  154. package/dist/components/Table.js +13 -20
  155. package/dist/components/Tabs.d.ts +52 -0
  156. package/dist/components/Tabs.js +75 -0
  157. package/dist/components/ThemeEditor.d.ts +29 -0
  158. package/dist/components/ThemeEditor.js +397 -0
  159. package/dist/components/Toast.d.ts +57 -0
  160. package/dist/components/Toast.js +203 -0
  161. package/dist/components/Tooltip.js +12 -15
  162. package/dist/components/buttonClasses.d.ts +18 -0
  163. package/dist/components/buttonClasses.js +31 -0
  164. package/dist/components/codeTheme.d.ts +5 -0
  165. package/dist/components/codeTheme.js +93 -0
  166. package/dist/components/comboboxItems.d.ts +1 -1
  167. package/dist/components/fieldBox.d.ts +14 -0
  168. package/dist/components/fieldBox.js +29 -0
  169. package/dist/components/floating.d.ts +26 -5
  170. package/dist/components/floating.js +31 -9
  171. package/dist/{ai/ui/codeBreaks.js → components/markdownCodeBreaks.js} +1 -1
  172. package/dist/components/persistedState.d.ts +2 -0
  173. package/dist/components/persistedState.js +63 -0
  174. package/dist/components/relativeTime.d.ts +36 -8
  175. package/dist/components/relativeTime.js +106 -23
  176. package/dist/components/segmented.d.ts +17 -0
  177. package/dist/components/segmented.js +27 -0
  178. package/dist/components/shortcutKey.d.ts +4 -0
  179. package/dist/components/shortcutKey.js +27 -0
  180. package/dist/components/splitter.d.ts +26 -0
  181. package/dist/components/splitter.js +69 -0
  182. package/dist/components/tone.d.ts +9 -0
  183. package/dist/components/tone.js +30 -0
  184. package/dist/components/useCopy.d.ts +14 -0
  185. package/dist/components/useCopy.js +31 -0
  186. package/dist/components/useCssIsDark.d.ts +2 -0
  187. package/dist/components/useCssIsDark.js +2 -1
  188. package/dist/components/useTheme.d.ts +10 -0
  189. package/dist/components/useTheme.js +40 -0
  190. package/dist/cx.d.ts +5 -0
  191. package/dist/cx.js +11 -0
  192. package/dist/editing.d.ts +1 -1
  193. package/dist/editor/Editor.js +2 -2
  194. package/dist/editor/EditorField.js +7 -10
  195. package/dist/editor/FormCodePanel.js +10 -23
  196. package/dist/editor/Monaco.js +7 -4
  197. package/dist/editor/index.d.ts +1 -1
  198. package/dist/editor/index.js +2 -2
  199. package/dist/editor/themes.d.ts +4 -0
  200. package/dist/editor/themes.js +75 -76
  201. package/dist/file-explorer/FileExplorer.js +180 -187
  202. package/dist/file-explorer/FileExplorerContext.js +45 -67
  203. package/dist/file-explorer/FilePreview/CodePreviewEditor.js +2 -1
  204. package/dist/file-explorer/FilePreview/Inline.js +9 -7
  205. package/dist/file-explorer/FilePreview/StreamedBadge.js +2 -2
  206. package/dist/file-explorer/FilePreview/Viewer.js +32 -34
  207. package/dist/file-explorer/FilePreview/index.js +60 -92
  208. package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +4 -4
  209. package/dist/file-explorer/FilePreview/useObjectText.js +4 -4
  210. package/dist/file-explorer/FilePreview/usePresignedUrl.js +4 -4
  211. package/dist/file-explorer/FileRow.js +10 -15
  212. package/dist/file-explorer/FileRowsWindow.js +2 -6
  213. package/dist/file-explorer/FileTable.js +2 -2
  214. package/dist/file-explorer/FileTableHeaders.js +8 -11
  215. package/dist/file-explorer/LoadMoreRow.js +8 -9
  216. package/dist/file-explorer/TreeView.js +16 -16
  217. package/dist/file-explorer/helpers.d.ts +1 -4
  218. package/dist/file-explorer/helpers.js +101 -114
  219. package/dist/file-explorer/lib/types.d.ts +2 -2
  220. package/dist/file-explorer/lib/utils.d.ts +0 -2
  221. package/dist/file-explorer/lib/utils.js +1 -25
  222. package/dist/file-explorer/toasts.js +109 -190
  223. package/dist/form/Fields/BooleanField.js +12 -14
  224. package/dist/form/Fields/CheckboxGroupField.d.ts +1 -1
  225. package/dist/form/Fields/CheckboxGroupField.js +16 -18
  226. package/dist/form/Fields/ColorField.js +11 -11
  227. package/dist/form/Fields/DropdownField.d.ts +1 -1
  228. package/dist/form/Fields/DropdownField.js +20 -36
  229. package/dist/form/Fields/DurationField.d.ts +1 -1
  230. package/dist/form/Fields/DurationField.js +36 -50
  231. package/dist/form/Fields/LabelField.js +2 -2
  232. package/dist/form/Fields/MultiDropdownField.d.ts +1 -1
  233. package/dist/form/Fields/MultiDropdownField.js +9 -14
  234. package/dist/form/Fields/NumberField.d.ts +1 -1
  235. package/dist/form/Fields/NumberField.js +13 -48
  236. package/dist/form/Fields/ObjectField.js +3 -3
  237. package/dist/form/Fields/RadioField.d.ts +1 -1
  238. package/dist/form/Fields/RadioField.js +15 -18
  239. package/dist/form/Fields/RangeField.js +34 -35
  240. package/dist/form/Fields/StringField.d.ts +1 -1
  241. package/dist/form/Fields/StringField.js +15 -25
  242. package/dist/form/Fields/TextAreaField.js +10 -15
  243. package/dist/form/Form.d.ts +7 -2
  244. package/dist/form/Form.js +144 -49
  245. package/dist/form/FormLayout.js +18 -12
  246. package/dist/form/Wizard/WizardContainer.js +44 -18
  247. package/dist/form/Wizard/WizardNavigation.d.ts +1 -1
  248. package/dist/form/Wizard/WizardNavigation.js +31 -56
  249. package/dist/form/Wizard/WizardStepIndicator.d.ts +3 -0
  250. package/dist/form/Wizard/WizardStepIndicator.js +98 -114
  251. package/dist/form/Wizard/types.d.ts +2 -2
  252. package/dist/form/fieldFrame.d.ts +7 -0
  253. package/dist/form/fieldFrame.js +19 -0
  254. package/dist/form/index.d.ts +5 -5
  255. package/dist/form/index.js +4 -6
  256. package/dist/form/layoutCSS.js +5 -4
  257. package/dist/form/types/fieldComponentTypes.d.ts +5 -3
  258. package/dist/form/useChoiceField.js +2 -3
  259. package/dist/form/useFieldValue.d.ts +3 -0
  260. package/dist/form/useFieldValue.js +24 -7
  261. package/dist/form/utils/duration.d.ts +2 -2
  262. package/dist/form/utils/duration.js +3 -3
  263. package/dist/form/utils/fieldItems.d.ts +1 -1
  264. package/dist/form/utils/fieldPath.d.ts +5 -3
  265. package/dist/form/utils/fieldPath.js +18 -3
  266. package/dist/form/utils/secondaryField.d.ts +0 -7
  267. package/dist/form/utils/secondaryField.js +1 -12
  268. package/dist/form/validation.d.ts +29 -0
  269. package/dist/form/validation.js +14 -0
  270. package/dist/format.d.ts +28 -0
  271. package/dist/format.js +64 -0
  272. package/dist/graph/AnnotationBanner.js +20 -31
  273. package/dist/graph/Connectors.js +1 -1
  274. package/dist/graph/DependencyGraph.js +51 -65
  275. package/dist/graph/GraphEditor.js +24 -28
  276. package/dist/graph/GraphEditorDialogs.js +239 -245
  277. package/dist/graph/InputDialog.js +93 -112
  278. package/dist/graph/InputsEditor.js +83 -84
  279. package/dist/graph/JobSummary.js +10 -11
  280. package/dist/graph/MatrixGroup.js +3 -3
  281. package/dist/graph/ProblemsButton.js +9 -10
  282. package/dist/graph/ShortcutsButton.js +12 -17
  283. package/dist/graph/SuggestionInput.d.ts +2 -3
  284. package/dist/graph/SuggestionInput.js +2 -4
  285. package/dist/graph/TreeView.js +47 -45
  286. package/dist/graph/WorkflowSettingsDialog.js +97 -102
  287. package/dist/graph/editorChrome.js +10 -12
  288. package/dist/graph/editorFields.d.ts +19 -16
  289. package/dist/graph/editorFields.js +97 -135
  290. package/dist/graph/editorPrimitives.d.ts +2 -2
  291. package/dist/graph/editorPrimitives.js +3 -3
  292. package/dist/graph/editorRows.js +22 -25
  293. package/dist/graph/editorStrings.d.ts +18 -21
  294. package/dist/graph/editorStrings.js +15 -27
  295. package/dist/graph/fieldProblems.js +2 -2
  296. package/dist/graph/graphEditorState.d.ts +4 -4
  297. package/dist/graph/inputRefs.d.ts +0 -13
  298. package/dist/graph/inputRefs.js +122 -160
  299. package/dist/graph/settingsViews.js +5 -3
  300. package/dist/graph/stepWith.js +100 -100
  301. package/dist/graph/toolbarPanel.d.ts +8 -0
  302. package/dist/graph/toolbarPanel.js +11 -0
  303. package/dist/icons.d.ts +234 -23
  304. package/dist/icons.js +249 -264
  305. package/dist/index.d.ts +38 -21
  306. package/dist/index.js +42 -21
  307. package/dist/list/ActionToolbar.d.ts +1 -5
  308. package/dist/list/ActionToolbar.js +21 -20
  309. package/dist/list/ListPage.js +7 -7
  310. package/dist/list/ListTable.d.ts +3 -2
  311. package/dist/list/ListTable.js +33 -29
  312. package/dist/list/ListViewControls.d.ts +0 -17
  313. package/dist/list/ListViewControls.js +50 -118
  314. package/dist/list/UserHoverCard.js +24 -32
  315. package/dist/list/index.d.ts +2 -4
  316. package/dist/list/index.js +3 -5
  317. package/dist/list/listSearch.d.ts +1 -1
  318. package/dist/list/listSearch.js +19 -14
  319. package/dist/list/rowMenu.js +20 -26
  320. package/dist/logviewer/LogViewer.js +268 -382
  321. package/dist/logviewer/logviewer.css +53 -41
  322. package/dist/logviewer/segments.d.ts +1 -1
  323. package/dist/logviewer/segments.js +1 -1
  324. package/dist/styles/base.css +16 -40
  325. package/dist/styles/theme.css +75 -106
  326. package/dist/styles.css +1 -1
  327. package/dist/theme/color.d.ts +40 -0
  328. package/dist/theme/color.js +228 -0
  329. package/dist/theme/contrast.d.ts +42 -0
  330. package/dist/theme/contrast.js +145 -0
  331. package/dist/theme/derive.d.ts +25 -0
  332. package/dist/theme/derive.js +475 -0
  333. package/dist/theme/fit.d.ts +35 -0
  334. package/dist/theme/fit.js +185 -0
  335. package/dist/theme/index.d.ts +14 -29
  336. package/dist/theme/index.js +20 -279
  337. package/dist/theme/model.d.ts +64 -0
  338. package/dist/theme/model.js +219 -0
  339. package/package.json +9 -5
  340. package/dist/ai/ui/Avatar.d.ts +0 -7
  341. package/dist/ai/ui/Avatar.js +0 -24
  342. package/dist/components/Filter.d.ts +0 -15
  343. package/dist/components/Filter.js +0 -32
  344. package/dist/components/FilterPill.d.ts +0 -7
  345. package/dist/components/FilterPill.js +0 -14
  346. package/dist/components/Indicator.d.ts +0 -4
  347. package/dist/components/Indicator.js +0 -44
  348. package/dist/components/SectionHeader.d.ts +0 -8
  349. package/dist/components/SectionHeader.js +0 -11
  350. package/dist/components/SettingRow.d.ts +0 -18
  351. package/dist/components/SettingRow.js +0 -35
  352. package/dist/components/SettingsGroup.d.ts +0 -8
  353. package/dist/components/SettingsGroup.js +0 -17
  354. package/dist/components/ghostButton.d.ts +0 -4
  355. package/dist/components/ghostButton.js +0 -7
  356. package/dist/components/inputClasses.d.ts +0 -1
  357. package/dist/components/inputClasses.js +0 -4
  358. package/dist/duration.d.ts +0 -3
  359. package/dist/duration.js +0 -17
  360. package/dist/form/FieldGroup.d.ts +0 -11
  361. package/dist/form/FieldGroup.js +0 -36
  362. package/dist/form/FieldWrapper.d.ts +0 -16
  363. package/dist/form/FieldWrapper.js +0 -55
  364. package/dist/form/fieldContext.d.ts +0 -19
  365. package/dist/form/fieldContext.js +0 -26
  366. package/dist/graph/Collapse.d.ts +0 -7
  367. package/dist/graph/Collapse.js +0 -15
  368. package/dist/graph/ToolbarPopover.d.ts +0 -13
  369. package/dist/graph/ToolbarPopover.js +0 -39
  370. package/dist/icons/ai/AiOutlineRollback.js +0 -16
  371. package/dist/icons/bi/BiBell.js +0 -16
  372. package/dist/icons/bi/BiBellOff.js +0 -16
  373. package/dist/icons/bi/BiBuildings.js +0 -20
  374. package/dist/icons/bi/BiError.js +0 -20
  375. package/dist/icons/bi/BiExpandVertical.js +0 -16
  376. package/dist/icons/bi/BiPause.js +0 -16
  377. package/dist/icons/bi/BiPlay.js +0 -16
  378. package/dist/icons/bi/BiRedo.js +0 -16
  379. package/dist/icons/bi/BiSolidCheckShield.js +0 -16
  380. package/dist/icons/bi/BiSolidTrashAlt.js +0 -16
  381. package/dist/icons/bi/BiStop.js +0 -16
  382. package/dist/icons/bi/BiUndo.js +0 -16
  383. package/dist/icons/bs/BsArrowsCollapse.js +0 -22
  384. package/dist/icons/bs/BsBank2.js +0 -19
  385. package/dist/icons/bs/BsBriefcase.js +0 -19
  386. package/dist/icons/bs/BsBucket.js +0 -19
  387. package/dist/icons/bs/BsCalendarX.js +0 -23
  388. package/dist/icons/bs/BsChatLeft.js +0 -19
  389. package/dist/icons/bs/BsChevronDoubleDown.js +0 -29
  390. package/dist/icons/bs/BsChevronDoubleUp.js +0 -29
  391. package/dist/icons/bs/BsClipboardCheck.js +0 -34
  392. package/dist/icons/bs/BsCurrencyDollar.js +0 -19
  393. package/dist/icons/bs/BsDash.js +0 -19
  394. package/dist/icons/bs/BsFileEarmarkZip.js +0 -23
  395. package/dist/icons/bs/BsFiles.js +0 -19
  396. package/dist/icons/bs/BsGeoAlt.js +0 -23
  397. package/dist/icons/bs/BsGrid.js +0 -19
  398. package/dist/icons/bs/BsLayers.js +0 -19
  399. package/dist/icons/bs/BsLayoutThreeColumns.js +0 -19
  400. package/dist/icons/bs/BsListUl.js +0 -22
  401. package/dist/icons/bs/BsMortarboard.js +0 -23
  402. package/dist/icons/bs/BsMusicNoteBeamed.js +0 -34
  403. package/dist/icons/bs/BsOpenai.js +0 -19
  404. package/dist/icons/bs/BsPersonPlus.js +0 -26
  405. package/dist/icons/bs/BsSearch.js +0 -19
  406. package/dist/icons/bs/BsSend.js +0 -19
  407. package/dist/icons/bs/BsShieldSlash.js +0 -22
  408. package/dist/icons/bs/BsStar.js +0 -19
  409. package/dist/icons/bs/BsStarFill.js +0 -19
  410. package/dist/icons/bs/BsStopCircle.js +0 -23
  411. package/dist/icons/bs/BsTag.js +0 -23
  412. package/dist/icons/bs/BsTelephone.js +0 -19
  413. package/dist/icons/bs/BsTerminal.js +0 -23
  414. package/dist/icons/bs/BsTerminalFill.js +0 -19
  415. package/dist/icons/bs/BsThreeDots.js +0 -19
  416. package/dist/icons/bs/BsThreeDotsVertical.js +0 -19
  417. package/dist/icons/bs/BsZoomIn.js +0 -37
  418. package/dist/icons/fa/FaAmazon.js +0 -16
  419. package/dist/icons/fa/FaAngleDown.js +0 -16
  420. package/dist/icons/fa/FaAngleLeft.js +0 -16
  421. package/dist/icons/fa/FaAngleRight.js +0 -16
  422. package/dist/icons/fa/FaAngleUp.js +0 -16
  423. package/dist/icons/fa/FaArrowDown.js +0 -16
  424. package/dist/icons/fa/FaArrowLeft.js +0 -16
  425. package/dist/icons/fa/FaArrowRight.js +0 -16
  426. package/dist/icons/fa/FaArrowUp.js +0 -16
  427. package/dist/icons/fa/FaBalanceScale.js +0 -16
  428. package/dist/icons/fa/FaCaretDown.js +0 -16
  429. package/dist/icons/fa/FaCentos.js +0 -16
  430. package/dist/icons/fa/FaChartLine.js +0 -16
  431. package/dist/icons/fa/FaChartPie.js +0 -16
  432. package/dist/icons/fa/FaCheck.js +0 -16
  433. package/dist/icons/fa/FaChevronDown.js +0 -16
  434. package/dist/icons/fa/FaChevronUp.js +0 -16
  435. package/dist/icons/fa/FaChrome.js +0 -16
  436. package/dist/icons/fa/FaCircleNotch.js +0 -16
  437. package/dist/icons/fa/FaCloud.js +0 -16
  438. package/dist/icons/fa/FaCloudDownloadAlt.js +0 -16
  439. package/dist/icons/fa/FaCog.js +0 -16
  440. package/dist/icons/fa/FaCogs.js +0 -16
  441. package/dist/icons/fa/FaComments.js +0 -16
  442. package/dist/icons/fa/FaCompress.js +0 -16
  443. package/dist/icons/fa/FaDesktop.js +0 -16
  444. package/dist/icons/fa/FaDocker.js +0 -16
  445. package/dist/icons/fa/FaDollarSign.js +0 -16
  446. package/dist/icons/fa/FaEdge.js +0 -16
  447. package/dist/icons/fa/FaEdit.js +0 -16
  448. package/dist/icons/fa/FaExclamationTriangle.js +0 -16
  449. package/dist/icons/fa/FaExpand.js +0 -16
  450. package/dist/icons/fa/FaEye.js +0 -16
  451. package/dist/icons/fa/FaEyeSlash.js +0 -16
  452. package/dist/icons/fa/FaFile.js +0 -16
  453. package/dist/icons/fa/FaFilePdf.js +0 -16
  454. package/dist/icons/fa/FaFilter.js +0 -16
  455. package/dist/icons/fa/FaFirefoxBrowser.js +0 -16
  456. package/dist/icons/fa/FaFlask.js +0 -16
  457. package/dist/icons/fa/FaFolder.js +0 -16
  458. package/dist/icons/fa/FaGithub.js +0 -16
  459. package/dist/icons/fa/FaGitlab.js +0 -16
  460. package/dist/icons/fa/FaGlobe.js +0 -16
  461. package/dist/icons/fa/FaGlobeAmericas.js +0 -16
  462. package/dist/icons/fa/FaImage.js +0 -16
  463. package/dist/icons/fa/FaInfoCircle.js +0 -16
  464. package/dist/icons/fa/FaKey.js +0 -16
  465. package/dist/icons/fa/FaLayerGroup.js +0 -16
  466. package/dist/icons/fa/FaLink.js +0 -16
  467. package/dist/icons/fa/FaLinkedin.js +0 -16
  468. package/dist/icons/fa/FaLinux.js +0 -16
  469. package/dist/icons/fa/FaList.js +0 -16
  470. package/dist/icons/fa/FaLock.js +0 -16
  471. package/dist/icons/fa/FaOpenid.js +0 -16
  472. package/dist/icons/fa/FaOpera.js +0 -16
  473. package/dist/icons/fa/FaPaperclip.js +0 -16
  474. package/dist/icons/fa/FaPlus.js +0 -16
  475. package/dist/icons/fa/FaPowerOff.js +0 -16
  476. package/dist/icons/fa/FaPrint.js +0 -16
  477. package/dist/icons/fa/FaQrcode.js +0 -16
  478. package/dist/icons/fa/FaQuestionCircle.js +0 -16
  479. package/dist/icons/fa/FaRedhat.js +0 -16
  480. package/dist/icons/fa/FaRegCircle.js +0 -16
  481. package/dist/icons/fa/FaRegFileImage.js +0 -16
  482. package/dist/icons/fa/FaRegFolder.js +0 -16
  483. package/dist/icons/fa/FaRobot.js +0 -16
  484. package/dist/icons/fa/FaRocket.js +0 -16
  485. package/dist/icons/fa/FaRunning.js +0 -16
  486. package/dist/icons/fa/FaSafari.js +0 -16
  487. package/dist/icons/fa/FaSave.js +0 -16
  488. package/dist/icons/fa/FaSearch.js +0 -16
  489. package/dist/icons/fa/FaShieldAlt.js +0 -16
  490. package/dist/icons/fa/FaSlack.js +0 -16
  491. package/dist/icons/fa/FaStar.js +0 -16
  492. package/dist/icons/fa/FaStop.js +0 -16
  493. package/dist/icons/fa/FaSuse.js +0 -16
  494. package/dist/icons/fa/FaTerminal.js +0 -16
  495. package/dist/icons/fa/FaTimes.js +0 -16
  496. package/dist/icons/fa/FaUbuntu.js +0 -16
  497. package/dist/icons/fa/FaUndoAlt.js +0 -16
  498. package/dist/icons/fa/FaUnlink.js +0 -16
  499. package/dist/icons/fa/FaUser.js +0 -16
  500. package/dist/icons/fa/FaUsers.js +0 -16
  501. package/dist/icons/fa/FaWindows.js +0 -16
  502. package/dist/icons/fa6/FaApple.js +0 -16
  503. package/dist/icons/fa6/FaArrowsRotate.js +0 -16
  504. package/dist/icons/fa6/FaDebian.js +0 -16
  505. package/dist/icons/fa6/FaFilterCircleXmark.js +0 -16
  506. package/dist/icons/fa6/FaInbox.js +0 -16
  507. package/dist/icons/fa6/FaLocationDot.js +0 -16
  508. package/dist/icons/fa6/FaRegFilePdf.js +0 -16
  509. package/dist/icons/fa6/FaRegFolderOpen.js +0 -16
  510. package/dist/icons/fa6/FaUpRightFromSquare.js +0 -16
  511. package/dist/icons/fa6/FaWandMagicSparkles.js +0 -16
  512. package/dist/icons/fa6/FaXTwitter.js +0 -16
  513. package/dist/icons/fi/FiActivity.js +0 -23
  514. package/dist/icons/fi/FiAlertCircle.js +0 -49
  515. package/dist/icons/fi/FiChevronDown.js +0 -23
  516. package/dist/icons/fi/FiClock.js +0 -31
  517. package/dist/icons/fi/FiCopy.js +0 -34
  518. package/dist/icons/fi/FiDownload.js +0 -40
  519. package/dist/icons/fi/FiFile.js +0 -27
  520. package/dist/icons/fi/FiFileText.js +0 -55
  521. package/dist/icons/fi/FiHardDrive.js +0 -55
  522. package/dist/icons/fi/FiRotateCcw.js +0 -27
  523. package/dist/icons/fi/FiUpload.js +0 -40
  524. package/dist/icons/fi/FiX.js +0 -37
  525. package/dist/icons/fi/FiZap.js +0 -23
  526. package/dist/icons/gi/GiSpy.js +0 -16
  527. package/dist/icons/go/GoGitCommit.js +0 -16
  528. package/dist/icons/go/GoGitPullRequest.js +0 -20
  529. package/dist/icons/go/GoIssueOpened.js +0 -16
  530. package/dist/icons/go/GoPlus.js +0 -16
  531. package/dist/icons/go/GoRepoForked.js +0 -28
  532. package/dist/icons/go/GoSignOut.js +0 -16
  533. package/dist/icons/go/GoSkip.js +0 -20
  534. package/dist/icons/go/GoVideo.js +0 -20
  535. package/dist/icons/gr/GrCloudComputer.js +0 -20
  536. package/dist/icons/gr/GrInbox.js +0 -20
  537. package/dist/icons/gr/GrServerCluster.js +0 -20
  538. package/dist/icons/gr/GrStorage.js +0 -20
  539. package/dist/icons/gr/GrTasks.js +0 -20
  540. package/dist/icons/hi/HiCog.js +0 -24
  541. package/dist/icons/hi/HiDuplicate.js +0 -24
  542. package/dist/icons/hi/HiOutlineArchive.js +0 -26
  543. package/dist/icons/hi/HiOutlineClipboardCopy.js +0 -26
  544. package/dist/icons/hi/HiOutlineHome.js +0 -26
  545. package/dist/icons/hi/HiQuestionMarkCircle.js +0 -24
  546. package/dist/icons/hi/HiServer.js +0 -24
  547. package/dist/icons/hi2/HiMiniCheckCircle.js +0 -24
  548. package/dist/icons/hi2/HiMiniLanguage.js +0 -28
  549. package/dist/icons/hi2/HiMiniMinusCircle.js +0 -24
  550. package/dist/icons/hi2/HiMiniXCircle.js +0 -24
  551. package/dist/icons/hi2/HiSparkles.js +0 -24
  552. package/dist/icons/im/ImSpinner5.js +0 -19
  553. package/dist/icons/io/IoIosNotifications.js +0 -16
  554. package/dist/icons/io/IoMdBuild.js +0 -16
  555. package/dist/icons/io/IoMdClose.js +0 -16
  556. package/dist/icons/io5/IoCloudUploadOutline.js +0 -32
  557. package/dist/icons/io5/IoDocumentTextOutline.js +0 -31
  558. package/dist/icons/io5/IoFileTrayFullOutline.js +0 -31
  559. package/dist/icons/io5/IoHeart.js +0 -16
  560. package/dist/icons/io5/IoHeartDislike.js +0 -16
  561. package/dist/icons/io5/IoHeartOutline.js +0 -22
  562. package/dist/icons/io5/IoInformationCircleOutline.js +0 -50
  563. package/dist/icons/io5/IoSettingsOutline.js +0 -22
  564. package/dist/icons/io5/IoWarningOutline.js +0 -40
  565. package/dist/icons/lu/LuArrowRight.js +0 -27
  566. package/dist/icons/lu/LuBadgeCheck.js +0 -27
  567. package/dist/icons/lu/LuBraces.js +0 -27
  568. package/dist/icons/lu/LuBrainCircuit.js +0 -101
  569. package/dist/icons/lu/LuCalendar.js +0 -46
  570. package/dist/icons/lu/LuCheck.js +0 -23
  571. package/dist/icons/lu/LuChevronLeft.js +0 -23
  572. package/dist/icons/lu/LuChevronRight.js +0 -23
  573. package/dist/icons/lu/LuCode.js +0 -27
  574. package/dist/icons/lu/LuExternalLink.js +0 -35
  575. package/dist/icons/lu/LuEye.js +0 -31
  576. package/dist/icons/lu/LuEyeOff.js +0 -40
  577. package/dist/icons/lu/LuFolderTree.js +0 -40
  578. package/dist/icons/lu/LuIdCard.js +0 -55
  579. package/dist/icons/lu/LuKeyboard.js +0 -71
  580. package/dist/icons/lu/LuLogs.js +0 -65
  581. package/dist/icons/lu/LuMail.js +0 -33
  582. package/dist/icons/lu/LuMegaphone.js +0 -27
  583. package/dist/icons/lu/LuMoon.js +0 -23
  584. package/dist/icons/lu/LuNetwork.js +0 -63
  585. package/dist/icons/lu/LuPartyPopper.js +0 -65
  586. package/dist/icons/lu/LuSettings2.js +0 -48
  587. package/dist/icons/lu/LuSheet.js +0 -72
  588. package/dist/icons/lu/LuShield.js +0 -23
  589. package/dist/icons/lu/LuSun.js +0 -69
  590. package/dist/icons/lu/LuTextCursorInput.js +0 -45
  591. package/dist/icons/lu/LuX.js +0 -27
  592. package/dist/icons/lu/LuZoomIn.js +0 -59
  593. package/dist/icons/lu/LuZoomOut.js +0 -49
  594. package/dist/icons/md/MdClear.js +0 -23
  595. package/dist/icons/md/MdDragHandle.js +0 -23
  596. package/dist/icons/md/MdInstallDesktop.js +0 -31
  597. package/dist/icons/md/MdOutlineAttachMoney.js +0 -23
  598. package/dist/icons/md/MdOutlineMoneyOff.js +0 -23
  599. package/dist/icons/md/MdPieChart.js +0 -23
  600. package/dist/icons/md/MdRefresh.js +0 -23
  601. package/dist/icons/md/MdReplay.js +0 -23
  602. package/dist/icons/md/MdSmartphone.js +0 -23
  603. package/dist/icons/pi/PiArrowBendUpRightBold.js +0 -19
  604. package/dist/icons/pi/PiPlugsConnectedFill.js +0 -19
  605. package/dist/icons/pi/PiRectangleDashed.js +0 -19
  606. package/dist/icons/pi/PiShareBold.js +0 -19
  607. package/dist/icons/si/SiAnthropic.js +0 -19
  608. package/dist/icons/si/SiHelm.js +0 -19
  609. package/dist/icons/si/SiKubernetes.js +0 -19
  610. package/dist/icons/tb/TbAlertTriangle.js +0 -35
  611. package/dist/icons/tb/TbAlertTriangleFilled.js +0 -19
  612. package/dist/icons/tb/TbApi.js +0 -40
  613. package/dist/icons/tb/TbBrain.js +0 -50
  614. package/dist/icons/tb/TbBuildingTunnel.js +0 -65
  615. package/dist/icons/tb/TbEdit.js +0 -35
  616. package/dist/icons/tb/TbLayoutSidebar.js +0 -27
  617. package/dist/icons/tb/TbLayoutSidebarLeftCollapse.js +0 -35
  618. package/dist/icons/tb/TbLayoutSidebarRightCollapse.js +0 -35
  619. package/dist/icons/tb/TbUser.js +0 -27
  620. package/dist/icons/tb/TbUserOff.js +0 -35
  621. package/dist/icons/tb/TbWorldShare.js +0 -55
  622. package/dist/icons/tb/TbWorldWww.js +0 -65
  623. package/dist/icons/ti/TiArrowSortedDown.js +0 -20
  624. package/dist/icons/ti/TiArrowSortedUp.js +0 -20
  625. package/dist/icons/ti/TiArrowUnsorted.js +0 -20
  626. package/dist/icons/ti/TiCancel.js +0 -20
  627. package/dist/icons/vsc/VscChromeMinimize.js +0 -19
  628. package/dist/icons/vsc/VscJson.js +0 -19
  629. package/dist/icons/vsc/VscLayoutSidebarLeft.js +0 -19
  630. package/dist/icons/vsc/VscPass.js +0 -27
  631. package/dist/icons/vsc/VscSplitHorizontal.js +0 -19
  632. package/dist/icons/vsc/VscTerminalPowershell.js +0 -19
  633. package/dist/list/ListPager.d.ts +0 -14
  634. package/dist/list/ListPager.js +0 -62
  635. package/dist/list/textEntry.d.ts +0 -2
  636. package/dist/list/textEntry.js +0 -10
  637. /package/dist/{ai/ui/codeBreaks.d.ts → components/markdownCodeBreaks.d.ts} +0 -0
@@ -1,51 +1,38 @@
1
- import { FaAngleRight } from "../icons/fa/FaAngleRight.js";
2
- import { LoaderIcon } from "./StatusIcons.js";
1
+ import { cx } from "../cx.js";
2
+ import { ChevronRightIcon } from "../icons.js";
3
+ import { buttonClasses } from "./buttonClasses.js";
4
+ import { Loader } from "./Loader.js";
3
5
  import { useLink } from "./Provider.js";
4
- import { clsx } from "clsx";
5
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
- import { forwardRef } from "react";
7
+ import { Button } from "@base-ui/react/button";
7
8
  //#region src/components/Button.tsx
8
- var Button = forwardRef(({ children, variant = "primary", size = "default", loading, icon, iconPosition = "right", fullWidth = true, className = "", disabled, ...props }, ref) => {
9
- const baseClasses = "inline-flex items-center justify-center gap-2 font-semibold rounded-lg transition-all duration-200 cursor-pointer border-none mt-2 disabled:opacity-50 disabled:cursor-not-allowed";
10
- const variantClasses = {
11
- primary: "bg-gradient-to-br from-[var(--gradient-start,var(--theme-element))] to-[var(--gradient-mid,var(--theme-link))] text-white shadow-[0_4px_14px_0_rgba(59,130,246,0.3)] hover:enabled:-translate-y-0.5 hover:enabled:shadow-[0_6px_20px_0_rgba(59,130,246,0.4)] active:enabled:translate-y-0",
12
- secondary: "bg-[var(--theme-muted-panel-bg)] text-[var(--theme-app)] border border-[var(--theme-border)] hover:enabled:bg-[var(--theme-border)]",
13
- outline: "bg-transparent text-[var(--theme-app)] border border-[var(--theme-border)] hover:enabled:bg-[var(--theme-muted-panel-bg)] hover:enabled:border-[var(--theme-muted-text-color)]",
14
- ghost: "bg-transparent text-[var(--theme-muted-text-color)] hover:enabled:text-[var(--theme-app)] hover:enabled:bg-[var(--theme-muted-panel-bg)]"
15
- };
16
- const sizeClasses = {
17
- sm: "py-2 px-4 text-[0.8125rem]",
18
- default: "py-3 px-5 text-sm",
19
- lg: "py-4 px-6 text-base"
20
- };
21
- const widthClass = fullWidth ? "w-full" : "w-auto";
22
- return /* @__PURE__ */ jsx("button", {
23
- ref,
24
- type: "button",
25
- disabled: disabled || loading,
26
- className: clsx(baseClasses, variantClasses[variant], sizeClasses[size], widthClass, className),
9
+ /** A button in the package's one look (see `buttonClasses`).
10
+ * `focusableWhenDisabled` keeps a disabled button's tooltip reachable. A link
11
+ * that looks like a button stays a link: give it `buttonClasses()`. */
12
+ function Button$1({ variant, size = "md", iconOnly, icon, loading = false, disabled, className, children, ...props }) {
13
+ return /* @__PURE__ */ jsxs(Button, {
27
14
  ...props,
28
- children: loading ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LoaderIcon, { className: "size-[18px]" }), children] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
29
- icon && iconPosition === "left" && /* @__PURE__ */ jsx("span", {
30
- className: "flex items-center",
31
- children: icon
32
- }),
33
- children,
34
- icon && iconPosition === "right" && /* @__PURE__ */ jsx("span", {
35
- className: "flex items-center",
36
- children: icon
37
- })
38
- ] })
15
+ disabled: disabled || loading,
16
+ "aria-busy": loading || void 0,
17
+ className: cx(buttonClasses({
18
+ variant,
19
+ size,
20
+ iconOnly
21
+ }), className),
22
+ children: [loading ? /* @__PURE__ */ jsx(Loader, {
23
+ inline: true,
24
+ decorative: true,
25
+ size: "1em"
26
+ }) : icon, children]
39
27
  });
40
- });
41
- Button.displayName = "Button";
28
+ }
42
29
  function MethodButton({ icon, label, description, href, loading, disabled, className = "", ...props }) {
43
30
  const Link = useLink();
44
- const baseClasses = "flex items-center w-full p-4 bg-[var(--theme-muted-panel-bg)] border border-[var(--theme-border)] rounded-xl text-[var(--theme-app)] text-[0.9375rem] font-medium cursor-pointer transition-all duration-200 no-underline mb-3 last:mb-0 hover:bg-[var(--theme-border)] hover:border-[var(--theme-muted-text-color)] hover:-translate-y-0.5 active:translate-y-0";
45
- const disabledClasses = "disabled:opacity-60 disabled:cursor-not-allowed disabled:hover:bg-[var(--ds-muted)] disabled:hover:border-[var(--ds-border)] disabled:hover:translate-y-0";
31
+ const baseClasses = "flex items-center w-full p-4 bg-[var(--theme-muted-panel-bg)] border border-[var(--theme-border)] rounded-xl text-[var(--theme-app)] text-[0.9375rem] font-medium cursor-pointer transition-all duration-200 no-underline mb-3 last:mb-0 hover:not-disabled:bg-(--theme-border) hover:not-disabled:border-(--theme-muted-text-color) hover:not-disabled:-translate-y-0.5 active:translate-y-0";
32
+ const disabledClasses = "disabled:opacity-60 disabled:cursor-not-allowed";
46
33
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
47
34
  icon && /* @__PURE__ */ jsx("span", {
48
- className: "size-10 rounded-lg bg-gradient-to-br from-[var(--gradient-start,var(--theme-element))] to-[var(--gradient-mid,var(--theme-link))] flex items-center justify-center shrink-0 mr-4 [&_svg]:size-5 [&_svg]:text-white",
35
+ className: "size-10 rounded-lg bg-gradient-to-br from-[var(--gradient-start,var(--theme-accent))] to-[var(--gradient-mid,var(--theme-link))] flex items-center justify-center shrink-0 mr-4 [&_svg]:size-5 [&_svg]:text-white",
49
36
  children: icon
50
37
  }),
51
38
  /* @__PURE__ */ jsxs("span", {
@@ -58,27 +45,35 @@ function MethodButton({ icon, label, description, href, loading, disabled, class
58
45
  children: description
59
46
  })]
60
47
  }),
61
- loading ? /* @__PURE__ */ jsx(LoaderIcon, { className: "size-5 text-[var(--theme-muted-text-color)] shrink-0 ml-2" }) : /* @__PURE__ */ jsx(FaAngleRight, { className: "size-5 text-[var(--theme-muted-text-color)] shrink-0 ml-2 transition-all duration-200 group-hover:translate-x-[3px] group-hover:text-[var(--theme-app)]" })
48
+ loading ? /* @__PURE__ */ jsx("span", {
49
+ className: "ml-2 shrink-0 text-[var(--theme-muted-text-color)]",
50
+ children: /* @__PURE__ */ jsx(Loader, {
51
+ inline: true,
52
+ decorative: true,
53
+ size: 20,
54
+ color: "currentColor"
55
+ })
56
+ }) : /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-5 text-[var(--theme-muted-text-color)] shrink-0 ml-2 transition-all duration-200 group-hover:translate-x-[3px] group-hover:text-[var(--theme-app)]" })
62
57
  ] });
63
58
  if (href) {
64
59
  if (href.startsWith("/api/") || href.startsWith("http")) return /* @__PURE__ */ jsx("a", {
65
60
  href,
66
- className: clsx("group", baseClasses, className),
61
+ className: cx("group", baseClasses, className),
67
62
  children: content
68
63
  });
69
64
  return /* @__PURE__ */ jsx(Link, {
70
65
  href,
71
- className: clsx("group", baseClasses, className),
66
+ className: cx("group", baseClasses, className),
72
67
  children: content
73
68
  });
74
69
  }
75
70
  return /* @__PURE__ */ jsx("button", {
76
71
  type: "button",
77
- className: clsx("group", baseClasses, disabledClasses, className),
72
+ className: cx("group", baseClasses, disabledClasses, className),
78
73
  disabled: disabled || loading,
79
74
  ...props,
80
75
  children: content
81
76
  });
82
77
  }
83
78
  //#endregion
84
- export { Button, MethodButton };
79
+ export { Button$1 as Button, MethodButton };
@@ -1,22 +1,28 @@
1
- import { FaInfoCircle } from "../icons/fa/FaInfoCircle.js";
2
- import { TbAlertTriangle } from "../icons/tb/TbAlertTriangle.js";
3
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
+ import { InfoIcon, WarningIcon } from "../icons.js";
3
+ import { toneSurface } from "./tone.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/Callout.tsx
6
6
  function CalloutIcon({ type }) {
7
- if (type === "warning" || type === "error") return /* @__PURE__ */ jsx(TbAlertTriangle, { className: "h-6 w-6 mr-4 text-lg" });
8
- else return /* @__PURE__ */ jsx(FaInfoCircle, { className: "h-6 w-6 mr-4 text-lg" });
7
+ if (type === "warning" || type === "error") return /* @__PURE__ */ jsx(WarningIcon, {
8
+ "aria-hidden": "true",
9
+ className: "mr-3 h-5 w-5 shrink-0"
10
+ });
11
+ else return /* @__PURE__ */ jsx(InfoIcon, {
12
+ "aria-hidden": "true",
13
+ className: "mr-3 h-5 w-5 shrink-0"
14
+ });
9
15
  }
10
16
  function Callout({ type, className = "", children }) {
11
17
  return /* @__PURE__ */ jsx("div", {
12
- className: clsx(className, type === "warning" && "bg-orange-100 border-orange-500 text-orange-700", type === "error" && "bg-red-100 border-red-500 text-red-700", type === "info" && "bg-blue-100 border-blue-500 text-blue-700", "border-t-4 rounded-b px-4 py-3 shadow-md my-4"),
13
- role: "alert",
18
+ className: cx(toneSurface[type], "my-4 rounded-xl border px-4 py-3", className),
19
+ role: type === "info" ? "note" : "alert",
14
20
  children: /* @__PURE__ */ jsxs("div", {
15
- className: "flex",
16
- children: [/* @__PURE__ */ jsx("div", {
17
- className: "py-1",
18
- children: /* @__PURE__ */ jsx(CalloutIcon, { type })
19
- }), /* @__PURE__ */ jsx("div", { children })]
21
+ className: "flex text-sm",
22
+ children: [/* @__PURE__ */ jsx(CalloutIcon, { type }), /* @__PURE__ */ jsx("div", {
23
+ className: "min-w-0",
24
+ children
25
+ })]
20
26
  })
21
27
  });
22
28
  }
@@ -1,13 +1,23 @@
1
- import type { ReactNode } from 'react';
2
- interface CardProps {
1
+ import type { ReactElement, ReactNode } from 'react';
2
+ declare const sizeClasses: {
3
+ sm: string;
4
+ md: string;
5
+ lg: string;
6
+ };
7
+ export interface CardProps {
3
8
  children: ReactNode;
4
- className?: string;
5
- wide?: boolean;
6
- compact?: boolean;
7
- interactive?: boolean;
8
- authShadow?: boolean;
9
+ /** Its width and padding: `sm` for a short form, `lg` for a wide one. */
10
+ size?: keyof typeof sizeClasses | undefined;
11
+ /** A stronger shadow, for a card standing alone on a page, such as sign-in. */
12
+ elevated?: boolean | undefined;
13
+ /** Renders the card as this element, such as a link or a button, which makes
14
+ * the whole card pressable: it lifts on hover and shows focus. */
15
+ render?: ReactElement | undefined;
16
+ className?: string | undefined;
9
17
  }
10
- export declare function Card({ children, className, wide, compact, interactive, authShadow, }: CardProps): import("react").JSX.Element;
18
+ /** A raised surface holding one task, such as a sign-in form or a choice among
19
+ * a few options. */
20
+ export declare function Card({ children, size, elevated, render, className }: CardProps): ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
11
21
  interface CardHeaderProps {
12
22
  badge?: ReactNode;
13
23
  title: string;
@@ -1,15 +1,26 @@
1
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useRender } from "@base-ui/react/use-render";
3
4
  //#region src/components/Card.tsx
4
- function Card({ children, className = "", wide, compact, interactive, authShadow }) {
5
- return /* @__PURE__ */ jsx("div", {
6
- className: clsx("w-full bg-[var(--theme-card-bg)] backdrop-blur-xl border border-[var(--theme-border)] rounded-2xl", authShadow ? "shadow-[var(--theme-auth-shadow)]" : "shadow-[var(--theme-shadow)]", wide && "max-w-[560px] p-8", compact && "max-w-[400px] p-6", !wide && !compact && "max-w-[520px] p-10", interactive && "ds-card-interactive cursor-pointer", className),
7
- children
5
+ var sizeClasses = {
6
+ sm: "max-w-[400px] p-6",
7
+ md: "max-w-[520px] p-10",
8
+ lg: "max-w-[560px] p-8"
9
+ };
10
+ /** A raised surface holding one task, such as a sign-in form or a choice among
11
+ * a few options. */
12
+ function Card({ children, size = "md", elevated = false, render, className }) {
13
+ return useRender({
14
+ render: render ?? /* @__PURE__ */ jsx("div", {}),
15
+ props: {
16
+ className: cx("block w-full rounded-2xl border border-(--theme-border) bg-(--theme-panel-bg) backdrop-blur-xl", elevated ? "shadow-(--theme-shadow-xl)" : "shadow-(--theme-shadow)", sizeClasses[size], render && "cursor-pointer text-left transition-[background-color,box-shadow] duration-150 hover:bg-(--theme-panel-hover) hover:shadow-(--theme-shadow-lg) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--theme-link) motion-reduce:transition-none", className),
17
+ children
18
+ }
8
19
  });
9
20
  }
10
21
  function CardHeader({ badge, title, description, className = "", align = "center" }) {
11
22
  return /* @__PURE__ */ jsxs("div", {
12
- className: clsx(align === "center" ? "text-center" : "text-left", "mb-6", className),
23
+ className: cx(align === "center" ? "text-center" : "text-left", "mb-6", className),
13
24
  children: [
14
25
  badge && /* @__PURE__ */ jsx("div", {
15
26
  className: "inline-flex items-center gap-1.5 py-1.5 px-3 text-xs font-medium bg-[var(--theme-muted-panel-bg)] border border-[var(--theme-border)] rounded-full text-[var(--theme-muted-text-color)] mb-4 transition-colors duration-200",
@@ -0,0 +1,9 @@
1
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
2
+ export { CheckboxGroup } from '@base-ui/react/checkbox-group';
3
+ export interface CheckboxProps extends Omit<BaseCheckbox.Root.Props, 'className'> {
4
+ className?: string | undefined;
5
+ }
6
+ /** A box that ticks on and off, or shows a mixed state with `indeterminate`. Name it with an
7
+ * enclosing `<label>`, or `aria-label` when it stands alone, as in a table row. In a
8
+ * `CheckboxGroup`, `value` identifies it and the group holds which are ticked. */
9
+ export declare function Checkbox({ className, ...props }: CheckboxProps): import("react").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { cx } from "../cx.js";
2
+ import { CheckIcon, MinusIcon } from "../icons.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Checkbox } from "@base-ui/react/checkbox";
5
+ import { CheckboxGroup } from "@base-ui/react/checkbox-group";
6
+ //#region src/components/Checkbox.tsx
7
+ /** A box that ticks on and off, or shows a mixed state with `indeterminate`. Name it with an
8
+ * enclosing `<label>`, or `aria-label` when it stands alone, as in a table row. In a
9
+ * `CheckboxGroup`, `value` identifies it and the group holds which are ticked. */
10
+ function Checkbox$1({ className, ...props }) {
11
+ return /* @__PURE__ */ jsx(Checkbox.Root, {
12
+ ...props,
13
+ className: cx("flex size-4 shrink-0 items-center justify-center rounded border border-(--theme-border) bg-(--theme-input-bg) text-(--theme-accent-text) cursor-pointer outline-none transition-colors", "data-checked:border-(--theme-accent) data-checked:bg-(--theme-accent)", "data-indeterminate:border-(--theme-accent) data-indeterminate:bg-(--theme-accent)", "focus-visible:ring-2 focus-visible:ring-(--theme-focus-ring) aria-invalid:border-(--theme-error)", "data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
14
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
15
+ className: "flex",
16
+ render: (indicatorProps, state) => /* @__PURE__ */ jsx("span", {
17
+ ...indicatorProps,
18
+ children: state.indeterminate ? /* @__PURE__ */ jsx(MinusIcon, {
19
+ "aria-hidden": "true",
20
+ className: "size-3.5"
21
+ }) : /* @__PURE__ */ jsx(CheckIcon, {
22
+ "aria-hidden": "true",
23
+ className: "size-3"
24
+ })
25
+ })
26
+ })
27
+ });
28
+ }
29
+ //#endregion
30
+ export { Checkbox$1 as Checkbox, CheckboxGroup };
@@ -10,6 +10,7 @@ interface FieldProps {
10
10
  'aria-labelledby'?: string | undefined;
11
11
  'aria-describedby'?: string | undefined;
12
12
  'aria-invalid'?: boolean | undefined;
13
+ 'aria-required'?: boolean | undefined;
13
14
  /** Classes for the field box: border, background, size. */
14
15
  className?: string | undefined;
15
16
  }
@@ -23,6 +24,13 @@ type SelectionProps<Value> = {
23
24
  value?: readonly Value[] | undefined;
24
25
  defaultValue?: readonly Value[] | undefined;
25
26
  onValueChange?: ((value: NoInfer<Value>[]) => void) | undefined;
27
+ /** Typed text the list doesn't have can be added as a value of its own, as tags are. The
28
+ * values are then strings. For one free-text value, use Autocomplete. */
29
+ creatable?: (Value extends string ? boolean : never) | undefined;
30
+ /** The most values the field takes; past it, only removing one lets another in. */
31
+ maxItems?: number | undefined;
32
+ /** The longest text that can be typed, such as for a created value. */
33
+ maxLength?: number | undefined;
26
34
  };
27
35
  export type ComboboxProps<Value = string> = FieldProps & SelectionProps<Value> & {
28
36
  items: ComboboxItems<Value>;
@@ -46,4 +54,4 @@ export interface AutocompleteProps extends FieldProps {
46
54
  /** A pick-from-the-list field: one value, or several with `multiple`. Typing filters the list. */
47
55
  export declare function Combobox<Value = string>(props: ComboboxProps<Value>): import("react").JSX.Element;
48
56
  /** A free-text field that suggests values as you type. */
49
- export declare function Autocomplete({ items, value, defaultValue, onValueChange, className, placeholder, disabled, required, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, }: AutocompleteProps): import("react").JSX.Element;
57
+ export declare function Autocomplete({ items, value, defaultValue, onValueChange, className, placeholder, disabled, required, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, 'aria-required': ariaRequired, }: AutocompleteProps): import("react").JSX.Element;
@@ -1,12 +1,11 @@
1
- import { FaCaretDown } from "../icons/fa/FaCaretDown.js";
2
- import { FaCheck } from "../icons/fa/FaCheck.js";
3
- import { FiX } from "../icons/fi/FiX.js";
4
- import { panelClassName, panelItemClassName, portalContainer, positionerClassName } from "./floating.js";
1
+ import { cx } from "../cx.js";
2
+ import { AddIcon, CheckIcon, ChevronDownIcon, RemoveIcon } from "../icons.js";
3
+ import { panelClassName, panelItemClassName, positionerClassName } from "./floating.js";
5
4
  import { Tooltip } from "./Tooltip.js";
6
5
  import { useStrings } from "./Provider.js";
7
6
  import { useQueryMatch } from "./search.js";
8
7
  import { isComboboxGroup } from "./comboboxItems.js";
9
- import { clsx } from "clsx";
8
+ import { fieldBox } from "./fieldBox.js";
10
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
10
  import { useCallback, useImperativeHandle, useMemo, useRef, useState } from "react";
12
11
  import { Combobox } from "@base-ui/react/combobox";
@@ -66,16 +65,20 @@ function useEntries(items) {
66
65
  }
67
66
  function useEntryFilter() {
68
67
  const match = useQueryMatch();
69
- return useCallback((entry, query) => match(query, entry.label, typeof entry.value === "string" ? entry.value : void 0, entry.group), [match]);
68
+ return useCallback((entry, query) => entry.created === true || match(query, entry.label, typeof entry.value === "string" ? entry.value : void 0, entry.group), [match]);
70
69
  }
71
70
  var entryLabel = (entry) => entry?.label ?? "";
72
- var fieldClassName = "theme-input relative flex min-h-8 w-full items-center gap-1 rounded-md border text-sm focus-within:border-(--theme-element) focus-within:ring-1 focus-within:ring-(--theme-element) has-[[aria-invalid=true]]:border-(--theme-error) has-[input:disabled]:cursor-not-allowed has-[input:disabled]:bg-(--theme-input-disabled-bg) has-[input:disabled]:text-(--theme-input-disabled-text)";
71
+ var fieldClassName = cx(fieldBox({
72
+ within: true,
73
+ multiline: true,
74
+ padded: false
75
+ }), "relative flex items-center gap-1");
73
76
  var inputClassName = "h-full min-w-12 flex-1 self-stretch border-0 bg-transparent py-1.5 pl-3 text-inherit outline-none placeholder:text-(--theme-muted-text-color) disabled:cursor-not-allowed";
74
77
  var triggerClassName = "flex shrink-0 items-center self-stretch px-2 text-(--theme-muted-text-color) disabled:cursor-not-allowed";
75
- var popupInputClassName = "theme-input h-7 w-full rounded-md border px-2 text-sm outline-none placeholder:text-(--theme-muted-text-color) focus:border-(--theme-element)";
78
+ var popupInputClassName = fieldBox({ size: "sm" });
76
79
  /** A pick-from-the-list field: one value, or several with `multiple`. Typing filters the list. */
77
80
  function Combobox$1(props) {
78
- const { items, isItemEqualToValue = dequal, itemToStringLabel = String, className, placeholder, disabled, required, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, trigger, triggerTooltip } = props;
81
+ const { items, isItemEqualToValue = dequal, itemToStringLabel = String, className, placeholder, disabled, required, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired, trigger, triggerTooltip } = props;
79
82
  const entries = useEntries(items);
80
83
  const filter = useEntryFilter();
81
84
  const strings = useStrings();
@@ -89,25 +92,46 @@ function Combobox$1(props) {
89
92
  const toEntries = (values) => values?.map(entryOf);
90
93
  const toSingle = (value) => value === void 0 ? void 0 : value === null ? null : entryOf(value);
91
94
  const selected = props.multiple ? void 0 : toSingle(props.value);
95
+ const [uncontrolledCount, setUncontrolledCount] = useState(props.multiple ? props.defaultValue?.length ?? 0 : 0);
96
+ const chosen = props.multiple ? props.value ?? null : null;
97
+ const full = props.multiple && props.maxItems !== void 0 && (chosen?.length ?? uncontrolledCount) >= props.maxItems;
98
+ const isChosen = (entry) => chosen?.some((value) => isItemEqualToValue(entry.value, value)) ?? false;
99
+ const typed = inputValue?.trim() ?? "";
100
+ const lowered = typed.toLocaleLowerCase();
101
+ const sameText = (value, label) => label?.toLocaleLowerCase() === lowered || typeof value === "string" && value.toLocaleLowerCase() === lowered;
102
+ const created = props.multiple && props.creatable && typed !== "" && !full && !entries.flat.some((entry) => sameText(entry.value, entry.label)) && !chosen?.some((value) => sameText(value)) ? {
103
+ value: typed,
104
+ label: t.add(typed),
105
+ icon: /* @__PURE__ */ jsx(AddIcon, {}),
106
+ created: true
107
+ } : void 0;
108
+ const [first] = entries.items;
109
+ const listItems = !created ? entries.items : first !== void 0 && "items" in first ? [{
110
+ label: "",
111
+ items: [created],
112
+ order: -1
113
+ }, ...entries.items] : [created, ...entries.items];
92
114
  const selectedIcon = selected?.icon && (inputValue === null || inputValue === selected.label) ? selected.icon : null;
93
115
  const input = /* @__PURE__ */ jsx(Combobox.Input, {
94
116
  id: trigger ? void 0 : id,
95
- placeholder,
117
+ placeholder: full && props.maxItems !== void 0 ? t.limitReached(props.maxItems) : placeholder,
118
+ maxLength: props.multiple ? props.maxLength : void 0,
96
119
  "aria-label": ariaLabel || void 0,
97
120
  "aria-labelledby": ariaLabelledBy,
98
121
  "aria-describedby": ariaDescribedBy,
99
122
  "aria-invalid": ariaInvalid || void 0,
123
+ "aria-required": ariaRequired || required || void 0,
100
124
  autoComplete: "off",
101
125
  className: trigger ? popupInputClassName : inputClassName
102
126
  });
103
127
  const itemRow = (entry, rowProps) => /* @__PURE__ */ jsxs(Combobox.Item, {
104
128
  value: entry,
105
- disabled: entry.disabled,
129
+ disabled: entry.disabled || full && !isChosen(entry),
106
130
  ...rowProps.props,
107
131
  className: itemClassName,
108
132
  children: [/* @__PURE__ */ jsx(ItemContent, { entry }), /* @__PURE__ */ jsx(Combobox.ItemIndicator, {
109
133
  className: "ml-auto flex shrink-0 items-center",
110
- children: /* @__PURE__ */ jsx(FaCheck, { className: "size-3.5" })
134
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
111
135
  })]
112
136
  }, rowProps.key);
113
137
  const parts = trigger ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Tooltip, {
@@ -118,6 +142,7 @@ function Combobox$1(props) {
118
142
  "aria-labelledby": ariaLabelledBy,
119
143
  "aria-describedby": ariaDescribedBy,
120
144
  "aria-invalid": ariaInvalid || void 0,
145
+ "aria-required": ariaRequired || required || void 0,
121
146
  render: trigger
122
147
  })
123
148
  }), /* @__PURE__ */ jsx(ListPopup, {
@@ -133,7 +158,7 @@ function Combobox$1(props) {
133
158
  renderItem: itemRow
134
159
  })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(Combobox.InputGroup, {
135
160
  "data-testid": "combobox",
136
- className: clsx(fieldClassName, className),
161
+ className: cx(fieldClassName, className),
137
162
  children: [props.multiple ? /* @__PURE__ */ jsxs(Combobox.Chips, {
138
163
  className: "flex min-w-0 flex-1 flex-wrap items-center gap-1 py-1 pl-1",
139
164
  children: [/* @__PURE__ */ jsx(Combobox.Value, { children: (values) => values.map((entry) => /* @__PURE__ */ jsxs(Combobox.Chip, {
@@ -142,7 +167,7 @@ function Combobox$1(props) {
142
167
  children: [entry.label, /* @__PURE__ */ jsx(Combobox.ChipRemove, {
143
168
  "aria-label": `${strings.common.remove} ${entry.label}`,
144
169
  className: "flex size-4 items-center justify-center rounded hover:bg-(--theme-hover)",
145
- children: /* @__PURE__ */ jsx(FiX, { className: "size-3" })
170
+ children: /* @__PURE__ */ jsx(RemoveIcon, { className: "size-3" })
146
171
  })]
147
172
  }, entry.label)) }), input]
148
173
  }) : /* @__PURE__ */ jsxs(Fragment, { children: [selectedIcon && /* @__PURE__ */ jsx("span", {
@@ -152,7 +177,7 @@ function Combobox$1(props) {
152
177
  "aria-label": t.showOptions,
153
178
  "data-testid": "combobox-button",
154
179
  className: triggerClassName,
155
- children: /* @__PURE__ */ jsx(FaCaretDown, { className: "size-3" })
180
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3" })
156
181
  })]
157
182
  }), /* @__PURE__ */ jsx(ListPopup, {
158
183
  listRef: list,
@@ -162,7 +187,7 @@ function Combobox$1(props) {
162
187
  renderItem: itemRow
163
188
  })] });
164
189
  const root = {
165
- items: entries.items,
190
+ items: listItems,
166
191
  filter,
167
192
  isItemEqualToValue: (a, b) => isItemEqualToValue(a.value, b.value),
168
193
  itemToStringLabel: entryLabel,
@@ -171,6 +196,7 @@ function Combobox$1(props) {
171
196
  disabled,
172
197
  required,
173
198
  virtualized: true,
199
+ autoHighlight: Boolean(props.multiple && props.creatable),
174
200
  children: parts
175
201
  };
176
202
  return props.multiple ? /* @__PURE__ */ jsx(Combobox.Root, {
@@ -178,7 +204,10 @@ function Combobox$1(props) {
178
204
  multiple: true,
179
205
  value: toEntries(props.value),
180
206
  defaultValue: toEntries(props.defaultValue),
181
- onValueChange: (next) => props.onValueChange?.(next.map((entry) => entry.value))
207
+ onValueChange: (next) => {
208
+ setUncontrolledCount(next.length);
209
+ props.onValueChange?.(next.map((entry) => entry.value));
210
+ }
182
211
  }) : /* @__PURE__ */ jsx(Combobox.Root, {
183
212
  ...root,
184
213
  value: selected,
@@ -187,7 +216,7 @@ function Combobox$1(props) {
187
216
  });
188
217
  }
189
218
  /** A free-text field that suggests values as you type. */
190
- function Autocomplete$1({ items, value, defaultValue, onValueChange, className, placeholder, disabled, required, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid }) {
219
+ function Autocomplete$1({ items, value, defaultValue, onValueChange, className, placeholder, disabled, required, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, "aria-required": ariaRequired }) {
191
220
  const entries = useEntries(items);
192
221
  const filter = useEntryFilter();
193
222
  const t = useStrings().dropdown;
@@ -205,7 +234,7 @@ function Autocomplete$1({ items, value, defaultValue, onValueChange, className,
205
234
  virtualized: true,
206
235
  children: [/* @__PURE__ */ jsxs(Autocomplete.InputGroup, {
207
236
  "data-testid": "combobox",
208
- className: clsx(fieldClassName, className),
237
+ className: cx(fieldClassName, className),
209
238
  children: [/* @__PURE__ */ jsx(Autocomplete.Input, {
210
239
  id,
211
240
  placeholder,
@@ -213,13 +242,14 @@ function Autocomplete$1({ items, value, defaultValue, onValueChange, className,
213
242
  "aria-labelledby": ariaLabelledBy,
214
243
  "aria-describedby": ariaDescribedBy,
215
244
  "aria-invalid": ariaInvalid || void 0,
245
+ "aria-required": ariaRequired || required || void 0,
216
246
  autoComplete: "off",
217
247
  className: inputClassName
218
248
  }), entries.flat.length > 0 && /* @__PURE__ */ jsx(Autocomplete.Trigger, {
219
249
  "aria-label": t.showOptions,
220
250
  "data-testid": "combobox-button",
221
251
  className: triggerClassName,
222
- children: /* @__PURE__ */ jsx(FaCaretDown, { className: "size-3" })
252
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3" })
223
253
  })]
224
254
  }), /* @__PURE__ */ jsx(ListPopup, {
225
255
  listRef: list,
@@ -233,7 +263,7 @@ function Autocomplete$1({ items, value, defaultValue, onValueChange, className,
233
263
  })]
234
264
  });
235
265
  }
236
- var itemClassName = clsx(panelItemClassName, "data-selected:font-medium");
266
+ var itemClassName = cx(panelItemClassName, "data-selected:font-medium");
237
267
  function ItemContent({ entry }) {
238
268
  return /* @__PURE__ */ jsxs(Fragment, { children: [entry.icon && /* @__PURE__ */ jsx("span", {
239
269
  className: "flex shrink-0 items-center",
@@ -275,30 +305,27 @@ function GroupHeading({ group }) {
275
305
  }
276
306
  /** Portal, positioner and popup shared by Combobox and Autocomplete; both use the same parts. */
277
307
  function ListPopup({ listRef, empty, statusGroups = [], query = "", header, className = "w-(--anchor-width) max-w-(--available-width)", renderItem }) {
278
- return /* @__PURE__ */ jsx(Combobox.Portal, {
279
- container: portalContainer(),
280
- children: /* @__PURE__ */ jsx(Combobox.Positioner, {
281
- align: "start",
282
- sideOffset: 4,
283
- className: positionerClassName,
284
- children: /* @__PURE__ */ jsxs(Combobox.Popup, {
285
- className: clsx("overflow-hidden", className, panelClassName),
286
- children: [
287
- header,
288
- empty && statusGroups.length === 0 && /* @__PURE__ */ jsx(Combobox.Empty, {
289
- className: "px-3 py-2 text-(--theme-muted-text-color) empty:hidden",
290
- children: empty
291
- }),
292
- /* @__PURE__ */ jsx(Combobox.List, { children: /* @__PURE__ */ jsx(VirtualList, {
293
- ref: listRef,
294
- statusGroups,
295
- query,
296
- renderItem
297
- }) })
298
- ]
299
- })
308
+ return /* @__PURE__ */ jsx(Combobox.Portal, { children: /* @__PURE__ */ jsx(Combobox.Positioner, {
309
+ align: "start",
310
+ sideOffset: 4,
311
+ className: positionerClassName,
312
+ children: /* @__PURE__ */ jsxs(Combobox.Popup, {
313
+ className: cx("overflow-hidden", className, panelClassName),
314
+ children: [
315
+ header,
316
+ empty && statusGroups.length === 0 && /* @__PURE__ */ jsx(Combobox.Empty, {
317
+ className: "px-3 py-2 text-(--theme-muted-text-color) empty:hidden",
318
+ children: empty
319
+ }),
320
+ /* @__PURE__ */ jsx(Combobox.List, { children: /* @__PURE__ */ jsx(VirtualList, {
321
+ ref: listRef,
322
+ statusGroups,
323
+ query,
324
+ renderItem
325
+ }) })
326
+ ]
300
327
  })
301
- });
328
+ }) });
302
329
  }
303
330
  function toRows(filtered, statusGroups) {
304
331
  const nodes = statusGroups.length ? [...filtered, ...statusGroups].sort((a, b) => ("order" in a ? a.order : 0) - ("order" in b ? b.order : 0)) : filtered;
@@ -1,12 +1,11 @@
1
1
  import { useStrings } from "./Provider.js";
2
- import { dangerButtonClasses, ghostButtonClasses, primaryButtonClasses } from "./ghostButton.js";
2
+ import { Button } from "./Button.js";
3
3
  import { Modal, ModalDescription, ModalTitle } from "./Modal.js";
4
- import { clsx } from "clsx";
5
4
  import { jsx, jsxs } from "react/jsx-runtime";
6
5
  import { useCallback, useEffect, useRef, useState } from "react";
7
6
  //#region src/components/ConfirmModal.tsx
8
7
  function ConfirmModal({ open, onClose, title, description, children, confirmLabel, onConfirm, confirmDisabled = false, destructive = false, align = "top", cancelLabel, closeOnConfirm = true }) {
9
- const strings = useStrings();
8
+ const { common } = useStrings();
10
9
  const [pending, setPending] = useState(false);
11
10
  const firedRef = useRef(false);
12
11
  useEffect(() => {
@@ -54,17 +53,18 @@ function ConfirmModal({ open, onClose, title, description, children, confirmLabe
54
53
  ]
55
54
  }), /* @__PURE__ */ jsxs("div", {
56
55
  className: "mt-5 flex items-center justify-end gap-2 border-t border-(--theme-border) px-5 py-3",
57
- children: [/* @__PURE__ */ jsx("button", {
58
- type: "button",
56
+ children: [/* @__PURE__ */ jsx(Button, {
57
+ variant: "ghost",
58
+ size: "sm",
59
59
  onClick: onClose,
60
60
  disabled: pending,
61
- className: clsx(ghostButtonClasses, pending && "cursor-wait"),
62
- children: cancelLabel ?? strings.modal.cancel
63
- }), /* @__PURE__ */ jsx("button", {
64
- type: "button",
61
+ children: cancelLabel ?? common.cancel
62
+ }), /* @__PURE__ */ jsx(Button, {
63
+ variant: destructive ? "danger" : "primary",
64
+ size: "sm",
65
65
  onClick: runConfirm,
66
- disabled: confirmDisabled || pending,
67
- className: clsx(destructive ? dangerButtonClasses : primaryButtonClasses, "disabled:cursor-not-allowed disabled:opacity-50", pending && "cursor-wait"),
66
+ disabled: confirmDisabled,
67
+ loading: pending,
68
68
  children: confirmLabel
69
69
  })]
70
70
  })]
@@ -1,17 +1,11 @@
1
+ import { type FloatingAnchor } from './floating.js';
1
2
  import { type MenuEntry, type MenuSearch } from './MenuEntries.js';
2
- /** Where a menu opens: under an element, such as the button that opened it, or
3
- * at a pointer event's point, which then moves with the element it landed on. */
4
- export type MenuAnchor = Element | {
5
- clientX: number;
6
- clientY: number;
7
- currentTarget?: EventTarget | null;
8
- };
9
3
  export interface OpenMenuOptions {
10
4
  search?: MenuSearch | undefined;
11
5
  /** Called once the menu closes, or another menu replaces it. */
12
6
  onClose?: (() => void) | undefined;
13
7
  }
14
- export type OpenMenu = (at: MenuAnchor, items: MenuEntry[], options?: OpenMenuOptions) => void;
8
+ export type OpenMenu = (at: FloatingAnchor, items: MenuEntry[], options?: OpenMenuOptions) => void;
15
9
  /**
16
10
  * One menu that any number of rows, buttons or a canvas open with their own
17
11
  * items, so a long list holds a single menu rather than one per row. Render