@parallelworks/ui 0.18.0 → 0.19.1

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 (349) hide show
  1. package/README.md +86 -6
  2. package/dist/ai/adapter/memoryStore.d.ts +8 -0
  3. package/dist/ai/adapter/memoryStore.js +152 -0
  4. package/dist/ai/adapter/mock/index.d.ts +2 -0
  5. package/dist/ai/adapter/mock/index.js +3 -0
  6. package/dist/ai/adapter/mock/mockAdapter.d.ts +4 -0
  7. package/dist/ai/adapter/mock/mockAdapter.js +81 -0
  8. package/dist/ai/adapter/openai/createOpenAIStream.d.ts +9 -0
  9. package/dist/ai/adapter/openai/createOpenAIStream.js +33 -0
  10. package/dist/ai/adapter/openai/errors.d.ts +3 -0
  11. package/dist/ai/adapter/openai/errors.js +37 -0
  12. package/dist/ai/adapter/openai/index.d.ts +6 -0
  13. package/dist/ai/adapter/openai/index.js +6 -0
  14. package/dist/ai/adapter/openai/openaiAdapter.d.ts +9 -0
  15. package/dist/ai/adapter/openai/openaiAdapter.js +54 -0
  16. package/dist/ai/adapter/openai/responses.d.ts +4 -0
  17. package/dist/ai/adapter/openai/responses.js +108 -0
  18. package/dist/ai/adapter/openai/sse.d.ts +24 -0
  19. package/dist/ai/adapter/openai/sse.js +112 -0
  20. package/dist/ai/adapter/openai/wire.d.ts +40 -0
  21. package/dist/ai/adapter/types.d.ts +131 -0
  22. package/dist/ai/adapter/types.js +11 -0
  23. package/dist/ai/agent/classifier.d.ts +2 -0
  24. package/dist/ai/agent/classifier.js +12 -0
  25. package/dist/ai/agent/diff.d.ts +35 -0
  26. package/dist/ai/agent/diff.js +223 -0
  27. package/dist/ai/agent/diffHighlight.d.ts +6 -0
  28. package/dist/ai/agent/diffHighlight.js +101 -0
  29. package/dist/ai/agent/index.d.ts +6 -0
  30. package/dist/ai/agent/permissions.d.ts +11 -0
  31. package/dist/ai/agent/permissions.js +29 -0
  32. package/dist/ai/agent/toolfmt.d.ts +18 -0
  33. package/dist/ai/agent/toolfmt.js +383 -0
  34. package/dist/ai/agent/transcript.d.ts +38 -0
  35. package/dist/ai/agent/transcript.js +127 -0
  36. package/dist/ai/ai.css +325 -0
  37. package/dist/ai/components/AllocationSelector.d.ts +4 -0
  38. package/dist/ai/components/AllocationSelector.js +56 -0
  39. package/dist/ai/components/AttachmentManager.d.ts +1 -0
  40. package/dist/ai/components/AttachmentManager.js +144 -0
  41. package/dist/ai/components/AttachmentUpload.d.ts +24 -0
  42. package/dist/ai/components/AttachmentUpload.js +179 -0
  43. package/dist/ai/components/BlockedGroupBanner.d.ts +1 -0
  44. package/dist/ai/components/BlockedGroupBanner.js +29 -0
  45. package/dist/ai/components/BranchNavigator.d.ts +8 -0
  46. package/dist/ai/components/BranchNavigator.js +57 -0
  47. package/dist/ai/components/ChatEmptyState.d.ts +3 -0
  48. package/dist/ai/components/ChatEmptyState.js +171 -0
  49. package/dist/ai/components/ChatInput.d.ts +45 -0
  50. package/dist/ai/components/ChatInput.js +265 -0
  51. package/dist/ai/components/ChatLayout.d.ts +5 -0
  52. package/dist/ai/components/ChatLayout.js +15 -0
  53. package/dist/ai/components/ChatMessage.d.ts +24 -0
  54. package/dist/ai/components/ChatMessage.js +338 -0
  55. package/dist/ai/components/ChatMessageList.d.ts +35 -0
  56. package/dist/ai/components/ChatMessageList.js +301 -0
  57. package/dist/ai/components/ChatSidebar.d.ts +5 -0
  58. package/dist/ai/components/ChatSidebar.js +345 -0
  59. package/dist/ai/components/ChatThread.d.ts +3 -0
  60. package/dist/ai/components/ChatThread.js +198 -0
  61. package/dist/ai/components/ComposerChrome.d.ts +18 -0
  62. package/dist/ai/components/ComposerChrome.js +50 -0
  63. package/dist/ai/components/ComposerFrame.d.ts +16 -0
  64. package/dist/ai/components/ComposerFrame.js +33 -0
  65. package/dist/ai/components/DragOverlay.d.ts +5 -0
  66. package/dist/ai/components/DragOverlay.js +20 -0
  67. package/dist/ai/components/ModelSelector.d.ts +6 -0
  68. package/dist/ai/components/ModelSelector.js +343 -0
  69. package/dist/ai/components/ShareDialog.d.ts +11 -0
  70. package/dist/ai/components/ShareDialog.js +260 -0
  71. package/dist/ai/components/SlashMenu.d.ts +28 -0
  72. package/dist/ai/components/SlashMenu.js +91 -0
  73. package/dist/ai/components/agent/ActivityLine.d.ts +21 -0
  74. package/dist/ai/components/agent/ActivityLine.js +151 -0
  75. package/dist/ai/components/agent/AgentMessageParts.d.ts +54 -0
  76. package/dist/ai/components/agent/AgentMessageParts.js +721 -0
  77. package/dist/ai/components/agent/PermissionPicker.d.ts +11 -0
  78. package/dist/ai/components/agent/PermissionPicker.js +38 -0
  79. package/dist/ai/components/attachmentKeys.d.ts +4 -0
  80. package/dist/ai/components/attachmentKeys.js +10 -0
  81. package/dist/ai/core/ChatProvider.d.ts +66 -0
  82. package/dist/ai/core/ChatProvider.js +848 -0
  83. package/dist/ai/core/KeyboardShortcutsProvider.d.ts +5 -0
  84. package/dist/ai/core/KeyboardShortcutsProvider.js +9 -0
  85. package/dist/ai/core/chatReducer.d.ts +114 -0
  86. package/dist/ai/core/chatReducer.js +223 -0
  87. package/dist/ai/core/config.d.ts +47 -0
  88. package/dist/ai/core/config.js +45 -0
  89. package/dist/ai/core/events.d.ts +1 -0
  90. package/dist/ai/core/events.js +4 -0
  91. package/dist/ai/core/exportConversation.d.ts +4 -0
  92. package/dist/ai/core/exportConversation.js +42 -0
  93. package/dist/ai/core/greeting.d.ts +3 -0
  94. package/dist/ai/core/greeting.js +38 -0
  95. package/dist/ai/core/parts.d.ts +11 -0
  96. package/dist/ai/core/parts.js +84 -0
  97. package/dist/ai/core/useDragDrop.d.ts +14 -0
  98. package/dist/ai/core/useDragDrop.js +36 -0
  99. package/dist/ai/core/useKeyboardShortcuts.d.ts +12 -0
  100. package/dist/ai/core/useKeyboardShortcuts.js +77 -0
  101. package/dist/ai/core/useSSEStream.d.ts +34 -0
  102. package/dist/ai/core/useSSEStream.js +98 -0
  103. package/dist/ai/index.d.ts +40 -0
  104. package/dist/ai/index.js +44 -0
  105. package/dist/ai/strings.d.ts +167 -0
  106. package/dist/ai/strings.js +175 -0
  107. package/dist/ai/types.d.ts +236 -0
  108. package/dist/ai/ui/Avatar.d.ts +8 -0
  109. package/dist/ai/ui/Avatar.js +35 -0
  110. package/dist/ai/ui/Dropdown.d.ts +31 -0
  111. package/dist/ai/ui/Dropdown.js +110 -0
  112. package/dist/ai/ui/Markdown.d.ts +8 -0
  113. package/dist/ai/ui/Markdown.js +79 -0
  114. package/dist/ai/ui/Notice.d.ts +21 -0
  115. package/dist/ai/ui/Notice.js +77 -0
  116. package/dist/ai/ui/buttons.d.ts +1 -0
  117. package/dist/ai/ui/codeBreaks.d.ts +16 -0
  118. package/dist/ai/ui/codeBreaks.js +36 -0
  119. package/dist/ai/ui/prose.d.ts +1 -0
  120. package/dist/ai/ui/prose.js +13 -0
  121. package/dist/ai/ui/sidebar.d.ts +81 -0
  122. package/dist/ai/ui/sidebar.js +148 -0
  123. package/dist/ai/utils.d.ts +4 -0
  124. package/dist/ai/utils.js +23 -0
  125. package/dist/assets/{editor.worker-CuBRIwi-.js → editor.worker-BmHUIVG4.js} +194 -163
  126. package/dist/assets/{json.worker-8ytS02vz.js → json.worker-D8bJ92nw.js} +384 -338
  127. package/dist/assets/{yaml.worker-DJC-VUcv.js → yaml.worker-C4gyGAko.js} +15657 -13823
  128. package/dist/components/AddMenu.js +46 -0
  129. package/dist/components/Avatar.d.ts +1 -1
  130. package/dist/components/Avatar.js +46 -0
  131. package/dist/{chunks/BareModal-BtRiQezg.js → components/BareModal.js} +1 -1
  132. package/dist/components/Breadcrumbs.d.ts +1 -1
  133. package/dist/components/Breadcrumbs.js +83 -0
  134. package/dist/components/Button.js +83 -0
  135. package/dist/components/Callout.js +23 -0
  136. package/dist/components/Card.js +31 -0
  137. package/dist/components/CollapsiblePanel.js +77 -0
  138. package/dist/components/ConfirmModal.js +74 -0
  139. package/dist/components/CopyToClipboard.js +81 -0
  140. package/dist/{chunks/CreateModal-BY6DLmur.js → components/CreateModal.js} +10 -189
  141. package/dist/components/DescriptionList.js +42 -0
  142. package/dist/components/Dropdown.d.ts +1 -1
  143. package/dist/components/Dropdown.js +349 -0
  144. package/dist/components/EmptyState.d.ts +1 -1
  145. package/dist/components/EmptyState.js +27 -0
  146. package/dist/components/Filter.js +32 -0
  147. package/dist/components/FilterPill.js +13 -0
  148. package/dist/components/IconButton.js +34 -0
  149. package/dist/components/Indicator.d.ts +2 -2
  150. package/dist/{chunks/Indicator-hBSIxOPK.js → components/Indicator.js} +1 -1
  151. package/dist/components/Input.d.ts +1 -1
  152. package/dist/components/Input.js +88 -0
  153. package/dist/components/LetterBadge.d.ts +1 -1
  154. package/dist/components/LetterBadge.js +13 -0
  155. package/dist/components/Listbox.js +123 -0
  156. package/dist/{chunks/Loader-BXoXTZGc.js → components/Loader.js} +1 -1
  157. package/dist/components/Markdown.js +15 -0
  158. package/dist/components/MarkdownImpl.d.ts +1 -1
  159. package/dist/components/MultiSelect.js +171 -0
  160. package/dist/components/Overview.js +39 -0
  161. package/dist/components/PageHeader.js +194 -0
  162. package/dist/components/Pagination.js +35 -0
  163. package/dist/components/Provider.d.ts +16 -65
  164. package/dist/{chunks/Provider-Ghua9PkN.js → components/Provider.js} +54 -20
  165. package/dist/{chunks/RequiredMark-DfLdYbYZ.js → components/RequiredMark.js} +1 -1
  166. package/dist/components/SectionHeader.js +11 -0
  167. package/dist/components/SettingModeOption.js +30 -0
  168. package/dist/components/SettingRow.d.ts +1 -1
  169. package/dist/components/SettingRow.js +35 -0
  170. package/dist/components/SettingsCard.js +31 -0
  171. package/dist/components/SettingsGroup.d.ts +1 -1
  172. package/dist/components/SettingsGroup.js +17 -0
  173. package/dist/components/Sort.js +42 -0
  174. package/dist/components/StatusBadge.js +63 -0
  175. package/dist/components/SwitchToggle.js +59 -0
  176. package/dist/{chunks/SwitchToggleSmall-FcsaYSTs.js → components/SwitchToggleSmall.js} +1 -1
  177. package/dist/{chunks/Table-4OHjdKdO.js → components/Table.js} +7 -5
  178. package/dist/components/Toggle.js +20 -0
  179. package/dist/{chunks/Tooltip-Crxo_eU_.js → components/Tooltip.js} +6 -4
  180. package/dist/{chunks/StatusBadge-C1Blx_cW.js → components/dropdownUtils.js} +2 -63
  181. package/dist/components/focus.d.ts +2 -0
  182. package/dist/components/focus.js +7 -0
  183. package/dist/components/ghostButton.js +7 -0
  184. package/dist/components/inputClasses.js +4 -0
  185. package/dist/components/keys.d.ts +12 -0
  186. package/dist/components/keys.js +27 -0
  187. package/dist/components/relativeTime.js +32 -0
  188. package/dist/{chunks/useCssIsDark-DHr05dG2.js → components/useCssIsDark.js} +1 -1
  189. package/dist/duration.d.ts +3 -0
  190. package/dist/duration.js +17 -0
  191. package/dist/editor/Editor.js +13 -0
  192. package/dist/editor/EditorField.js +53 -0
  193. package/dist/editor/FormCodePanel.js +173 -0
  194. package/dist/editor/Monaco.d.ts +1 -20
  195. package/dist/editor/Monaco.js +112 -0
  196. package/dist/editor/index.d.ts +2 -1
  197. package/dist/editor/index.js +7 -2
  198. package/dist/editor/themes.js +91 -0
  199. package/dist/editor/workers.js +29 -0
  200. package/dist/editor/yaml.d.ts +5 -0
  201. package/dist/editor/yaml.js +15 -0
  202. package/dist/engine.d.ts +98 -0
  203. package/dist/file-explorer/FileExplorer.d.ts +11 -2
  204. package/dist/file-explorer/FileExplorer.js +1402 -0
  205. package/dist/file-explorer/FileExplorerContext.d.ts +1 -1
  206. package/dist/file-explorer/FileExplorerContext.js +370 -0
  207. package/dist/file-explorer/FilePreview/CodePreviewEditor.d.ts +1 -1
  208. package/dist/{chunks/CodePreviewEditor-4lx3kE-w.js → file-explorer/FilePreview/CodePreviewEditor.js} +3 -2
  209. package/dist/file-explorer/FilePreview/Inline.js +45 -0
  210. package/dist/file-explorer/FilePreview/StreamedBadge.js +16 -0
  211. package/dist/file-explorer/FilePreview/Viewer.js +526 -0
  212. package/dist/file-explorer/FilePreview/index.js +266 -0
  213. package/dist/file-explorer/FilePreview/parse.js +63 -0
  214. package/dist/file-explorer/FilePreview/previewCache.js +98 -0
  215. package/dist/file-explorer/FilePreview/previewType.d.ts +1 -1
  216. package/dist/file-explorer/FilePreview/previewType.js +151 -0
  217. package/dist/file-explorer/FilePreview/readCappedBytes.js +196 -0
  218. package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +95 -0
  219. package/dist/file-explorer/FilePreview/useObjectText.js +109 -0
  220. package/dist/file-explorer/FilePreview/usePresignedUrl.js +73 -0
  221. package/dist/file-explorer/FileRow.d.ts +1 -1
  222. package/dist/file-explorer/FileRow.js +165 -0
  223. package/dist/file-explorer/FileRowsWindow.js +92 -0
  224. package/dist/file-explorer/FileTable.js +172 -0
  225. package/dist/file-explorer/FileTableHeaders.js +49 -0
  226. package/dist/file-explorer/LoadMoreRow.js +46 -0
  227. package/dist/file-explorer/TreeView.js +376 -0
  228. package/dist/file-explorer/helpers.d.ts +4 -4
  229. package/dist/file-explorer/helpers.js +537 -0
  230. package/dist/file-explorer/index.d.ts +3 -3
  231. package/dist/file-explorer/index.js +7 -5705
  232. package/dist/file-explorer/lib/batch.js +39 -0
  233. package/dist/file-explorer/lib/errors.js +9 -0
  234. package/dist/file-explorer/lib/paging.js +124 -0
  235. package/dist/file-explorer/lib/types.d.ts +6 -1
  236. package/dist/file-explorer/lib/utils.d.ts +1 -3
  237. package/dist/file-explorer/lib/utils.js +322 -0
  238. package/dist/file-explorer/toasts.js +400 -0
  239. package/dist/file-explorer/treeRows.js +73 -0
  240. package/dist/file-explorer/useNearEnd.d.ts +1 -1
  241. package/dist/file-explorer/useNearEnd.js +27 -0
  242. package/dist/form/FieldWrapper.d.ts +2 -2
  243. package/dist/form/FieldWrapper.js +54 -0
  244. package/dist/form/Fields/BooleanField.js +51 -0
  245. package/dist/form/Fields/CheckboxGroupField.js +72 -0
  246. package/dist/form/Fields/ColorField.js +33 -0
  247. package/dist/form/Fields/DropdownField.js +49 -0
  248. package/dist/form/Fields/DurationField.js +130 -0
  249. package/dist/form/Fields/LabelField.js +19 -0
  250. package/dist/form/Fields/MultiDropdownField.js +40 -0
  251. package/dist/form/Fields/NumberField.js +51 -0
  252. package/dist/form/Fields/ObjectField.js +54 -0
  253. package/dist/form/Fields/RadioField.js +49 -0
  254. package/dist/form/Fields/RangeField.js +58 -0
  255. package/dist/form/Fields/ResourceOptionIcon.d.ts +1 -1
  256. package/dist/form/Fields/ResourceOptionIcon.js +21 -0
  257. package/dist/form/Fields/StepField.js +6 -0
  258. package/dist/form/Fields/StringField.js +37 -0
  259. package/dist/form/Fields/TextAreaField.js +31 -0
  260. package/dist/form/Fields/durationValidity.js +11 -0
  261. package/dist/form/Form.d.ts +4 -21
  262. package/dist/form/Form.js +643 -0
  263. package/dist/form/SpecialTypes/DropdownWrapper.js +30 -0
  264. package/dist/form/SpecialTypes/FormikCustomDropdown.js +122 -0
  265. package/dist/form/SpecialTypes/FormikCustomInput.js +111 -0
  266. package/dist/form/SpecialTypes/FormikMultiSelectDropdown.js +31 -0
  267. package/dist/form/SpecialTypes/FormikNumericInput.js +60 -0
  268. package/dist/form/Wizard/WizardContainer.js +138 -0
  269. package/dist/form/Wizard/WizardNavigation.js +92 -0
  270. package/dist/form/Wizard/WizardStepContent.js +35 -0
  271. package/dist/form/Wizard/WizardStepIndicator.js +108 -0
  272. package/dist/form/Wizard/useWizardState.js +118 -0
  273. package/dist/form/Wizard/utils.js +34 -0
  274. package/dist/form/fieldContext.js +26 -0
  275. package/dist/form/fieldRegistry.js +50 -0
  276. package/dist/form/index.d.ts +11 -12
  277. package/dist/form/index.js +18 -2445
  278. package/dist/form/lib.d.ts +6 -1
  279. package/dist/{chunks/FieldWrapper-Bef01EWO.js → form/lib.js} +5 -104
  280. package/dist/form/types/fieldComponentTypes.d.ts +3 -2
  281. package/dist/form/types/fieldTypes.d.ts +6 -20
  282. package/dist/form/useParsedOpts.d.ts +1 -1
  283. package/dist/form/useParsedOpts.js +62 -0
  284. package/dist/form/usePrevious.js +11 -0
  285. package/dist/form/utils/checkShowIfObject.js +14 -0
  286. package/dist/form/utils/{slurmDuration.d.ts → duration.d.ts} +2 -2
  287. package/dist/form/utils/duration.js +69 -0
  288. package/dist/form/utils/getParentValue.js +23 -0
  289. package/dist/form/utils/getPlaceholder.js +9 -0
  290. package/dist/form/utils/getValueUsingPath.js +23 -0
  291. package/dist/form/utils/secondaryField.js +22 -0
  292. package/dist/graph/AnnotationBanner.js +141 -0
  293. package/dist/graph/Collapse.js +41 -0
  294. package/dist/{workflow/index.js → graph/DependencyGraph.js} +76 -1163
  295. package/dist/graph/JobSummary.js +104 -0
  296. package/dist/{workflow → graph}/MatrixGroup.d.ts +2 -2
  297. package/dist/graph/MatrixGroup.js +107 -0
  298. package/dist/graph/Reveal.js +57 -0
  299. package/dist/graph/TreeView.js +711 -0
  300. package/dist/{workflow → graph}/index.d.ts +1 -1
  301. package/dist/graph/index.js +2 -0
  302. package/dist/{workflow → graph}/types.d.ts +3 -3
  303. package/dist/graph/types.js +6 -0
  304. package/dist/icons.d.ts +20 -21
  305. package/dist/index.d.ts +38 -40
  306. package/dist/index.js +47 -599
  307. package/dist/list/ActionToolbar.js +184 -0
  308. package/dist/list/HoverCard.js +73 -0
  309. package/dist/list/ListPage.js +145 -0
  310. package/dist/list/ListPager.js +59 -0
  311. package/dist/list/ListTable.d.ts +1 -1
  312. package/dist/list/ListTable.js +163 -0
  313. package/dist/list/ListViewControls.d.ts +2 -2
  314. package/dist/list/ListViewControls.js +372 -0
  315. package/dist/list/RowContextMenu.js +350 -0
  316. package/dist/list/UserHoverCard.js +117 -0
  317. package/dist/list/index.d.ts +9 -9
  318. package/dist/list/index.js +11 -2
  319. package/dist/list/listSearch.js +137 -0
  320. package/dist/list/listView.js +210 -0
  321. package/dist/list/textEntry.js +10 -0
  322. package/dist/logviewer/LogViewer.d.ts +1 -1
  323. package/dist/logviewer/LogViewer.js +750 -0
  324. package/dist/logviewer/index.d.ts +1 -0
  325. package/dist/logviewer/index.js +3 -742
  326. package/dist/logviewer/segments.d.ts +9 -0
  327. package/dist/logviewer/segments.js +80 -0
  328. package/dist/styles/fonts.css +4 -4
  329. package/dist/styles/theme.css +6 -4
  330. package/dist/styles.css +1 -1
  331. package/dist/theme/index.js +2 -2
  332. package/package.json +38 -14
  333. package/LICENSE +0 -202
  334. package/dist/chunks/Monaco-C1POOdVv.js +0 -1046
  335. package/dist/chunks/PageHeader-l49p1nM9.js +0 -690
  336. package/dist/chunks/SwitchToggle-CHPP8uZQ.js +0 -755
  337. package/dist/chunks/editor-9_uVtUyy.js +0 -347
  338. package/dist/chunks/list-qrojZZNv.js +0 -1411
  339. package/dist/editor/usesGitlab.d.ts +0 -97
  340. package/dist/form/Fields/BucketReadOnlyField.d.ts +0 -7
  341. package/dist/form/types/workflow-schema.d.ts +0 -1145
  342. package/dist/form/utils/pwResolver.d.ts +0 -18
  343. package/dist/{chunks/MarkdownImpl-Bq4QhrtA.js → components/MarkdownImpl.js} +1 -1
  344. /package/dist/{workflow → graph}/AnnotationBanner.d.ts +0 -0
  345. /package/dist/{workflow → graph}/Collapse.d.ts +0 -0
  346. /package/dist/{workflow → graph}/DependencyGraph.d.ts +0 -0
  347. /package/dist/{workflow → graph}/JobSummary.d.ts +0 -0
  348. /package/dist/{workflow → graph}/Reveal.d.ts +0 -0
  349. /package/dist/{workflow → graph}/TreeView.d.ts +0 -0
@@ -0,0 +1,108 @@
1
+ import cx from "classnames";
2
+ import { useMemo } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/form/Wizard/WizardStepIndicator.tsx
5
+ function WizardStepIndicator({ stepOrder, currentStep, steps, visitedSteps, invalidSteps, onStepClick, allowJump = false, hideStepNumbers = false }) {
6
+ const currentIndex = useMemo(() => stepOrder.indexOf(currentStep), [stepOrder, currentStep]);
7
+ const getStepStatus = (stepKey, index) => {
8
+ if (stepKey === currentStep) return "active";
9
+ if (index < currentIndex) return "completed";
10
+ return "upcoming";
11
+ };
12
+ const handleStepClick = (stepKey) => {
13
+ if (!allowJump || !visitedSteps.has(stepKey)) return;
14
+ onStepClick?.(stepKey);
15
+ };
16
+ const isClickable = (stepKey) => {
17
+ return allowJump && visitedSteps.has(stepKey) && stepKey !== currentStep;
18
+ };
19
+ return /* @__PURE__ */ jsx("div", {
20
+ className: "flex items-start justify-between w-full mb-2 gap-4 py-2",
21
+ children: stepOrder.map((stepKey, index) => {
22
+ const stepConfig = steps[stepKey];
23
+ const status = getStepStatus(stepKey, index);
24
+ const isInvalid = invalidSteps.has(stepKey);
25
+ const isClickable_ = isClickable(stepKey);
26
+ const isDotActive = status === "active";
27
+ const isDotCompleted = status === "completed";
28
+ const isDotUpcoming = status === "upcoming";
29
+ return /* @__PURE__ */ jsxs("div", {
30
+ className: "flex flex-col items-center flex-1 relative",
31
+ children: [
32
+ /* @__PURE__ */ jsxs("button", {
33
+ type: "button",
34
+ onClick: () => handleStepClick(stepKey),
35
+ disabled: !isClickable_,
36
+ className: cx("w-12 h-12 rounded-full border-3 flex items-center justify-center font-bold text-base transition-all duration-300 flex-shrink-0 relative", {
37
+ "cursor-pointer": isClickable_,
38
+ "cursor-not-allowed": !isClickable_
39
+ }, {
40
+ "text-white": isDotActive,
41
+ "bg-green-500 border-green-600 text-white shadow-md": isDotCompleted && !isInvalid,
42
+ "bg-(--theme-border) theme-border theme-muted-text shadow-sm": isDotUpcoming && !isInvalid,
43
+ "bg-(--theme-muted-panel-bg) theme-border theme-muted-text shadow-sm": !isDotActive && !isDotCompleted && !isDotUpcoming && !isInvalid,
44
+ "bg-red-50 border-red-500 text-red-600 shadow-sm": isInvalid && status !== "active"
45
+ }),
46
+ style: isDotActive ? {
47
+ backgroundColor: "var(--theme-element)",
48
+ borderColor: "var(--theme-element)",
49
+ color: "var(--theme-element-text)",
50
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)",
51
+ zIndex: 10
52
+ } : { zIndex: 10 },
53
+ "aria-label": `Step ${index + 1}: ${stepConfig?.title}`,
54
+ title: stepConfig?.title,
55
+ children: [!hideStepNumbers && /* @__PURE__ */ jsx("span", {
56
+ className: cx({ hidden: status === "completed" }),
57
+ children: index + 1
58
+ }), status === "completed" && /* @__PURE__ */ jsx("svg", {
59
+ "aria-hidden": "true",
60
+ className: "w-4 h-4",
61
+ fill: "none",
62
+ stroke: "currentColor",
63
+ viewBox: "0 0 24 24",
64
+ children: /* @__PURE__ */ jsx("path", {
65
+ strokeLinecap: "round",
66
+ strokeLinejoin: "round",
67
+ strokeWidth: 3,
68
+ d: "M5 13l4 4L19 7"
69
+ })
70
+ })]
71
+ }),
72
+ index < stepOrder.length - 1 && /* @__PURE__ */ jsx("div", {
73
+ className: cx("absolute h-1 transition-all duration-300", {
74
+ "bg-green-500": index < currentIndex,
75
+ "bg-(--theme-border)": index >= currentIndex,
76
+ "opacity-25": index >= currentIndex
77
+ }),
78
+ style: {
79
+ top: "24px",
80
+ left: "calc(50% + 24px)",
81
+ right: "-50%",
82
+ boxShadow: index < currentIndex ? "0 1px 2px rgba(34, 197, 94, 0.2)" : "none"
83
+ },
84
+ "aria-hidden": "true"
85
+ }),
86
+ /* @__PURE__ */ jsxs("div", {
87
+ className: "mt-2 text-center",
88
+ children: [/* @__PURE__ */ jsx("div", {
89
+ className: cx("text-sm text-center transition-colors duration-300 max-w-30", {
90
+ "font-bold text-green-600": isDotCompleted && !isInvalid,
91
+ "font-bold text-red-600": isInvalid && status !== "active",
92
+ "font-semibold theme-muted-text": !isDotActive && !isDotCompleted && !isInvalid,
93
+ "font-bold text-white": isDotActive
94
+ }),
95
+ style: isDotActive ? { color: "var(--theme-element)" } : {},
96
+ children: stepConfig?.title
97
+ }), stepConfig?.description && /* @__PURE__ */ jsx("div", {
98
+ className: "text-xs theme-muted-text mt-1 text-center max-w-30",
99
+ children: stepConfig.description
100
+ })]
101
+ })
102
+ ]
103
+ }, stepKey);
104
+ })
105
+ });
106
+ }
107
+ //#endregion
108
+ export { WizardStepIndicator };
@@ -0,0 +1,118 @@
1
+ import { useCallback, useState } from "react";
2
+ //#region src/form/Wizard/useWizardState.ts
3
+ function useWizardState({ stepOrder, steps, validateStep, initialStep }) {
4
+ const firstStep = initialStep || stepOrder[0] || "";
5
+ const [currentStep, setCurrentStep] = useState(firstStep);
6
+ const [visitedSteps, setVisitedSteps] = useState(/* @__PURE__ */ new Set([firstStep]));
7
+ const [invalidSteps, setInvalidSteps] = useState(/* @__PURE__ */ new Set());
8
+ const currentStepIndex = stepOrder.indexOf(currentStep);
9
+ const isLastStep = currentStepIndex === stepOrder.length - 1;
10
+ const canGoBack = currentStepIndex > 0;
11
+ /**
12
+ * Mark step as visited
13
+ */
14
+ const markStepVisited = useCallback((stepKey) => {
15
+ setVisitedSteps((prev) => /* @__PURE__ */ new Set([...prev, stepKey]));
16
+ }, []);
17
+ /**
18
+ * Mark step as invalid
19
+ */
20
+ const markStepInvalid = useCallback((stepKey, invalid) => {
21
+ setInvalidSteps((prev) => {
22
+ const next = new Set(prev);
23
+ if (invalid) next.add(stepKey);
24
+ else next.delete(stepKey);
25
+ return next;
26
+ });
27
+ }, []);
28
+ const goToNext = useCallback(async () => {
29
+ if (isLastStep) return false;
30
+ if (steps[currentStep]?.validateOnNext !== false) {
31
+ if (!await validateStep(currentStep)) {
32
+ markStepInvalid(currentStep, true);
33
+ return false;
34
+ }
35
+ }
36
+ markStepInvalid(currentStep, false);
37
+ const nextStepKey = stepOrder[currentStepIndex + 1];
38
+ setCurrentStep(nextStepKey ?? "");
39
+ markStepVisited(nextStepKey ?? "");
40
+ return true;
41
+ }, [
42
+ currentStep,
43
+ currentStepIndex,
44
+ isLastStep,
45
+ steps,
46
+ stepOrder,
47
+ validateStep,
48
+ markStepInvalid,
49
+ markStepVisited
50
+ ]);
51
+ const goToPrevious = useCallback(() => {
52
+ if (!canGoBack) return;
53
+ const prevStepKey = stepOrder[currentStepIndex - 1];
54
+ setCurrentStep(prevStepKey ?? "");
55
+ }, [
56
+ canGoBack,
57
+ currentStepIndex,
58
+ stepOrder
59
+ ]);
60
+ const jumpToStep = useCallback((stepKey) => {
61
+ if (!stepOrder.includes(stepKey)) return false;
62
+ if (!visitedSteps.has(stepKey) && stepKey !== currentStep) return false;
63
+ setCurrentStep(stepKey);
64
+ return true;
65
+ }, [
66
+ stepOrder,
67
+ visitedSteps,
68
+ currentStep
69
+ ]);
70
+ /**
71
+ * Reset wizard to initial state
72
+ */
73
+ const reset = useCallback(() => {
74
+ setCurrentStep(firstStep);
75
+ setVisitedSteps(/* @__PURE__ */ new Set([firstStep]));
76
+ setInvalidSteps(/* @__PURE__ */ new Set());
77
+ }, [firstStep]);
78
+ /**
79
+ * Get current wizard state
80
+ */
81
+ const getState = useCallback(() => {
82
+ return {
83
+ currentStep,
84
+ visitedSteps,
85
+ invalidSteps,
86
+ stepOrder,
87
+ totalSteps: stepOrder.length,
88
+ isLastStep,
89
+ canProceedToNext: !isLastStep,
90
+ canGoBack
91
+ };
92
+ }, [
93
+ currentStep,
94
+ visitedSteps,
95
+ invalidSteps,
96
+ stepOrder,
97
+ isLastStep,
98
+ canGoBack
99
+ ]);
100
+ return {
101
+ currentStep,
102
+ visitedSteps,
103
+ invalidSteps,
104
+ isLastStep,
105
+ canGoBack,
106
+ currentStepIndex,
107
+ totalSteps: stepOrder.length,
108
+ goToNext,
109
+ goToPrevious,
110
+ jumpToStep,
111
+ reset,
112
+ markStepVisited,
113
+ markStepInvalid,
114
+ getState
115
+ };
116
+ }
117
+ //#endregion
118
+ export { useWizardState };
@@ -0,0 +1,34 @@
1
+ //#region src/form/Wizard/utils.ts
2
+ function isWizardMeta(value) {
3
+ return typeof value === "object" && value !== null && "wizard" in value;
4
+ }
5
+ function isStepField(field) {
6
+ return typeof field === "object" && field !== null && "type" in field && field.type === "step";
7
+ }
8
+ function parseWizardConfig(options) {
9
+ const meta = options["$meta"];
10
+ const wizardConfig = isWizardMeta(meta) ? meta.wizard : void 0;
11
+ if (!wizardConfig || wizardConfig.mode !== "wizard") return null;
12
+ const steps = {};
13
+ const stepOrder = [];
14
+ const otherFields = {};
15
+ Object.entries(options).forEach(([key, field]) => {
16
+ if (key === "$meta") return;
17
+ if (isStepField(field)) {
18
+ steps[key] = field;
19
+ stepOrder.push(key);
20
+ } else otherFields[key] = field;
21
+ });
22
+ if (stepOrder.length === 0) {
23
+ console.warn("Wizard mode enabled but no steps found");
24
+ return null;
25
+ }
26
+ return {
27
+ config: wizardConfig,
28
+ steps,
29
+ stepOrder,
30
+ otherFields
31
+ };
32
+ }
33
+ //#endregion
34
+ export { parseWizardConfig };
@@ -0,0 +1,26 @@
1
+ import { createContext, useContext } from "react";
2
+ //#region src/form/fieldContext.tsx
3
+ var FieldContext = createContext({ required: false });
4
+ var FieldProvider = FieldContext.Provider;
5
+ /** True when the surrounding FieldWrapper is showing the required asterisk. */
6
+ function useFieldRequired() {
7
+ return useContext(FieldContext).required;
8
+ }
9
+ /** Ties the single focusable control of a field to its FieldWrapper label. */
10
+ function useFieldControlProps() {
11
+ const { id, descriptionId } = useContext(FieldContext);
12
+ return {
13
+ id,
14
+ "aria-describedby": descriptionId
15
+ };
16
+ }
17
+ /** For controls and groups that can only be named through aria-labelledby. */
18
+ function useFieldLabelledByProps() {
19
+ const { labelId, descriptionId } = useContext(FieldContext);
20
+ return {
21
+ "aria-labelledby": labelId,
22
+ "aria-describedby": descriptionId
23
+ };
24
+ }
25
+ //#endregion
26
+ export { FieldProvider, useFieldControlProps, useFieldLabelledByProps, useFieldRequired };
@@ -0,0 +1,50 @@
1
+ import { useSlots } from "../components/Provider.js";
2
+ import NumberField from "./Fields/NumberField.js";
3
+ import BooleanField from "./Fields/BooleanField.js";
4
+ import CheckboxGroupField from "./Fields/CheckboxGroupField.js";
5
+ import ColorField from "./Fields/ColorField.js";
6
+ import DropdownField from "./Fields/DropdownField.js";
7
+ import DurationField_default from "./Fields/DurationField.js";
8
+ import LabelField from "./Fields/LabelField.js";
9
+ import MultiDropdownField from "./Fields/MultiDropdownField.js";
10
+ import ObjectField from "./Fields/ObjectField.js";
11
+ import RadioField from "./Fields/RadioField.js";
12
+ import RangeField from "./Fields/RangeField.js";
13
+ import StepField from "./Fields/StepField.js";
14
+ import StringField_default from "./Fields/StringField.js";
15
+ import TextAreaField from "./Fields/TextAreaField.js";
16
+ import { Suspense, createContext, useContext } from "react";
17
+ import { jsx } from "react/jsx-runtime";
18
+ //#region src/form/fieldRegistry.tsx
19
+ var CORE_FIELD_COMPONENTS = {
20
+ string: StringField_default,
21
+ password: StringField_default,
22
+ number: NumberField,
23
+ boolean: BooleanField,
24
+ dropdown: DropdownField,
25
+ textarea: TextAreaField,
26
+ range: RangeField,
27
+ duration: DurationField_default,
28
+ radio: RadioField,
29
+ label: LabelField,
30
+ color: ColorField,
31
+ "multi-dropdown": MultiDropdownField,
32
+ "checkbox-group": CheckboxGroupField,
33
+ object: ObjectField,
34
+ step: StepField
35
+ };
36
+ var FieldRegistryContext = createContext({});
37
+ /** Returns null for field types no registry knows. Per-form `fields` win over
38
+ * the provider's `slots.formFields`, which win over the core registry. */
39
+ function Registry(props) {
40
+ const injected = useContext(FieldRegistryContext);
41
+ const { formFields } = useSlots();
42
+ const Component = injected[props.field.type] ?? formFields?.[props.field.type] ?? CORE_FIELD_COMPONENTS[props.field.type];
43
+ if (!Component) return null;
44
+ return /* @__PURE__ */ jsx(Suspense, {
45
+ fallback: null,
46
+ children: /* @__PURE__ */ jsx(Component, { ...props })
47
+ });
48
+ }
49
+ //#endregion
50
+ export { FieldRegistryContext, Registry };
@@ -1,18 +1,17 @@
1
- export { DynamicForm, DynamicDefaultsSync, FieldsFromOptions, GroupHeader, MultiSelectionDropdown, StatusBlock, collectFieldsWithDefaults, useDynamicDefaultsSync, findSelfReferencingFieldNames, getInstanceTypesForForm, resolveMetaOverrides, type DynamicFormProps, type TSetFormDirty, } from './Form.js';
2
- export { type FieldComponent, FieldRegistryContext, Registry, } from './fieldRegistry.js';
3
- export { FieldWrapper, type FieldLabelBinding } from './FieldWrapper.js';
1
+ export { getInvalidDurationPaths, setDurationValidity, } from './Fields/durationValidity.js';
2
+ export { default as NumberField, type INumberField, } from './Fields/NumberField.js';
3
+ export { ResourceOptionIcon } from './Fields/ResourceOptionIcon.js';
4
+ export { type FieldLabelBinding, FieldWrapper } from './FieldWrapper.js';
5
+ export { collectFieldsWithDefaults, DynamicDefaultsSync, DynamicForm, type DynamicFormProps, FieldsFromOptions, findSelfReferencingFieldNames, GroupHeader, MultiSelectionDropdown, resolveMetaOverrides, type TSetFormDirty, useDynamicDefaultsSync, } from './Form.js';
4
6
  export { type FieldContextValue, FieldProvider, useFieldControlProps, useFieldLabelledByProps, useFieldRequired, } from './fieldContext.js';
7
+ export { type FieldComponent, FieldRegistryContext, Registry, } from './fieldRegistry.js';
5
8
  export { enforceOneMustBeTrue, flattenGroups, impureSetValueFromPath, initializeValues, resolvedFlag, } from './lib.js';
6
9
  export { default as DropdownWrapper } from './SpecialTypes/DropdownWrapper.js';
7
- export { FormikCustomDropdown, FormikCustomInput, FormikNumericInput, } from './SpecialTypes/index.js';
8
10
  export { default as FormikMultiSelectDropdown } from './SpecialTypes/FormikMultiSelectDropdown.js';
9
- export { resolvePwString, resolvePwValue, type PwResolverOptions, } from './utils/pwResolver.js';
10
- export { ResourceOptionIcon } from './Fields/ResourceOptionIcon.js';
11
- export { default as NumberField, type INumberField, } from './Fields/NumberField.js';
12
- export { getInvalidDurationPaths, setDurationValidity, } from './Fields/durationValidity.js';
13
- export { FLEX_MAX_DURATION_RANGE, FLEX_WAIT_TIME_RANGE, STANDARD_MAX_DURATION_RANGE, collectPartitionDurationIssues, formatSecondsAsSlurmDuration, parseSlurmDuration, } from './utils/slurmDuration.js';
11
+ export { FormikCustomDropdown, FormikCustomInput, FormikNumericInput, } from './SpecialTypes/index.js';
12
+ export * from './types/fieldComponentTypes.js';
13
+ export * from './types/fieldTypes.js';
14
+ export { useParsedOpts } from './useParsedOpts.js';
15
+ export { collectPartitionDurationIssues, FLEX_MAX_DURATION_RANGE, FLEX_WAIT_TIME_RANGE, formatDuration, parseDuration, STANDARD_MAX_DURATION_RANGE, } from './utils/duration.js';
14
16
  export { getPlaceholder } from './utils/getPlaceholder.js';
15
17
  export { applySecondaryField, findSecondaryOption, } from './utils/secondaryField.js';
16
- export { useParsedOpts } from './useParsedOpts.js';
17
- export * from './types/fieldTypes.js';
18
- export * from './types/fieldComponentTypes.js';