@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,173 @@
1
+ import { useNotify, useStrings, useWorkflowEngine } from "../components/Provider.js";
2
+ import { CheckIcon, CopyIcon, EyeIcon, EyeOffIcon } from "../icons.js";
3
+ import SwitchToggleSmall from "../components/SwitchToggleSmall.js";
4
+ import Editor from "./Editor.js";
5
+ import { flattenGroups, impureSetValueFromPath } from "../form/lib.js";
6
+ import cx from "classnames";
7
+ import { useId, useRef, useState } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/editor/FormCodePanel.tsx
10
+ var isObject = (value) => typeof value === "object" && value !== null;
11
+ var shouldIgnoreField = (engine, fieldSchema, inputs, arrayIndex) => {
12
+ if (!fieldSchema?.["ignore"] || !fieldSchema?.["hidden"]) return false;
13
+ if (!engine.isReady()) return false;
14
+ return engine.evaluate({
15
+ inputs,
16
+ obj: engine.convertInputs(fieldSchema),
17
+ index: arrayIndex ?? -1
18
+ })["hidden"] === true;
19
+ };
20
+ var filterFields = (engine, formJSON, data, prefix, rootData, arrayIndex) => {
21
+ const filteredFields = [];
22
+ return {
23
+ filteredFields,
24
+ filtered: Object.keys(data).reduce((acc, key) => {
25
+ const value = data[key];
26
+ const fieldSchema = formJSON[key];
27
+ if (value !== null && Array.isArray(value)) {
28
+ const items = [];
29
+ acc[key] = items;
30
+ if (!fieldSchema) return acc;
31
+ const nestedSchema = isObject(fieldSchema) ? fieldSchema["options"] : void 0;
32
+ for (let i = 0; i < value.length; i++) {
33
+ let filteredFieldsNested = [];
34
+ let filteredNested = {};
35
+ const item = value[i];
36
+ if (isObject(item)) {
37
+ const result = filterFields(engine, isObject(nestedSchema) ? nestedSchema : {}, item, key + `[${i}].`, rootData || data, i);
38
+ filteredNested = result.filtered;
39
+ filteredFieldsNested = result.filteredFields;
40
+ } else filteredNested = item;
41
+ filteredFields.push(...filteredFieldsNested);
42
+ items[i] = filteredNested;
43
+ }
44
+ return acc;
45
+ }
46
+ if (fieldSchema && isObject(value)) {
47
+ const { filteredFields: filteredFieldsNested, filtered: filteredNested } = filterFields(engine, isObject(fieldSchema) ? fieldSchema : {}, value, key + ".", rootData || data, arrayIndex);
48
+ filteredFields.push(...filteredFieldsNested);
49
+ acc[key] = filteredNested;
50
+ return acc;
51
+ }
52
+ if (isObject(fieldSchema) && fieldSchema["sensitive"]) {
53
+ const name = prefix ? prefix + key : key;
54
+ filteredFields.push({
55
+ key: name,
56
+ value
57
+ });
58
+ return acc;
59
+ }
60
+ const contextData = rootData || data;
61
+ if (isObject(fieldSchema) && shouldIgnoreField(engine, fieldSchema, contextData, arrayIndex)) return acc;
62
+ acc[key] = value;
63
+ return acc;
64
+ }, {})
65
+ };
66
+ };
67
+ var populateFiltered = (filteredFields, data) => {
68
+ filteredFields.forEach((element) => {
69
+ impureSetValueFromPath(data, element.key, element.value);
70
+ });
71
+ return data;
72
+ };
73
+ function FormCodePanel({ formJSON, data, mutate, height = "600px", disabled = false }) {
74
+ const engine = useWorkflowEngine();
75
+ const notify = useNotify();
76
+ const { common: t } = useStrings();
77
+ const uid = useId();
78
+ const [jsonHasErrors, setJsonHasErrors] = useState(false);
79
+ const [showHidden, setShowHidden] = useState(false);
80
+ const [copied, setCopied] = useState(false);
81
+ const copyResetRef = useRef(void 0);
82
+ const isValidJson = (errors) => {
83
+ setJsonHasErrors(errors.length > 0);
84
+ };
85
+ const { filteredFields, filtered } = filterFields(engine, flattenGroups(formJSON), data || {});
86
+ const hasHiddenFields = filteredFields.length > 0;
87
+ const displayObj = showHidden && hasHiddenFields ? populateFiltered(filteredFields, structuredClone(filtered)) : filtered;
88
+ const showHiddenRef = useRef(showHidden);
89
+ showHiddenRef.current = showHidden;
90
+ const filteredFieldsRef = useRef(filteredFields);
91
+ filteredFieldsRef.current = filteredFields;
92
+ const json = JSON.stringify(displayObj, null, 2);
93
+ const handleCopy = async () => {
94
+ try {
95
+ await navigator.clipboard.writeText(json);
96
+ setCopied(true);
97
+ clearTimeout(copyResetRef.current);
98
+ copyResetRef.current = setTimeout(() => setCopied(false), 2e3);
99
+ } catch {
100
+ notify.error(t.copyFailed);
101
+ }
102
+ };
103
+ return /* @__PURE__ */ jsxs("div", {
104
+ style: { height },
105
+ className: "flex w-full flex-col gap-2",
106
+ children: [/* @__PURE__ */ jsxs("div", {
107
+ className: cx("flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border", jsonHasErrors ? "border-red-500" : "border-(--theme-border)"),
108
+ children: [/* @__PURE__ */ jsxs("div", {
109
+ className: "bg-(--theme-muted-panel-bg) text-(--theme-muted-panel-color) flex shrink-0 items-center gap-3 border-b border-(--theme-border) px-3 py-2",
110
+ children: [hasHiddenFields && /* @__PURE__ */ jsxs("label", {
111
+ htmlFor: `${uid}-show-hidden`,
112
+ title: t.showHiddenFieldsHint,
113
+ className: "flex cursor-pointer select-none items-center gap-2 text-sm text-(--theme-app)",
114
+ children: [/* @__PURE__ */ jsx(SwitchToggleSmall, {
115
+ id: `${uid}-show-hidden`,
116
+ value: showHidden,
117
+ "aria-label": t.showHiddenFields,
118
+ onClick: () => setShowHidden((prev) => !prev)
119
+ }), /* @__PURE__ */ jsxs("span", {
120
+ className: "flex items-center gap-1.5",
121
+ children: [showHidden ? /* @__PURE__ */ jsx(EyeIcon, {}) : /* @__PURE__ */ jsx(EyeOffIcon, {}), t.showHiddenFields]
122
+ })]
123
+ }), /* @__PURE__ */ jsxs("button", {
124
+ type: "button",
125
+ onClick: handleCopy,
126
+ "aria-label": copied ? t.copied : t.copy,
127
+ className: "ml-auto flex shrink-0 items-center gap-1.5 rounded-md border border-(--theme-border) px-2.5 py-1.5 text-sm text-(--theme-app) transition-colors duration-150 hover:bg-(--theme-hover) focus:outline-none focus-visible:ring-2 focus-visible:ring-(--theme-link)",
128
+ children: [copied ? /* @__PURE__ */ jsx(CheckIcon, { className: "text-green-500" }) : /* @__PURE__ */ jsx(CopyIcon, { className: "text-(--theme-muted-text-color)" }), copied ? t.copied : t.copy]
129
+ })]
130
+ }), /* @__PURE__ */ jsx("div", {
131
+ className: "min-h-0 flex-1",
132
+ children: /* @__PURE__ */ jsx(Editor, {
133
+ height: "100%",
134
+ value: json,
135
+ onValidate: isValidJson,
136
+ className: "!rounded-none !border-0",
137
+ minimap: { enabled: false },
138
+ scrollBeyondLastLine: false,
139
+ overviewRulerLanes: 0,
140
+ overviewRulerBorder: false,
141
+ lineNumbersMinChars: 3,
142
+ lineDecorationsWidth: 8,
143
+ renderLineHighlight: "none",
144
+ padding: {
145
+ top: 12,
146
+ bottom: 12
147
+ },
148
+ fontSize: 13,
149
+ scrollbar: {
150
+ verticalScrollbarSize: 10,
151
+ horizontalScrollbarSize: 10
152
+ },
153
+ onChange: (e) => {
154
+ try {
155
+ const parsed = JSON.parse(e);
156
+ if (!isObject(parsed)) return;
157
+ mutate(showHiddenRef.current ? parsed : populateFiltered(filteredFieldsRef.current, parsed));
158
+ } catch {
159
+ console.log("JSON.parse error in form code editor");
160
+ }
161
+ },
162
+ language: "json",
163
+ disabled
164
+ })
165
+ })]
166
+ }), jsonHasErrors && /* @__PURE__ */ jsx("p", {
167
+ className: "shrink-0 text-sm text-red-500",
168
+ children: t.jsonHasErrors
169
+ })]
170
+ });
171
+ }
172
+ //#endregion
173
+ export { FormCodePanel as default };
@@ -1,20 +1,4 @@
1
1
  import * as monaco from 'monaco-editor';
2
- export interface EditorMarketplaceItem {
3
- readonly slug?: string;
4
- readonly name?: string | null;
5
- readonly description?: string | null;
6
- readonly type?: string | null;
7
- readonly subtype?: string | null;
8
- readonly versions?: readonly string[] | null;
9
- }
10
- export interface EditorWorkflowItem {
11
- readonly name?: string;
12
- readonly displayName?: string | null;
13
- readonly description?: string | null;
14
- readonly type?: string | null;
15
- }
16
- type MarketplaceItem = EditorMarketplaceItem;
17
- type WorkflowItem = EditorWorkflowItem;
18
2
  export type ISchemaError = monaco.editor.IMarker;
19
3
  export interface IEditorProps extends monaco.editor.IStandaloneEditorConstructionOptions {
20
4
  className?: string;
@@ -24,8 +8,5 @@ export interface IEditorProps extends monaco.editor.IStandaloneEditorConstructio
24
8
  width?: string | number;
25
9
  height?: string | number;
26
10
  path?: 'file:///workflow.yaml' | string;
27
- marketplaceItems?: MarketplaceItem[];
28
- workflows?: WorkflowItem[];
29
11
  }
30
- export default function MonacoEditor({ className, disabled, onChange, onValidate, width, height, path, marketplaceItems, workflows, ...options }: IEditorProps): import("react").JSX.Element;
31
- export {};
12
+ export default function MonacoEditor({ className, disabled, onChange, onValidate, width, height, path, ...options }: IEditorProps): import("react").JSX.Element;
@@ -0,0 +1,112 @@
1
+ import { useCssIsDark } from "../components/useCssIsDark.js";
2
+ import { defineEditorThemes, getThemeName } from "./themes.js";
3
+ import { setupMonacoWorkers } from "./workers.js";
4
+ import { onYamlSchemas } from "./yaml.js";
5
+ import cx from "classnames";
6
+ import { useEffect, useLayoutEffect, useRef } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import * as monaco from "monaco-editor";
9
+ import { configureMonacoYaml } from "monaco-yaml";
10
+ //#region src/editor/Monaco.tsx
11
+ setupMonacoWorkers();
12
+ var monacoWithWorkerBridge = {
13
+ ...monaco,
14
+ editor: {
15
+ ...monaco.editor,
16
+ createWebWorker: (opts) => "worker" in opts ? monaco.editor.createWebWorker(opts) : monaco.createWebWorker(opts)
17
+ }
18
+ };
19
+ var monacoYamlConfigured = false;
20
+ function ensureMonacoYamlConfigured() {
21
+ if (monacoYamlConfigured) return;
22
+ monacoYamlConfigured = true;
23
+ const options = (schemas) => ({
24
+ enableSchemaRequest: true,
25
+ completion: true,
26
+ validate: true,
27
+ hover: true,
28
+ format: { enable: true },
29
+ schemas
30
+ });
31
+ const monacoYaml = configureMonacoYaml(monacoWithWorkerBridge, options([]));
32
+ onYamlSchemas((schemas) => monacoYaml.update(options(schemas)));
33
+ }
34
+ function editorText(value) {
35
+ return value.replace(/\r/g, "");
36
+ }
37
+ var noop = () => {};
38
+ function MonacoEditor({ className, disabled, onChange = noop, onValidate = noop, width = "100%", height = "100%", path = "file:///default", ...options }) {
39
+ const isDark = useCssIsDark();
40
+ const readOnly = disabled || options.readOnly;
41
+ const monacoRef = useRef(null);
42
+ const isSyncingValueRef = useRef(false);
43
+ useEffect(() => {
44
+ if (!monacoRef.current) return;
45
+ defineEditorThemes(monaco.editor);
46
+ monaco.editor.setTheme(getThemeName(isDark, disabled));
47
+ monacoRef.current.updateOptions(readOnly === void 0 ? {} : { readOnly });
48
+ }, [
49
+ disabled,
50
+ isDark,
51
+ readOnly
52
+ ]);
53
+ useLayoutEffect(() => {
54
+ const model = monacoRef.current?.getModel();
55
+ if (!model || options.value === void 0 || editorText(model.getValue()) === editorText(options.value)) return;
56
+ isSyncingValueRef.current = true;
57
+ try {
58
+ model.setValue(options.value);
59
+ } finally {
60
+ isSyncingValueRef.current = false;
61
+ }
62
+ }, [options.value]);
63
+ useEffect(() => {
64
+ return () => {
65
+ monacoRef.current?.dispose();
66
+ monacoRef.current = null;
67
+ };
68
+ }, []);
69
+ /** Strips CR (\r) — Windows line endings break bash scripts. */
70
+ const onChangeWrapper = (value) => {
71
+ value = editorText(value);
72
+ onChange(value);
73
+ };
74
+ return /* @__PURE__ */ jsx("div", {
75
+ style: {
76
+ width,
77
+ height
78
+ },
79
+ className: cx("relative border rounded", className),
80
+ ref: (ref) => {
81
+ if (ref && !monacoRef.current) {
82
+ monaco.editor.getModel(monaco.Uri.parse(path))?.dispose();
83
+ defineEditorThemes(monaco.editor);
84
+ monaco.editor.setTheme(getThemeName(isDark, disabled));
85
+ const model = monaco.editor.createModel(options.value ?? "", options.language, monaco.Uri.parse(path));
86
+ const editor = monaco.editor.create(ref, {
87
+ automaticLayout: true,
88
+ model,
89
+ ...options,
90
+ ...readOnly === void 0 ? {} : { readOnly },
91
+ fixedOverflowWidgets: true,
92
+ suggest: {
93
+ preview: true,
94
+ showWords: false,
95
+ showInlineDetails: true
96
+ }
97
+ });
98
+ model.onDidChangeContent(() => {
99
+ if (isSyncingValueRef.current) return;
100
+ onChangeWrapper(editor.getValue());
101
+ });
102
+ model.onDidChangeDecorations(() => {
103
+ onValidate(monaco.editor.getModelMarkers({ resource: model.uri }));
104
+ });
105
+ ensureMonacoYamlConfigured();
106
+ monacoRef.current = editor;
107
+ }
108
+ }
109
+ });
110
+ }
111
+ //#endregion
112
+ export { MonacoEditor as default };
@@ -1,6 +1,7 @@
1
1
  export { default as Editor } from './Editor.js';
2
2
  export { default as EditorField, type IEditorField } from './EditorField.js';
3
3
  export { default as FormCodePanel } from './FormCodePanel.js';
4
- export type { EditorMarketplaceItem, EditorWorkflowItem, IEditorProps, ISchemaError, } from './Monaco.js';
4
+ export type { IEditorProps, ISchemaError } from './Monaco.js';
5
5
  export { defineEditorThemes, getThemeName } from './themes.js';
6
6
  export { setupMonacoWorkers } from './workers.js';
7
+ export { configureEditorYaml } from './yaml.js';
@@ -1,2 +1,7 @@
1
- import { a as EditorField, i as FormCodePanel, n as defineEditorThemes, o as Editor, r as getThemeName, t as setupMonacoWorkers } from "../chunks/editor-9_uVtUyy.js";
2
- export { Editor, EditorField, FormCodePanel, defineEditorThemes, getThemeName, setupMonacoWorkers };
1
+ import Editor from "./Editor.js";
2
+ import EditorField from "./EditorField.js";
3
+ import FormCodePanel from "./FormCodePanel.js";
4
+ import { defineEditorThemes, getThemeName } from "./themes.js";
5
+ import { setupMonacoWorkers } from "./workers.js";
6
+ import { configureEditorYaml } from "./yaml.js";
7
+ export { Editor, EditorField, FormCodePanel, configureEditorYaml, defineEditorThemes, getThemeName, setupMonacoWorkers };
@@ -0,0 +1,91 @@
1
+ //#region src/editor/themes.ts
2
+ function expandShorthandHex(color) {
3
+ return /^#([0-9a-fA-F]{3,4})$/.test(color) ? "#" + color.slice(1).split("").map((c) => c + c).join("") : color;
4
+ }
5
+ function normalizeThemeColors(colors) {
6
+ return Object.fromEntries(Object.entries(colors).map(([key, value]) => [key, expandShorthandHex(value)]));
7
+ }
8
+ function themeVar(name, fallback) {
9
+ if (typeof window === "undefined") return fallback;
10
+ return getComputedStyle(document.documentElement).getPropertyValue(name).trim() || fallback;
11
+ }
12
+ function createEditorThemes() {
13
+ const dark = {
14
+ foreground: themeVar("--theme-app", "#e6edf3"),
15
+ background: themeVar("--theme-panel-bg", "#161b22"),
16
+ border: themeVar("--theme-border", "#30363d"),
17
+ lineHighlight: themeVar("--theme-muted-panel-bg", "#21262d"),
18
+ lineNumber: themeVar("--theme-muted-text-color", "#8b949e"),
19
+ selection: themeVar("--theme-element", "#2f81f7"),
20
+ selectionFg: themeVar("--theme-element-text", "#ffffff"),
21
+ disabledBg: themeVar("--theme-input-disabled-bg", "#1c2128"),
22
+ disabledFg: themeVar("--theme-muted-text-color", "#8b949e")
23
+ };
24
+ const light = {
25
+ disabledBg: themeVar("--theme-input-disabled-bg", "#f3f4f6"),
26
+ disabledFg: themeVar("--theme-muted-text-color", "#5f6b76"),
27
+ border: themeVar("--theme-border", "#d1d5db"),
28
+ selection: themeVar("--theme-element", "#2f81f7"),
29
+ selectionFg: themeVar("--theme-element-text", "#ffffff")
30
+ };
31
+ return {
32
+ "app-dark": {
33
+ base: "vs-dark",
34
+ inherit: true,
35
+ rules: [],
36
+ colors: {
37
+ "editor.foreground": dark.foreground,
38
+ "editor.background": dark.background,
39
+ "editor.border": dark.border,
40
+ "editorCursor.foreground": dark.foreground,
41
+ "editor.lineHighlightBackground": dark.lineHighlight,
42
+ "editorLineNumber.foreground": dark.lineNumber,
43
+ "editor.selectionBackground": dark.selection,
44
+ "editor.selectionForeground": dark.selectionFg
45
+ }
46
+ },
47
+ "app-dark-disabled": {
48
+ base: "vs-dark",
49
+ inherit: true,
50
+ rules: [],
51
+ colors: {
52
+ "editor.foreground": dark.disabledFg,
53
+ "editor.background": dark.disabledBg,
54
+ "editor.border": dark.border,
55
+ "editorCursor.foreground": "transparent",
56
+ "editor.lineHighlightBackground": dark.disabledBg,
57
+ "editorLineNumber.foreground": dark.disabledFg,
58
+ "editor.selectionBackground": dark.selection,
59
+ "editor.selectionForeground": dark.selectionFg
60
+ }
61
+ },
62
+ "app-light-disabled": {
63
+ base: "vs",
64
+ inherit: true,
65
+ rules: [],
66
+ colors: {
67
+ "editor.foreground": light.disabledFg,
68
+ "editor.background": light.disabledBg,
69
+ "editor.border": light.border,
70
+ "editorCursor.foreground": "transparent",
71
+ "editor.lineHighlightBackground": light.disabledBg,
72
+ "editorLineNumber.foreground": light.disabledFg,
73
+ "editor.selectionBackground": light.selection,
74
+ "editor.selectionForeground": light.selectionFg
75
+ }
76
+ }
77
+ };
78
+ }
79
+ function defineEditorThemes(monacoEditor) {
80
+ const themes = createEditorThemes();
81
+ for (const [name, themeData] of Object.entries(themes)) monacoEditor.defineTheme(name, {
82
+ ...themeData,
83
+ colors: normalizeThemeColors(themeData.colors)
84
+ });
85
+ }
86
+ function getThemeName(isDark, disabled) {
87
+ if (isDark) return disabled ? "app-dark-disabled" : "app-dark";
88
+ return disabled ? "app-light-disabled" : "vs";
89
+ }
90
+ //#endregion
91
+ export { defineEditorThemes, expandShorthandHex, getThemeName };
@@ -0,0 +1,29 @@
1
+ //#region src/editor/workers.ts
2
+ var monacoEnvironment = { getWorker(_moduleId, label) {
3
+ if (label === "json") return new Worker(new URL(
4
+ /* @vite-ignore */
5
+ "/assets/json.worker-D8bJ92nw.js",
6
+ "" + import.meta.url
7
+ ), { type: "module" });
8
+ if (label === "yaml") return new Worker(new URL(
9
+ /* @vite-ignore */
10
+ "/assets/yaml.worker-C4gyGAko.js",
11
+ "" + import.meta.url
12
+ ), { type: "module" });
13
+ return new Worker(new URL(
14
+ /* @vite-ignore */
15
+ "/assets/editor.worker-BmHUIVG4.js",
16
+ "" + import.meta.url
17
+ ), { type: "module" });
18
+ } };
19
+ /**
20
+ * Points window.MonacoEnvironment at the bundled workers. Idempotent, and a
21
+ * host that already configured its own MonacoEnvironment wins — the editor
22
+ * calls this on first load only when nothing is configured.
23
+ */
24
+ function setupMonacoWorkers() {
25
+ if (window.MonacoEnvironment) return;
26
+ window.MonacoEnvironment = monacoEnvironment;
27
+ }
28
+ //#endregion
29
+ export { setupMonacoWorkers };
@@ -0,0 +1,5 @@
1
+ import type { SchemasSettings } from 'monaco-yaml';
2
+ /** Adds JSON schemas that validate and complete YAML models whose URI matches. */
3
+ export declare function configureEditorYaml(added: SchemasSettings[]): void;
4
+ /** Lets the loaded editor pick up schemas added before or after it loads. */
5
+ export declare function onYamlSchemas(listener: (schemas: SchemasSettings[]) => void): void;
@@ -0,0 +1,15 @@
1
+ //#region src/editor/yaml.ts
2
+ var schemas = [];
3
+ var apply;
4
+ /** Adds JSON schemas that validate and complete YAML models whose URI matches. */
5
+ function configureEditorYaml(added) {
6
+ schemas = [...schemas, ...added];
7
+ apply?.(schemas);
8
+ }
9
+ /** Lets the loaded editor pick up schemas added before or after it loads. */
10
+ function onYamlSchemas(listener) {
11
+ apply = listener;
12
+ listener(schemas);
13
+ }
14
+ //#endregion
15
+ export { configureEditorYaml, onYamlSchemas };
@@ -0,0 +1,98 @@
1
+ export type RunStatus = 'started' | 'running' | 'completed' | 'error' | 'failed' | 'canceled' | 'skipped' | 'faulted' | 'canceling' | 'skipped-failed' | '' | undefined;
2
+ export interface MatrixGroup {
3
+ originaljob: string;
4
+ members: string[];
5
+ }
6
+ export interface LogSegment {
7
+ content: string;
8
+ className: string;
9
+ highlighted?: boolean;
10
+ }
11
+ export interface LogCommand {
12
+ type: 'error' | 'warning' | 'notice' | 'debug' | 'group' | 'endgroup';
13
+ message: string;
14
+ params?: Record<string, string>;
15
+ }
16
+ export interface ProcessedLogLine {
17
+ index: number;
18
+ segments: LogSegment[];
19
+ command?: LogCommand;
20
+ groupDepth: number;
21
+ groupId?: number;
22
+ }
23
+ export interface WorkflowVariable {
24
+ key?: string;
25
+ value?: string | null;
26
+ secret?: boolean;
27
+ }
28
+ export type WorkflowVariables = Record<string, WorkflowVariable>;
29
+ export interface EvaluateOptions<T> {
30
+ inputs: unknown;
31
+ obj: T;
32
+ path?: string[];
33
+ schema?: unknown;
34
+ orgVars?: WorkflowVariables | undefined;
35
+ userVars?: Record<string, string>;
36
+ remoteVars?: Record<string, string | undefined> | undefined;
37
+ secretKeys?: string[];
38
+ appInfo?: Record<string, unknown>;
39
+ sessionInfo?: Record<string, string>;
40
+ index?: number | undefined;
41
+ }
42
+ export interface ExpansionKeys {
43
+ subworkflowKeys: string[];
44
+ jobKeys: string[];
45
+ matrixKeys: string[];
46
+ }
47
+ export interface EngineJob {
48
+ status?: RunStatus;
49
+ needs?: string[];
50
+ if?: boolean | string;
51
+ steps?: unknown[];
52
+ _matrix?: {
53
+ originaljob?: string;
54
+ index?: number;
55
+ };
56
+ _matrixGroup?: MatrixGroup;
57
+ }
58
+ export interface EngineStep {
59
+ name?: string | undefined;
60
+ run?: string;
61
+ uses?: string;
62
+ subworkflow?: unknown;
63
+ }
64
+ /** The workflow semantics the form, graph, editor and log viewer defer to. */
65
+ export interface WorkflowEngine {
66
+ /** Starts loading the expression runtime; safe to call repeatedly. */
67
+ init(): void;
68
+ isReady(): boolean;
69
+ /** Calls back when readiness changes; returns an unsubscribe function. */
70
+ onReady(listener: (ready: boolean) => void): () => void;
71
+ /** Resolves every `${{ }}` expression in `obj`. */
72
+ evaluate<T>(options: EvaluateOptions<T>): T;
73
+ /** Turns a workflow's input definitions into the form's field tree. */
74
+ convertInputs(inputs: Record<string, unknown>): Record<string, unknown>;
75
+ inputDependencies(obj: unknown): {
76
+ inputDeps: Set<string>;
77
+ hasExpressions: boolean;
78
+ };
79
+ jobDependencies(jobName: string, jobs: Record<string, {
80
+ needs?: string[];
81
+ }>, memo?: Record<string, Set<string>>): Set<string>;
82
+ matrixGroups(jobs: Record<string, EngineJob> | undefined): Record<string, MatrixGroup>;
83
+ /** Rewrites `visibleJobs` in place so each matrix group lays out as one node. */
84
+ collapseMatrixGroups(groups: Record<string, MatrixGroup>, visibleJobs: Record<string, EngineJob>): void;
85
+ expansionKeys(jobs: Record<string, EngineJob> | undefined, pathPrefix?: string): ExpansionKeys;
86
+ matrixStatus(statuses: RunStatus[]): {
87
+ aggStatus: RunStatus;
88
+ statusLabel: string;
89
+ };
90
+ stepLabel(step: EngineStep, index?: number): string;
91
+ stepLogPath(subworkflowPrefix: string, jobName: string, stepIndex: number | string): string;
92
+ isRunActive(status: string | null | undefined): boolean;
93
+ processLogLines(lines: {
94
+ index: number;
95
+ segments: LogSegment[];
96
+ }[], rawLines: string[]): ProcessedLogLine[];
97
+ toYaml(value: unknown): string;
98
+ }
@@ -1,5 +1,5 @@
1
1
  import type { IFileExplorerClient, IFileExplorerProvider } from './lib/fileExplorer.js';
2
- import type { TreeNode, TStorage } from './lib/types.js';
2
+ import type { ExplorerObject, TreeNode, TStorage } from './lib/types.js';
3
3
  interface IFileExplorerProps {
4
4
  storages: TStorage[];
5
5
  /** Resolves the storage's injected provider pair; the host owns caching. */
@@ -33,6 +33,15 @@ interface IFileExplorerProps {
33
33
  initialExpandedPaths?: readonly string[];
34
34
  /** Fires whenever the expanded folders change, for the host to persist. */
35
35
  onExpandedPathsChange?: (paths: string[]) => void;
36
+ /** URIs that name an object, shown on its details and offered under Copy;
37
+ * the first is what Copy URI copies. None hides them. */
38
+ objectUris?: ((storage: TStorage, key: string) => string[]) | undefined;
39
+ /** A shell command that downloads files, offered beside the browser
40
+ * download. An empty command hides it for that selection. */
41
+ downloadCommand?: {
42
+ label: string;
43
+ build: (objects: ExplorerObject[]) => string;
44
+ } | undefined;
36
45
  }
37
- export default function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHierarchy, groups, groupsLoading, selectedPath, onPathChange, getProviderAndClient, treeOnly, initialExpandedPaths, onExpandedPathsChange, }: IFileExplorerProps): import("react").JSX.Element;
46
+ export default function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHierarchy, groups, groupsLoading, selectedPath, onPathChange, getProviderAndClient, treeOnly, initialExpandedPaths, onExpandedPathsChange, objectUris, downloadCommand, }: IFileExplorerProps): import("react").JSX.Element;
38
47
  export {};