@parallelworks/ui 0.43.0 → 0.45.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 (622) 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/toolStrings.d.ts +37 -0
  8. package/dist/ai/agent/toolStrings.js +35 -0
  9. package/dist/ai/agent/toolfmt.d.ts +8 -3
  10. package/dist/ai/agent/toolfmt.js +50 -65
  11. package/dist/ai/ai.css +18 -31
  12. package/dist/ai/components/AllocationSelector.js +2 -2
  13. package/dist/ai/components/AttachmentManager.js +28 -29
  14. package/dist/ai/components/AttachmentUpload.js +25 -30
  15. package/dist/ai/components/BlockedGroupBanner.js +2 -2
  16. package/dist/ai/components/BranchNavigator.js +3 -4
  17. package/dist/ai/components/ChatEmptyState.js +8 -7
  18. package/dist/ai/components/ChatInput.js +10 -12
  19. package/dist/ai/components/ChatLayout.js +3 -3
  20. package/dist/ai/components/ChatMessage.js +49 -61
  21. package/dist/ai/components/ChatMessageList.js +46 -42
  22. package/dist/ai/components/ChatSidebar.js +26 -34
  23. package/dist/ai/components/ChatStage.js +1 -1
  24. package/dist/ai/components/ComposerChrome.js +3 -4
  25. package/dist/ai/components/DragOverlay.js +6 -4
  26. package/dist/ai/components/ModelSelector.js +14 -15
  27. package/dist/ai/components/PastedText.js +18 -14
  28. package/dist/ai/components/ProviderIssueBanner.js +3 -4
  29. package/dist/ai/components/Reasoning.d.ts +12 -6
  30. package/dist/ai/components/Reasoning.js +31 -18
  31. package/dist/ai/components/ShareDialog.js +25 -28
  32. package/dist/ai/components/SlashMenu.js +3 -3
  33. package/dist/ai/components/agent/ActivityLine.d.ts +0 -5
  34. package/dist/ai/components/agent/ActivityLine.js +17 -54
  35. package/dist/ai/components/agent/AgentMessageParts.js +139 -149
  36. package/dist/ai/components/conversationActions.js +16 -16
  37. package/dist/ai/core/ChatProvider.d.ts +2 -4
  38. package/dist/ai/core/ChatProvider.js +25 -38
  39. package/dist/ai/core/exportConversation.js +4 -4
  40. package/dist/ai/core/sidebarState.d.ts +8 -6
  41. package/dist/ai/core/sidebarState.js +21 -28
  42. package/dist/ai/core/useKeyboardShortcuts.js +14 -5
  43. package/dist/ai/index.d.ts +4 -5
  44. package/dist/ai/index.js +7 -7
  45. package/dist/ai/strings.d.ts +14 -31
  46. package/dist/ai/strings.js +19 -39
  47. package/dist/ai/types.d.ts +0 -5
  48. package/dist/ai/ui/ConversationSidebar.d.ts +12 -9
  49. package/dist/ai/ui/ConversationSidebar.js +43 -87
  50. package/dist/ai/ui/Markdown.d.ts +3 -6
  51. package/dist/ai/ui/Markdown.js +6 -73
  52. package/dist/ai/ui/Notice.js +10 -12
  53. package/dist/ai/ui/chip.d.ts +2 -2
  54. package/dist/ai/ui/chip.js +1 -1
  55. package/dist/ai/ui/sidebar.d.ts +4 -20
  56. package/dist/ai/ui/sidebar.js +30 -67
  57. package/dist/ai/utils.d.ts +0 -1
  58. package/dist/ai/utils.js +1 -14
  59. package/dist/brandIcons.d.ts +51 -0
  60. package/dist/brandIcons.js +75 -0
  61. package/dist/components/Avatar.d.ts +3 -1
  62. package/dist/components/Avatar.js +34 -28
  63. package/dist/components/Button.d.ts +12 -7
  64. package/dist/components/Button.js +39 -44
  65. package/dist/components/Callout.js +18 -12
  66. package/dist/components/Card.d.ts +18 -8
  67. package/dist/components/Card.js +17 -6
  68. package/dist/components/Checkbox.d.ts +9 -0
  69. package/dist/components/Checkbox.js +30 -0
  70. package/dist/components/Combobox.d.ts +9 -1
  71. package/dist/components/Combobox.js +71 -44
  72. package/dist/components/ConfirmModal.js +11 -11
  73. package/dist/components/ContextMenu.d.ts +2 -8
  74. package/dist/components/ContextMenu.js +2 -29
  75. package/dist/components/CopyToClipboard.js +17 -36
  76. package/dist/components/CreateModal.d.ts +3 -24
  77. package/dist/components/CreateModal.js +46 -113
  78. package/dist/components/DatePicker.d.ts +31 -0
  79. package/dist/components/DatePicker.js +191 -0
  80. package/dist/components/DescriptionList.js +4 -4
  81. package/dist/components/Disclosure.d.ts +34 -0
  82. package/dist/components/Disclosure.js +46 -0
  83. package/dist/components/Drawer.d.ts +47 -0
  84. package/dist/components/Drawer.js +120 -0
  85. package/dist/components/EmptyState.d.ts +15 -10
  86. package/dist/components/EmptyState.js +13 -8
  87. package/dist/components/ExternalLink.d.ts +8 -0
  88. package/dist/components/ExternalLink.js +29 -0
  89. package/dist/components/Field.d.ts +70 -0
  90. package/dist/components/Field.js +159 -0
  91. package/dist/components/HoverCard.js +11 -14
  92. package/dist/components/IconButton.d.ts +16 -13
  93. package/dist/components/IconButton.js +27 -18
  94. package/dist/components/InfoTip.js +16 -23
  95. package/dist/components/Input.d.ts +10 -9
  96. package/dist/components/Input.js +54 -96
  97. package/dist/components/LetterBadge.js +2 -2
  98. package/dist/components/Loader.d.ts +15 -8
  99. package/dist/components/Loader.js +29 -19
  100. package/dist/components/Markdown.d.ts +7 -1
  101. package/dist/components/Markdown.js +2 -0
  102. package/dist/components/MarkdownImpl.d.ts +1 -1
  103. package/dist/components/MarkdownImpl.js +55 -14
  104. package/dist/components/Menu.js +13 -15
  105. package/dist/components/MenuEntries.js +11 -16
  106. package/dist/components/Meter.d.ts +48 -0
  107. package/dist/components/Meter.js +94 -0
  108. package/dist/components/Modal.js +11 -14
  109. package/dist/components/NumberInput.d.ts +25 -0
  110. package/dist/components/NumberInput.js +55 -0
  111. package/dist/components/Overview.js +12 -10
  112. package/dist/components/PageHeader.d.ts +2 -3
  113. package/dist/components/PageHeader.js +30 -21
  114. package/dist/components/Pagination.d.ts +27 -14
  115. package/dist/components/Pagination.js +86 -25
  116. package/dist/components/Popover.d.ts +47 -0
  117. package/dist/components/Popover.js +63 -0
  118. package/dist/components/Provider.d.ts +197 -80
  119. package/dist/components/Provider.js +200 -118
  120. package/dist/components/Radio.d.ts +1 -1
  121. package/dist/components/Radio.js +4 -4
  122. package/dist/components/RefreshButton.d.ts +15 -0
  123. package/dist/components/RefreshButton.js +53 -0
  124. package/dist/components/RunStatusIcon.d.ts +12 -0
  125. package/dist/components/RunStatusIcon.js +84 -0
  126. package/dist/components/SearchInput.d.ts +16 -0
  127. package/dist/components/SearchInput.js +52 -0
  128. package/dist/components/Section.d.ts +28 -0
  129. package/dist/components/Section.js +76 -0
  130. package/dist/components/SegmentedControl.d.ts +7 -11
  131. package/dist/components/SegmentedControl.js +25 -56
  132. package/dist/components/Select.d.ts +8 -1
  133. package/dist/components/Select.js +47 -43
  134. package/dist/components/SettingModeOption.d.ts +3 -5
  135. package/dist/components/SettingModeOption.js +5 -6
  136. package/dist/components/SettingsCard.d.ts +32 -19
  137. package/dist/components/SettingsCard.js +40 -13
  138. package/dist/components/Skeleton.d.ts +22 -0
  139. package/dist/components/Skeleton.js +34 -0
  140. package/dist/components/Slider.d.ts +16 -0
  141. package/dist/components/Slider.js +30 -0
  142. package/dist/components/Sort.js +4 -6
  143. package/dist/components/StatusBadge.d.ts +3 -1
  144. package/dist/components/StatusBadge.js +9 -32
  145. package/dist/components/StatusIcons.d.ts +0 -4
  146. package/dist/components/StatusIcons.js +5 -13
  147. package/dist/components/Switch.d.ts +5 -1
  148. package/dist/components/Switch.js +23 -6
  149. package/dist/components/Table.js +13 -20
  150. package/dist/components/Tabs.d.ts +52 -0
  151. package/dist/components/Tabs.js +75 -0
  152. package/dist/components/ThemeEditor.d.ts +29 -0
  153. package/dist/components/ThemeEditor.js +397 -0
  154. package/dist/components/Toast.d.ts +57 -0
  155. package/dist/components/Toast.js +203 -0
  156. package/dist/components/Tooltip.js +12 -15
  157. package/dist/components/buttonClasses.d.ts +18 -0
  158. package/dist/components/buttonClasses.js +31 -0
  159. package/dist/components/codeTheme.d.ts +5 -0
  160. package/dist/components/codeTheme.js +93 -0
  161. package/dist/components/fieldBox.d.ts +14 -0
  162. package/dist/components/fieldBox.js +29 -0
  163. package/dist/components/floating.d.ts +26 -5
  164. package/dist/components/floating.js +31 -9
  165. package/dist/{ai/ui/codeBreaks.js → components/markdownCodeBreaks.js} +1 -1
  166. package/dist/components/persistedState.d.ts +2 -0
  167. package/dist/components/persistedState.js +63 -0
  168. package/dist/components/relativeTime.d.ts +36 -8
  169. package/dist/components/relativeTime.js +106 -23
  170. package/dist/components/segmented.d.ts +17 -0
  171. package/dist/components/segmented.js +27 -0
  172. package/dist/components/shortcutKey.d.ts +4 -0
  173. package/dist/components/shortcutKey.js +27 -0
  174. package/dist/components/splitter.d.ts +26 -0
  175. package/dist/components/splitter.js +69 -0
  176. package/dist/components/tone.d.ts +9 -0
  177. package/dist/components/tone.js +30 -0
  178. package/dist/components/useCopy.d.ts +14 -0
  179. package/dist/components/useCopy.js +31 -0
  180. package/dist/components/useCssIsDark.d.ts +2 -0
  181. package/dist/components/useCssIsDark.js +2 -1
  182. package/dist/components/useTheme.d.ts +10 -0
  183. package/dist/components/useTheme.js +40 -0
  184. package/dist/cx.d.ts +5 -0
  185. package/dist/cx.js +11 -0
  186. package/dist/editor/Editor.js +2 -2
  187. package/dist/editor/EditorField.js +7 -10
  188. package/dist/editor/FormCodePanel.js +10 -23
  189. package/dist/editor/Monaco.js +7 -4
  190. package/dist/editor/index.d.ts +1 -1
  191. package/dist/editor/index.js +2 -2
  192. package/dist/editor/themes.d.ts +4 -0
  193. package/dist/editor/themes.js +75 -76
  194. package/dist/file-explorer/FileExplorer.js +180 -187
  195. package/dist/file-explorer/FileExplorerContext.js +36 -58
  196. package/dist/file-explorer/FilePreview/CodePreviewEditor.js +2 -1
  197. package/dist/file-explorer/FilePreview/Inline.js +9 -7
  198. package/dist/file-explorer/FilePreview/StreamedBadge.js +2 -2
  199. package/dist/file-explorer/FilePreview/Viewer.js +32 -34
  200. package/dist/file-explorer/FilePreview/index.js +60 -92
  201. package/dist/file-explorer/FileRow.js +10 -15
  202. package/dist/file-explorer/FileRowsWindow.js +2 -6
  203. package/dist/file-explorer/FileTable.js +2 -2
  204. package/dist/file-explorer/FileTableHeaders.js +8 -11
  205. package/dist/file-explorer/LoadMoreRow.js +8 -9
  206. package/dist/file-explorer/TreeView.js +16 -16
  207. package/dist/file-explorer/helpers.d.ts +1 -4
  208. package/dist/file-explorer/helpers.js +101 -114
  209. package/dist/file-explorer/lib/utils.d.ts +0 -2
  210. package/dist/file-explorer/lib/utils.js +1 -25
  211. package/dist/file-explorer/toasts.js +104 -185
  212. package/dist/form/Fields/BooleanField.js +12 -14
  213. package/dist/form/Fields/CheckboxGroupField.d.ts +1 -1
  214. package/dist/form/Fields/CheckboxGroupField.js +16 -18
  215. package/dist/form/Fields/ColorField.js +11 -11
  216. package/dist/form/Fields/DropdownField.d.ts +1 -1
  217. package/dist/form/Fields/DropdownField.js +20 -36
  218. package/dist/form/Fields/DurationField.d.ts +1 -1
  219. package/dist/form/Fields/DurationField.js +36 -50
  220. package/dist/form/Fields/LabelField.js +2 -2
  221. package/dist/form/Fields/MultiDropdownField.d.ts +1 -1
  222. package/dist/form/Fields/MultiDropdownField.js +9 -14
  223. package/dist/form/Fields/NumberField.d.ts +1 -1
  224. package/dist/form/Fields/NumberField.js +13 -48
  225. package/dist/form/Fields/ObjectField.js +3 -3
  226. package/dist/form/Fields/RadioField.d.ts +1 -1
  227. package/dist/form/Fields/RadioField.js +15 -18
  228. package/dist/form/Fields/RangeField.js +34 -35
  229. package/dist/form/Fields/StringField.d.ts +1 -1
  230. package/dist/form/Fields/StringField.js +15 -25
  231. package/dist/form/Fields/TextAreaField.js +10 -15
  232. package/dist/form/Form.d.ts +7 -2
  233. package/dist/form/Form.js +144 -49
  234. package/dist/form/FormLayout.js +18 -12
  235. package/dist/form/Wizard/WizardContainer.js +44 -18
  236. package/dist/form/Wizard/WizardNavigation.d.ts +1 -1
  237. package/dist/form/Wizard/WizardNavigation.js +31 -56
  238. package/dist/form/Wizard/WizardStepIndicator.d.ts +3 -0
  239. package/dist/form/Wizard/WizardStepIndicator.js +98 -114
  240. package/dist/form/Wizard/types.d.ts +2 -2
  241. package/dist/form/fieldFrame.d.ts +7 -0
  242. package/dist/form/fieldFrame.js +19 -0
  243. package/dist/form/index.d.ts +5 -5
  244. package/dist/form/index.js +4 -6
  245. package/dist/form/layoutCSS.js +5 -4
  246. package/dist/form/types/fieldComponentTypes.d.ts +5 -3
  247. package/dist/form/useChoiceField.js +2 -3
  248. package/dist/form/useFieldValue.d.ts +3 -0
  249. package/dist/form/useFieldValue.js +24 -7
  250. package/dist/form/utils/duration.d.ts +2 -2
  251. package/dist/form/utils/duration.js +3 -3
  252. package/dist/form/utils/fieldPath.d.ts +5 -3
  253. package/dist/form/utils/fieldPath.js +18 -3
  254. package/dist/form/utils/secondaryField.d.ts +0 -7
  255. package/dist/form/utils/secondaryField.js +1 -12
  256. package/dist/form/validation.d.ts +29 -0
  257. package/dist/form/validation.js +14 -0
  258. package/dist/format.d.ts +28 -0
  259. package/dist/format.js +64 -0
  260. package/dist/graph/AnnotationBanner.js +20 -31
  261. package/dist/graph/Connectors.js +1 -1
  262. package/dist/graph/DependencyGraph.js +51 -65
  263. package/dist/graph/GraphEditor.js +24 -28
  264. package/dist/graph/GraphEditorDialogs.js +239 -245
  265. package/dist/graph/InputDialog.js +93 -112
  266. package/dist/graph/InputsEditor.js +83 -84
  267. package/dist/graph/JobSummary.js +10 -11
  268. package/dist/graph/MatrixGroup.js +3 -3
  269. package/dist/graph/ProblemsButton.js +9 -10
  270. package/dist/graph/ShortcutsButton.js +12 -17
  271. package/dist/graph/SuggestionInput.d.ts +1 -2
  272. package/dist/graph/SuggestionInput.js +1 -3
  273. package/dist/graph/TreeView.js +47 -45
  274. package/dist/graph/WorkflowSettingsDialog.js +97 -102
  275. package/dist/graph/editorChrome.js +10 -12
  276. package/dist/graph/editorFields.d.ts +19 -16
  277. package/dist/graph/editorFields.js +97 -135
  278. package/dist/graph/editorPrimitives.js +2 -2
  279. package/dist/graph/editorRows.js +22 -25
  280. package/dist/graph/editorStrings.d.ts +16 -19
  281. package/dist/graph/editorStrings.js +11 -23
  282. package/dist/graph/fieldProblems.js +2 -2
  283. package/dist/graph/graphEditorState.d.ts +4 -4
  284. package/dist/graph/inputRefs.d.ts +0 -13
  285. package/dist/graph/inputRefs.js +121 -159
  286. package/dist/graph/settingsViews.js +5 -3
  287. package/dist/graph/stepWith.js +100 -100
  288. package/dist/graph/toolbarPanel.d.ts +8 -0
  289. package/dist/graph/toolbarPanel.js +11 -0
  290. package/dist/icons.d.ts +234 -23
  291. package/dist/icons.js +249 -264
  292. package/dist/index.d.ts +38 -21
  293. package/dist/index.js +42 -21
  294. package/dist/list/ActionToolbar.d.ts +1 -5
  295. package/dist/list/ActionToolbar.js +21 -20
  296. package/dist/list/ListPage.js +7 -7
  297. package/dist/list/ListTable.d.ts +3 -2
  298. package/dist/list/ListTable.js +33 -29
  299. package/dist/list/ListViewControls.d.ts +0 -17
  300. package/dist/list/ListViewControls.js +50 -118
  301. package/dist/list/UserHoverCard.js +24 -32
  302. package/dist/list/index.d.ts +2 -4
  303. package/dist/list/index.js +3 -5
  304. package/dist/list/listSearch.d.ts +1 -1
  305. package/dist/list/listSearch.js +19 -14
  306. package/dist/list/rowMenu.js +20 -26
  307. package/dist/logviewer/LogViewer.js +268 -382
  308. package/dist/logviewer/logviewer.css +53 -41
  309. package/dist/styles/base.css +16 -40
  310. package/dist/styles/theme.css +75 -106
  311. package/dist/styles.css +1 -1
  312. package/dist/theme/color.d.ts +40 -0
  313. package/dist/theme/color.js +228 -0
  314. package/dist/theme/contrast.d.ts +42 -0
  315. package/dist/theme/contrast.js +145 -0
  316. package/dist/theme/derive.d.ts +25 -0
  317. package/dist/theme/derive.js +475 -0
  318. package/dist/theme/fit.d.ts +35 -0
  319. package/dist/theme/fit.js +185 -0
  320. package/dist/theme/index.d.ts +14 -29
  321. package/dist/theme/index.js +20 -279
  322. package/dist/theme/model.d.ts +64 -0
  323. package/dist/theme/model.js +219 -0
  324. package/package.json +9 -5
  325. package/dist/ai/ui/Avatar.d.ts +0 -7
  326. package/dist/ai/ui/Avatar.js +0 -24
  327. package/dist/components/Filter.d.ts +0 -15
  328. package/dist/components/Filter.js +0 -32
  329. package/dist/components/FilterPill.d.ts +0 -7
  330. package/dist/components/FilterPill.js +0 -14
  331. package/dist/components/Indicator.d.ts +0 -4
  332. package/dist/components/Indicator.js +0 -44
  333. package/dist/components/SectionHeader.d.ts +0 -8
  334. package/dist/components/SectionHeader.js +0 -11
  335. package/dist/components/SettingRow.d.ts +0 -18
  336. package/dist/components/SettingRow.js +0 -35
  337. package/dist/components/SettingsGroup.d.ts +0 -8
  338. package/dist/components/SettingsGroup.js +0 -17
  339. package/dist/components/ghostButton.d.ts +0 -4
  340. package/dist/components/ghostButton.js +0 -7
  341. package/dist/components/inputClasses.d.ts +0 -1
  342. package/dist/components/inputClasses.js +0 -4
  343. package/dist/duration.d.ts +0 -3
  344. package/dist/duration.js +0 -17
  345. package/dist/form/FieldGroup.d.ts +0 -11
  346. package/dist/form/FieldGroup.js +0 -36
  347. package/dist/form/FieldWrapper.d.ts +0 -16
  348. package/dist/form/FieldWrapper.js +0 -55
  349. package/dist/form/fieldContext.d.ts +0 -19
  350. package/dist/form/fieldContext.js +0 -26
  351. package/dist/graph/Collapse.d.ts +0 -7
  352. package/dist/graph/Collapse.js +0 -15
  353. package/dist/graph/ToolbarPopover.d.ts +0 -13
  354. package/dist/graph/ToolbarPopover.js +0 -39
  355. package/dist/icons/ai/AiOutlineRollback.js +0 -16
  356. package/dist/icons/bi/BiBell.js +0 -16
  357. package/dist/icons/bi/BiBellOff.js +0 -16
  358. package/dist/icons/bi/BiBuildings.js +0 -20
  359. package/dist/icons/bi/BiError.js +0 -20
  360. package/dist/icons/bi/BiExpandVertical.js +0 -16
  361. package/dist/icons/bi/BiPause.js +0 -16
  362. package/dist/icons/bi/BiPlay.js +0 -16
  363. package/dist/icons/bi/BiRedo.js +0 -16
  364. package/dist/icons/bi/BiSolidCheckShield.js +0 -16
  365. package/dist/icons/bi/BiSolidTrashAlt.js +0 -16
  366. package/dist/icons/bi/BiStop.js +0 -16
  367. package/dist/icons/bi/BiUndo.js +0 -16
  368. package/dist/icons/bs/BsArrowsCollapse.js +0 -22
  369. package/dist/icons/bs/BsBank2.js +0 -19
  370. package/dist/icons/bs/BsBriefcase.js +0 -19
  371. package/dist/icons/bs/BsBucket.js +0 -19
  372. package/dist/icons/bs/BsCalendarX.js +0 -23
  373. package/dist/icons/bs/BsChatLeft.js +0 -19
  374. package/dist/icons/bs/BsChevronDoubleDown.js +0 -29
  375. package/dist/icons/bs/BsChevronDoubleUp.js +0 -29
  376. package/dist/icons/bs/BsClipboardCheck.js +0 -34
  377. package/dist/icons/bs/BsCurrencyDollar.js +0 -19
  378. package/dist/icons/bs/BsDash.js +0 -19
  379. package/dist/icons/bs/BsFileEarmarkZip.js +0 -23
  380. package/dist/icons/bs/BsFiles.js +0 -19
  381. package/dist/icons/bs/BsGeoAlt.js +0 -23
  382. package/dist/icons/bs/BsGrid.js +0 -19
  383. package/dist/icons/bs/BsLayers.js +0 -19
  384. package/dist/icons/bs/BsLayoutThreeColumns.js +0 -19
  385. package/dist/icons/bs/BsListUl.js +0 -22
  386. package/dist/icons/bs/BsMortarboard.js +0 -23
  387. package/dist/icons/bs/BsMusicNoteBeamed.js +0 -34
  388. package/dist/icons/bs/BsOpenai.js +0 -19
  389. package/dist/icons/bs/BsPersonPlus.js +0 -26
  390. package/dist/icons/bs/BsSearch.js +0 -19
  391. package/dist/icons/bs/BsSend.js +0 -19
  392. package/dist/icons/bs/BsShieldSlash.js +0 -22
  393. package/dist/icons/bs/BsStar.js +0 -19
  394. package/dist/icons/bs/BsStarFill.js +0 -19
  395. package/dist/icons/bs/BsStopCircle.js +0 -23
  396. package/dist/icons/bs/BsTag.js +0 -23
  397. package/dist/icons/bs/BsTelephone.js +0 -19
  398. package/dist/icons/bs/BsTerminal.js +0 -23
  399. package/dist/icons/bs/BsTerminalFill.js +0 -19
  400. package/dist/icons/bs/BsThreeDots.js +0 -19
  401. package/dist/icons/bs/BsThreeDotsVertical.js +0 -19
  402. package/dist/icons/bs/BsZoomIn.js +0 -37
  403. package/dist/icons/fa/FaAmazon.js +0 -16
  404. package/dist/icons/fa/FaAngleDown.js +0 -16
  405. package/dist/icons/fa/FaAngleLeft.js +0 -16
  406. package/dist/icons/fa/FaAngleRight.js +0 -16
  407. package/dist/icons/fa/FaAngleUp.js +0 -16
  408. package/dist/icons/fa/FaArrowDown.js +0 -16
  409. package/dist/icons/fa/FaArrowLeft.js +0 -16
  410. package/dist/icons/fa/FaArrowRight.js +0 -16
  411. package/dist/icons/fa/FaArrowUp.js +0 -16
  412. package/dist/icons/fa/FaBalanceScale.js +0 -16
  413. package/dist/icons/fa/FaCaretDown.js +0 -16
  414. package/dist/icons/fa/FaCentos.js +0 -16
  415. package/dist/icons/fa/FaChartLine.js +0 -16
  416. package/dist/icons/fa/FaChartPie.js +0 -16
  417. package/dist/icons/fa/FaCheck.js +0 -16
  418. package/dist/icons/fa/FaChevronDown.js +0 -16
  419. package/dist/icons/fa/FaChevronUp.js +0 -16
  420. package/dist/icons/fa/FaChrome.js +0 -16
  421. package/dist/icons/fa/FaCircleNotch.js +0 -16
  422. package/dist/icons/fa/FaCloud.js +0 -16
  423. package/dist/icons/fa/FaCloudDownloadAlt.js +0 -16
  424. package/dist/icons/fa/FaCog.js +0 -16
  425. package/dist/icons/fa/FaCogs.js +0 -16
  426. package/dist/icons/fa/FaComments.js +0 -16
  427. package/dist/icons/fa/FaCompress.js +0 -16
  428. package/dist/icons/fa/FaDesktop.js +0 -16
  429. package/dist/icons/fa/FaDocker.js +0 -16
  430. package/dist/icons/fa/FaDollarSign.js +0 -16
  431. package/dist/icons/fa/FaEdge.js +0 -16
  432. package/dist/icons/fa/FaEdit.js +0 -16
  433. package/dist/icons/fa/FaExclamationTriangle.js +0 -16
  434. package/dist/icons/fa/FaExpand.js +0 -16
  435. package/dist/icons/fa/FaEye.js +0 -16
  436. package/dist/icons/fa/FaEyeSlash.js +0 -16
  437. package/dist/icons/fa/FaFile.js +0 -16
  438. package/dist/icons/fa/FaFilePdf.js +0 -16
  439. package/dist/icons/fa/FaFilter.js +0 -16
  440. package/dist/icons/fa/FaFirefoxBrowser.js +0 -16
  441. package/dist/icons/fa/FaFlask.js +0 -16
  442. package/dist/icons/fa/FaFolder.js +0 -16
  443. package/dist/icons/fa/FaGithub.js +0 -16
  444. package/dist/icons/fa/FaGitlab.js +0 -16
  445. package/dist/icons/fa/FaGlobe.js +0 -16
  446. package/dist/icons/fa/FaGlobeAmericas.js +0 -16
  447. package/dist/icons/fa/FaImage.js +0 -16
  448. package/dist/icons/fa/FaInfoCircle.js +0 -16
  449. package/dist/icons/fa/FaKey.js +0 -16
  450. package/dist/icons/fa/FaLayerGroup.js +0 -16
  451. package/dist/icons/fa/FaLink.js +0 -16
  452. package/dist/icons/fa/FaLinkedin.js +0 -16
  453. package/dist/icons/fa/FaLinux.js +0 -16
  454. package/dist/icons/fa/FaList.js +0 -16
  455. package/dist/icons/fa/FaLock.js +0 -16
  456. package/dist/icons/fa/FaOpenid.js +0 -16
  457. package/dist/icons/fa/FaOpera.js +0 -16
  458. package/dist/icons/fa/FaPaperclip.js +0 -16
  459. package/dist/icons/fa/FaPlus.js +0 -16
  460. package/dist/icons/fa/FaPowerOff.js +0 -16
  461. package/dist/icons/fa/FaPrint.js +0 -16
  462. package/dist/icons/fa/FaQrcode.js +0 -16
  463. package/dist/icons/fa/FaQuestionCircle.js +0 -16
  464. package/dist/icons/fa/FaRedhat.js +0 -16
  465. package/dist/icons/fa/FaRegCircle.js +0 -16
  466. package/dist/icons/fa/FaRegFileImage.js +0 -16
  467. package/dist/icons/fa/FaRegFolder.js +0 -16
  468. package/dist/icons/fa/FaRobot.js +0 -16
  469. package/dist/icons/fa/FaRocket.js +0 -16
  470. package/dist/icons/fa/FaRunning.js +0 -16
  471. package/dist/icons/fa/FaSafari.js +0 -16
  472. package/dist/icons/fa/FaSave.js +0 -16
  473. package/dist/icons/fa/FaSearch.js +0 -16
  474. package/dist/icons/fa/FaShieldAlt.js +0 -16
  475. package/dist/icons/fa/FaSlack.js +0 -16
  476. package/dist/icons/fa/FaStar.js +0 -16
  477. package/dist/icons/fa/FaStop.js +0 -16
  478. package/dist/icons/fa/FaSuse.js +0 -16
  479. package/dist/icons/fa/FaTerminal.js +0 -16
  480. package/dist/icons/fa/FaTimes.js +0 -16
  481. package/dist/icons/fa/FaUbuntu.js +0 -16
  482. package/dist/icons/fa/FaUndoAlt.js +0 -16
  483. package/dist/icons/fa/FaUnlink.js +0 -16
  484. package/dist/icons/fa/FaUser.js +0 -16
  485. package/dist/icons/fa/FaUsers.js +0 -16
  486. package/dist/icons/fa/FaWindows.js +0 -16
  487. package/dist/icons/fa6/FaApple.js +0 -16
  488. package/dist/icons/fa6/FaArrowsRotate.js +0 -16
  489. package/dist/icons/fa6/FaDebian.js +0 -16
  490. package/dist/icons/fa6/FaFilterCircleXmark.js +0 -16
  491. package/dist/icons/fa6/FaInbox.js +0 -16
  492. package/dist/icons/fa6/FaLocationDot.js +0 -16
  493. package/dist/icons/fa6/FaRegFilePdf.js +0 -16
  494. package/dist/icons/fa6/FaRegFolderOpen.js +0 -16
  495. package/dist/icons/fa6/FaUpRightFromSquare.js +0 -16
  496. package/dist/icons/fa6/FaWandMagicSparkles.js +0 -16
  497. package/dist/icons/fa6/FaXTwitter.js +0 -16
  498. package/dist/icons/fi/FiActivity.js +0 -23
  499. package/dist/icons/fi/FiAlertCircle.js +0 -49
  500. package/dist/icons/fi/FiChevronDown.js +0 -23
  501. package/dist/icons/fi/FiClock.js +0 -31
  502. package/dist/icons/fi/FiCopy.js +0 -34
  503. package/dist/icons/fi/FiDownload.js +0 -40
  504. package/dist/icons/fi/FiFile.js +0 -27
  505. package/dist/icons/fi/FiFileText.js +0 -55
  506. package/dist/icons/fi/FiHardDrive.js +0 -55
  507. package/dist/icons/fi/FiRotateCcw.js +0 -27
  508. package/dist/icons/fi/FiUpload.js +0 -40
  509. package/dist/icons/fi/FiX.js +0 -37
  510. package/dist/icons/fi/FiZap.js +0 -23
  511. package/dist/icons/gi/GiSpy.js +0 -16
  512. package/dist/icons/go/GoGitCommit.js +0 -16
  513. package/dist/icons/go/GoGitPullRequest.js +0 -20
  514. package/dist/icons/go/GoIssueOpened.js +0 -16
  515. package/dist/icons/go/GoPlus.js +0 -16
  516. package/dist/icons/go/GoRepoForked.js +0 -28
  517. package/dist/icons/go/GoSignOut.js +0 -16
  518. package/dist/icons/go/GoSkip.js +0 -20
  519. package/dist/icons/go/GoVideo.js +0 -20
  520. package/dist/icons/gr/GrCloudComputer.js +0 -20
  521. package/dist/icons/gr/GrInbox.js +0 -20
  522. package/dist/icons/gr/GrServerCluster.js +0 -20
  523. package/dist/icons/gr/GrStorage.js +0 -20
  524. package/dist/icons/gr/GrTasks.js +0 -20
  525. package/dist/icons/hi/HiCog.js +0 -24
  526. package/dist/icons/hi/HiDuplicate.js +0 -24
  527. package/dist/icons/hi/HiOutlineArchive.js +0 -26
  528. package/dist/icons/hi/HiOutlineClipboardCopy.js +0 -26
  529. package/dist/icons/hi/HiOutlineHome.js +0 -26
  530. package/dist/icons/hi/HiQuestionMarkCircle.js +0 -24
  531. package/dist/icons/hi/HiServer.js +0 -24
  532. package/dist/icons/hi2/HiMiniCheckCircle.js +0 -24
  533. package/dist/icons/hi2/HiMiniLanguage.js +0 -28
  534. package/dist/icons/hi2/HiMiniMinusCircle.js +0 -24
  535. package/dist/icons/hi2/HiMiniXCircle.js +0 -24
  536. package/dist/icons/hi2/HiSparkles.js +0 -24
  537. package/dist/icons/im/ImSpinner5.js +0 -19
  538. package/dist/icons/io/IoIosNotifications.js +0 -16
  539. package/dist/icons/io/IoMdBuild.js +0 -16
  540. package/dist/icons/io/IoMdClose.js +0 -16
  541. package/dist/icons/io5/IoCloudUploadOutline.js +0 -32
  542. package/dist/icons/io5/IoDocumentTextOutline.js +0 -31
  543. package/dist/icons/io5/IoFileTrayFullOutline.js +0 -31
  544. package/dist/icons/io5/IoHeart.js +0 -16
  545. package/dist/icons/io5/IoHeartDislike.js +0 -16
  546. package/dist/icons/io5/IoHeartOutline.js +0 -22
  547. package/dist/icons/io5/IoInformationCircleOutline.js +0 -50
  548. package/dist/icons/io5/IoSettingsOutline.js +0 -22
  549. package/dist/icons/io5/IoWarningOutline.js +0 -40
  550. package/dist/icons/lu/LuArrowRight.js +0 -27
  551. package/dist/icons/lu/LuBadgeCheck.js +0 -27
  552. package/dist/icons/lu/LuBraces.js +0 -27
  553. package/dist/icons/lu/LuBrainCircuit.js +0 -101
  554. package/dist/icons/lu/LuCalendar.js +0 -46
  555. package/dist/icons/lu/LuCheck.js +0 -23
  556. package/dist/icons/lu/LuChevronLeft.js +0 -23
  557. package/dist/icons/lu/LuChevronRight.js +0 -23
  558. package/dist/icons/lu/LuCode.js +0 -27
  559. package/dist/icons/lu/LuExternalLink.js +0 -35
  560. package/dist/icons/lu/LuEye.js +0 -31
  561. package/dist/icons/lu/LuEyeOff.js +0 -40
  562. package/dist/icons/lu/LuFolderTree.js +0 -40
  563. package/dist/icons/lu/LuIdCard.js +0 -55
  564. package/dist/icons/lu/LuKeyboard.js +0 -71
  565. package/dist/icons/lu/LuLogs.js +0 -65
  566. package/dist/icons/lu/LuMail.js +0 -33
  567. package/dist/icons/lu/LuMegaphone.js +0 -27
  568. package/dist/icons/lu/LuMoon.js +0 -23
  569. package/dist/icons/lu/LuNetwork.js +0 -63
  570. package/dist/icons/lu/LuPartyPopper.js +0 -65
  571. package/dist/icons/lu/LuSettings2.js +0 -48
  572. package/dist/icons/lu/LuSheet.js +0 -72
  573. package/dist/icons/lu/LuShield.js +0 -23
  574. package/dist/icons/lu/LuSun.js +0 -69
  575. package/dist/icons/lu/LuTextCursorInput.js +0 -45
  576. package/dist/icons/lu/LuX.js +0 -27
  577. package/dist/icons/lu/LuZoomIn.js +0 -59
  578. package/dist/icons/lu/LuZoomOut.js +0 -49
  579. package/dist/icons/md/MdClear.js +0 -23
  580. package/dist/icons/md/MdDragHandle.js +0 -23
  581. package/dist/icons/md/MdInstallDesktop.js +0 -31
  582. package/dist/icons/md/MdOutlineAttachMoney.js +0 -23
  583. package/dist/icons/md/MdOutlineMoneyOff.js +0 -23
  584. package/dist/icons/md/MdPieChart.js +0 -23
  585. package/dist/icons/md/MdRefresh.js +0 -23
  586. package/dist/icons/md/MdReplay.js +0 -23
  587. package/dist/icons/md/MdSmartphone.js +0 -23
  588. package/dist/icons/pi/PiArrowBendUpRightBold.js +0 -19
  589. package/dist/icons/pi/PiPlugsConnectedFill.js +0 -19
  590. package/dist/icons/pi/PiRectangleDashed.js +0 -19
  591. package/dist/icons/pi/PiShareBold.js +0 -19
  592. package/dist/icons/si/SiAnthropic.js +0 -19
  593. package/dist/icons/si/SiHelm.js +0 -19
  594. package/dist/icons/si/SiKubernetes.js +0 -19
  595. package/dist/icons/tb/TbAlertTriangle.js +0 -35
  596. package/dist/icons/tb/TbAlertTriangleFilled.js +0 -19
  597. package/dist/icons/tb/TbApi.js +0 -40
  598. package/dist/icons/tb/TbBrain.js +0 -50
  599. package/dist/icons/tb/TbBuildingTunnel.js +0 -65
  600. package/dist/icons/tb/TbEdit.js +0 -35
  601. package/dist/icons/tb/TbLayoutSidebar.js +0 -27
  602. package/dist/icons/tb/TbLayoutSidebarLeftCollapse.js +0 -35
  603. package/dist/icons/tb/TbLayoutSidebarRightCollapse.js +0 -35
  604. package/dist/icons/tb/TbUser.js +0 -27
  605. package/dist/icons/tb/TbUserOff.js +0 -35
  606. package/dist/icons/tb/TbWorldShare.js +0 -55
  607. package/dist/icons/tb/TbWorldWww.js +0 -65
  608. package/dist/icons/ti/TiArrowSortedDown.js +0 -20
  609. package/dist/icons/ti/TiArrowSortedUp.js +0 -20
  610. package/dist/icons/ti/TiArrowUnsorted.js +0 -20
  611. package/dist/icons/ti/TiCancel.js +0 -20
  612. package/dist/icons/vsc/VscChromeMinimize.js +0 -19
  613. package/dist/icons/vsc/VscJson.js +0 -19
  614. package/dist/icons/vsc/VscLayoutSidebarLeft.js +0 -19
  615. package/dist/icons/vsc/VscPass.js +0 -27
  616. package/dist/icons/vsc/VscSplitHorizontal.js +0 -19
  617. package/dist/icons/vsc/VscTerminalPowershell.js +0 -19
  618. package/dist/list/ListPager.d.ts +0 -14
  619. package/dist/list/ListPager.js +0 -62
  620. package/dist/list/textEntry.d.ts +0 -2
  621. package/dist/list/textEntry.js +0 -10
  622. /package/dist/{ai/ui/codeBreaks.d.ts → components/markdownCodeBreaks.d.ts} +0 -0
@@ -1,19 +1,20 @@
1
1
  import type { InputHTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react';
2
- interface FieldProps {
2
+ interface FramedProps {
3
+ /** Without a label the box stands alone; name it with `aria-label`. */
3
4
  label?: ReactNode;
4
- /** Shown beside the label, outside it, so it stays out of the field's name. */
5
- labelHint?: ReactNode;
6
- /** Help text shown under the label. */
5
+ /** Beside the label and outside it, so it stays out of the field's name. */
6
+ hint?: ReactNode;
7
+ /** Help under the field. */
7
8
  description?: ReactNode;
8
- error?: string | undefined;
9
+ error?: ReactNode;
9
10
  mono?: boolean;
10
11
  }
11
- interface InputProps extends InputHTMLAttributes<HTMLInputElement>, FieldProps {
12
+ export interface InputProps extends InputHTMLAttributes<HTMLInputElement>, FramedProps {
12
13
  }
13
- interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement>, FieldProps {
14
+ export interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement>, FramedProps {
14
15
  }
15
- /** The box a text field draws, for other controls that should look like one. */
16
- export declare const fieldBoxClasses: string;
16
+ /** A single-line text field. `type="password"` adds a button that shows what was typed. */
17
17
  export declare const Input: import("react").ForwardRefExoticComponent<InputProps & import("react").RefAttributes<HTMLInputElement>>;
18
+ /** A multi-line text field that grows by hand. */
18
19
  export declare const Textarea: import("react").ForwardRefExoticComponent<TextareaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
19
20
  export {};
@@ -1,109 +1,67 @@
1
- import { LuEye } from "../icons/lu/LuEye.js";
2
- import { LuEyeOff } from "../icons/lu/LuEyeOff.js";
3
- import { TbAlertTriangle } from "../icons/tb/TbAlertTriangle.js";
4
- import { RequiredMark } from "./RequiredMark.js";
5
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
+ import { fieldBox } from "./fieldBox.js";
3
+ import { Field, RevealToggle } from "./Field.js";
6
4
  import { jsx, jsxs } from "react/jsx-runtime";
7
- import { forwardRef, useId, useState } from "react";
5
+ import { forwardRef, useState } from "react";
8
6
  //#region src/components/Input.tsx
9
- /** The box a text field draws, for other controls that should look like one. */
10
- var fieldBoxClasses = clsx("w-full py-3 px-4 bg-[var(--theme-muted-panel-bg)] border border-[var(--theme-border)] rounded-lg text-[var(--theme-app)] text-sm transition-all duration-200 box-border", "focus:outline-none focus:border-[var(--theme-element)] focus:shadow-[0_0_0_3px_color-mix(in_srgb,var(--theme-element)_25%,transparent)]", "placeholder:text-[var(--theme-muted-text-color)]");
11
- function LabelRow({ id, label, hint, required }) {
12
- const element = /* @__PURE__ */ jsxs("label", {
13
- className: "text-[0.8125rem] font-medium text-[var(--theme-app)]",
14
- htmlFor: id,
15
- children: [label, required && /* @__PURE__ */ jsx(RequiredMark, {})]
16
- });
17
- return hint ? /* @__PURE__ */ jsxs("div", {
18
- className: "flex flex-wrap items-baseline gap-x-1.5",
19
- children: [element, hint]
20
- }) : element;
21
- }
22
- function useFieldFrame({ label, labelHint, description, error }, ownId, describedBy, required) {
23
- const generatedId = useId();
24
- const id = ownId ?? generatedId;
25
- const errorId = `${id}-error`;
26
- const descriptionId = `${id}-description`;
27
- return {
7
+ /** The Field around a control when it has a label; the control alone when it doesn't. */
8
+ function framed({ label, hint, description, error }, { id, required, disabled }, control) {
9
+ if (label === void 0) return control(error ? { "aria-invalid": true } : {});
10
+ return /* @__PURE__ */ jsx(Field, {
11
+ label,
12
+ hint,
13
+ description,
14
+ error,
15
+ required,
16
+ disabled,
28
17
  id,
29
- describedBy: [
30
- describedBy,
31
- description ? descriptionId : void 0,
32
- error ? errorId : void 0
33
- ].filter(Boolean).join(" ") || void 0,
34
- frame: (control) => /* @__PURE__ */ jsxs("div", {
35
- className: "flex flex-col gap-1.5",
36
- children: [
37
- label && /* @__PURE__ */ jsx(LabelRow, {
38
- id,
39
- label,
40
- hint: labelHint,
41
- required
42
- }),
43
- description && /* @__PURE__ */ jsx("span", {
44
- id: descriptionId,
45
- className: "-mt-1 text-xs text-(--theme-muted-text-color)",
46
- children: description
47
- }),
48
- control,
49
- error && /* @__PURE__ */ jsxs("span", {
50
- id: errorId,
51
- role: "alert",
52
- className: "text-[0.8125rem] text-[#ef4444] flex items-center gap-1.5",
53
- children: [/* @__PURE__ */ jsx(TbAlertTriangle, { className: "w-4 h-4" }), error]
54
- })
55
- ]
56
- })
57
- };
18
+ children: control
19
+ });
58
20
  }
59
- var Input = forwardRef(({ label, labelHint, description, error, className = "", mono, type, required, ...props }, ref) => {
60
- const [showPassword, setShowPassword] = useState(false);
61
- const isPassword = type === "password";
62
- const field = useFieldFrame({
21
+ /** A single-line text field. `type="password"` adds a button that shows what was typed. */
22
+ var Input = forwardRef(({ label, hint, description, error, className, mono, type, ...props }, ref) => {
23
+ const [revealed, setRevealed] = useState(false);
24
+ const secret = type === "password";
25
+ return framed({
63
26
  label,
64
- labelHint,
27
+ hint,
65
28
  description,
66
29
  error
67
- }, props.id, props["aria-describedby"], required);
68
- return field.frame(/* @__PURE__ */ jsxs("div", {
69
- className: isPassword ? "relative w-full" : "",
70
- children: [/* @__PURE__ */ jsx("input", {
30
+ }, props, (control) => {
31
+ const input = /* @__PURE__ */ jsx("input", {
71
32
  ref,
72
- type: isPassword && showPassword ? "text" : type,
73
- className: clsx(fieldBoxClasses, "disabled:bg-[var(--theme-muted-panel-bg)] disabled:text-[var(--theme-muted-text-color)] disabled:cursor-not-allowed disabled:opacity-70", mono && "font-mono text-[0.8125rem]", error && "!border-[#ef4444]", isPassword && "pr-11", className),
74
33
  ...props,
75
- id: field.id,
76
- required,
77
- "aria-invalid": error ? true : props["aria-invalid"],
78
- "aria-describedby": field.describedBy
79
- }), isPassword && /* @__PURE__ */ jsx("button", {
80
- type: "button",
81
- className: "absolute right-3 top-1/2 -translate-y-1/2 bg-transparent border-none text-[var(--theme-muted-text-color)] cursor-pointer p-1 transition-colors duration-200 flex items-center justify-center hover:text-[var(--theme-app)]",
82
- onClick: () => setShowPassword(!showPassword),
83
- tabIndex: -1,
84
- "aria-label": showPassword ? "Hide password" : "Show password",
85
- children: showPassword ? /* @__PURE__ */ jsx(LuEyeOff, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx(LuEye, { className: "w-5 h-5" })
86
- })]
87
- }));
34
+ ...control,
35
+ "aria-invalid": control["aria-invalid"] ?? props["aria-invalid"],
36
+ "aria-describedby": [props["aria-describedby"], control["aria-describedby"]].filter(Boolean).join(" ") || void 0,
37
+ type: secret && revealed ? "text" : type,
38
+ className: cx(fieldBox(), mono && "font-mono", secret && "pr-9", className)
39
+ });
40
+ return secret ? /* @__PURE__ */ jsxs("div", {
41
+ className: "relative w-full",
42
+ children: [input, /* @__PURE__ */ jsx(RevealToggle, {
43
+ revealed,
44
+ onRevealedChange: setRevealed,
45
+ disabled: props.disabled
46
+ })]
47
+ }) : input;
48
+ });
88
49
  });
89
50
  Input.displayName = "Input";
90
- var Textarea = forwardRef(({ label, labelHint, description, error, className = "", mono, required, ...props }, ref) => {
91
- const field = useFieldFrame({
92
- label,
93
- labelHint,
94
- description,
95
- error
96
- }, props.id, props["aria-describedby"], required);
97
- return field.frame(/* @__PURE__ */ jsx("textarea", {
98
- ref,
99
- className: clsx(fieldBoxClasses, "min-h-[140px] resize-y", mono && "font-mono text-[0.8125rem]", error && "!border-[#ef4444]", className),
100
- ...props,
101
- id: field.id,
102
- required,
103
- "aria-invalid": error ? true : props["aria-invalid"],
104
- "aria-describedby": field.describedBy
105
- }));
106
- });
51
+ /** A multi-line text field that grows by hand. */
52
+ var Textarea = forwardRef(({ label, hint, description, error, className, mono, ...props }, ref) => framed({
53
+ label,
54
+ hint,
55
+ description,
56
+ error
57
+ }, props, (control) => /* @__PURE__ */ jsx("textarea", {
58
+ ref,
59
+ ...props,
60
+ ...control,
61
+ "aria-invalid": control["aria-invalid"] ?? props["aria-invalid"],
62
+ "aria-describedby": [props["aria-describedby"], control["aria-describedby"]].filter(Boolean).join(" ") || void 0,
63
+ className: cx(fieldBox({ multiline: true }), "min-h-24 resize-y", mono && "font-mono", className)
64
+ })));
107
65
  Textarea.displayName = "Textarea";
108
66
  //#endregion
109
- export { Input, Textarea, fieldBoxClasses };
67
+ export { Input, Textarea };
@@ -1,11 +1,11 @@
1
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/components/LetterBadge.tsx
4
4
  /** A compact letter badge ("AI", "PUB", "SSH") used as a type mark in place of
5
5
  * an icon. Size the box and text via className (e.g. "h-5 w-5 text-[8px]"). */
6
6
  function LetterBadge({ text, className }) {
7
7
  return /* @__PURE__ */ jsx("span", {
8
- className: clsx("inline-flex shrink-0 items-center justify-center rounded-[3px] border theme-border font-bold leading-none tracking-tight text-(--theme-app)", className),
8
+ className: cx("inline-flex shrink-0 items-center justify-center rounded-[3px] border theme-border font-bold leading-none tracking-tight text-(--theme-app)", className),
9
9
  children: text
10
10
  });
11
11
  }
@@ -1,11 +1,18 @@
1
- interface LoaderProps {
1
+ export interface LoaderProps {
2
+ /** The spinner's size, in pixels or any CSS length. */
2
3
  size?: number | string;
3
- text?: string | undefined;
4
- textSize?: number;
5
- color?: string;
6
- full?: boolean;
7
- loaderStyle?: React.CSSProperties;
4
+ /** Shown under the spinner, and its accessible name. Without one, the
5
+ * loader is named with the provider's `loading` string. */
6
+ label?: string | undefined;
8
7
  variant?: 'spinner' | 'logo';
8
+ /** Sits in a line of text or a button instead of centring in its own row. */
9
+ inline?: boolean;
10
+ /** The spinner's color, such as `currentColor` inside a button. */
11
+ color?: string | undefined;
12
+ /** Beside text that already says what is happening, such as a busy button's
13
+ * label: hidden from assistive technology, and in the text's color. */
14
+ decorative?: boolean;
9
15
  }
10
- export default function Loader({ size, text, textSize, full, color, loaderStyle, variant, }: LoaderProps): import("react").JSX.Element;
11
- export {};
16
+ /** Something on the way that has no shape to sketch yet. When its shape is
17
+ * known, such as rows of a list, sketch it with `Skeleton` instead. */
18
+ export declare function Loader({ size, label, variant, inline, color, decorative, }: LoaderProps): import("react").JSX.Element;
@@ -1,5 +1,6 @@
1
- import { LoaderIcon } from "./StatusIcons.js";
2
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
+ import { RunningIcon } from "../icons.js";
3
+ import { useStrings } from "./Provider.js";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  //#region src/components/Loader.tsx
5
6
  var RIPPLE_STAGGER_S = .22;
@@ -9,16 +10,29 @@ var LOGO_RINGS = [
9
10
  "M9.25,52.35V32.14A22.9,22.9,0,1,1,32.14,55H24.89",
10
11
  "M62.68,32.14A30.54,30.54,0,1,1,1.6,32.14,30.54,30.54,0,1,1,62.68,32.14"
11
12
  ];
12
- function Loader({ size = 48, text, textSize = 12, full = true, color = "", loaderStyle = {}, variant = "spinner" }) {
13
- const loaderColor = color || "text-(--theme-element,#3b82f6)";
13
+ /** Something on the way that has no shape to sketch yet. When its shape is
14
+ * known, such as rows of a list, sketch it with `Skeleton` instead. */
15
+ function Loader({ size = 48, label, variant = "spinner", inline = false, color, decorative = false }) {
16
+ const { loading } = useStrings().common;
14
17
  const dimension = typeof size === "number" ? `${size}px` : size;
15
- return /* @__PURE__ */ jsxs("div", {
18
+ const spinner = /* @__PURE__ */ jsx(RunningIcon, {
19
+ "aria-hidden": "true",
20
+ className: "animate-spin motion-reduce:animate-none",
21
+ style: { fontSize: dimension }
22
+ });
23
+ if (decorative) return /* @__PURE__ */ jsx("span", {
24
+ "aria-hidden": "true",
25
+ className: "inline-flex shrink-0",
26
+ style: color ? { color } : void 0,
27
+ children: spinner
28
+ });
29
+ return /* @__PURE__ */ jsxs("span", {
16
30
  role: "status",
17
- "aria-label": text || "Loading",
18
- className: clsx(full && "w-full", "flex flex-col flex-wrap justify-center items-center gap-y-1"),
19
- children: [/* @__PURE__ */ jsx("div", {
20
- className: clsx("w-full flex justify-center items-center", loaderColor),
21
- style: loaderStyle,
31
+ "aria-label": label || loading,
32
+ className: cx("items-center", inline ? "inline-flex gap-2" : "flex w-full flex-col justify-center gap-y-1"),
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: cx("inline-flex", !color && "text-(--theme-accent,#3b82f6)"),
35
+ style: color ? { color } : void 0,
22
36
  children: variant === "logo" ? /* @__PURE__ */ jsx("svg", {
23
37
  viewBox: "0 0 64.29 64.29",
24
38
  width: dimension,
@@ -32,16 +46,12 @@ function Loader({ size = 48, text, textSize = 12, full = true, color = "", loade
32
46
  className: "logo-loader-ring",
33
47
  style: { animationDelay: `${(i * RIPPLE_STAGGER_S).toFixed(2)}s` }
34
48
  }, d))
35
- }) : /* @__PURE__ */ jsx(LoaderIcon, {
36
- className: "animate-spin",
37
- style: { fontSize: dimension }
38
- })
39
- }), text && /* @__PURE__ */ jsx("div", {
40
- className: "text-center italic",
41
- style: { fontSize: `${textSize}px` },
42
- children: text
49
+ }) : spinner
50
+ }), label && /* @__PURE__ */ jsx("span", {
51
+ className: "text-center text-sm theme-muted-text",
52
+ children: label
43
53
  })]
44
54
  });
45
55
  }
46
56
  //#endregion
47
- export { Loader as default };
57
+ export { Loader };
@@ -1,7 +1,13 @@
1
- import type { ControlsConfig } from 'streamdown';
1
+ import type { Components, ControlsConfig } from 'streamdown';
2
2
  export interface MarkdownProps {
3
3
  children: string;
4
+ /** Renders as text still arriving: a caret, and unfinished syntax left open. */
4
5
  isStreaming?: boolean;
6
+ /** The copy and download buttons on code blocks, tables and diagrams. */
5
7
  controls?: ControlsConfig;
8
+ /** Per-tag overrides of the rendered elements. */
9
+ components?: Components;
6
10
  }
11
+ /** Markdown, with highlighted code, math and mermaid diagrams. Links leave in a
12
+ * new tab, and inline code breaks after path separators. */
7
13
  export default function Markdown(props: MarkdownProps): import("react").JSX.Element;
@@ -2,6 +2,8 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { Suspense, lazy } from "react";
3
3
  //#region src/components/Markdown.tsx
4
4
  var MarkdownImpl = lazy(() => import("./MarkdownImpl.js"));
5
+ /** Markdown, with highlighted code, math and mermaid diagrams. Links leave in a
6
+ * new tab, and inline code breaks after path separators. */
5
7
  function Markdown(props) {
6
8
  return /* @__PURE__ */ jsx(Suspense, {
7
9
  fallback: /* @__PURE__ */ jsx("div", {
@@ -1,2 +1,2 @@
1
1
  import type { MarkdownProps } from './Markdown.js';
2
- export default function Markdown({ children, isStreaming, controls }: MarkdownProps): import("react").JSX.Element;
2
+ export default function MarkdownImpl({ children, isStreaming, controls, components, }: MarkdownProps): import("react").JSX.Element;
@@ -1,33 +1,74 @@
1
- import { clsx } from "clsx";
1
+ import { cx } from "../cx.js";
2
+ import { ExternalLink } from "./ExternalLink.js";
3
+ import { readIsDark } from "./useCssIsDark.js";
4
+ import { CODE_THEMES } from "./codeTheme.js";
5
+ import { rehypeCodeBreaks } from "./markdownCodeBreaks.js";
2
6
  import { jsx } from "react/jsx-runtime";
7
+ import { useEffect, useState } from "react";
3
8
  import { code } from "@streamdown/code";
4
9
  import { math } from "@streamdown/math";
5
- import { Streamdown } from "streamdown";
10
+ import { Streamdown, defaultRehypePlugins } from "streamdown";
6
11
  //#region src/components/MarkdownImpl.tsx
7
- var plugins = {
12
+ var basePlugins = {
8
13
  code,
9
14
  math
10
15
  };
11
- var shikiTheme = ["github-light", "github-dark"];
12
- function Markdown({ children, isStreaming, controls }) {
16
+ var pluginsWithMermaid;
17
+ var mermaidLoad;
18
+ function loadMermaid() {
19
+ mermaidLoad ??= import("@streamdown/mermaid").then(({ createMermaidPlugin }) => {
20
+ const base = createMermaidPlugin();
21
+ pluginsWithMermaid = {
22
+ ...basePlugins,
23
+ mermaid: {
24
+ ...base,
25
+ getMermaid: (config) => base.getMermaid({
26
+ theme: readIsDark() ? "dark" : "neutral",
27
+ ...config
28
+ })
29
+ }
30
+ };
31
+ });
32
+ return mermaidLoad;
33
+ }
34
+ var rehypePlugins = [...Object.values(defaultRehypePlugins), rehypeCodeBreaks];
35
+ function MarkdownImpl({ children, isStreaming, controls, components }) {
36
+ const needsMermaid = !!children && children.includes("```mermaid");
37
+ const [, setMermaidReady] = useState(() => !!pluginsWithMermaid);
38
+ useEffect(() => {
39
+ if (!needsMermaid || pluginsWithMermaid) return;
40
+ let live = true;
41
+ loadMermaid().then(() => {
42
+ if (live) setMermaidReady(true);
43
+ });
44
+ return () => {
45
+ live = false;
46
+ };
47
+ }, [needsMermaid]);
48
+ const plugins = needsMermaid && pluginsWithMermaid ? pluginsWithMermaid : basePlugins;
13
49
  return /* @__PURE__ */ jsx("div", {
14
50
  className: "markdown whitespace-normal text-start w-full",
15
51
  children: /* @__PURE__ */ jsx(Streamdown, {
16
52
  mode: isStreaming ? "streaming" : "static",
17
53
  isAnimating: isStreaming ?? false,
18
- ...isStreaming ? { caret: "block" } : {},
54
+ ...isStreaming ? {
55
+ caret: "block",
56
+ className: "markdown-streaming"
57
+ } : {},
19
58
  ...controls ? { controls } : {},
20
59
  plugins,
21
- shikiTheme,
22
- components: { a: ({ node, ...props }) => /* @__PURE__ */ jsx("a", {
23
- ...props,
24
- className: clsx("link wrap-break-word", props.className),
25
- target: "_blank",
26
- rel: "noopener noreferrer"
27
- }) },
60
+ rehypePlugins,
61
+ shikiTheme: CODE_THEMES,
62
+ components: {
63
+ a: ({ node, ...props }) => /* @__PURE__ */ jsx(ExternalLink, {
64
+ ...props,
65
+ className: cx("link wrap-break-word", props.className)
66
+ }),
67
+ ...components
68
+ },
28
69
  children: children || ""
29
70
  })
30
71
  });
31
72
  }
32
73
  //#endregion
33
- export { Markdown as default };
74
+ export { MarkdownImpl as default };
@@ -1,15 +1,13 @@
1
- import { FaCheck } from "../icons/fa/FaCheck.js";
2
- import { LuChevronRight } from "../icons/lu/LuChevronRight.js";
3
- import { panelClassName, panelItemClassName, portalContainer, positionerClassName } from "./floating.js";
1
+ import { cx } from "../cx.js";
2
+ import { CheckIcon, ChevronRightIcon } from "../icons.js";
3
+ import { panelClassName, panelItemClassName, positionerClassName } from "./floating.js";
4
4
  import { Menu } from "@base-ui/react/menu";
5
- import { clsx } from "clsx";
6
5
  import { jsx, jsxs } from "react/jsx-runtime";
7
6
  //#region src/components/Menu.tsx
8
7
  var itemClassName = panelItemClassName;
9
8
  /** The portal, positioner and popup every menu needs. */
10
9
  function MenuPopup({ children, className, side = "bottom", align = "start", anchor, keepMounted = false }) {
11
10
  return /* @__PURE__ */ jsx(Menu.Portal, {
12
- container: portalContainer(),
13
11
  keepMounted,
14
12
  children: /* @__PURE__ */ jsx(Menu.Positioner, {
15
13
  side,
@@ -18,7 +16,7 @@ function MenuPopup({ children, className, side = "bottom", align = "start", anch
18
16
  sideOffset: 4,
19
17
  className: positionerClassName,
20
18
  children: /* @__PURE__ */ jsx(Menu.Popup, {
21
- className: clsx("min-w-44 max-h-(--available-height) overflow-y-auto py-1", panelClassName, className),
19
+ className: cx("min-w-44 max-h-(--available-height) overflow-y-auto py-1", panelClassName, className),
22
20
  children
23
21
  })
24
22
  })
@@ -27,7 +25,7 @@ function MenuPopup({ children, className, side = "bottom", align = "start", anch
27
25
  function MenuItem({ className, ...props }) {
28
26
  return /* @__PURE__ */ jsx(Menu.Item, {
29
27
  ...props,
30
- className: clsx(itemClassName, className)
28
+ className: cx(itemClassName, className)
31
29
  });
32
30
  }
33
31
  /** A navigation row; give it `render` for a router link. Closes the menu like any item. */
@@ -35,7 +33,7 @@ function MenuLinkItem({ className, ...props }) {
35
33
  return /* @__PURE__ */ jsx(Menu.LinkItem, {
36
34
  closeOnClick: true,
37
35
  ...props,
38
- className: clsx(itemClassName, className)
36
+ className: cx(itemClassName, className)
39
37
  });
40
38
  }
41
39
  /** A choice within a Menu.RadioGroup, checked while it holds the group's value. */
@@ -43,10 +41,10 @@ function MenuRadioItem({ className, children, ...props }) {
43
41
  return /* @__PURE__ */ jsxs(Menu.RadioItem, {
44
42
  closeOnClick: true,
45
43
  ...props,
46
- className: clsx(itemClassName, "pl-2", className),
44
+ className: cx(itemClassName, "pl-2", className),
47
45
  children: [/* @__PURE__ */ jsx("span", {
48
46
  className: "flex w-3.5 shrink-0 justify-center",
49
- children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(FaCheck, { className: "size-3" }) })
47
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3" }) })
50
48
  }), children]
51
49
  });
52
50
  }
@@ -55,10 +53,10 @@ function MenuCheckboxItem({ className, children, ...props }) {
55
53
  return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
56
54
  closeOnClick: true,
57
55
  ...props,
58
- className: clsx(itemClassName, className),
56
+ className: cx(itemClassName, className),
59
57
  children: [children, /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, {
60
58
  className: "ml-auto",
61
- children: /* @__PURE__ */ jsx(FaCheck, { className: "size-3.5 opacity-80" })
59
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5 opacity-80" })
62
60
  })]
63
61
  });
64
62
  }
@@ -66,15 +64,15 @@ function MenuCheckboxItem({ className, children, ...props }) {
66
64
  function MenuSubmenuTrigger({ className, children, ...props }) {
67
65
  return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
68
66
  ...props,
69
- className: clsx(itemClassName, "data-popup-open:bg-(--theme-hover)", className),
67
+ className: cx(itemClassName, "data-popup-open:bg-(--theme-hover)", className),
70
68
  children: [/* @__PURE__ */ jsx("span", {
71
69
  className: "flex min-w-0 flex-1 items-center gap-2",
72
70
  children
73
- }), /* @__PURE__ */ jsx(LuChevronRight, { className: "size-3 shrink-0 opacity-60" })]
71
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3 shrink-0 opacity-60" })]
74
72
  });
75
73
  }
76
74
  function MenuSeparator({ className }) {
77
- return /* @__PURE__ */ jsx(Menu.Separator, { className: clsx("my-1 h-px bg-(--theme-border)", className) });
75
+ return /* @__PURE__ */ jsx(Menu.Separator, { className: cx("my-1 h-px bg-(--theme-border)", className) });
78
76
  }
79
77
  function MenuGroupLabel({ children }) {
80
78
  return /* @__PURE__ */ jsx(Menu.GroupLabel, {
@@ -1,11 +1,13 @@
1
+ import { cx } from "../cx.js";
1
2
  import { MenuCheckboxItem, MenuItem, MenuLinkItem, MenuPopup, MenuSeparator, MenuSubmenuTrigger } from "./Menu.js";
2
3
  import { safeUrl } from "../safeUrl.js";
4
+ import { EmptyState } from "./EmptyState.js";
3
5
  import { keyedByContent } from "./keys.js";
4
6
  import { Tooltip } from "./Tooltip.js";
5
- import { useLink, useNotify, useStrings } from "./Provider.js";
7
+ import { useLink } from "./Provider.js";
6
8
  import { useQueryMatch } from "./search.js";
9
+ import { useCopy } from "./useCopy.js";
7
10
  import { Menu } from "@base-ui/react/menu";
8
- import { clsx } from "clsx";
9
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
12
  import { useState } from "react";
11
13
  //#region src/components/MenuEntries.tsx
@@ -36,13 +38,13 @@ function MenuEntries({ entries, search, query = "" }) {
36
38
  children: /* @__PURE__ */ jsx(Menu.Input, {
37
39
  "aria-label": search.placeholder,
38
40
  placeholder: search.placeholder,
39
- className: "w-full rounded-md border border-(--theme-border) bg-(--theme-muted-panel-bg) px-2 py-1 text-[13px] text-(--theme-app) outline-none placeholder:text-(--theme-muted-text-color) focus:border-(--theme-element)"
41
+ className: "w-full rounded-md border border-(--theme-border) bg-(--theme-muted-panel-bg) px-2 py-1 text-[13px] text-(--theme-app) outline-none placeholder:text-(--theme-muted-text-color) focus:border-(--theme-accent)"
40
42
  })
41
43
  }),
42
44
  /* @__PURE__ */ jsx(Menu.List, { children: /* @__PURE__ */ jsx(EntryRows, { entries: shown }) }),
43
- needle && shown.length === 0 && /* @__PURE__ */ jsx("div", {
44
- className: "px-3 py-1.5 text-[13px] text-(--theme-muted-text-color)",
45
- children: search.empty
45
+ needle && shown.length === 0 && /* @__PURE__ */ jsx(EmptyState, {
46
+ variant: "bare",
47
+ title: search.empty
46
48
  })
47
49
  ] });
48
50
  }
@@ -74,8 +76,8 @@ function SubmenuRow({ submenu }) {
74
76
  var destructiveClassName = "text-(--theme-error) data-highlighted:text-(--theme-error)";
75
77
  function ActionRow({ action }) {
76
78
  const Link = useLink();
77
- const copy = useCopy();
78
- const className = clsx(action.destructive && destructiveClassName);
79
+ const { copy } = useCopy();
80
+ const className = cx(action.destructive && destructiveClassName);
79
81
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [action.icon, action.label] });
80
82
  if (action.href && !action.disabled) return action.reloadDocument ? /* @__PURE__ */ jsx(MenuLinkItem, {
81
83
  href: safeUrl(action.href),
@@ -87,7 +89,7 @@ function ActionRow({ action }) {
87
89
  children: content
88
90
  });
89
91
  const run = () => {
90
- if (action.copy) copy(action.copy);
92
+ if (action.copy) copy(action.copy.text, { label: action.copy.label });
91
93
  action.onClick?.();
92
94
  };
93
95
  const reason = action.disabled ? action.disabledReason : void 0;
@@ -112,12 +114,5 @@ function ActionRow({ action }) {
112
114
  })
113
115
  });
114
116
  }
115
- function useCopy() {
116
- const notify = useNotify();
117
- const { list: t } = useStrings();
118
- return ({ text, label }) => {
119
- navigator.clipboard?.writeText(text).then(() => notify.success(t.copied(label)), () => notify.error(t.couldntCopy(label)));
120
- };
121
- }
122
117
  //#endregion
123
118
  export { MenuEntries, MenuFilter, isMenuDivider, isMenuSubmenu, menuDivider };
@@ -0,0 +1,48 @@
1
+ import type { ReactNode } from 'react';
2
+ /** A bar's color: the theme's accent, a status, or muted for something stopped. */
3
+ export type BarTone = 'accent' | 'success' | 'warning' | 'error' | 'muted';
4
+ declare const trackClassName: {
5
+ readonly sm: 'h-1';
6
+ readonly md: 'h-1.5';
7
+ readonly lg: 'h-2';
8
+ };
9
+ export type BarSize = keyof typeof trackClassName;
10
+ interface BarProps {
11
+ /** Shown above the bar, which it names. */
12
+ label?: ReactNode;
13
+ /** Names the bar when nothing visible does. */
14
+ 'aria-label'?: string;
15
+ /** Shown under the bar, such as the amounts behind it. */
16
+ detail?: ReactNode;
17
+ size?: BarSize;
18
+ className?: string;
19
+ }
20
+ /** The tone for `value` against a warning and an error level, for a measure
21
+ * that's worse the higher it reads. */
22
+ export declare function levelTone(value: number, warnAt: number, errorAt: number): BarTone;
23
+ /** How full something is, such as storage used or a quota spent: a reading,
24
+ * not a task under way (that's `ProgressBar`). The bar turns amber, then red,
25
+ * as it passes `warnAt` and `errorAt`; `tone` overrides that. */
26
+ export declare function Meter({ value, min, max, warnAt, errorAt, tone, format, showValue, label, 'aria-label': ariaLabel, detail, size, className, }: BarProps & {
27
+ value: number;
28
+ min?: number;
29
+ max?: number;
30
+ /** Levels in the same units as `value`. */
31
+ warnAt?: number;
32
+ errorAt?: number;
33
+ tone?: BarTone;
34
+ /** How the value itself reads; without it, as a percentage of the range. */
35
+ format?: Intl.NumberFormatOptions;
36
+ /** Beside the label, or over the bar on hover when room is short. */
37
+ showValue?: 'beside' | 'tooltip';
38
+ }): import("react").JSX.Element;
39
+ /** How far a task has come, such as an upload, out of `max`; `null` while
40
+ * that's not known. Name it with `label` or `aria-label`. */
41
+ export declare function ProgressBar({ value, max, tone, status, label, 'aria-label': ariaLabel, detail, size, className, }: BarProps & {
42
+ value: number | null;
43
+ max?: number;
44
+ tone?: BarTone;
45
+ /** Beside the label in place of the percentage, such as "Completed". */
46
+ status?: ReactNode;
47
+ }): import("react").JSX.Element;
48
+ export {};