windmill-components 1.532.0 → 1.542.4

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 (371) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +60 -27
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/Auth0Setting.svelte +8 -3
  8. package/package/components/ConcurrentJobsChart.svelte +36 -48
  9. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  10. package/package/components/CustomPopover.svelte.d.ts +1 -1
  11. package/package/components/Dev.svelte +5 -4
  12. package/package/components/DiffDrawer.svelte +2 -2
  13. package/package/components/DiffEditor.svelte +34 -37
  14. package/package/components/DiffEditor.svelte.d.ts +23 -39
  15. package/package/components/DropdownSelect.svelte +26 -0
  16. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  17. package/package/components/DropdownV2Inner.svelte +1 -1
  18. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  19. package/package/components/DynamicInput.svelte.d.ts +11 -0
  20. package/package/components/EditableSchemaForm.svelte +155 -140
  21. package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
  22. package/package/components/Editor.svelte +101 -87
  23. package/package/components/Editor.svelte.d.ts +7 -1
  24. package/package/components/EditorBar.svelte +2 -5
  25. package/package/components/FlowBuilder.svelte +10 -7
  26. package/package/components/FlowLogRow.svelte +64 -0
  27. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  28. package/package/components/FlowLogViewer.svelte +406 -373
  29. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  30. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  31. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  32. package/package/components/FlowPreviewContent.svelte +3 -3
  33. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  34. package/package/components/FlowStatusViewer.svelte +28 -0
  35. package/package/components/FlowStatusViewerInner.svelte +106 -23
  36. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  37. package/package/components/FolderPicker.svelte +1 -1
  38. package/package/components/InputTransformForm.svelte +20 -10
  39. package/package/components/JobArgs.svelte +1 -1
  40. package/package/components/JobLoader.svelte.d.ts +1 -1
  41. package/package/components/JobStatus.svelte +2 -0
  42. package/package/components/LogSnippetViewer.svelte +3 -3
  43. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  44. package/package/components/LogViewer.svelte +87 -71
  45. package/package/components/LogViewer.svelte.d.ts +1 -0
  46. package/package/components/ModulePreview.svelte +2 -1
  47. package/package/components/ModulePreview.svelte.d.ts +1 -0
  48. package/package/components/ModulePreviewForm.svelte +72 -65
  49. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  50. package/package/components/ModuleTest.svelte +6 -5
  51. package/package/components/ModuleTest.svelte.d.ts +1 -0
  52. package/package/components/OktaSetting.svelte +8 -3
  53. package/package/components/Path.svelte +7 -1
  54. package/package/components/Path.svelte.d.ts +1 -1
  55. package/package/components/Portal.svelte +11 -7
  56. package/package/components/Portal.svelte.d.ts +19 -39
  57. package/package/components/PrefixedInput.svelte +120 -0
  58. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  59. package/package/components/QueuePosition.svelte +81 -0
  60. package/package/components/QueuePosition.svelte.d.ts +8 -0
  61. package/package/components/ResourceNarrowing.svelte +13 -0
  62. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  63. package/package/components/ResourceTypePicker.svelte +49 -74
  64. package/package/components/RunChart.svelte +74 -89
  65. package/package/components/RunChart.svelte.d.ts +10 -22
  66. package/package/components/RunForm.svelte +2 -2
  67. package/package/components/RunForm.svelte.d.ts +1 -1
  68. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  69. package/package/components/S3FilePicker.svelte +1 -1
  70. package/package/components/SchemaForm.svelte +1 -2
  71. package/package/components/SchemaForm.svelte.d.ts +2 -2
  72. package/package/components/ScriptBuilder.svelte +3 -2
  73. package/package/components/ScriptEditor.svelte +25 -10
  74. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  75. package/package/components/ServiceLogsInner.svelte +1 -1
  76. package/package/components/ShareModal.svelte.d.ts +1 -1
  77. package/package/components/SimpleEditor.svelte +4 -68
  78. package/package/components/StringTypeNarrowing.svelte +5 -10
  79. package/package/components/TemplateEditor.svelte +2 -16
  80. package/package/components/TimeAgo.svelte +1 -1
  81. package/package/components/TimeAgo.svelte.d.ts +1 -0
  82. package/package/components/Toggle.svelte +2 -1
  83. package/package/components/Toggle.svelte.d.ts +2 -1
  84. package/package/components/WorkerRepl.svelte +1 -1
  85. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  86. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  87. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  88. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  89. package/package/components/apps/components/display/table/utils.js +36 -5
  90. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  91. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  92. package/package/components/apps/editor/AppEditor.svelte +4 -3
  93. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  94. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  95. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  96. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  97. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  103. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
  104. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  105. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  106. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  107. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  108. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  109. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  111. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  112. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  113. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  114. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  115. package/package/components/common/OnChange.svelte.d.ts +11 -4
  116. package/package/components/common/badge/Badge.svelte +9 -2
  117. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  118. package/package/components/common/button/model.d.ts +1 -1
  119. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  120. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  121. package/package/components/common/drawer/Disposable.svelte +45 -26
  122. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  123. package/package/components/common/drawer/Drawer.svelte +17 -14
  124. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  125. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  126. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  127. package/package/components/common/tabs/TabContent.svelte +2 -7
  128. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  129. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  130. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  131. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  132. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  133. package/package/components/copilot/MetadataGen.svelte +14 -3
  134. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
  136. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  137. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  138. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  139. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  140. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  141. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  142. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  143. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  144. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  145. package/package/components/copilot/chat/anthropic.js +208 -0
  146. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  147. package/package/components/copilot/chat/api/apiTools.js +10 -7
  148. package/package/components/copilot/chat/api/core.d.ts +1 -1
  149. package/package/components/copilot/chat/api/core.js +7 -2
  150. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  151. package/package/components/copilot/chat/ask/core.js +7 -2
  152. package/package/components/copilot/chat/context.d.ts +7 -2
  153. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  154. package/package/components/copilot/chat/flow/core.d.ts +12 -1
  155. package/package/components/copilot/chat/flow/core.js +133 -5
  156. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  157. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  158. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  159. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  160. package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
  161. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  162. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  163. package/package/components/copilot/chat/navigator/core.js +7 -2
  164. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  165. package/package/components/copilot/chat/script/core.d.ts +5 -4
  166. package/package/components/copilot/chat/script/core.js +134 -21
  167. package/package/components/copilot/chat/shared.d.ts +10 -9
  168. package/package/components/copilot/chat/shared.js +24 -12
  169. package/package/components/copilot/lib.d.ts +29 -8
  170. package/package/components/copilot/lib.js +211 -31
  171. package/package/components/copilot/shared.d.ts +1 -1
  172. package/package/components/copilot/shared.js +16 -10
  173. package/package/components/flows/FlowEditor.svelte +4 -2
  174. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  175. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  176. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  177. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  178. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  179. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  180. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  181. package/package/components/flows/content/FlowInput.svelte +36 -39
  182. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -0
  184. package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
  185. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  188. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
  189. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  190. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  191. package/package/components/flows/content/FlowRetries.svelte +108 -3
  192. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  193. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  194. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  195. package/package/components/flows/dfs.d.ts +1 -1
  196. package/package/components/flows/dfs.js +6 -6
  197. package/package/components/flows/flowInfers.js +15 -42
  198. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  199. package/package/components/flows/flowStore.d.ts +45 -1
  200. package/package/components/flows/flowStore.js +1 -1
  201. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  202. package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
  203. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  205. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  206. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  207. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  208. package/package/components/flows/map/MapItem.svelte +8 -4
  209. package/package/components/flows/map/VirtualItem.svelte +1 -1
  210. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  211. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  212. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  213. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  214. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  215. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  216. package/package/components/flows/types.d.ts +16 -3
  217. package/package/components/flows/utils.js +3 -0
  218. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  219. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  220. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  221. package/package/components/graph/FlowGraphV2.svelte +1 -1
  222. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  223. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  224. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  225. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  226. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  227. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  228. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  229. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  230. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  231. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  232. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  233. package/package/components/home/ItemsList.svelte +17 -13
  234. package/package/components/home/TreeView.svelte +21 -27
  235. package/package/components/home/TreeView.svelte.d.ts +2 -29
  236. package/package/components/home/TreeViewRoot.svelte +11 -23
  237. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  238. package/package/components/icons/GitIcon.svelte +10 -2
  239. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  240. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  241. package/package/components/meltComponents/Popover.svelte +23 -3
  242. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  243. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  244. package/package/components/monacoLanguagesOptions.js +109 -0
  245. package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
  246. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  247. package/package/components/propertyPicker/utils.js +14 -7
  248. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  249. package/package/components/runs/JobRunsPreview.svelte +212 -177
  250. package/package/components/runs/JobsLoader.svelte +2 -2
  251. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  252. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  253. package/package/components/runs/RunBadges.svelte +100 -0
  254. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  255. package/package/components/runs/RunLabels.svelte +86 -0
  256. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  257. package/package/components/runs/RunOption.svelte +20 -0
  258. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  259. package/package/components/runs/RunRow.svelte +239 -151
  260. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  261. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  262. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  263. package/package/components/runs/RunsFilter.svelte +369 -243
  264. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  265. package/package/components/runs/RunsQueue.svelte +96 -25
  266. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  267. package/package/components/runs/RunsTable.svelte +62 -71
  268. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  269. package/package/components/runs/runs-grid.css +95 -0
  270. package/package/components/schema/AddPropertyV2.svelte +2 -7
  271. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  272. package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
  273. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  274. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  275. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  276. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  277. package/package/components/schema/FlowPropertyEditor.svelte +195 -236
  278. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  279. package/package/components/schema/PropertyEditor.svelte +33 -35
  280. package/package/components/schema/SchemaFormDND.svelte +11 -10
  281. package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
  282. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  283. package/package/components/search/GlobalSearchModal.svelte +8 -1
  284. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  285. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  286. package/package/components/select/Select.svelte +2 -1
  287. package/package/components/select/Select.svelte.d.ts +25 -13
  288. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  289. package/package/components/settings/PremiumInfo.svelte +7 -2
  290. package/package/components/settings/TokenDisplay.svelte +1 -1
  291. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  292. package/package/components/sidebar/SidebarContent.svelte +48 -2
  293. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  294. package/package/components/toast.js +6 -3
  295. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  296. package/package/components/triggers/CaptureWrapper.svelte +21 -16
  297. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  298. package/package/components/triggers/TriggerLabel.svelte +8 -0
  299. package/package/components/triggers/TriggerTokens.svelte +1 -1
  300. package/package/components/triggers/TriggersEditor.svelte +9 -5
  301. package/package/components/triggers/TriggersTable.svelte +2 -2
  302. package/package/components/triggers/TriggersWrapper.svelte +17 -5
  303. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  304. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  305. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  306. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  307. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  308. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  309. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  310. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  311. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  312. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  313. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  314. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  315. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  316. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  317. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  318. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  319. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  320. package/package/components/triggers/email/utils.d.ts +4 -0
  321. package/package/components/triggers/email/utils.js +52 -0
  322. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  323. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  324. package/package/components/triggers/http/utils.js +1 -1
  325. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  326. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  327. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  328. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  329. package/package/components/triggers/triggers.svelte.js +24 -2
  330. package/package/components/triggers/utils.js +19 -5
  331. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  332. package/package/components/triggers.d.ts +1 -1
  333. package/package/components/triggers.js +2 -0
  334. package/package/components/wizards/AgGridWizard.svelte +85 -80
  335. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  336. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  337. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  338. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  339. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  340. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  341. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  342. package/package/gen/core/OpenAPI.js +1 -1
  343. package/package/gen/schemas.gen.d.ts +142 -3
  344. package/package/gen/schemas.gen.js +144 -3
  345. package/package/gen/services.gen.d.ts +129 -1
  346. package/package/gen/services.gen.js +267 -1
  347. package/package/gen/types.gen.d.ts +434 -8
  348. package/package/hubPaths.json +6 -2
  349. package/package/infer.js +1 -1
  350. package/package/keyboardChain.d.ts +5 -0
  351. package/package/keyboardChain.js +40 -0
  352. package/package/script_helpers.d.ts +2 -2
  353. package/package/script_helpers.js +2 -0
  354. package/package/services/JobManager.js +2 -2
  355. package/package/stores.d.ts +4 -1
  356. package/package/stores.js +16 -6
  357. package/package/utils/workspaceHierarchy.d.ts +27 -0
  358. package/package/utils/workspaceHierarchy.js +101 -0
  359. package/package/utils.d.ts +6 -3
  360. package/package/utils.js +30 -15
  361. package/package/workspace_settings.js +2 -3
  362. package/package.json +10 -12
  363. package/package/components/DynSelect.svelte.d.ts +0 -11
  364. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
  365. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  366. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  367. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  368. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  369. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  370. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  371. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -0,0 +1,181 @@
1
+ <script lang="ts">import {} from 'svelte';
2
+ import Select from './select/Select.svelte';
3
+ import { fetchAvailableModels, AI_PROVIDERS } from './copilot/lib';
4
+ import { workspaceStore } from '../stores';
5
+ import { get } from 'svelte/store';
6
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
7
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
8
+ import ResourcePicker from './ResourcePicker.svelte';
9
+ let { value = $bindable(), disabled = false, actions } = $props();
10
+ // Initialize value if undefined
11
+ if (!value) {
12
+ const providers = Object.keys(AI_PROVIDERS);
13
+ value = {
14
+ kind: providers.length > 0 ? providers[0] : undefined,
15
+ resource: undefined,
16
+ model: undefined
17
+ };
18
+ }
19
+ let loading = $state(false);
20
+ let availableModels = $state([]);
21
+ let filterText = $state('');
22
+ let modelsCache = new Map();
23
+ // Reactive items for the Select component
24
+ let items = $derived.by(() => {
25
+ const r = availableModels.map((model) => ({
26
+ label: model,
27
+ value: model
28
+ }));
29
+ if (value?.model && !availableModels.find((model) => model === value.model)) {
30
+ r.push({
31
+ label: value.model,
32
+ value: value.model
33
+ });
34
+ }
35
+ return r;
36
+ });
37
+ // Provider options for the toggle button group
38
+ const providerOptions = Object.entries(AI_PROVIDERS).map(([key, details]) => ({
39
+ value: key,
40
+ label: details.label
41
+ }));
42
+ async function loadModels(signal) {
43
+ const provider = value?.kind;
44
+ const resourceValue = value?.resource;
45
+ const resourcePath = resourceValueToPath(resourceValue);
46
+ if (!provider || !resourcePath) {
47
+ return;
48
+ }
49
+ loading = true;
50
+ if (modelsCache.has(provider)) {
51
+ availableModels = modelsCache.get(provider) || [];
52
+ loading = false;
53
+ return;
54
+ }
55
+ try {
56
+ const workspace = get(workspaceStore) || '';
57
+ const models = await fetchAvailableModels(resourcePath, workspace, provider, signal);
58
+ if (signal?.aborted) {
59
+ return;
60
+ }
61
+ availableModels = models;
62
+ modelsCache.set(provider, models);
63
+ }
64
+ catch (e) {
65
+ if (signal?.aborted) {
66
+ return;
67
+ }
68
+ // Fall back to default models for this provider
69
+ const defaultModels = AI_PROVIDERS[provider]?.defaultModels || [];
70
+ availableModels = defaultModels;
71
+ }
72
+ finally {
73
+ if (!signal?.aborted) {
74
+ loading = false;
75
+ }
76
+ }
77
+ }
78
+ // Reload models when provider or resourcePath changes
79
+ $effect(() => {
80
+ const abortController = new AbortController();
81
+ const provider = value?.kind;
82
+ const resourceValue = value?.resource;
83
+ const resourcePath = resourceValueToPath(resourceValue);
84
+ filterText = '';
85
+ if (provider && resourcePath) {
86
+ loadModels(abortController.signal);
87
+ }
88
+ else {
89
+ const defaultModels = provider ? AI_PROVIDERS[provider]?.defaultModels || [] : [];
90
+ availableModels = defaultModels;
91
+ loading = false;
92
+ }
93
+ return () => {
94
+ abortController.abort();
95
+ };
96
+ });
97
+ // Handle provider selection
98
+ function onProviderChange(selectedProvider) {
99
+ if (value) {
100
+ value.kind = selectedProvider;
101
+ value.resource = undefined;
102
+ value.model = undefined;
103
+ }
104
+ }
105
+ // Helper functions to handle $res: prefix like ObjectResourceInput does
106
+ function isResource(resourceValue) {
107
+ return (typeof resourceValue === 'string' &&
108
+ resourceValue.length >= '$res:'.length &&
109
+ resourceValue.startsWith('$res:'));
110
+ }
111
+ function resourceValueToPath(resourceValue) {
112
+ if (isResource(resourceValue)) {
113
+ return resourceValue.substring('$res:'.length);
114
+ }
115
+ return resourceValue;
116
+ }
117
+ function pathToResourceValue(path) {
118
+ if (path == undefined) {
119
+ return undefined;
120
+ }
121
+ else {
122
+ return `$res:${path}`;
123
+ }
124
+ }
125
+ </script>
126
+
127
+ <div class="w-full flex flex-col gap-3">
128
+ <!-- Provider Selection -->
129
+ <div class="flex flex-col gap-2">
130
+ <ToggleButtonGroup selected={value?.kind} onSelected={onProviderChange} {disabled} wrap>
131
+ {#snippet children({ item })}
132
+ {#each providerOptions as option}
133
+ <ToggleButton value={option.value} label={option.label} {item} />
134
+ {/each}
135
+ {/snippet}
136
+ </ToggleButtonGroup>
137
+ </div>
138
+
139
+ <!-- Resource Selection -->
140
+ <div class="flex flex-col border border-gray-200 rounded-md p-2 gap-2">
141
+ <div class="flex flex-col gap-1">
142
+ <p class="text-sm font-medium text-primary">resource</p>
143
+ <ResourcePicker
144
+ bind:value={
145
+ () => resourceValueToPath(value?.resource),
146
+ (v) => {
147
+ if (value) {
148
+ value.resource = pathToResourceValue(v)
149
+ }
150
+ }
151
+ }
152
+ resourceType={value?.kind}
153
+ disabled={disabled || !value?.kind}
154
+ placeholder="Select resource"
155
+ selectFirst={true}
156
+ />
157
+ </div>
158
+
159
+ <!-- Model Selection -->
160
+ <div class="flex flex-col gap-1">
161
+ <p class="text-sm font-medium text-primary">model</p>
162
+ <Select
163
+ {items}
164
+ bind:value={value.model}
165
+ placeholder="Select model"
166
+ disabled={disabled || !value?.kind || !resourceValueToPath(value?.resource)}
167
+ onCreateItem={(r) => {
168
+ availableModels.push(r)
169
+ value.model = r
170
+ }}
171
+ createText="Press enter to use custom model"
172
+ {loading}
173
+ clearable={false}
174
+ noItemsMsg={'No models available'}
175
+ bind:filterText
176
+ />
177
+ </div>
178
+ </div>
179
+
180
+ {@render actions?.()}
181
+ </div>
@@ -0,0 +1,15 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { AIProvider } from '../gen';
3
+ interface ProviderValue {
4
+ kind?: AIProvider;
5
+ resource?: string;
6
+ model?: string;
7
+ }
8
+ interface Props {
9
+ value: ProviderValue | undefined;
10
+ disabled?: boolean;
11
+ actions?: Snippet;
12
+ }
13
+ declare const AiProviderPicker: import("svelte").Component<Props, {}, "value">;
14
+ type AiProviderPicker = ReturnType<typeof AiProviderPicker>;
15
+ export default AiProviderPicker;
@@ -86,14 +86,14 @@ async function getVariable(path) {
86
86
  <div class="relative">
87
87
  {#if JSON.stringify(value).length > 120}
88
88
  <button
89
- class="text-xs absolute top-0 right-4 text-tertiary"
89
+ class="text-xs absolute top-0 right-8 text-tertiary"
90
90
  onclick={() => {
91
91
  jsonViewerContent = value
92
92
  jsonViewer?.toggleDrawer()
93
93
  }}><Expand size={18} /></button
94
94
  >
95
95
  {/if}
96
- <div class="max-h-60 overflow-auto">
96
+ <div class="max-h-60 overflow-auto" style="scrollbar-gutter: stable">
97
97
  <ObjectViewer collapsed={false} topBrackets={true} pureViewer={true} json={value} />
98
98
  </div>
99
99
  </div>
@@ -23,13 +23,14 @@ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
23
23
  import SchemaFormDnd from './schema/SchemaFormDND.svelte';
24
24
  import SchemaForm from './SchemaForm.svelte';
25
25
  import { deepEqual } from 'fast-equals';
26
- import DynSelect from './DynSelect.svelte';
26
+ import DynamicInput from './DynamicInput.svelte';
27
27
  import MultiSelect from './select/MultiSelect.svelte';
28
28
  import { safeSelectItems } from './select/utils.svelte';
29
29
  import S3ArgInput from './common/fileUpload/S3ArgInput.svelte';
30
30
  import { base } from '../base';
31
31
  import { workspaceStore } from '../stores';
32
32
  import { getJsonSchemaFromResource } from './schema/jsonSchemaResource.svelte';
33
+ import AIProviderPicker from './AIProviderPicker.svelte';
33
34
  let { label = '', value = $bindable(), defaultValue = $bindable(undefined), description = $bindable(undefined), format = $bindable(undefined), contentEncoding = undefined, type = undefined, oneOf = $bindable(undefined), required = false, pattern = $bindable(undefined), valid = $bindable(undefined), enum_ = $bindable(undefined), disabled = false, itemsType = $bindable(undefined), displayHeader = true, properties = $bindable(undefined), nestedRequired = undefined, autofocus = null, compact = false, password = false, pickForField = $bindable(undefined), variableEditor = undefined, itemPicker = undefined, noMargin = false, extra = {}, minW = true, prettifyHeader = false, resourceTypes, disablePortal = false, showSchemaExplorer = false, simpleTooltip = undefined, customErrorMessage = undefined, onlyMaskPassword = false, nullable = false, title = $bindable(undefined), placeholder = $bindable(undefined), order = $bindable(undefined), editor = $bindable(undefined), orderEditable = false, shouldDispatchChanges = false, noDefaultOnSelectFirst = false, helperScript = undefined, otherArgs = {}, lightHeader = false, diffStatus = undefined, hideNested = false, nestedParent = undefined, nestedClasses = '', displayType = true, css = undefined, appPath = undefined, computeS3ForceViewerPolicies = undefined, workspace = undefined, actions } = $props();
34
35
  $effect(() => {
35
36
  if (description == undefined) {
@@ -206,6 +207,10 @@ export function focus() {
206
207
  el.style.height = el.scrollHeight + 50 + 'px';
207
208
  }
208
209
  }
210
+ const EMAIL_PATTERN = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
211
+ const IPV4_PATTERN = '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';
212
+ const UUID_PATTERN = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';
213
+ const IPV6_PATTERN = '^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$';
209
214
  function validateInput(pattern, v, required) {
210
215
  if (nullable && emptyString(v)) {
211
216
  error = '';
@@ -232,6 +237,18 @@ function validateInput(pattern, v, required) {
232
237
  !valid && (valid = true);
233
238
  }
234
239
  }
240
+ else if (type == 'string' && format == 'email' && !testRegex(EMAIL_PATTERN, v)) {
241
+ error = 'invalid email address';
242
+ }
243
+ else if (type == 'string' && format == 'ipv4' && !testRegex(IPV4_PATTERN, v)) {
244
+ error = 'invalid IPv4 address';
245
+ }
246
+ else if (type == 'string' && format == 'ipv6' && !testRegex(IPV6_PATTERN, v)) {
247
+ error = 'invalid IPv6 address';
248
+ }
249
+ else if (type == 'string' && format == 'uuid' && !testRegex(UUID_PATTERN, v)) {
250
+ error = 'invalid UUID';
251
+ }
235
252
  else if (pattern && !testRegex(pattern, v)) {
236
253
  if (!emptyString(customErrorMessage)) {
237
254
  error = customErrorMessage ?? '';
@@ -506,6 +523,19 @@ onDestroy(() => {
506
523
  editTab="inputEditor"
507
524
  noPreview
508
525
  addPropertyInEditorTab
526
+ on:delete={(e) => {
527
+ // Handle property deletion
528
+ if (value && value.properties && value.properties[e.detail]) {
529
+ delete value.properties[e.detail]
530
+ // Also remove from order array if it exists
531
+ if (value.order) {
532
+ value.order = value.order.filter((key) => key !== e.detail)
533
+ }
534
+ // Update the value to trigger reactivity
535
+ value = { ...value }
536
+ dispatch('change')
537
+ }
538
+ }}
509
539
  />
510
540
  {/await}
511
541
  {:else if inputCat == 'object' && format?.startsWith('jsonschema-')}
@@ -733,14 +763,8 @@ onDestroy(() => {
733
763
  />
734
764
  </div>
735
765
  </div>
736
- {:else if inputCat == 'dynselect'}
737
- <DynSelect
738
- name={label}
739
- {otherArgs}
740
- {helperScript}
741
- bind:value
742
- entrypoint={format?.substring('dynselect_'.length) ?? ''}
743
- />
766
+ {:else if inputCat == 'dynamic'}
767
+ <DynamicInput name={label} {otherArgs} {helperScript} bind:value format={format ?? ''} />
744
768
  {:else if inputCat == 'resource-object' && resourceTypes == undefined}
745
769
  <span class="text-2xs text-tertiary">Loading resource types...</span>
746
770
  {:else if inputCat == 'resource-object' && (resourceTypes == undefined || (format && format?.split('-').length > 1 && resourceTypes.includes(format?.substring('resource-'.length))))}
@@ -766,11 +790,21 @@ onDestroy(() => {
766
790
  selected={oneOfSelected}
767
791
  on:selected={({ detail }) => {
768
792
  oneOfSelected = detail
769
- const prevValueKeys = Object.keys(
793
+ const selectedObjProperties =
770
794
  oneOf?.find((o) => o.title == detail)?.properties ?? {}
771
- )
795
+ const newValueKeys = Object.keys(selectedObjProperties)
772
796
  const toKeep = {}
773
- for (const key of prevValueKeys) {
797
+ for (const key of newValueKeys) {
798
+ // Check if there is a select (enum) in the newly selected oneOf and if the current value is not in the enum, skip it
799
+ if (
800
+ !['kind', 'label'].includes(key) &&
801
+ selectedObjProperties[key]?.enum &&
802
+ value &&
803
+ value[key] !== undefined &&
804
+ !selectedObjProperties[key].enum.includes(value[key])
805
+ ) {
806
+ continue
807
+ }
774
808
  toKeep[key] = value[key]
775
809
  }
776
810
  const tagKey = oneOf.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
@@ -811,8 +845,11 @@ onDestroy(() => {
811
845
  }
812
846
  }
813
847
  bind:args={value}
814
- dndType={`nested-${title}`}
815
- hiddenArgs={['label', 'kind']}
848
+ hiddenArgs={[
849
+ oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
850
+ ? 'kind'
851
+ : 'label'
852
+ ]}
816
853
  on:reorder={(e) => {
817
854
  if (oneOf && oneOf[objIdx]) {
818
855
  const keys = e.detail
@@ -905,20 +942,14 @@ onDestroy(() => {
905
942
  {disablePortal}
906
943
  {disabled}
907
944
  {prettifyHeader}
908
- bind:schema={
909
- () => ({
910
- properties,
911
- $schema: '',
912
- required: nestedRequired ?? [],
913
- type: 'object',
914
- order
915
- }),
916
- (newSchema) => {
917
- dispatch('nestedChange')
918
- }
919
- }
945
+ schema={{
946
+ properties,
947
+ $schema: '',
948
+ required: nestedRequired ?? [],
949
+ type: 'object',
950
+ order
951
+ }}
920
952
  bind:args={value}
921
- dndType={`nested-${title}`}
922
953
  on:reorder={(e) => {
923
954
  const keys = e.detail
924
955
  order = keys
@@ -1077,6 +1108,8 @@ onDestroy(() => {
1077
1108
  : undefined}
1078
1109
  {showSchemaExplorer}
1079
1110
  />
1111
+ {:else if inputCat == 'ai-provider'}
1112
+ <AIProviderPicker bind:value {disabled} {actions} />
1080
1113
  {:else if inputCat == 'email'}
1081
1114
  <input
1082
1115
  {autofocus}
@@ -1,5 +1,5 @@
1
1
  import type { EnumType, SchemaProperty } from '../common';
2
- import { type DynamicSelect } from '../utils';
2
+ import { type DynamicInput as DynamicInputTypes } from '../utils';
3
3
  import type ItemPicker from './ItemPicker.svelte';
4
4
  import type SimpleEditor from './SimpleEditor.svelte';
5
5
  import type VariableEditor from './VariableEditor.svelte';
@@ -58,7 +58,7 @@ interface Props {
58
58
  orderEditable?: boolean;
59
59
  shouldDispatchChanges?: boolean;
60
60
  noDefaultOnSelectFirst?: boolean;
61
- helperScript?: DynamicSelect.HelperScript;
61
+ helperScript?: DynamicInputTypes.HelperScript;
62
62
  otherArgs?: Record<string, any>;
63
63
  lightHeader?: boolean;
64
64
  diffStatus?: SchemaDiff | undefined;
@@ -99,8 +99,8 @@ declare const ArgInput: $$__sveltets_2_IsomorphicComponent<Props, {
99
99
  acceptChange: CustomEvent<any>;
100
100
  rejectChange: CustomEvent<any>;
101
101
  blur: CustomEvent<any>;
102
- keydownCmdEnter: CustomEvent<any>;
103
102
  change: CustomEvent<any>;
103
+ keydownCmdEnter: CustomEvent<any>;
104
104
  } & {
105
105
  [evt: string]: CustomEvent<any>;
106
106
  }, {}, {
@@ -23,6 +23,33 @@ async function loadCustomTags() {
23
23
  }
24
24
  }
25
25
  const dispatch = createEventDispatcher();
26
+ const customTagRegex = /^([\w-]+)\(((?:[\w-]+\+)*[\w-]+|(?:\^[\w-]+)+)\)$/;
27
+ const dynamicTagRegex = /\$args\[((?:\w+\.)*\w+)\]/;
28
+ let dynamicTag = $derived.by(() => {
29
+ let r = newTag.trim();
30
+ if (r == '')
31
+ return undefined;
32
+ let matched = r.match(dynamicTagRegex);
33
+ return matched?.[1];
34
+ });
35
+ let extractedCustomTag = $derived.by(() => {
36
+ let r = newTag.trim();
37
+ if (r == '')
38
+ return undefined;
39
+ let matched = r.match(customTagRegex);
40
+ console.log(matched);
41
+ let tag = matched?.[1];
42
+ let workspaces_raw = matched?.[2];
43
+ let tag_type = workspaces_raw?.includes('^') ? 'exclude' : 'include';
44
+ if (tag_type == 'exclude') {
45
+ workspaces_raw = workspaces_raw?.slice(1);
46
+ }
47
+ let workspaces = workspaces_raw?.split(tag_type == 'include' ? '+' : '^');
48
+ if (!workspaces_raw || workspaces_raw?.length == 0) {
49
+ return undefined;
50
+ }
51
+ return { tag, workspaces, tag_type };
52
+ });
26
53
  loadCustomTags();
27
54
  </script>
28
55
 
@@ -55,6 +82,53 @@ loadCustomTags();
55
82
  {/each}
56
83
  </div>
57
84
  <input type="text" bind:value={newTag} />
85
+ {#if extractedCustomTag}
86
+ <div class="text-2xs text-tertiary p-2 bg-gray-50 rounded border">
87
+ <div class="font-medium mb-1">Workspace specific tag</div>
88
+ <div>
89
+ <b>Tag:</b>
90
+ {extractedCustomTag.tag}
91
+ </div>
92
+ <div>
93
+ <b>Workspaces:</b>
94
+ {#if extractedCustomTag.tag_type == 'include'}
95
+ {extractedCustomTag.workspaces?.join(', ')}
96
+ {:else}
97
+ All workspaces except {extractedCustomTag.workspaces?.join(', ')}
98
+ {/if}
99
+ </div>
100
+ </div>
101
+ {:else if newTag.trim()}
102
+ {#if newTag.includes('(') || newTag.includes(')') || newTag.includes('+') || newTag.includes('^') || ((newTag.includes('.') || newTag.includes('$args[')) && !dynamicTag)}
103
+ <div class="text-2xs text-tertiary p-2 bg-gray-50 rounded border">
104
+ <div class="font-medium mb-1 text-red-500">Invalid tag</div>
105
+ <div>
106
+ <b>Tag:</b>
107
+ {newTag.trim()}
108
+ </div>
109
+ </div>
110
+ {:else}
111
+ <div class="text-2xs text-tertiary p-2 bg-gray-50 rounded border">
112
+ <div class="font-medium mb-1">
113
+ {#if newTag.includes('$workspace') || newTag.includes('$args')}
114
+ Dynamic tag
115
+ {:else}
116
+ Simple tag
117
+ {/if}
118
+ </div>
119
+ <div>
120
+ <b>Tag:</b>
121
+ {newTag.trim()}
122
+ </div>
123
+ {#if newTag.includes('$workspace') && !dynamicTag}
124
+ <div>Interpolated tag based on workspace id the job was created in </div>
125
+ {/if}
126
+ {#if dynamicTag}
127
+ <div>Interpolated tag based on args input of <b>{dynamicTag}</b></div>
128
+ {/if}
129
+ </div>
130
+ {/if}
131
+ {/if}
58
132
 
59
133
  <Button
60
134
  variant="contained"
@@ -87,13 +161,25 @@ loadCustomTags();
87
161
  ></span
88
162
  >
89
163
  <span class="text-2xs text-tertiary"
90
- >To exclude 'workspace1' and 'workspace2' from a tag, use <pre
91
- class="inline">tag(^workspace1^workspace2)</pre
164
+ >To exclude 'workspace1' and 'workspace2' from a tag, use <pre class="inline"
165
+ >tag(^workspace1^workspace2)</pre
92
166
  ></span
93
167
  >
94
168
  <span class="text-2xs text-tertiary"
95
- >For dynamic tags based on the workspace, use <pre class="inline">$workspace</pre>, e.g:
169
+ >For <a
170
+ href="https://www.windmill.dev/docs/core_concepts/worker_groups#dynamic-tag"
171
+ target="_blank">dynamic tags</a
172
+ >
173
+ based on the workspace, use <pre class="inline">$workspace</pre>, e.g:
96
174
  <pre class="inline">tag-$workspace</pre></span
97
175
  >
176
+ <span class="text-2xs text-tertiary"
177
+ >For <a
178
+ href="https://www.windmill.dev/docs/core_concepts/worker_groups#dynamic-tag"
179
+ target="_blank">dynamic tags</a
180
+ >
181
+ based on args input, use <pre class="inline">$args[a.b.c]</pre> where
182
+ <pre class="inline">a.b.c</pre> is the path to the value in the args object</span
183
+ >
98
184
  {/if}
99
185
  </div>
@@ -1,4 +1,5 @@
1
- <script lang="ts">import CollapseLink from './CollapseLink.svelte';
1
+ <script lang="ts">import { untrack } from 'svelte';
2
+ import CollapseLink from './CollapseLink.svelte';
2
3
  import IconedResourceType from './IconedResourceType.svelte';
3
4
  import Toggle from './Toggle.svelte';
4
5
  import Tooltip from './Tooltip.svelte';
@@ -25,8 +26,12 @@ function changeDomain(domain, custom) {
25
26
  }
26
27
  }
27
28
  let enabled = $derived(value != undefined);
28
- $effect(() => {
29
- changeDomain(value?.['domain'], value?.['custom']);
29
+ let lastValues = { domain: undefined, custom: undefined };
30
+ $effect.pre(() => {
31
+ if (value?.['domain'] != lastValues.domain || value?.['custom'] != lastValues.custom) {
32
+ lastValues = { domain: value?.['domain'], custom: value?.['custom'] };
33
+ untrack(() => changeDomain(value?.['domain'], value?.['custom']));
34
+ }
30
35
  });
31
36
  </script>
32
37