windmill-components 1.642.0 → 1.655.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 (831) hide show
  1. package/package/aiStore.d.ts +1 -0
  2. package/package/aiStore.js +3 -0
  3. package/package/components/ApiConnectForm.svelte +7 -0
  4. package/package/components/ApiConnectForm.svelte.d.ts +1 -1
  5. package/package/components/AppConnectDrawer.svelte +18 -15
  6. package/package/components/AppConnectDrawer.svelte.d.ts +5 -5
  7. package/package/components/AppConnectInner.svelte +2 -0
  8. package/package/components/AppConnectLightweightResourcePicker.svelte +3 -3
  9. package/package/components/AppWrapper.svelte +3 -2
  10. package/package/components/ArgInput.svelte +1 -0
  11. package/package/components/AutheliaSetting.svelte +9 -6
  12. package/package/components/AutheliaSetting.svelte.d.ts +4 -18
  13. package/package/components/AuthentikSetting.svelte +10 -7
  14. package/package/components/AuthentikSetting.svelte.d.ts +4 -18
  15. package/package/components/AzureOauthSettings.svelte +23 -23
  16. package/package/components/AzureOauthSettings.svelte.d.ts +4 -18
  17. package/package/components/Badge.svelte +2 -4
  18. package/package/components/Badge.svelte.d.ts +5 -27
  19. package/package/components/ChangeInstanceUsernameInner.svelte +4 -7
  20. package/package/components/ChangeInstanceUsernameInner.svelte.d.ts +8 -7
  21. package/package/components/ChannelSelector.svelte +19 -15
  22. package/package/components/CompareWorkspaces.svelte +618 -650
  23. package/package/components/ContextualVariableEditor.svelte +8 -8
  24. package/package/components/ContextualVariableEditor.svelte.d.ts +3 -6
  25. package/package/components/CustomOauth.svelte +19 -23
  26. package/package/components/CustomOauth.svelte.d.ts +4 -26
  27. package/package/components/CustomPopover.svelte +3 -2
  28. package/package/components/CustomSso.svelte +20 -25
  29. package/package/components/CustomSso.svelte.d.ts +4 -27
  30. package/package/components/DBManagerDrawer.svelte +26 -44
  31. package/package/components/DBManagerDrawer.svelte.d.ts +3 -5
  32. package/package/components/DBSchemaExplorer.svelte +3 -3
  33. package/package/components/DBTableEditor.svelte +6 -6
  34. package/package/components/DatatablePicker.svelte +1 -3
  35. package/package/components/DateInput.svelte +1 -0
  36. package/package/components/DateTimeInput.svelte +1 -0
  37. package/package/components/DefaultScripts.svelte +3 -5
  38. package/package/components/DefaultScripts.svelte.d.ts +6 -20
  39. package/package/components/DefaultScriptsInner.svelte +4 -4
  40. package/package/components/DefaultScriptsInner.svelte.d.ts +4 -18
  41. package/package/components/DeployWorkspace.svelte +222 -470
  42. package/package/components/DeployWorkspaceDrawer.svelte +1 -10
  43. package/package/components/Description.svelte +3 -3
  44. package/package/components/Description.svelte.d.ts +6 -28
  45. package/package/components/Dev.svelte +15 -14
  46. package/package/components/DiffEditor.svelte +2 -2
  47. package/package/components/DisplayResult.svelte.d.ts +1 -1
  48. package/package/components/DropdownSubmenuItem.svelte +3 -2
  49. package/package/components/DropdownV2.svelte +1 -1
  50. package/package/components/DropdownV2.svelte.d.ts +2 -2
  51. package/package/components/DropdownV2Inner.svelte +3 -0
  52. package/package/components/DucklakePicker.svelte +1 -3
  53. package/package/components/DurationMs.svelte +1 -3
  54. package/package/components/DurationMs.svelte.d.ts +4 -18
  55. package/package/components/DynamicInput.svelte +2 -2
  56. package/package/components/EditableSchemaForm.svelte +4 -4
  57. package/package/components/Editor.svelte +9 -11
  58. package/package/components/EditorBar.svelte +2 -2
  59. package/package/components/EditorBar.svelte.d.ts +1 -1
  60. package/package/components/ExecutionDuration.svelte +12 -20
  61. package/package/components/ExecutionDuration.svelte.d.ts +14 -24
  62. package/package/components/ExploreAssetButton.svelte +13 -6
  63. package/package/components/ExploreAssetButton.svelte.d.ts +0 -2
  64. package/package/components/FakeMonacoPlaceHolder.svelte +3 -2
  65. package/package/components/FieldHeader.svelte +6 -16
  66. package/package/components/FieldHeader.svelte.d.ts +5 -20
  67. package/package/components/FilesetEditor.svelte +23 -0
  68. package/package/components/FilterSearchbar.svelte +44 -11
  69. package/package/components/FilterSearchbar.svelte.d.ts +1 -0
  70. package/package/components/FlowBuilder.svelte +47 -28
  71. package/package/components/FlowGraphViewer.svelte +1 -10
  72. package/package/components/FlowGraphViewer.svelte.d.ts +17 -16
  73. package/package/components/FlowGraphViewerStep.svelte +5 -7
  74. package/package/components/FlowGraphViewerStep.svelte.d.ts +4 -18
  75. package/package/components/FlowHistoryJobPicker.svelte +4 -2
  76. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  77. package/package/components/FlowInputViewer.svelte +1 -1
  78. package/package/components/FlowInputViewer.svelte.d.ts +4 -18
  79. package/package/components/FlowLogViewer.svelte +6 -4
  80. package/package/components/FlowLogViewerWrapper.svelte +2 -2
  81. package/package/components/FlowPlugConnect.svelte +1 -3
  82. package/package/components/FlowPlugConnect.svelte.d.ts +7 -6
  83. package/package/components/FlowPreviewContent.svelte +111 -6
  84. package/package/components/FlowPreviewContent.svelte.d.ts +1 -0
  85. package/package/components/FlowStatusViewer.svelte +6 -6
  86. package/package/components/FlowStatusViewerInner.svelte +99 -86
  87. package/package/components/FlowViewer.svelte +6 -4
  88. package/package/components/FlowWrapper.svelte +5 -4
  89. package/package/components/FolderEditor.svelte +9 -7
  90. package/package/components/FolderUsageInfo.svelte +7 -6
  91. package/package/components/FolderUsageInfo.svelte.d.ts +5 -19
  92. package/package/components/GraphqlSchemaViewer.svelte +3 -3
  93. package/package/components/GraphqlSchemaViewer.svelte.d.ts +5 -19
  94. package/package/components/GroupEditor.svelte +22 -10
  95. package/package/components/IdEditorInput.svelte +3 -2
  96. package/package/components/InputTransformForm.svelte +2 -0
  97. package/package/components/InputTransformSchemaForm.svelte.d.ts +1 -1
  98. package/package/components/InputTransformsViewer.svelte +2 -2
  99. package/package/components/InputTransformsViewer.svelte.d.ts +4 -18
  100. package/package/components/InstanceGroupEditor.svelte +28 -23
  101. package/package/components/InstanceGroupEditor.svelte.d.ts +5 -4
  102. package/package/components/InstanceNameEditor.svelte +19 -19
  103. package/package/components/InstanceNameEditor.svelte.d.ts +9 -9
  104. package/package/components/InstanceSetting.svelte +8 -2
  105. package/package/components/InstanceSettings.svelte +36 -22
  106. package/package/components/InviteGlobalUser.svelte +4 -4
  107. package/package/components/InviteGlobalUser.svelte.d.ts +5 -4
  108. package/package/components/JobLoader.svelte +51 -1
  109. package/package/components/KanidmSetting.svelte +15 -12
  110. package/package/components/KanidmSetting.svelte.d.ts +4 -18
  111. package/package/components/KeycloakSetting.svelte +18 -9
  112. package/package/components/KeycloakSetting.svelte.d.ts +4 -18
  113. package/package/components/LogId.svelte +5 -2
  114. package/package/components/LogId.svelte.d.ts +4 -18
  115. package/package/components/LogSnippetViewer.svelte +5 -5
  116. package/package/components/LogSnippetViewer.svelte.d.ts +5 -20
  117. package/package/components/LogViewer.svelte +2 -2
  118. package/package/components/ManualPopover.svelte +4 -1
  119. package/package/components/MapResult.svelte +33 -33
  120. package/package/components/MapResult.svelte.d.ts +13 -26
  121. package/package/components/MemoryFootprintViewer.svelte +8 -6
  122. package/package/components/MemoryFootprintViewer.svelte.d.ts +4 -18
  123. package/package/components/ModulePreview.svelte.d.ts +1 -1
  124. package/package/components/ModuleStatus.svelte +1 -3
  125. package/package/components/ModuleStatus.svelte.d.ts +5 -19
  126. package/package/components/ModuleTest.svelte +3 -3
  127. package/package/components/ModuleTest.svelte.d.ts +1 -1
  128. package/package/components/OAuthSetting.svelte +57 -41
  129. package/package/components/OauthExtraParams.svelte +9 -4
  130. package/package/components/OauthExtraParams.svelte.d.ts +4 -18
  131. package/package/components/OauthScopes.svelte +9 -4
  132. package/package/components/OauthScopes.svelte.d.ts +4 -18
  133. package/package/components/ObjectResourceInput.svelte +10 -3
  134. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  135. package/package/components/OnBehalfOfSelector.svelte +191 -0
  136. package/package/components/OnBehalfOfSelector.svelte.d.ts +21 -0
  137. package/package/components/PageHeader.svelte +3 -7
  138. package/package/components/PageHeader.svelte.d.ts +5 -27
  139. package/package/components/ParqetCsvTableRenderer.svelte +12 -12
  140. package/package/components/ParqetCsvTableRenderer.svelte.d.ts +4 -18
  141. package/package/components/PermissionHistory.svelte +8 -6
  142. package/package/components/PersistentScriptDrawer.svelte +56 -50
  143. package/package/components/PersistentScriptDrawer.svelte.d.ts +3 -5
  144. package/package/components/Popover.svelte +2 -2
  145. package/package/components/PrefixedInput.svelte +2 -2
  146. package/package/components/QueueMetricsDrawer.svelte +1 -1
  147. package/package/components/QueueMetricsDrawer.svelte.d.ts +3 -20
  148. package/package/components/QueueMetricsDrawerInner.svelte +14 -9
  149. package/package/components/QueueMetricsDrawerInner.svelte.d.ts +2 -17
  150. package/package/components/RadioButton.svelte +3 -8
  151. package/package/components/RadioButton.svelte.d.ts +13 -12
  152. package/package/components/Range.svelte +15 -18
  153. package/package/components/Range.svelte.d.ts +5 -21
  154. package/package/components/RepositorySelector.svelte +3 -2
  155. package/package/components/Required.svelte +4 -4
  156. package/package/components/Required.svelte.d.ts +6 -20
  157. package/package/components/ResourceEditor.svelte +22 -5
  158. package/package/components/ResourceEditor.svelte.d.ts +0 -1
  159. package/package/components/ResourceEditorDrawer.svelte +11 -16
  160. package/package/components/ResourceEditorDrawer.svelte.d.ts +3 -6
  161. package/package/components/ResourcePicker.svelte +35 -17
  162. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  163. package/package/components/RunForm.svelte +2 -2
  164. package/package/components/RunFormAdvancedPopup.svelte +1 -4
  165. package/package/components/RunFormAdvancedPopup.svelte.d.ts +4 -18
  166. package/package/components/RunsPage.svelte +126 -27
  167. package/package/components/S3FilePicker.svelte +2 -1
  168. package/package/components/S3FilePicker.svelte.d.ts +1 -0
  169. package/package/components/S3FilePickerInner.svelte +19 -7
  170. package/package/components/S3FilePickerInner.svelte.d.ts +1 -0
  171. package/package/components/S3ObjectPicker.svelte +4 -5
  172. package/package/components/S3ObjectPicker.svelte.d.ts +6 -6
  173. package/package/components/SaveButton.svelte +2 -0
  174. package/package/components/SaveInputsButton.svelte +2 -7
  175. package/package/components/SaveInputsButton.svelte.d.ts +10 -9
  176. package/package/components/SavedInputsPickerViewer.svelte +21 -22
  177. package/package/components/SavedInputsPickerViewer.svelte.d.ts +10 -10
  178. package/package/components/SchemaEditorProperty.svelte +1 -1
  179. package/package/components/SchemaEditorProperty.svelte.d.ts +4 -18
  180. package/package/components/SchemaForm.svelte.d.ts +1 -1
  181. package/package/components/ScriptBuilder.svelte +113 -30
  182. package/package/components/ScriptEditor.svelte +90 -34
  183. package/package/components/ScriptEditor.svelte.d.ts +2 -2
  184. package/package/components/ScriptPicker.svelte +1 -1
  185. package/package/components/ScriptWrapper.svelte +3 -2
  186. package/package/components/Scrollable.svelte +10 -10
  187. package/package/components/Scrollable.svelte.d.ts +6 -29
  188. package/package/components/SearchItems.svelte +1 -1
  189. package/package/components/ServiceLogsInner.svelte +15 -9
  190. package/package/components/ShareModal.svelte +15 -8
  191. package/package/components/ShareModal.svelte.d.ts +1 -1
  192. package/package/components/SimpleEditor.svelte +1 -1
  193. package/package/components/Slider.svelte +2 -5
  194. package/package/components/Slider.svelte.d.ts +6 -28
  195. package/package/components/StringTypeNarrowing.svelte +3 -2
  196. package/package/components/Subsection.svelte +3 -2
  197. package/package/components/Summary.svelte +1 -2
  198. package/package/components/Summary.svelte.d.ts +4 -18
  199. package/package/components/SupabaseConnect.svelte +20 -17
  200. package/package/components/SupabaseConnect.svelte.d.ts +3 -5
  201. package/package/components/SuperadminSettings.svelte +11 -9
  202. package/package/components/SuperadminSettingsInner.svelte +3 -3
  203. package/package/components/TableCustom.svelte +6 -8
  204. package/package/components/TableCustom.svelte.d.ts +10 -10
  205. package/package/components/TeamSelector.svelte +20 -14
  206. package/package/components/TemplateEditor.svelte +1 -7
  207. package/package/components/TestConnection.svelte +2 -5
  208. package/package/components/TestConnection.svelte.d.ts +4 -18
  209. package/package/components/TimelineBar.svelte +5 -2
  210. package/package/components/Toast.svelte +2 -2
  211. package/package/components/Toggle.svelte +2 -2
  212. package/package/components/Tooltip.svelte +3 -16
  213. package/package/components/Tooltip.svelte.d.ts +4 -1
  214. package/package/components/TooltipInner.svelte +3 -14
  215. package/package/components/TooltipInner.svelte.d.ts +5 -28
  216. package/package/components/Uptodate.svelte +1 -1
  217. package/package/components/Uptodate.svelte.d.ts +2 -17
  218. package/package/components/Urlize.svelte +2 -2
  219. package/package/components/Urlize.svelte.d.ts +4 -18
  220. package/package/components/Version.svelte +1 -1
  221. package/package/components/Version.svelte.d.ts +2 -17
  222. package/package/components/WhitelistIp.svelte +1 -1
  223. package/package/components/WhitelistIp.svelte.d.ts +2 -17
  224. package/package/components/WorkerGroup.svelte +1 -5
  225. package/package/components/WorkerRepl.svelte +1 -2
  226. package/package/components/WorkflowTimeline.svelte +10 -14
  227. package/package/components/WorkflowTimeline.svelte.d.ts +4 -18
  228. package/package/components/WorkspaceDependenciesEditor.svelte +1 -1
  229. package/package/components/WorkspaceDeployLayout.svelte +107 -0
  230. package/package/components/WorkspaceDeployLayout.svelte.d.ts +31 -0
  231. package/package/components/ZitadelSetting.svelte +9 -6
  232. package/package/components/ZitadelSetting.svelte.d.ts +4 -18
  233. package/package/components/apps/components/GroupWrapper.svelte +5 -2
  234. package/package/components/apps/components/buttons/AppButton.svelte +6 -5
  235. package/package/components/apps/components/buttons/AppForm.svelte +5 -5
  236. package/package/components/apps/components/buttons/AppFormButton.svelte +5 -5
  237. package/package/components/apps/components/buttons/AppSchemaForm.svelte +5 -4
  238. package/package/components/apps/components/display/AppAccordionList.svelte +4 -4
  239. package/package/components/apps/components/display/AppAlert.svelte +4 -4
  240. package/package/components/apps/components/display/AppBarChart.svelte +4 -4
  241. package/package/components/apps/components/display/AppCarouselList.svelte +5 -5
  242. package/package/components/apps/components/display/AppChartJs.svelte +4 -4
  243. package/package/components/apps/components/display/AppChartJsV2.svelte +4 -4
  244. package/package/components/apps/components/display/AppChat.svelte +5 -5
  245. package/package/components/apps/components/display/AppCustomComponent.svelte +3 -3
  246. package/package/components/apps/components/display/AppDisplayComponent.svelte +5 -5
  247. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +3 -3
  248. package/package/components/apps/components/display/AppDownload.svelte +3 -3
  249. package/package/components/apps/components/display/AppHtml.svelte +4 -3
  250. package/package/components/apps/components/display/AppIcon.svelte +4 -4
  251. package/package/components/apps/components/display/AppImage.svelte +4 -4
  252. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +4 -4
  253. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +3 -3
  254. package/package/components/apps/components/display/AppJobProgressBar.svelte +3 -3
  255. package/package/components/apps/components/display/AppMap.svelte +6 -4
  256. package/package/components/apps/components/display/AppMarkdown.svelte +5 -4
  257. package/package/components/apps/components/display/AppMenu.svelte +4 -3
  258. package/package/components/apps/components/display/AppNavbar.svelte +4 -4
  259. package/package/components/apps/components/display/AppPdf.svelte +3 -3
  260. package/package/components/apps/components/display/AppPieChart.svelte +3 -3
  261. package/package/components/apps/components/display/AppRecomputeAll.svelte +3 -3
  262. package/package/components/apps/components/display/AppScatterChart.svelte +3 -3
  263. package/package/components/apps/components/display/AppStatCard.svelte +3 -3
  264. package/package/components/apps/components/display/AppText.svelte +10 -8
  265. package/package/components/apps/components/display/AppTimeseries.svelte +3 -3
  266. package/package/components/apps/components/display/InsertRowDrawerButton.svelte +1 -1
  267. package/package/components/apps/components/display/PlotlyHtml.svelte +3 -2
  268. package/package/components/apps/components/display/PlotlyHtmlV2.svelte +3 -2
  269. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +3 -2
  270. package/package/components/apps/components/display/VegaLiteHtml.svelte +3 -2
  271. package/package/components/apps/components/display/charts/AppAgCharts.svelte +3 -3
  272. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +2 -2
  273. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -3
  274. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +2 -2
  275. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +2 -2
  276. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +2 -2
  277. package/package/components/apps/components/display/dbtable/metadata.js +9 -4
  278. package/package/components/apps/components/display/dbtable/utils.d.ts +3 -3
  279. package/package/components/apps/components/display/dbtable/utils.js +3 -3
  280. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +8 -4
  281. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -1
  282. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  283. package/package/components/apps/components/display/table/AppAggridTable.svelte +4 -3
  284. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +3 -3
  285. package/package/components/apps/components/display/table/AppTable.svelte +4 -4
  286. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
  287. package/package/components/apps/components/helpers/InputValue.svelte +3 -3
  288. package/package/components/apps/components/helpers/RunnableComponent.svelte +2 -2
  289. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
  290. package/package/components/apps/components/inputs/AppCheckbox.svelte +6 -6
  291. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +6 -5
  292. package/package/components/apps/components/inputs/AppDateInput.svelte +4 -4
  293. package/package/components/apps/components/inputs/AppDateSelect.svelte +4 -4
  294. package/package/components/apps/components/inputs/AppDateSliderInput.svelte +5 -4
  295. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +4 -4
  296. package/package/components/apps/components/inputs/AppFileInput.svelte +4 -4
  297. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +5 -4
  298. package/package/components/apps/components/inputs/AppNumberInput.svelte +4 -4
  299. package/package/components/apps/components/inputs/AppQuillEditor.svelte +3 -2
  300. package/package/components/apps/components/inputs/AppRangeInput.svelte +5 -4
  301. package/package/components/apps/components/inputs/AppS3FileInput.svelte +4 -4
  302. package/package/components/apps/components/inputs/AppSelect.svelte +8 -7
  303. package/package/components/apps/components/inputs/AppSelectStep.svelte +5 -4
  304. package/package/components/apps/components/inputs/AppSelectTab.svelte +4 -4
  305. package/package/components/apps/components/inputs/AppSliderInputs.svelte +5 -4
  306. package/package/components/apps/components/inputs/AppTextInput.svelte +4 -4
  307. package/package/components/apps/components/inputs/AppTimeInput.svelte +4 -4
  308. package/package/components/apps/components/inputs/AppUserResource.svelte +4 -4
  309. package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +5 -4
  310. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +3 -1
  311. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +5 -5
  312. package/package/components/apps/components/layout/AppContainer.svelte +3 -3
  313. package/package/components/apps/components/layout/AppDecisionTree.svelte +5 -5
  314. package/package/components/apps/components/layout/AppDivider.svelte +3 -3
  315. package/package/components/apps/components/layout/AppDrawer.svelte +7 -6
  316. package/package/components/apps/components/layout/AppList.svelte +5 -5
  317. package/package/components/apps/components/layout/AppModal.svelte +7 -6
  318. package/package/components/apps/components/layout/AppSplitpanes.svelte +8 -6
  319. package/package/components/apps/components/layout/AppStepper.svelte +6 -6
  320. package/package/components/apps/components/layout/AppTabs.svelte +8 -8
  321. package/package/components/apps/components/layout/ListWrapper.svelte +6 -2
  322. package/package/components/apps/components/layout/RowWrapper.svelte +6 -2
  323. package/package/components/apps/editor/AppEditor.svelte +11 -11
  324. package/package/components/apps/editor/AppEditorHeader.svelte +21 -4
  325. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +41 -1
  326. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -1
  327. package/package/components/apps/editor/AppExportButton.svelte +4 -4
  328. package/package/components/apps/editor/AppExportButton.svelte.d.ts +3 -20
  329. package/package/components/apps/editor/AppInputs.svelte +1 -1
  330. package/package/components/apps/editor/AppInputs.svelte.d.ts +2 -17
  331. package/package/components/apps/editor/AppJsonEditor.svelte +5 -5
  332. package/package/components/apps/editor/AppJsonEditor.svelte.d.ts +3 -7
  333. package/package/components/apps/editor/AppPreview.svelte +17 -16
  334. package/package/components/apps/editor/ComponentHeader.svelte +1 -1
  335. package/package/components/apps/editor/DecisionTreeDebug.svelte +4 -4
  336. package/package/components/apps/editor/GridEditor.svelte +1 -0
  337. package/package/components/apps/editor/GridViewer.svelte +3 -3
  338. package/package/components/apps/editor/RecomputeAllComponents.svelte +13 -8
  339. package/package/components/apps/editor/RecomputeAllComponents.svelte.d.ts +2 -17
  340. package/package/components/apps/editor/SubGridEditor.svelte +4 -2
  341. package/package/components/apps/editor/appPolicy.js +1 -1
  342. package/package/components/apps/editor/commonAppUtils.d.ts +1 -1
  343. package/package/components/apps/editor/commonAppUtils.js +1 -1
  344. package/package/components/apps/editor/component/Component.svelte +2 -2
  345. package/package/components/apps/editor/component/components.d.ts +8 -2
  346. package/package/components/apps/editor/component/components.js +26 -39
  347. package/package/components/apps/editor/componentsPanel/CssHelperPanel.svelte +10 -7
  348. package/package/components/apps/editor/componentsPanel/CssHelperPanel.svelte.d.ts +1 -1
  349. package/package/components/apps/editor/componentsPanel/CustomComponentsList.svelte +7 -7
  350. package/package/components/apps/editor/componentsPanel/CustomComponentsList.svelte.d.ts +1 -1
  351. package/package/components/apps/editor/componentsPanel/NameEditor.svelte +2 -2
  352. package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +3 -4
  353. package/package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte +3 -3
  354. package/package/components/apps/editor/componentsPanel/ThemeList.svelte +5 -5
  355. package/package/components/apps/editor/componentsPanel/ThemeList.svelte.d.ts +1 -1
  356. package/package/components/apps/editor/componentsPanel/ThemeNameEditor.svelte +2 -2
  357. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  358. package/package/components/apps/editor/contextPanel/DebugPanel.svelte +4 -4
  359. package/package/components/apps/editor/contextPanel/DebugPanel.svelte.d.ts +2 -17
  360. package/package/components/apps/editor/contextPanel/components/Output.svelte +6 -1
  361. package/package/components/apps/editor/contextPanel/components/Output.svelte.d.ts +1 -0
  362. package/package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +14 -2
  363. package/package/components/apps/editor/settingsPanel/ComponentControl.svelte +3 -2
  364. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +6 -6
  365. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +4 -4
  366. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +0 -1
  367. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -2
  368. package/package/components/apps/editor/settingsPanel/common/PanelSection.svelte +3 -2
  369. package/package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +6 -5
  370. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
  371. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +3 -2
  372. package/package/components/apps/svelte-grid/Grid.svelte +4 -4
  373. package/package/components/apps/svelte-grid/MoveResize.svelte +5 -5
  374. package/package/components/assets/AssetButtons.svelte +31 -27
  375. package/package/components/assets/AssetButtons.svelte.d.ts +0 -1
  376. package/package/components/assets/AssetColumnBadges.svelte +5 -3
  377. package/package/components/assets/AssetsDropdownButton.svelte +11 -13
  378. package/package/components/assets/AssetsUsageDrawer.svelte +7 -5
  379. package/package/components/assets/JobAssetsViewer.svelte +11 -5
  380. package/package/components/assets/VolumeDetailDrawer.svelte +101 -0
  381. package/package/components/assets/VolumeDetailDrawer.svelte.d.ts +9 -0
  382. package/package/components/assets/VolumesDrawer.svelte +191 -0
  383. package/package/components/assets/VolumesDrawer.svelte.d.ts +8 -0
  384. package/package/components/assets/assetsFilter.d.ts +4 -0
  385. package/package/components/assets/assetsFilter.js +4 -0
  386. package/package/components/assets/lib.js +4 -0
  387. package/package/components/auditLogs/AuditLogsFilters.svelte +4 -7
  388. package/package/components/chartjs-wrappers/Chart.svelte +4 -4
  389. package/package/components/common/FileProgressBar.svelte +9 -7
  390. package/package/components/common/FileProgressBar.svelte.d.ts +5 -27
  391. package/package/components/common/InlineCalendarInput.svelte +5 -1
  392. package/package/components/common/alert/Notification.svelte +2 -2
  393. package/package/components/common/alert/Notification.svelte.d.ts +4 -18
  394. package/package/components/common/button/AnimatedButton.svelte +3 -9
  395. package/package/components/common/button/AnimatedButton.svelte.d.ts +5 -27
  396. package/package/components/common/button/AnimatedButtonInner.svelte +6 -12
  397. package/package/components/common/button/AnimatedButtonInner.svelte.d.ts +5 -27
  398. package/package/components/common/button/Button.svelte +5 -5
  399. package/package/components/common/button/PulseButton.svelte +15 -19
  400. package/package/components/common/button/PulseButton.svelte.d.ts +10 -48
  401. package/package/components/common/button/RefreshButton.svelte +3 -2
  402. package/package/components/common/button/RefreshButton.svelte.d.ts +1 -1
  403. package/package/components/common/button/RoundIconButton.svelte +5 -5
  404. package/package/components/common/button/RoundIconButton.svelte.d.ts +6 -28
  405. package/package/components/common/button/UndoRedo.svelte +1 -2
  406. package/package/components/common/button/UndoRedo.svelte.d.ts +6 -5
  407. package/package/components/common/calendarPicker/CalendarPicker.svelte +44 -43
  408. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +11 -11
  409. package/package/components/common/clearableInput/ClearableInput.svelte +28 -27
  410. package/package/components/common/clearableInput/ClearableInput.svelte.d.ts +11 -37
  411. package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
  412. package/package/components/common/confirmationModal/DraftTriggersConfirmationModal.svelte +2 -2
  413. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +3 -3
  414. package/package/components/common/contextmenu/ContextMenu.svelte +14 -4
  415. package/package/components/common/contextmenu/ContextMenu.svelte.d.ts +2 -0
  416. package/package/components/common/contextmenu/contextMenuStyles.d.ts +4 -0
  417. package/package/components/common/contextmenu/contextMenuStyles.js +4 -0
  418. package/package/components/common/drawer/Disposable.svelte +3 -3
  419. package/package/components/common/fileInput/FileInput.svelte +16 -30
  420. package/package/components/common/fileInput/FileInput.svelte.d.ts +24 -32
  421. package/package/components/common/fileUpload/FileUploadModal.svelte +2 -4
  422. package/package/components/common/fileUpload/FileUploadModal.svelte.d.ts +7 -6
  423. package/package/components/common/kbd/Kbd.svelte +4 -3
  424. package/package/components/common/languageIcons/LanguageIcon.svelte +21 -4
  425. package/package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -1
  426. package/package/components/common/layout/ListElement.svelte +5 -1
  427. package/package/components/common/layout/ListElement.svelte.d.ts +5 -25
  428. package/package/components/common/menu/MenuItem.svelte +9 -4
  429. package/package/components/common/menu/MenuItem.svelte.d.ts +5 -29
  430. package/package/components/common/menu/ResolveOpen.svelte +6 -3
  431. package/package/components/common/menu/ResolveOpen.svelte.d.ts +8 -4
  432. package/package/components/common/modal/AlwaysMountedModal.svelte +11 -15
  433. package/package/components/common/modal/AlwaysMountedModal.svelte.d.ts +8 -32
  434. package/package/components/common/modal/Modal2.svelte +12 -20
  435. package/package/components/common/modal/Modal2.svelte.d.ts +10 -36
  436. package/package/components/common/popup/PopupV2.svelte +3 -2
  437. package/package/components/common/stepper/Stepper.svelte +4 -9
  438. package/package/components/common/stepper/Stepper.svelte.d.ts +10 -9
  439. package/package/components/common/table/AppRow.svelte +20 -12
  440. package/package/components/common/table/FlowRow.svelte +17 -9
  441. package/package/components/common/table/Row.svelte +6 -5
  442. package/package/components/common/table/Row.svelte.d.ts +2 -1
  443. package/package/components/common/table/RowIcon.svelte +40 -11
  444. package/package/components/common/table/RowIcon.svelte.d.ts +6 -18
  445. package/package/components/common/table/ScriptRow.svelte +37 -27
  446. package/package/components/common/table/Table.svelte +5 -1
  447. package/package/components/common/table/Table.svelte.d.ts +5 -25
  448. package/package/components/common/tabs/Tabs.svelte +2 -2
  449. package/package/components/common/tabs/TabsV2.svelte +1 -1
  450. package/package/components/common/toggleButton-v2/ToggleButton.svelte +0 -1
  451. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +10 -5
  452. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  453. package/package/components/copilot/FlowCopilotInputsModal.svelte +14 -13
  454. package/package/components/copilot/FlowCopilotInputsModal.svelte.d.ts +6 -5
  455. package/package/components/copilot/MetadataGen.svelte +5 -5
  456. package/package/components/copilot/RegexGen.svelte +87 -80
  457. package/package/components/copilot/RegexGen.svelte.d.ts +1 -1
  458. package/package/components/copilot/ResourceGen.svelte +157 -0
  459. package/package/components/copilot/ResourceGen.svelte.d.ts +12 -0
  460. package/package/components/copilot/ScriptFix.svelte +37 -33
  461. package/package/components/copilot/ScriptGen.svelte +1 -1
  462. package/package/components/copilot/chat/AIChat.svelte +1 -1
  463. package/package/components/copilot/chat/AIChatDisplay.svelte +52 -48
  464. package/package/components/copilot/chat/AIChatInput.svelte +46 -38
  465. package/package/components/copilot/chat/AIChatManager.svelte.js +4 -2
  466. package/package/components/copilot/chat/AssistantMessage.svelte +1 -1
  467. package/package/components/copilot/chat/AssistantMessage.svelte.d.ts +4 -18
  468. package/package/components/copilot/chat/ChatMode.svelte +37 -33
  469. package/package/components/copilot/chat/ContextElementBadge.svelte +6 -8
  470. package/package/components/copilot/chat/flow/AIChangesWarningModal.svelte +8 -11
  471. package/package/components/copilot/lib.d.ts +3 -2
  472. package/package/components/copilot/lib.js +25 -29
  473. package/package/components/custom_ui.d.ts +3 -0
  474. package/package/components/dbManagerDrawerModel.svelte.d.ts +13 -0
  475. package/package/components/dbManagerDrawerModel.svelte.js +182 -0
  476. package/package/components/details/ClipboardPanel.svelte +5 -8
  477. package/package/components/details/ClipboardPanel.svelte.d.ts +8 -22
  478. package/package/components/details/ErrorHandlerToggleButton.svelte +1 -4
  479. package/package/components/details/ErrorHandlerToggleButton.svelte.d.ts +5 -19
  480. package/package/components/details/ErrorHandlerToggleButtonV2.svelte +2 -6
  481. package/package/components/details/ErrorHandlerToggleButtonV2.svelte.d.ts +6 -20
  482. package/package/components/flows/CreateActionsApp.svelte +42 -18
  483. package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
  484. package/package/components/flows/FlowAssetsHandler.svelte +3 -2
  485. package/package/components/flows/FlowModuleIcon.svelte +4 -3
  486. package/package/components/flows/common/FlowCardHeader.svelte +3 -2
  487. package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
  488. package/package/components/flows/content/DynamicInputHelpBox.svelte +1 -1
  489. package/package/components/flows/content/DynamicInputHelpBox.svelte.d.ts +2 -17
  490. package/package/components/flows/content/FlowEditorPanel.svelte +14 -1
  491. package/package/components/flows/content/FlowEnvironmentVariables.svelte +128 -32
  492. package/package/components/flows/content/FlowFailureModule.svelte +2 -3
  493. package/package/components/flows/content/FlowFailureModule.svelte.d.ts +4 -18
  494. package/package/components/flows/content/FlowInputs.svelte +20 -2
  495. package/package/components/flows/content/FlowInputsQuick.svelte +21 -0
  496. package/package/components/flows/content/FlowLoop.svelte +2 -2
  497. package/package/components/flows/content/FlowModuleComponent.svelte +2 -2
  498. package/package/components/flows/content/FlowModuleMockTransitionMessage.svelte +13 -13
  499. package/package/components/flows/content/FlowModuleMockTransitionMessage.svelte.d.ts +2 -17
  500. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  501. package/package/components/flows/content/FlowPathViewer.svelte +7 -5
  502. package/package/components/flows/content/FlowPathViewer.svelte.d.ts +4 -18
  503. package/package/components/flows/content/FlowPreprocessorModule.svelte +2 -3
  504. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +4 -18
  505. package/package/components/flows/content/FlowSelectionPanel.svelte +34 -10
  506. package/package/components/flows/content/FlowSelectionPanel.svelte.d.ts +5 -0
  507. package/package/components/flows/content/FlowSettings.svelte +70 -22
  508. package/package/components/flows/content/FlowWhileLoop.svelte +2 -1
  509. package/package/components/flows/content/GenAiQuick.svelte +6 -6
  510. package/package/components/flows/content/GenAiQuick.svelte.d.ts +7 -6
  511. package/package/components/flows/content/ScriptEditorDrawer.svelte +5 -4
  512. package/package/components/flows/content/SuspendDrawer.svelte +4 -4
  513. package/package/components/flows/content/SuspendDrawer.svelte.d.ts +4 -18
  514. package/package/components/flows/flowModuleNextId.d.ts +1 -0
  515. package/package/components/flows/flowModuleNextId.js +11 -0
  516. package/package/components/flows/flowStateUtils.svelte.d.ts +1 -1
  517. package/package/components/flows/header/FlowPreviewButtons.svelte +10 -0
  518. package/package/components/flows/header/FlowYamlEditor.svelte +6 -2
  519. package/package/components/flows/map/FlowJobsMenu.svelte +4 -0
  520. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +2 -2
  521. package/package/components/flows/map/FlowModuleSchemaItem.svelte +65 -54
  522. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +2 -2
  523. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +11 -9
  524. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte.d.ts +1 -0
  525. package/package/components/flows/map/FlowModuleSchemaMap.svelte +151 -17
  526. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +3 -0
  527. package/package/components/flows/map/InsertModuleInner.svelte +46 -21
  528. package/package/components/flows/map/MapItem.svelte +22 -9
  529. package/package/components/flows/map/MapItem.svelte.d.ts +4 -3
  530. package/package/components/flows/map/VirtualItem.svelte +5 -2
  531. package/package/components/flows/multiSelectUtils.d.ts +26 -0
  532. package/package/components/flows/multiSelectUtils.js +122 -0
  533. package/package/components/flows/pickers/FlowScriptPicker.svelte +3 -0
  534. package/package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
  535. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +5 -6
  536. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +9 -8
  537. package/package/components/flows/pickers/FlowToplevelNode.svelte +2 -3
  538. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +6 -5
  539. package/package/components/flows/pickers/PickHubApp.svelte +21 -2
  540. package/package/components/flows/pickers/PickHubFlow.svelte +21 -2
  541. package/package/components/flows/pickers/PickHubScript.svelte +12 -1
  542. package/package/components/flows/pickers/PickHubScriptQuick.svelte +16 -7
  543. package/package/components/flows/pickers/TopLevelNode.svelte +2 -0
  544. package/package/components/flows/previousResults.d.ts +1 -1
  545. package/package/components/flows/propPicker/JobPickerLight.svelte +1 -1
  546. package/package/components/flows/propPicker/JobPickerLight.svelte.d.ts +4 -18
  547. package/package/components/flows/propPicker/OutputBadge.svelte +2 -2
  548. package/package/components/flows/propPicker/OutputBadge.svelte.d.ts +6 -20
  549. package/package/components/flows/propPicker/OutputPicker.svelte +1 -0
  550. package/package/components/flows/propPicker/PropPickerWrapper.svelte +0 -3
  551. package/package/components/flows/types.d.ts +2 -3
  552. package/package/components/git_sync/GitSyncContext.svelte.js +74 -41
  553. package/package/components/git_sync/GitSyncModalManager.svelte +1 -1
  554. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +2 -17
  555. package/package/components/git_sync/GitSyncRepositoryCard.svelte +34 -17
  556. package/package/components/graph/DragCoordinator.svelte +63 -0
  557. package/package/components/graph/DragCoordinator.svelte.d.ts +12 -0
  558. package/package/components/graph/DragGhost.svelte +138 -0
  559. package/package/components/graph/DragGhost.svelte.d.ts +10 -0
  560. package/package/components/graph/FlowGraphV2.svelte +85 -61
  561. package/package/components/graph/FlowGraphV2.svelte.d.ts +9 -3
  562. package/package/components/graph/MiniFlowGraph.svelte +82 -0
  563. package/package/components/graph/MiniFlowGraph.svelte.d.ts +11 -0
  564. package/package/components/graph/MoveHandleButton.svelte +47 -0
  565. package/package/components/graph/MoveHandleButton.svelte.d.ts +13 -0
  566. package/package/components/graph/SelectionBoundingBox.svelte +72 -20
  567. package/package/components/graph/SelectionBoundingBox.svelte.d.ts +7 -0
  568. package/package/components/graph/SelectionTool.svelte +3 -2
  569. package/package/components/graph/compoundLayout.d.ts +28 -0
  570. package/package/components/graph/compoundLayout.js +436 -0
  571. package/package/components/graph/graphBuilder.svelte.d.ts +9 -22
  572. package/package/components/graph/graphBuilder.svelte.js +27 -41
  573. package/package/components/graph/graphContext.d.ts +2 -0
  574. package/package/components/graph/moveManager.svelte.d.ts +74 -0
  575. package/package/components/graph/moveManager.svelte.js +176 -0
  576. package/package/components/graph/noteEditor.svelte.d.ts +0 -1
  577. package/package/components/graph/noteManager.svelte.d.ts +4 -0
  578. package/package/components/graph/noteManager.svelte.js +6 -0
  579. package/package/components/graph/noteUtils.svelte.d.ts +0 -1
  580. package/package/components/graph/noteUtils.svelte.js +0 -2
  581. package/package/components/graph/renderers/edges/BaseEdge.svelte +65 -24
  582. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +0 -1
  583. package/package/components/graph/renderers/edges/HiddenBaseEdge.svelte +1 -1
  584. package/package/components/graph/renderers/edges/HiddenBaseEdge.svelte.d.ts +4 -18
  585. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  586. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +1 -0
  587. package/package/components/graph/renderers/nodes/AssetNode.svelte +30 -27
  588. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +1 -0
  589. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +18 -14
  590. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte.d.ts +1 -0
  591. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  592. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  593. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  594. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +1 -1
  595. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  596. package/package/components/graph/renderers/nodes/ModuleNode.svelte +50 -9
  597. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -0
  598. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +2 -2
  599. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +1 -0
  600. package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -7
  601. package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +4 -1
  602. package/package/components/graph/renderers/nodes/NoteNode.svelte +2 -2
  603. package/package/components/graph/renderers/nodes/SubflowBound.svelte +1 -1
  604. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  605. package/package/components/graph/renderers/triggers/TriggerButton.svelte +6 -4
  606. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +5 -29
  607. package/package/components/graph/renderers/triggers/TriggerCount.svelte +1 -1
  608. package/package/components/graph/renderers/triggers/TriggerCount.svelte.d.ts +4 -18
  609. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -6
  610. package/package/components/graph/selectionUtils.svelte.d.ts +1 -0
  611. package/package/components/graph/selectionUtils.svelte.js +11 -1
  612. package/package/components/graph/util.d.ts +1 -4
  613. package/package/components/graph/util.js +3 -6
  614. package/package/components/graph/wacToFlow.d.ts +4 -0
  615. package/package/components/graph/wacToFlow.js +14 -0
  616. package/package/components/home/FlowIcon.svelte +2 -2
  617. package/package/components/home/FlowIcon.svelte.d.ts +5 -19
  618. package/package/components/home/ItemsList.svelte +3 -3
  619. package/package/components/home/ListFiltersQuick.svelte +2 -4
  620. package/package/components/home/ListFiltersQuick.svelte.d.ts +10 -9
  621. package/package/components/icons/AssetGenericIcon.svelte +3 -1
  622. package/package/components/icons/ClaudeIcon.svelte +20 -0
  623. package/package/components/icons/ClaudeIcon.svelte.d.ts +7 -0
  624. package/package/components/icons/RubyIcon.svelte +2 -2
  625. package/package/components/icons/WindmillIcon2.svelte +0 -1
  626. package/package/components/instanceSettings/IndexerMemorySettings.svelte +153 -20
  627. package/package/components/instanceSettings.js +44 -6
  628. package/package/components/meltComponents/MeltButton.svelte +5 -10
  629. package/package/components/meltComponents/MeltButton.svelte.d.ts +12 -35
  630. package/package/components/meltComponents/Menu.svelte +6 -6
  631. package/package/components/meltComponents/Menu.svelte.d.ts +2 -2
  632. package/package/components/meltComponents/Menubar.svelte +3 -2
  633. package/package/components/meltComponents/Menubar.svelte.d.ts +7 -0
  634. package/package/components/meltComponents/Popover.svelte +49 -73
  635. package/package/components/meltComponents/Popover.svelte.d.ts +40 -44
  636. package/package/components/meltComponents/SideBarTab.svelte +3 -2
  637. package/package/components/meltComponents/Tooltip.svelte +15 -21
  638. package/package/components/meltComponents/Tooltip.svelte.d.ts +16 -39
  639. package/package/components/propertyPicker/ObjectViewer.svelte +253 -165
  640. package/package/components/propertyPicker/ObjectViewerWrapper.svelte +16 -27
  641. package/package/components/propertyPicker/ObjectViewerWrapper.svelte.d.ts +16 -15
  642. package/package/components/propertyPicker/PropPicker.svelte +21 -53
  643. package/package/components/propertyPicker/PropPicker.svelte.d.ts +0 -1
  644. package/package/components/propertyPicker/PropPickerResult.svelte +1 -5
  645. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +9 -8
  646. package/package/components/raw_apps/DefaultDatabaseSelector.svelte +40 -36
  647. package/package/components/raw_apps/FileTreeNode.svelte +2 -2
  648. package/package/components/raw_apps/RawAppEditorHeader.svelte +14 -1
  649. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
  650. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +4 -4
  651. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +0 -1
  652. package/package/components/raw_apps/RunnableRow.svelte +2 -2
  653. package/package/components/raw_apps/fileTreeUtils.js +2 -3
  654. package/package/components/raw_apps/utils.js +6 -1
  655. package/package/components/recording/FlowRecordingReplay.svelte +210 -0
  656. package/package/components/recording/FlowRecordingReplay.svelte.d.ts +7 -0
  657. package/package/components/recording/ScriptRecordingReplay.svelte +210 -0
  658. package/package/components/recording/ScriptRecordingReplay.svelte.d.ts +7 -0
  659. package/package/components/recording/flowRecording.svelte.d.ts +22 -0
  660. package/package/components/recording/flowRecording.svelte.js +205 -0
  661. package/package/components/recording/scriptRecording.svelte.d.ts +9 -0
  662. package/package/components/recording/scriptRecording.svelte.js +88 -0
  663. package/package/components/recording/types.d.ts +39 -0
  664. package/package/components/recording/types.js +1 -0
  665. package/package/components/resources/resourcesFilter.d.ts +4 -0
  666. package/package/components/resources/resourcesFilter.js +4 -0
  667. package/package/components/runs/JobRunsPreview.svelte +8 -1
  668. package/package/components/runs/MobileFilters.svelte +15 -10
  669. package/package/components/runs/MobileFilters.svelte.d.ts +4 -18
  670. package/package/components/runs/PreprocessedArgsDisplay.svelte +2 -10
  671. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +4 -18
  672. package/package/components/runs/QueuePopover.svelte +2 -2
  673. package/package/components/runs/QueuePopover.svelte.d.ts +4 -18
  674. package/package/components/runs/RunBadges.svelte +2 -2
  675. package/package/components/runs/RunsTable.svelte +9 -4
  676. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  677. package/package/components/runs/TimeframeSelect.svelte +2 -32
  678. package/package/components/runs/TimeframeSelect.svelte.d.ts +2 -20
  679. package/package/components/runs/runsFilter.d.ts +18 -2
  680. package/package/components/runs/runsFilter.js +20 -4
  681. package/package/components/runs/timeframes.d.ts +20 -0
  682. package/package/components/runs/timeframes.js +33 -0
  683. package/package/components/runs/useJobsLoader.svelte.d.ts +9 -2
  684. package/package/components/runs/useJobsLoader.svelte.js +189 -47
  685. package/package/components/schedules/schedulesFilter.d.ts +4 -0
  686. package/package/components/schedules/schedulesFilter.js +4 -0
  687. package/package/components/schema/AddProperty.svelte +1 -1
  688. package/package/components/schema/AddProperty.svelte.d.ts +5 -6
  689. package/package/components/schema/AddPropertyForm.svelte +1 -1
  690. package/package/components/schema/AddPropertyForm.svelte.d.ts +1 -1
  691. package/package/components/schema/EditableSchemaSdkWrapper.svelte +3 -2
  692. package/package/components/schema/FlowPropertyEditor.svelte +1 -5
  693. package/package/components/schema/RunningJobSchemaPicker.svelte +31 -30
  694. package/package/components/schema/RunningJobSchemaPicker.svelte.d.ts +8 -7
  695. package/package/components/schema/SchemaPickerRow.svelte +3 -3
  696. package/package/components/scriptEditor/LogPanel.svelte +11 -2
  697. package/package/components/script_builder.d.ts +1 -1
  698. package/package/components/search/QuickMenuItem.svelte +2 -2
  699. package/package/components/search/RunsSearch.svelte +5 -1
  700. package/package/components/select/GenericDropdown.svelte +5 -2
  701. package/package/components/select/MultiSelect.svelte +1 -0
  702. package/package/components/select/Select.svelte +1 -0
  703. package/package/components/select/SelectDropdown.svelte +1 -1
  704. package/package/components/settings/ChangeWorkspaceId.svelte +14 -9
  705. package/package/components/settings/ChangeWorkspaceId.svelte.d.ts +4 -18
  706. package/package/components/settings/CreateToken.svelte +8 -20
  707. package/package/components/settings/PremiumInfo.svelte +36 -32
  708. package/package/components/settings/PremiumInfo.svelte.d.ts +4 -18
  709. package/package/components/settings/TokensTable.svelte +74 -14
  710. package/package/components/settings/WorkspaceUserSettings.svelte +0 -1
  711. package/package/components/sidebar/CriticalAlertModal.svelte +33 -30
  712. package/package/components/sidebar/CriticalAlertModal.svelte.d.ts +4 -18
  713. package/package/components/sidebar/CriticalAlertTable.svelte +4 -13
  714. package/package/components/sidebar/CriticalAlertTable.svelte.d.ts +4 -18
  715. package/package/components/sidebar/DarkModeToggle.svelte +2 -3
  716. package/package/components/sidebar/DarkModeToggle.svelte.d.ts +5 -20
  717. package/package/components/sidebar/FavoriteMenu.svelte +1 -1
  718. package/package/components/sidebar/MenuButton.svelte +2 -2
  719. package/package/components/sidebar/MultiplayerMenu.svelte +12 -7
  720. package/package/components/sidebar/MultiplayerMenu.svelte.d.ts +2 -17
  721. package/package/components/sidebar/SideBarNotification.svelte +1 -2
  722. package/package/components/sidebar/SideBarNotification.svelte.d.ts +4 -18
  723. package/package/components/sidebar/SidebarContent.svelte +3 -3
  724. package/package/components/sidebar/WorkspaceMenu.svelte +4 -4
  725. package/package/components/splitPanes/AnimatedPane.svelte +2 -2
  726. package/package/components/splitPanes/SplitPanesWrapper.svelte +11 -15
  727. package/package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +12 -28
  728. package/package/components/sqlTypeService.d.ts +2 -2
  729. package/package/components/sqlTypeService.js +4 -8
  730. package/package/components/table/Cell.svelte +2 -2
  731. package/package/components/table/DataTable.svelte +1 -1
  732. package/package/components/table/DownloadCsv.svelte +1 -2
  733. package/package/components/table/DownloadCsv.svelte.d.ts +4 -18
  734. package/package/components/table/Head.svelte +6 -2
  735. package/package/components/table/Head.svelte.d.ts +6 -27
  736. package/package/components/table/Row.svelte +6 -10
  737. package/package/components/table/Row.svelte.d.ts +11 -18
  738. package/package/components/triggers/CaptureIcon.svelte +1 -2
  739. package/package/components/triggers/CaptureIcon.svelte.d.ts +5 -19
  740. package/package/components/triggers/TestTriggerConnection.svelte +1 -4
  741. package/package/components/triggers/TestTriggerConnection.svelte.d.ts +6 -21
  742. package/package/components/triggers/TriggerAdvancedBadges.svelte +16 -0
  743. package/package/components/triggers/TriggerAdvancedBadges.svelte.d.ts +12 -0
  744. package/package/components/triggers/TriggerEditorToolbar.svelte +11 -9
  745. package/package/components/triggers/TriggerTokens.svelte +8 -7
  746. package/package/components/triggers/TriggerTokens.svelte.d.ts +6 -21
  747. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +1 -1
  748. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +7 -2
  749. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +9 -2
  750. package/package/components/triggers/http/RouteCapture.svelte +1 -1
  751. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  752. package/package/components/triggers/http/RouteEditorInner.svelte +10 -1
  753. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +119 -5
  754. package/package/components/triggers/kafka/KafkaTriggersConfigSection.svelte +1 -0
  755. package/package/components/triggers/kafka/utils.js +2 -0
  756. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +12 -3
  757. package/package/components/triggers/native/services/google/GoogleDrivePicker.svelte.d.ts +1 -1
  758. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +7 -2
  759. package/package/components/triggers/postgres/CheckPostgresRequirement.svelte +2 -4
  760. package/package/components/triggers/postgres/CheckPostgresRequirement.svelte.d.ts +4 -18
  761. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +10 -4
  762. package/package/components/triggers/postgres/PublicationPicker.svelte +9 -12
  763. package/package/components/triggers/postgres/PublicationPicker.svelte.d.ts +4 -18
  764. package/package/components/triggers/postgres/SlotPicker.svelte +4 -7
  765. package/package/components/triggers/postgres/SlotPicker.svelte.d.ts +4 -18
  766. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +10 -0
  767. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +6 -1
  768. package/package/components/triggers/testingBadge.svelte +3 -1
  769. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +1 -1
  770. package/package/components/triggers/websocket/WebsocketCapture.svelte +15 -13
  771. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +10 -4
  772. package/package/components/tutorials/Tutorial.svelte +2 -6
  773. package/package/components/tutorials/Tutorial.svelte.d.ts +14 -23
  774. package/package/components/tutorials/TutorialControls.svelte +1 -2
  775. package/package/components/tutorials/TutorialControls.svelte.d.ts +6 -5
  776. package/package/components/tutorials/TutorialWrapper.svelte +3 -2
  777. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +2 -3
  778. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte.d.ts +6 -6
  779. package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -3
  780. package/package/components/tutorials/app/ConnectionTutorial.svelte.d.ts +6 -6
  781. package/package/components/tutorials/app/ExpressionEvaluationTutorial.svelte +2 -3
  782. package/package/components/tutorials/app/ExpressionEvaluationTutorial.svelte.d.ts +6 -6
  783. package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +3 -3
  784. package/package/components/tutorials/workspace/WorkspaceOnboardingTutorial.svelte +3 -3
  785. package/package/components/variables/variablesFilter.d.ts +4 -0
  786. package/package/components/variables/variablesFilter.js +4 -0
  787. package/package/components/wizards/AppPicker.svelte +3 -3
  788. package/package/components/wizards/AppPicker.svelte.d.ts +4 -18
  789. package/package/components/wizards/DBExplorerWizard.svelte +1 -0
  790. package/package/components/workspace/WorkspaceCard.svelte +3 -2
  791. package/package/components/workspaceSettings/CreateWorkspace.svelte +3 -3
  792. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +1 -3
  793. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte.d.ts +0 -2
  794. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +3 -3
  795. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte.d.ts +0 -1
  796. package/package/components/workspaceSettings/DataTableSettings.svelte +7 -12
  797. package/package/components/workspaceSettings/DucklakeSettings.svelte +131 -167
  798. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +12 -2
  799. package/package/components/workspaceSettings/RulesetEditor.svelte +24 -12
  800. package/package/components/workspaceSettings/StorageSettings.svelte +68 -15
  801. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +10 -9
  802. package/package/gen/core/OpenAPI.js +1 -1
  803. package/package/gen/schemas.gen.d.ts +257 -9
  804. package/package/gen/schemas.gen.js +257 -9
  805. package/package/gen/services.gen.d.ts +165 -58
  806. package/package/gen/services.gen.js +278 -64
  807. package/package/gen/types.gen.d.ts +779 -128
  808. package/package/hub.d.ts +0 -1
  809. package/package/hubPaths.json +24 -22
  810. package/package/infer.js +64 -14
  811. package/package/infer.svelte.js +88 -42
  812. package/package/script_helpers.d.ts +8 -5
  813. package/package/script_helpers.js +64 -21
  814. package/package/stores.d.ts +3 -1
  815. package/package/stores.js +2 -3
  816. package/package/svelte5Utils.svelte.d.ts +6 -0
  817. package/package/svelte5Utils.svelte.js +6 -0
  818. package/package/svelte5UtilsKit.svelte.js +3 -2
  819. package/package/system_prompts/prompts.d.ts +20 -20
  820. package/package/system_prompts/prompts.js +814 -540
  821. package/package/templates/claude_sandbox.ts.template +85 -0
  822. package/package/utils/editInFork.d.ts +3 -0
  823. package/package/utils/editInFork.js +19 -0
  824. package/package/utils.js +2 -2
  825. package/package/utils_deployable.d.ts +233 -9
  826. package/package/utils_deployable.js +64 -10
  827. package/package/utils_workspace_deploy.d.ts +31 -0
  828. package/package/utils_workspace_deploy.js +449 -0
  829. package/package/workspace_settings.d.ts +2 -1
  830. package/package/workspace_settings.js +28 -0
  831. package/package.json +34 -15
@@ -1,17 +1,24 @@
1
- <script lang="ts">import { AlertTriangle, ArrowDown, ArrowDownRight, ArrowRight, ArrowUp, ArrowUpRight, Building, DiffIcon, GitFork, Loader2 } from 'lucide-svelte';
1
+ <script lang="ts">import { AlertTriangle, ArrowDown, ArrowDownRight, ArrowRight, ArrowUp, ArrowUpRight, Building, DiffIcon, GitFork, Loader2, Trash2, Upload } from 'lucide-svelte';
2
2
  import { Alert, Badge } from './common';
3
- import { AppService, FlowService, FolderService, ResourceService, ScheduleService, ScriptService, VariableService, WorkspaceService } from '../gen';
3
+ import { AppService, EmailTriggerService, FlowService, FolderService, GcpTriggerService, HttpTriggerService, KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, ScriptService, SqsTriggerService, UserService, WebsocketTriggerService, WorkspaceService } from '../gen';
4
4
  import Button from './common/button/Button.svelte';
5
+ import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
6
+ import Row from './common/table/Row.svelte';
5
7
  import DiffDrawer from './DiffDrawer.svelte';
8
+ import DeployWorkspaceDrawer from './DeployWorkspaceDrawer.svelte';
6
9
  import ParentWorkspaceProtectionAlert from './ParentWorkspaceProtectionAlert.svelte';
7
- import { getAllModules } from './flows/flowExplorer';
8
10
  import { userWorkspaces, workspaceStore } from '../stores';
9
- import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
10
- import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
11
- import Row from './common/table/Row.svelte';
12
- import { sendUserToast } from '../toast';
11
+ import { deployItem, getItemValue, getOnBehalfOfEmail } from '../utils_workspace_deploy';
13
12
  import Tooltip from './Tooltip.svelte';
13
+ import OnBehalfOfSelector, { needsOnBehalfOfSelection } from './OnBehalfOfSelector.svelte';
14
+ import { sendUserToast } from '../toast';
14
15
  import { deepEqual } from 'fast-equals';
16
+ import WorkspaceDeployLayout from './WorkspaceDeployLayout.svelte';
17
+ import { triggerDisplayNamesMap, triggerKindToTriggerType } from './triggers/utils';
18
+ import { getEmailAddress, getEmailDomain } from './triggers/email/utils';
19
+ import { base } from '../base';
20
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
21
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
15
22
  let { currentWorkspaceId, parentWorkspaceId, comparison } = $props();
16
23
  let currentWorkspaceInfo = $derived($userWorkspaces.find((w) => w.id == currentWorkspaceId));
17
24
  let parentWorkspaceInfo = $derived($userWorkspaces.find((w) => w.id == parentWorkspaceId));
@@ -19,6 +26,9 @@ let mergeIntoParent = $state(true);
19
26
  let deploying = $state(false);
20
27
  let hasAutoSelected = $state(false);
21
28
  let canDeployToParent = $state(true);
29
+ let canPreserveInParent = $state(false);
30
+ let canPreserveInCurrent = $state(false);
31
+ let canPreserveOnBehalfOf = $derived(mergeIntoParent ? canPreserveInParent : canPreserveInCurrent);
22
32
  let selectableDiffs = $derived(comparison?.diffs.filter((diff) => {
23
33
  if (mergeIntoParent) {
24
34
  return diff.ahead > 0;
@@ -40,6 +50,12 @@ let itemsWithAheadChanges = $derived(comparison?.diffs.filter((diff) => {
40
50
  let hasBehindChanges = $derived(mergeIntoParent && itemsWithBehindChanges.length > 0);
41
51
  let hasAheadChanges = $derived(mergeIntoParent && itemsWithAheadChanges.length > 0);
42
52
  let summaryCache = $state({});
53
+ // On-behalf-of tracking for flows and scripts
54
+ // Source workspace on_behalf_of emails (keyed by workspace/kind:path)
55
+ let onBehalfOfInfo = $state({});
56
+ let onBehalfOfChoice = $state({});
57
+ let customOnBehalfOfEmails = $state({});
58
+ let deployTargetWorkspace = $derived(mergeIntoParent ? parentWorkspaceId : currentWorkspaceId);
43
59
  function getItemKey(diff) {
44
60
  return `${diff.kind}:${diff.path}`;
45
61
  }
@@ -89,84 +105,52 @@ async function fetchSummaries(diffs) {
89
105
  };
90
106
  }
91
107
  }
92
- async function getValue(kind, path, workspace) {
93
- try {
94
- if (kind == 'flow') {
95
- const flow = await FlowService.getFlowByPath({
96
- workspace: workspace,
97
- path: path
98
- });
99
- getAllModules(flow.value.modules).forEach((x) => {
100
- if (x.value.type == 'script' && x.value.hash != undefined) {
101
- x.value.hash = undefined;
102
- }
103
- });
104
- return { summary: flow.summary, description: flow.description, value: flow.value };
105
- }
106
- else if (kind == 'script') {
107
- const script = await ScriptService.getScriptByPath({
108
- workspace: workspace,
109
- path: path
110
- });
111
- return {
112
- content: script.content,
113
- lock: script.lock,
114
- schema: script.schema,
115
- summary: script.summary,
116
- language: script.language
117
- };
118
- }
119
- else if (kind == 'app') {
120
- const app = await AppService.getAppByPath({
121
- workspace: workspace,
122
- path: path
123
- });
124
- return app;
125
- }
126
- else if (kind == 'variable') {
127
- const variable = await VariableService.getVariable({
128
- workspace: workspace,
129
- path: path,
130
- decryptSecret: true
131
- });
132
- return variable.value;
133
- }
134
- else if (kind == 'resource') {
135
- const resource = await ResourceService.getResource({
136
- workspace: workspace,
137
- path: path
138
- });
139
- return resource.value;
140
- }
141
- else if (kind == 'resource_type') {
142
- const resource = await ResourceService.getResourceType({
143
- workspace: workspace,
144
- path: path
145
- });
146
- return resource.schema;
147
- }
148
- else if (kind == 'folder') {
149
- const folder = await FolderService.getFolder({
150
- workspace: workspace,
151
- name: path
152
- });
153
- return {
154
- name: folder.name
155
- };
156
- // } else if (kind == 'trigger') {
157
- // if (additionalInformation?.triggers) {
158
- // return await getTriggerValue(additionalInformation.triggers.kind, path, workspace)
159
- // } else {
160
- // throw new Error(`Missing trigger information`)
161
- // }
162
- }
163
- else {
164
- throw new Error(`Unknown kind ${kind}`);
108
+ async function fetchOnBehalfOfInfo(diffs) {
109
+ const flowsAndScripts = diffs.filter((d) => ['flow', 'script', 'app'].includes(d.kind));
110
+ for (const diff of flowsAndScripts) {
111
+ for (const workspace of [currentWorkspaceId, parentWorkspaceId]) {
112
+ const workspacedKey = getWorkspacedKey(workspace, getItemKey(diff));
113
+ if (onBehalfOfInfo[workspacedKey] !== undefined)
114
+ continue;
115
+ try {
116
+ onBehalfOfInfo[workspacedKey] = await getOnBehalfOfEmail(diff.kind, diff.path, workspace);
117
+ }
118
+ catch {
119
+ onBehalfOfInfo[workspacedKey] = undefined;
120
+ }
165
121
  }
166
122
  }
167
- catch {
168
- return {};
169
- }
123
+ }
124
+ // Get source workspace email for an item
125
+ function getSourceEmail(itemKey) {
126
+ const sourceWorkspace = mergeIntoParent ? currentWorkspaceId : parentWorkspaceId;
127
+ return onBehalfOfInfo[getWorkspacedKey(sourceWorkspace, itemKey)];
128
+ }
129
+ // Get target workspace email for an item (existing item in destination)
130
+ function getTargetEmail(itemKey) {
131
+ const targetWorkspace = mergeIntoParent ? parentWorkspaceId : currentWorkspaceId;
132
+ return onBehalfOfInfo[getWorkspacedKey(targetWorkspace, itemKey)];
133
+ }
134
+ // Check if an item needs on_behalf_of selection
135
+ function itemNeedsOnBehalfOfSelection(itemKey, kind) {
136
+ return needsOnBehalfOfSelection(kind, getSourceEmail(itemKey));
137
+ }
138
+ // Check if all required on_behalf_of selections are made
139
+ let hasUnselectedOnBehalfOf = $derived(selectedItems.some((itemKey) => {
140
+ const diff = selectableDiffs.find((d) => getItemKey(d) === itemKey);
141
+ if (!diff)
142
+ return false;
143
+ return (itemNeedsOnBehalfOfSelection(itemKey, diff.kind) && onBehalfOfChoice[itemKey] === undefined);
144
+ }));
145
+ // Get the email to use for deployment based on user's choice
146
+ function getOnBehalfOfEmailForDeploy(itemKey) {
147
+ const choice = onBehalfOfChoice[itemKey];
148
+ if (choice === 'target')
149
+ return getTargetEmail(itemKey);
150
+ if (choice === 'custom')
151
+ return customOnBehalfOfEmails[itemKey];
152
+ // 'me' or undefined = don't pass, backend will use deploying user's email
153
+ return undefined;
170
154
  }
171
155
  let diffDrawer = $state(undefined);
172
156
  let isFlow = $state(true);
@@ -177,8 +161,8 @@ async function showDiff(kind, path) {
177
161
  isFlow = kind == 'flow';
178
162
  diffDrawer?.openDrawer();
179
163
  let values = await Promise.all([
180
- getValue(kind, path, workspaceTo),
181
- getValue(kind, path, workspaceFrom)
164
+ getItemValue(kind, path, workspaceTo),
165
+ getItemValue(kind, path, workspaceFrom)
182
166
  ]);
183
167
  diffDrawer?.setDiff({
184
168
  mode: 'simple',
@@ -203,344 +187,25 @@ async function selectAllNonConflicts() {
203
187
  .map((d) => getItemKey(d))
204
188
  .filter((k) => !(deploymentStatus[k]?.status == 'deployed'));
205
189
  }
206
- async function checkAlreadyExists(kind, path, workspace) {
207
- let exists;
208
- if (kind == 'flow') {
209
- exists = await FlowService.existsFlowByPath({
210
- workspace: workspace,
211
- path: path
212
- });
213
- }
214
- else if (kind == 'script') {
215
- exists = await ScriptService.existsScriptByPath({
216
- workspace: workspace,
217
- path: path
218
- });
219
- }
220
- else if (kind == 'app') {
221
- exists = await AppService.existsApp({
222
- workspace: workspace,
223
- path: path
224
- });
225
- }
226
- else if (kind == 'variable') {
227
- exists = await VariableService.existsVariable({
228
- workspace: workspace,
229
- path: path
230
- });
231
- }
232
- else if (kind == 'resource') {
233
- exists = await ResourceService.existsResource({
234
- workspace: workspace,
235
- path: path
236
- });
237
- }
238
- else if (kind == 'schedule') {
239
- exists = await ScheduleService.existsSchedule({
240
- workspace: workspace,
241
- path: path
242
- });
243
- }
244
- else if (kind == 'resource_type') {
245
- exists = await ResourceService.existsResourceType({
246
- workspace: workspace,
247
- path: path
248
- });
249
- }
250
- else if (kind == 'folder') {
251
- exists = await FolderService.existsFolder({
252
- workspace: workspace,
253
- name: path
254
- });
255
- // } else if (kind === 'trigger') {
256
- // const triggersKind: TriggerKind[] = [
257
- // 'kafka',
258
- // 'mqtt',
259
- // 'nats',
260
- // 'postgres',
261
- // 'routes',
262
- // 'schedules',
263
- // 'sqs',
264
- // 'websockets',
265
- // 'gcp'
266
- // ]
267
- // if (
268
- // additionalInformation?.triggers &&
269
- // triggersKind.includes(additionalInformation.triggers.kind)
270
- // ) {
271
- // exists = await existsTrigger(
272
- // { workspace: workspace, path },
273
- // additionalInformation.triggers.kind
274
- // )
275
- // } else {
276
- // throw new Error(
277
- // `Unexpected triggers kind, expected one of: '${triggersKind.join(', ')}' got: ${
278
- // additionalInformation?.triggers?.kind
279
- // }`
280
- // )
281
- // }
282
- }
283
- else {
284
- throw new Error(`Unknown kind ${kind}`);
285
- }
286
- return exists;
287
- }
288
190
  const deploymentStatus = $state({});
289
- async function deploy(kind, path, workspaceToDeployTo, workspaceFrom) {
290
- const statusPath = `${kind}:${path}`;
191
+ function getWorkspacedKey(workspace, key) {
192
+ return `${workspace}/${key}`;
193
+ }
194
+ async function deploy(kind, path, workspaceToDeployTo, workspaceFrom, statusPath) {
291
195
  deploymentStatus[statusPath] = { status: 'loading' };
292
- // await sleep(1000)
293
- // if (Math.random() > 0.5) {
294
- // deploymentStatus[statusPath] = {status: 'failed'}
295
- // } else {
296
- // deploymentStatus[statusPath] = {status: 'deployed'}
297
- // }
298
- // return
299
- try {
300
- let alreadyExists = await checkAlreadyExists(kind, path, workspaceToDeployTo);
301
- if (kind == 'flow') {
302
- const flow = await FlowService.getFlowByPath({
303
- workspace: workspaceFrom,
304
- path: path
305
- });
306
- getAllModules(flow.value.modules).forEach((x) => {
307
- if (x.value.type == 'script' && x.value.hash != undefined) {
308
- x.value.hash = undefined;
309
- }
310
- });
311
- if (alreadyExists) {
312
- await FlowService.updateFlow({
313
- workspace: workspaceToDeployTo,
314
- path: path,
315
- requestBody: {
316
- ...flow
317
- }
318
- });
319
- }
320
- else {
321
- await FlowService.createFlow({
322
- workspace: workspaceToDeployTo,
323
- requestBody: {
324
- ...flow
325
- }
326
- });
327
- }
328
- }
329
- else if (kind == 'script') {
330
- const script = await ScriptService.getScriptByPath({
331
- workspace: workspaceFrom,
332
- path: path
333
- });
334
- await ScriptService.createScript({
335
- workspace: workspaceToDeployTo,
336
- requestBody: {
337
- ...script,
338
- lock: script.lock,
339
- parent_hash: alreadyExists
340
- ? (await ScriptService.getScriptByPath({
341
- workspace: workspaceToDeployTo,
342
- path: path
343
- })).hash
344
- : undefined
345
- }
346
- });
347
- }
348
- else if (kind == 'app') {
349
- const app = await AppService.getAppByPath({
350
- workspace: workspaceFrom,
351
- path: path
352
- });
353
- if (alreadyExists) {
354
- if (app.raw_app) {
355
- const secret = await AppService.getPublicSecretOfLatestVersionOfApp({
356
- workspace: workspaceFrom,
357
- path: app.path
358
- });
359
- const js = await AppService.getRawAppData({
360
- secretWithExtension: `${secret}.js`,
361
- workspace: workspaceFrom
362
- });
363
- const css = await AppService.getRawAppData({
364
- secretWithExtension: `${secret}.css`,
365
- workspace: workspaceFrom
366
- });
367
- await AppService.updateAppRaw({
368
- workspace: workspaceToDeployTo,
369
- path: path,
370
- formData: {
371
- app,
372
- css,
373
- js
374
- }
375
- });
376
- }
377
- else {
378
- await AppService.updateApp({
379
- workspace: workspaceToDeployTo,
380
- path: path,
381
- requestBody: {
382
- ...app
383
- }
384
- });
385
- }
386
- }
387
- else {
388
- if (app.raw_app) {
389
- const secret = await AppService.getPublicSecretOfLatestVersionOfApp({
390
- workspace: workspaceFrom,
391
- path: app.path
392
- });
393
- const js = await AppService.getRawAppData({
394
- secretWithExtension: `${secret}.js`,
395
- workspace: workspaceFrom
396
- });
397
- const css = await AppService.getRawAppData({
398
- secretWithExtension: `${secret}.css`,
399
- workspace: workspaceFrom
400
- });
401
- await AppService.createAppRaw({
402
- workspace: workspaceToDeployTo,
403
- formData: {
404
- app,
405
- css,
406
- js
407
- }
408
- });
409
- }
410
- else {
411
- await AppService.createApp({
412
- workspace: workspaceToDeployTo,
413
- requestBody: {
414
- ...app
415
- }
416
- });
417
- }
418
- }
419
- }
420
- else if (kind == 'variable') {
421
- const variable = await VariableService.getVariable({
422
- workspace: workspaceFrom,
423
- path: path,
424
- decryptSecret: true
425
- });
426
- if (alreadyExists) {
427
- await VariableService.updateVariable({
428
- workspace: workspaceToDeployTo,
429
- path: path,
430
- requestBody: {
431
- path: path,
432
- value: variable.value ?? '',
433
- is_secret: variable.is_secret,
434
- description: variable.description ?? ''
435
- },
436
- alreadyEncrypted: false
437
- });
438
- }
439
- else {
440
- await VariableService.createVariable({
441
- workspace: workspaceToDeployTo,
442
- requestBody: {
443
- path: path,
444
- value: variable.value ?? '',
445
- is_secret: variable.is_secret,
446
- description: variable.description ?? ''
447
- }
448
- });
449
- }
450
- }
451
- else if (kind == 'resource') {
452
- const resource = await ResourceService.getResource({
453
- workspace: workspaceFrom,
454
- path: path
455
- });
456
- if (alreadyExists) {
457
- await ResourceService.updateResource({
458
- workspace: workspaceToDeployTo,
459
- path: path,
460
- requestBody: {
461
- path: path,
462
- value: resource.value ?? '',
463
- description: resource.description ?? ''
464
- }
465
- });
466
- }
467
- else {
468
- await ResourceService.createResource({
469
- workspace: workspaceToDeployTo,
470
- requestBody: {
471
- path: path,
472
- value: resource.value ?? '',
473
- resource_type: resource.resource_type,
474
- description: resource.description ?? ''
475
- }
476
- });
477
- }
478
- }
479
- else if (kind == 'resource_type') {
480
- const resource = await ResourceService.getResourceType({
481
- workspace: workspaceFrom,
482
- path: path
483
- });
484
- if (alreadyExists) {
485
- await ResourceService.updateResourceType({
486
- workspace: workspaceToDeployTo,
487
- path: path,
488
- requestBody: {
489
- schema: resource.schema,
490
- description: resource.description ?? ''
491
- }
492
- });
493
- }
494
- else {
495
- await ResourceService.createResourceType({
496
- workspace: workspaceToDeployTo,
497
- requestBody: {
498
- description: resource.description ?? '',
499
- schema: resource.schema,
500
- name: resource.name
501
- }
502
- });
503
- }
504
- }
505
- else if (kind == 'folder') {
506
- await FolderService.createFolder({
507
- workspace: workspaceToDeployTo,
508
- requestBody: {
509
- name: path
510
- }
511
- });
512
- // } else if (kind === 'trigger') {
513
- // if (additionalInformation?.triggers) {
514
- // const { data, createFn, updateFn } = await getTriggersDeployData(
515
- // additionalInformation.triggers.kind,
516
- // path,
517
- // workspaceFrom
518
- // )
519
- // if (alreadyExists) {
520
- // await updateFn({
521
- // path,
522
- // workspace: workspaceToDeployTo,
523
- // requestBody: data
524
- // } as any)
525
- // } else {
526
- // await createFn({
527
- // workspace: workspaceToDeployTo,
528
- // requestBody: data
529
- // } as any)
530
- // }
531
- // } else {
532
- // throw new Error('Missing triggers kind')
533
- // }
534
- }
535
- else {
536
- throw new Error(`Unknown kind ${kind}`);
537
- }
538
- // allAlreadyExists[statusPath] = true
196
+ const result = await deployItem({
197
+ kind,
198
+ path,
199
+ workspaceFrom,
200
+ workspaceTo: workspaceToDeployTo,
201
+ onBehalfOfEmail: getOnBehalfOfEmailForDeploy(statusPath)
202
+ });
203
+ if (result.success) {
539
204
  deploymentStatus[statusPath] = { status: 'deployed' };
540
205
  }
541
- catch (e) {
542
- deploymentStatus[statusPath] = { status: 'failed', error: e.body || e.message };
543
- sendUserToast(`Failed to deploy ${statusPath}: ${e.body || e.message}`);
206
+ else {
207
+ deploymentStatus[statusPath] = { status: 'failed', error: result.error };
208
+ sendUserToast(`Failed to deploy ${statusPath}: ${result.error}`);
544
209
  }
545
210
  }
546
211
  let deploymentErrorMessage = $state('');
@@ -582,10 +247,10 @@ async function deployChanges() {
582
247
  continue;
583
248
  }
584
249
  if (mergeIntoParent) {
585
- await deploy(diff.kind, diff.path, parent, current);
250
+ await deploy(diff.kind, diff.path, parent, current, itemKey);
586
251
  }
587
252
  else {
588
- await deploy(diff.kind, diff.path, current, parent);
253
+ await deploy(diff.kind, diff.path, current, parent, itemKey);
589
254
  }
590
255
  }
591
256
  deploying = false;
@@ -613,10 +278,35 @@ function toggleDeploymentDirection(v) {
613
278
  mergeIntoParent = v == 'deploy_to';
614
279
  selectDefault();
615
280
  }
616
- // Fetch summaries when comparison data loads
281
+ // Fetch user permissions for both workspaces
282
+ $effect(() => {
283
+ ;
284
+ [currentWorkspaceId, parentWorkspaceId];
285
+ async function fetchPermissions() {
286
+ try {
287
+ const parentUser = await UserService.whoami({ workspace: parentWorkspaceId });
288
+ canPreserveInParent =
289
+ parentUser.is_admin || parentUser.groups?.includes('wm_deployers') || false;
290
+ }
291
+ catch {
292
+ canPreserveInParent = false;
293
+ }
294
+ try {
295
+ const currentUser = await UserService.whoami({ workspace: currentWorkspaceId });
296
+ canPreserveInCurrent =
297
+ currentUser.is_admin || currentUser.groups?.includes('wm_deployers') || false;
298
+ }
299
+ catch {
300
+ canPreserveInCurrent = false;
301
+ }
302
+ }
303
+ fetchPermissions();
304
+ });
305
+ // Fetch summaries and on_behalf_of_email when comparison data loads
617
306
  $effect(() => {
618
307
  if (comparison?.diffs) {
619
308
  fetchSummaries(comparison.diffs);
309
+ fetchOnBehalfOfInfo(comparison.diffs);
620
310
  }
621
311
  });
622
312
  // Auto-select items on initial load
@@ -632,24 +322,247 @@ $effect(() => {
632
322
  [selectedItems, mergeIntoParent];
633
323
  allowBehindChangesOverride = false;
634
324
  });
325
+ // Transform diffs to deployable item format for the shared layout
326
+ let deployableItems = $derived((comparison?.diffs ?? [])
327
+ .filter((diff) => {
328
+ const key = getItemKey(diff);
329
+ const isSelectable = selectableDiffs.includes(diff);
330
+ const isDeployedAndIrrelevant = deploymentStatus[key]?.status === 'deployed' && !isSelectable;
331
+ return !isDeployedAndIrrelevant;
332
+ })
333
+ .map((diff) => ({
334
+ key: getItemKey(diff),
335
+ path: diff.path,
336
+ kind: diff.kind,
337
+ diff
338
+ })));
339
+ let forkTriggers = $state([]);
340
+ let loadingTriggers = $state(true);
341
+ let deploymentDrawer = $state(undefined);
342
+ let triggerToDelete = $state(undefined);
343
+ /** Deployable trigger kinds and their list+delete services */
344
+ const triggerServices = {
345
+ schedules: {
346
+ list: (ws) => ScheduleService.listSchedules({ workspace: ws }),
347
+ delete: (ws, path) => ScheduleService.deleteSchedule({ workspace: ws, path }),
348
+ normalize: (item) => ({
349
+ path: item.path,
350
+ triggerKind: 'schedules',
351
+ scriptPath: item.script_path,
352
+ isFlow: item.is_flow,
353
+ enabled: item.enabled,
354
+ extraLabel: item.schedule
355
+ })
356
+ },
357
+ routes: {
358
+ list: (ws) => HttpTriggerService.listHttpTriggers({ workspace: ws }),
359
+ delete: (ws, path) => HttpTriggerService.deleteHttpTrigger({ workspace: ws, path }),
360
+ normalize: (item) => ({
361
+ path: item.path,
362
+ triggerKind: 'routes',
363
+ scriptPath: item.script_path,
364
+ isFlow: item.is_flow,
365
+ enabled: item.mode === 'enabled',
366
+ extraLabel: `${(item.http_method ?? 'get').toUpperCase()} ${item.route_path ?? ''}`
367
+ })
368
+ },
369
+ websockets: {
370
+ list: (ws) => WebsocketTriggerService.listWebsocketTriggers({ workspace: ws }),
371
+ delete: (ws, path) => WebsocketTriggerService.deleteWebsocketTrigger({ workspace: ws, path }),
372
+ normalize: (item) => ({
373
+ path: item.path,
374
+ triggerKind: 'websockets',
375
+ scriptPath: item.script_path,
376
+ isFlow: item.is_flow,
377
+ enabled: item.mode === 'enabled',
378
+ extraLabel: item.url
379
+ })
380
+ },
381
+ kafka: {
382
+ list: (ws) => KafkaTriggerService.listKafkaTriggers({ workspace: ws }),
383
+ delete: (ws, path) => KafkaTriggerService.deleteKafkaTrigger({ workspace: ws, path }),
384
+ normalize: (item) => ({
385
+ path: item.path,
386
+ triggerKind: 'kafka',
387
+ scriptPath: item.script_path,
388
+ isFlow: item.is_flow,
389
+ enabled: item.mode === 'enabled',
390
+ extraLabel: item.topics?.join(', ')
391
+ })
392
+ },
393
+ postgres: {
394
+ list: (ws) => PostgresTriggerService.listPostgresTriggers({ workspace: ws }),
395
+ delete: (ws, path) => PostgresTriggerService.deletePostgresTrigger({ workspace: ws, path }),
396
+ normalize: (item) => ({
397
+ path: item.path,
398
+ triggerKind: 'postgres',
399
+ scriptPath: item.script_path,
400
+ isFlow: item.is_flow,
401
+ enabled: item.mode === 'enabled'
402
+ })
403
+ },
404
+ nats: {
405
+ list: (ws) => NatsTriggerService.listNatsTriggers({ workspace: ws }),
406
+ delete: (ws, path) => NatsTriggerService.deleteNatsTrigger({ workspace: ws, path }),
407
+ normalize: (item) => ({
408
+ path: item.path,
409
+ triggerKind: 'nats',
410
+ scriptPath: item.script_path,
411
+ isFlow: item.is_flow,
412
+ enabled: item.mode === 'enabled',
413
+ extraLabel: item.subjects?.join(', ')
414
+ })
415
+ },
416
+ mqtt: {
417
+ list: (ws) => MqttTriggerService.listMqttTriggers({ workspace: ws }),
418
+ delete: (ws, path) => MqttTriggerService.deleteMqttTrigger({ workspace: ws, path }),
419
+ normalize: (item) => ({
420
+ path: item.path,
421
+ triggerKind: 'mqtt',
422
+ scriptPath: item.script_path,
423
+ isFlow: item.is_flow,
424
+ enabled: item.mode === 'enabled'
425
+ })
426
+ },
427
+ sqs: {
428
+ list: (ws) => SqsTriggerService.listSqsTriggers({ workspace: ws }),
429
+ delete: (ws, path) => SqsTriggerService.deleteSqsTrigger({ workspace: ws, path }),
430
+ normalize: (item) => ({
431
+ path: item.path,
432
+ triggerKind: 'sqs',
433
+ scriptPath: item.script_path,
434
+ isFlow: item.is_flow,
435
+ enabled: item.mode === 'enabled',
436
+ extraLabel: item.queue_url
437
+ })
438
+ },
439
+ gcp: {
440
+ list: (ws) => GcpTriggerService.listGcpTriggers({ workspace: ws }),
441
+ delete: (ws, path) => GcpTriggerService.deleteGcpTrigger({ workspace: ws, path }),
442
+ normalize: (item) => ({
443
+ path: item.path,
444
+ triggerKind: 'gcp',
445
+ scriptPath: item.script_path,
446
+ isFlow: item.is_flow,
447
+ enabled: item.mode === 'enabled',
448
+ extraLabel: item.topic_id
449
+ })
450
+ },
451
+ emails: {
452
+ list: (ws) => EmailTriggerService.listEmailTriggers({ workspace: ws }),
453
+ delete: (ws, path) => EmailTriggerService.deleteEmailTrigger({ workspace: ws, path }),
454
+ normalize: (item) => ({
455
+ path: item.path,
456
+ triggerKind: 'emails',
457
+ scriptPath: item.script_path,
458
+ isFlow: item.is_flow,
459
+ enabled: item.mode === 'enabled',
460
+ extraLabel: getEmailAddress(item.local_part, item.workspaced_local_part, currentWorkspaceId, emailDomain ?? '')
461
+ })
462
+ }
463
+ };
464
+ let emailDomain = $state(undefined);
465
+ async function fetchAllTriggers() {
466
+ loadingTriggers = true;
467
+ try {
468
+ emailDomain = await getEmailDomain();
469
+ const entries = Object.values(triggerServices);
470
+ const results = await Promise.allSettled(entries.map(async (svc) => {
471
+ const items = await svc.list(currentWorkspaceId);
472
+ return items.map(svc.normalize);
473
+ }));
474
+ forkTriggers = results.flatMap((r) => (r.status === 'fulfilled' ? r.value : []));
475
+ }
476
+ catch (e) {
477
+ console.error('Failed to fetch fork triggers:', e);
478
+ forkTriggers = [];
479
+ }
480
+ finally {
481
+ loadingTriggers = false;
482
+ }
483
+ }
484
+ function deleteTrigger(trigger) {
485
+ triggerToDelete = trigger;
486
+ }
487
+ async function confirmDeleteTrigger() {
488
+ const trigger = triggerToDelete;
489
+ if (!trigger)
490
+ return;
491
+ triggerToDelete = undefined;
492
+ const triggerType = triggerKindToTriggerType(trigger.triggerKind);
493
+ const displayName = triggerType ? triggerDisplayNamesMap[triggerType] : trigger.triggerKind;
494
+ try {
495
+ const svc = triggerServices[trigger.triggerKind];
496
+ if (!svc) {
497
+ throw new Error(`No service for trigger kind: ${trigger.triggerKind}`);
498
+ }
499
+ await svc.delete(currentWorkspaceId, trigger.path);
500
+ forkTriggers = forkTriggers.filter((t) => !(t.path === trigger.path && t.triggerKind === trigger.triggerKind));
501
+ sendUserToast(`Deleted ${displayName} trigger '${trigger.path}'`);
502
+ }
503
+ catch (e) {
504
+ sendUserToast(`Failed to delete trigger '${trigger.path}': ${e.body || e.message}`, true);
505
+ }
506
+ }
507
+ function getTriggerDisplayName(triggerKind) {
508
+ const triggerType = triggerKindToTriggerType(triggerKind);
509
+ return triggerType ? triggerDisplayNamesMap[triggerType] : triggerKind;
510
+ }
511
+ const triggerKindToPagePath = {
512
+ schedules: '/schedules',
513
+ routes: '/routes',
514
+ websockets: '/websocket_triggers',
515
+ kafka: '/kafka_triggers',
516
+ postgres: '/postgres_triggers',
517
+ nats: '/nats_triggers',
518
+ mqtt: '/mqtt_triggers',
519
+ sqs: '/sqs_triggers',
520
+ gcp: '/gcp_triggers',
521
+ emails: '/email_triggers'
522
+ };
523
+ function getTriggerHref(triggerKind) {
524
+ const pagePath = triggerKindToPagePath[triggerKind];
525
+ return pagePath ? `${base}${pagePath}` : undefined;
526
+ }
527
+ // Fetch triggers when workspace is available
528
+ $effect(() => {
529
+ if (currentWorkspaceId) {
530
+ fetchAllTriggers();
531
+ }
532
+ });
635
533
  </script>
636
534
 
637
- <div class="flex flex-col h-full">
638
- {#if $workspaceStore != currentWorkspaceId}
639
- <Alert title="Targetting different workspace" type="info" class="my-2">
640
- <span>
641
- You are currently seeing the deployement page of workspace <b
642
- >{currentWorkspaceInfo?.name} ({currentWorkspaceInfo?.id})</b
643
- > which is not your currently selected workspace.
644
- </span>
645
- <a href="/">Click here to go home ({$workspaceStore})</a>
646
- </Alert>
647
- {/if}
648
- {#if comparison}
649
- {@const selectedConflicts = conflictingDiffs.filter((e) =>
650
- selectedItems.includes(getItemKey(e))
651
- ).length}
652
- <div class="bg-surface">
535
+ {#if $workspaceStore != currentWorkspaceId}
536
+ <Alert title="Targetting different workspace" type="info" class="my-2">
537
+ <span>
538
+ You are currently seeing the deployement page of workspace <b
539
+ >{currentWorkspaceInfo?.name} ({currentWorkspaceInfo?.id})</b
540
+ > which is not your currently selected workspace.
541
+ </span>
542
+ <a href="/">Click here to go home ({$workspaceStore})</a>
543
+ </Alert>
544
+ {/if}
545
+
546
+ {#if comparison}
547
+ {@const selectedConflicts = conflictingDiffs.filter((e) =>
548
+ selectedItems.includes(getItemKey(e))
549
+ ).length}
550
+
551
+ <WorkspaceDeployLayout
552
+ items={deployableItems}
553
+ {selectedItems}
554
+ {deploymentStatus}
555
+ selectablePredicate={(item) => selectableDiffs.some((d) => getItemKey(d) === item.key)}
556
+ {allSelected}
557
+ onToggleItem={(item) => {
558
+ const diff = comparison?.diffs.find((d) => getItemKey(d) === item.key)
559
+ if (diff) toggleItem(diff)
560
+ }}
561
+ onSelectAll={selectAll}
562
+ onDeselectAll={deselectAll}
563
+ emptyMessage="No comparison data available"
564
+ >
565
+ {#snippet header()}
653
566
  <div class="flex items-center justify-between">
654
567
  <div
655
568
  class="flex flex-col gap-2 border bg-surface-tertiary w-full p-4 border-radius-5 rounded"
@@ -720,216 +633,169 @@ $effect(() => {
720
633
  </div>
721
634
  </div>
722
635
  </div>
723
- </div>
724
-
725
- {#if mergeIntoParent}
726
- <ParentWorkspaceProtectionAlert
727
- {parentWorkspaceId}
728
- onUpdateCanDeploy={(canDeploy) => {
729
- canDeployToParent = canDeploy
730
- }}
731
- />
732
- {/if}
733
- {#if conflictingDiffs.length > 0}
734
- <Alert title="Conflicting changes detected" type="warning" class="mt-2">
735
- <!-- <AlertTriangle class="w-4 h-4" /> -->
736
- <span>
737
- {conflictingDiffs.length} item{conflictingDiffs.length !== 1 ? 's have' : ' has'} conflicting
738
- changes, it was modified on the original workspace while changes were made on this fork. Make
739
- sure to resolve these before merging.
740
- </span>
741
- </Alert>
742
- {/if}
743
- {#if hasBehindChanges && hasAheadChanges && !(mergeIntoParent && !canDeployToParent)}
744
- <Alert
745
- title="This fork is behind {parentWorkspaceId} and needs to be up to date before deploying"
746
- type="warning"
747
- class="my-2"
748
- >
749
- You have items behind '{parentWorkspaceId}'. You need to update and test your changes before
750
- being able to deploy.
751
- <span class="font-medium flex flex-row gap-1 text-red-500">
752
- <input
753
- type="checkbox"
754
- bind:checked={allowBehindChangesOverride}
755
- class="rounded max-w-4"
756
- />
757
- Override: Deploy despite {itemsWithBehindChanges.length} outdated item{itemsWithBehindChanges.length !==
758
- 1
759
- ? 's'
760
- : ''}
761
- </span>
762
- </Alert>
763
- {/if}
764
- {#if !comparison.all_ahead_items_visible || !comparison.all_behind_items_visible}
765
- <Alert title="This fork has changes not visible to your user" type="warning" class="my-2">
766
- {#if !comparison.all_ahead_items_visible && !comparison.all_behind_items_visible}
767
- This fork is ahead and behind its parent
768
- {:else if !comparison.all_behind_items_visible}
769
- This fork is behind of its parent
770
- {:else if !comparison.all_ahead_items_visible}
771
- This fork is ahead of its parent
772
- {/if}
773
- and some of the changes are not visible by you. Only a user with access to the whole context
774
- may deploy or update this fork. You can share the link to this page to someone with proper permissions
775
- to get it deployed.
776
- </Alert>
777
- {/if}
636
+ {/snippet}
778
637
 
779
- <div class="px-4 py-2 flex items-center justify-between">
780
- <div
781
- class="flex items-center gap-2 text-secondary text-sm"
782
- class:opacity-50={selectableDiffs.length == 0}
783
- >
784
- <input
785
- type="checkbox"
786
- disabled={selectableDiffs.length == 0}
787
- checked={allSelected}
788
- onchange={allSelected ? deselectAll : selectAll}
789
- class="rounded max-w-4 w-full"
790
- /> Select all
791
- </div>
792
- </div>
638
+ {#snippet alerts()}
639
+ {#if mergeIntoParent}
640
+ <ParentWorkspaceProtectionAlert
641
+ {parentWorkspaceId}
642
+ onUpdateCanDeploy={(canDeploy) => {
643
+ canDeployToParent = canDeploy
644
+ }}
645
+ />
646
+ {/if}
647
+ {#if conflictingDiffs.length > 0}
648
+ <Alert title="Conflicting changes detected" type="warning" class="mt-2">
649
+ <span>
650
+ {conflictingDiffs.length} item{conflictingDiffs.length !== 1 ? 's have' : ' has'} conflicting
651
+ changes, it was modified on the original workspace while changes were made on this fork.
652
+ Make sure to resolve these before merging.
653
+ </span>
654
+ </Alert>
655
+ {/if}
656
+ {#if hasBehindChanges && hasAheadChanges && !(mergeIntoParent && !canDeployToParent)}
657
+ <Alert
658
+ title="This fork is behind {parentWorkspaceId} and needs to be up to date before deploying"
659
+ type="warning"
660
+ class="my-2"
661
+ >
662
+ You have items behind '{parentWorkspaceId}'. You need to update and test your changes
663
+ before being able to deploy.
664
+ <span class="font-medium flex flex-row gap-1 text-red-500">
665
+ <input
666
+ type="checkbox"
667
+ bind:checked={allowBehindChangesOverride}
668
+ class="rounded max-w-4"
669
+ />
670
+ Override: Deploy despite {itemsWithBehindChanges.length} outdated item{itemsWithBehindChanges.length !==
671
+ 1
672
+ ? 's'
673
+ : ''}
674
+ </span>
675
+ </Alert>
676
+ {/if}
677
+ {#if !comparison.all_ahead_items_visible || !comparison.all_behind_items_visible}
678
+ <Alert title="This fork has changes not visible to your user" type="warning" class="my-2">
679
+ {#if !comparison.all_ahead_items_visible && !comparison.all_behind_items_visible}
680
+ This fork is ahead and behind its parent
681
+ {:else if !comparison.all_behind_items_visible}
682
+ This fork is behind of its parent
683
+ {:else if !comparison.all_ahead_items_visible}
684
+ This fork is ahead of its parent
685
+ {/if}
686
+ and some of the changes are not visible by you. Only a user with access to the whole context
687
+ may deploy or update this fork. You can share the link to this page to someone with proper
688
+ permissions to get it deployed.
689
+ </Alert>
690
+ {/if}
691
+ {/snippet}
793
692
 
794
- <div class="flex-1 overflow-y-auto">
795
- <div class="border rounded-md bg-surface-tertiary">
796
- {#each comparison.diffs as diff}
797
- {@const key = getItemKey(diff)}
798
- {@const isSelectable = selectableDiffs.includes(diff)}
799
- {@const isSelected = selectedItems.includes(key)}
800
- {@const isConflict = diff.ahead > 0 && diff.behind > 0}
801
- {@const oldSummary = mergeIntoParent
802
- ? summaryCache[key]?.parent
803
- : summaryCache[key]?.current}
804
- {@const newSummary = mergeIntoParent
805
- ? summaryCache[key]?.current
806
- : summaryCache[key]?.parent}
807
- {@const existsInBothWorkspaces = !(
808
- (diff.exists_in_fork && !diff.exists_in_source) ||
809
- (!diff.exists_in_fork && diff.exists_in_source)
810
- )}
811
- {@const isDeployedAndIrrelevant =
812
- deploymentStatus[key]?.status == 'deployed' && !isSelectable}
693
+ {#snippet itemSummary(item)}
694
+ {@const diff = item.diff as WorkspaceItemDiff}
695
+ {@const key = item.key}
696
+ {@const isSelectable = selectableDiffs.includes(diff)}
697
+ {@const oldSummary = mergeIntoParent ? summaryCache[key]?.parent : summaryCache[key]?.current}
698
+ {@const newSummary = mergeIntoParent ? summaryCache[key]?.current : summaryCache[key]?.parent}
699
+ {@const existsInBothWorkspaces = !(
700
+ (diff.exists_in_fork && !diff.exists_in_source) ||
701
+ (!diff.exists_in_fork && diff.exists_in_source)
702
+ )}
703
+ {#if oldSummary != newSummary && isSelectable && existsInBothWorkspaces}
704
+ <span class="line-through text-secondary">{oldSummary || diff.path}</span>
705
+ {newSummary || diff.path}
706
+ {:else if !existsInBothWorkspaces}
707
+ {newSummary || oldSummary || diff.path}
708
+ {:else}
709
+ {newSummary || diff.path}
710
+ {/if}
711
+ {/snippet}
813
712
 
814
- {#if !isDeployedAndIrrelevant}
815
- <Row
816
- isSelectable={isSelectable && !(deploymentStatus[key]?.status == 'deployed')}
817
- alignWithSelectable={true}
818
- disabled={!isSelectable}
819
- selected={isSelected && !(deploymentStatus[key]?.status == 'deployed')}
820
- onSelect={() => toggleItem(diff)}
821
- path={diff.kind != 'resource' &&
822
- diff.kind != 'variable' &&
823
- diff.kind != 'resource_type'
824
- ? diff.path
825
- : ''}
826
- marked={undefined}
827
- kind={diff.kind}
828
- canFavorite={false}
829
- workspaceId=""
830
- >
831
- {#snippet customSummary()}
832
- {#if oldSummary != newSummary && isSelectable && existsInBothWorkspaces}
833
- <span class="line-through text-secondary">{oldSummary || diff.path}</span>
834
- {newSummary || diff.path}
835
- {:else if !existsInBothWorkspaces}
836
- {newSummary || oldSummary || diff.path}
837
- {:else}
838
- {newSummary || diff.path}
839
- {/if}
840
- {/snippet}
841
- {#snippet actions()}
842
- <!-- Status badges -->
843
- {#if !diff.exists_in_fork && diff.exists_in_source && diff.ahead == 0 && diff.behind > 0}
844
- <Badge
845
- title="This item was newly created in the parent workspace '{parentWorkspaceId}'"
846
- color="indigo"
847
- size="xs">New</Badge
848
- >
849
- {/if}
850
- {#if !diff.exists_in_fork && diff.exists_in_source && diff.ahead > 0}
851
- <Badge
852
- title="This item was deleted in '{currentWorkspaceId}'"
853
- color="red"
854
- size="xs">Deleted</Badge
855
- >
856
- {/if}
857
- {#if diff.exists_in_fork && !diff.exists_in_source && diff.behind > 0}
858
- <Badge
859
- title="This item was deleted in the parent workspace '{parentWorkspaceId}'"
860
- color="red"
861
- size="xs">Deleted</Badge
862
- >
863
- {/if}
864
- {#if diff.exists_in_fork && !diff.exists_in_source && diff.ahead > 0 && diff.behind == 0}
865
- <Badge
866
- title="This item was newly created in '{currentWorkspaceId}'"
867
- color="indigo"
868
- size="xs">New</Badge
869
- >
870
- {/if}
871
- {#if !deploymentStatus[key] || deploymentStatus[key].status != 'deployed'}
872
- <div class="flex items-center gap-2">
873
- {#if isConflict || existsInBothWorkspaces}
874
- {#if diff.ahead > 0}
875
- <Badge color="green" size="xs">
876
- <ArrowUpRight class="w-3 h-3 inline" />
877
- {diff.ahead} ahead
878
- </Badge>
879
- {/if}
880
- {#if diff.behind > 0}
881
- <Badge color="blue" size="xs">
882
- <ArrowDownRight class="w-3 h-3 inline" />
883
- {diff.behind} behind
884
- </Badge>
885
- {/if}
886
- {#if isConflict}
887
- <Badge color="orange" size="xs">
888
- <AlertTriangle class="w-3 h-3 inline" />
889
- Conflict
890
- </Badge>
891
- {/if}
892
- {/if}
893
- </div>
894
- <div class:invisible={!existsInBothWorkspaces}>
895
- <Button
896
- size="xs"
897
- variant="subtle"
898
- onclick={() => showDiff(diff.kind as Kind, diff.path)}
899
- >
900
- <DiffIcon class="w-3 h-3" />
901
- Show diff
902
- </Button>
903
- </div>
904
- {/if}
905
- {#if deploymentStatus[key]}
906
- {#if deploymentStatus[key].status == 'loading'}
907
- <Loader2 class="animate-spin" />
908
- {:else if deploymentStatus[key].status == 'deployed'}
909
- <Badge color="green">Deployed</Badge>
910
- {:else if deploymentStatus[key].status == 'failed'}
911
- <div class="inline-flex gap-1">
912
- <Badge color="red">Failed</Badge>
913
- <Tooltip>{deploymentStatus[key].error}</Tooltip></div
914
- >
915
- {/if}
916
- {/if}
917
- {/snippet}
918
- </Row>
713
+ {#snippet itemActions(item)}
714
+ {@const diff = item.diff as WorkspaceItemDiff}
715
+ {@const key = item.key}
716
+ {@const targetEmail = getTargetEmail(key)}
717
+ {@const isConflict = diff.ahead > 0 && diff.behind > 0}
718
+ {@const existsInBothWorkspaces = !(
719
+ (diff.exists_in_fork && !diff.exists_in_source) ||
720
+ (!diff.exists_in_fork && diff.exists_in_source)
721
+ )}
722
+ <!-- On-behalf-of selector -->
723
+ {#if itemNeedsOnBehalfOfSelection(key, diff.kind)}
724
+ <OnBehalfOfSelector
725
+ targetWorkspace={deployTargetWorkspace}
726
+ {targetEmail}
727
+ selected={onBehalfOfChoice[key]}
728
+ onSelect={(choice, email) => {
729
+ onBehalfOfChoice[key] = choice
730
+ if (email) customOnBehalfOfEmails[key] = email
731
+ }}
732
+ kind={diff.kind}
733
+ canPreserve={canPreserveOnBehalfOf}
734
+ customEmail={customOnBehalfOfEmails[key]}
735
+ />
736
+ {/if}
737
+ <!-- Status badges -->
738
+ {#if !diff.exists_in_fork && diff.exists_in_source && diff.ahead == 0 && diff.behind > 0}
739
+ <Badge
740
+ title="This item was newly created in the parent workspace '{parentWorkspaceId}'"
741
+ color="indigo"
742
+ size="xs">New</Badge
743
+ >
744
+ {/if}
745
+ {#if !diff.exists_in_fork && diff.exists_in_source && diff.ahead > 0}
746
+ <Badge title="This item was deleted in '{currentWorkspaceId}'" color="red" size="xs"
747
+ >Deleted</Badge
748
+ >
749
+ {/if}
750
+ {#if diff.exists_in_fork && !diff.exists_in_source && diff.behind > 0}
751
+ <Badge
752
+ title="This item was deleted in the parent workspace '{parentWorkspaceId}'"
753
+ color="red"
754
+ size="xs">Deleted</Badge
755
+ >
756
+ {/if}
757
+ {#if diff.exists_in_fork && !diff.exists_in_source && diff.ahead > 0 && diff.behind == 0}
758
+ <Badge
759
+ title="This item was newly created in '{currentWorkspaceId}'"
760
+ color="indigo"
761
+ size="xs">New</Badge
762
+ >
763
+ {/if}
764
+ {#if !deploymentStatus[key] || deploymentStatus[key].status != 'deployed'}
765
+ <div class="flex items-center gap-2">
766
+ {#if isConflict || existsInBothWorkspaces}
767
+ {#if diff.ahead > 0}
768
+ <Badge color="green" size="xs">
769
+ <ArrowUpRight class="w-3 h-3 inline" />
770
+ {diff.ahead} ahead
771
+ </Badge>
772
+ {/if}
773
+ {#if diff.behind > 0}
774
+ <Badge color="blue" size="xs">
775
+ <ArrowDownRight class="w-3 h-3 inline" />
776
+ {diff.behind} behind
777
+ </Badge>
778
+ {/if}
779
+ {#if isConflict}
780
+ <Badge color="orange" size="xs">
781
+ <AlertTriangle class="w-3 h-3 inline" />
782
+ Conflict
783
+ </Badge>
784
+ {/if}
919
785
  {/if}
920
- {/each}
921
- </div>
922
- </div>
786
+ </div>
787
+ <div class:invisible={!existsInBothWorkspaces}>
788
+ <Button size="xs" variant="subtle" onclick={() => showDiff(diff.kind as Kind, diff.path)}>
789
+ <DiffIcon class="w-3 h-3" />
790
+ Show diff
791
+ </Button>
792
+ </div>
793
+ {/if}
794
+ {/snippet}
923
795
 
924
- <div class="p-4 bg-surface">
796
+ {#snippet footer()}
925
797
  <div class="flex items-center justify-between">
926
- <div>
927
- <!-- {#if comparison.summary.total_diffs === 0} -->
928
- <!-- <Button color="red" variant="accent-secondary" on:click={deleteWorkspace}> -->
929
- <!-- Delete Fork Workspace -->
930
- <!-- </Button> -->
931
- <!-- {/if} -->
932
- </div>
798
+ <div></div>
933
799
 
934
800
  <div class="flex flex-col items-end gap-2">
935
801
  {#if comparison.all_behind_items_visible && comparison.all_ahead_items_visible}
@@ -939,7 +805,8 @@ $effect(() => {
939
805
  disabled={selectedItems.length === 0 ||
940
806
  deploying ||
941
807
  (hasBehindChanges && !allowBehindChangesOverride) ||
942
- (mergeIntoParent && !canDeployToParent)}
808
+ (mergeIntoParent && !canDeployToParent) ||
809
+ hasUnselectedOnBehalfOf}
943
810
  loading={deploying}
944
811
  on:click={deployChanges}
945
812
  >
@@ -949,6 +816,15 @@ $effect(() => {
949
816
  ({selectedConflicts} conflicts)
950
817
  {/if}
951
818
  </Button>
819
+ {#if hasUnselectedOnBehalfOf}
820
+ <span class="text-xs text-yellow-600">
821
+ You must set the "on behalf of" user for all items before deploying
822
+ <Tooltip class="text-yellow-600">
823
+ The "run on behalf of" field defines which user's permissions will be applied
824
+ during execution. Make sure this is set to an appropriate user before deploying.
825
+ </Tooltip>
826
+ </span>
827
+ {/if}
952
828
  {/if}
953
829
  {/if}
954
830
 
@@ -965,11 +841,103 @@ $effect(() => {
965
841
  {/if}
966
842
  </div>
967
843
  </div>
844
+ {/snippet}
845
+ </WorkspaceDeployLayout>
846
+
847
+ <!-- Fork Triggers Section -->
848
+ <div class="mt-6">
849
+ <div class="flex items-center gap-2 mb-2">
850
+ <h3 class="text-sm font-semibold">Triggers created in this fork</h3>
851
+ {#if !loadingTriggers}
852
+ <Badge color="indigo" size="xs"
853
+ >{forkTriggers.length} trigger{forkTriggers.length !== 1 ? 's' : ''}</Badge
854
+ >
855
+ {/if}
968
856
  </div>
969
- <DiffDrawer bind:this={diffDrawer} {isFlow} />
970
- {:else}
971
- <div class="flex items-center justify-center h-full">
972
- <div class="text-gray-500">No comparison data available</div>
973
- </div>
974
- {/if}
975
- </div>
857
+
858
+ <Alert title="Deploy and/or delete these triggers" type="info" class="mb-2">
859
+ When forking a workspace, triggers are not forked to avoid unnecessary executions or
860
+ collisions. If you created this triggers with the intention of deploying them to the parent
861
+ workspace, you can do so here. Otherwise it is recommended to delete them or disable them.
862
+ </Alert>
863
+
864
+ {#if loadingTriggers}
865
+ <div class="flex items-center gap-2 text-secondary text-sm p-4">
866
+ <Loader2 class="animate-spin w-4 h-4" />
867
+ Loading triggers...
868
+ </div>
869
+ {:else if forkTriggers.length === 0}
870
+ <div class="text-secondary text-sm p-4 border rounded-md bg-surface-tertiary">
871
+ No triggers in this fork workspace.
872
+ </div>
873
+ {:else}
874
+ <div class="border rounded-md bg-surface-tertiary">
875
+ {#each forkTriggers as trigger (trigger.triggerKind + ':' + trigger.path)}
876
+ <Row
877
+ kind="trigger"
878
+ triggerKind={trigger.triggerKind}
879
+ path={trigger.path}
880
+ href={getTriggerHref(trigger.triggerKind)}
881
+ marked={undefined}
882
+ isSelectable={false}
883
+ canFavorite={false}
884
+ workspaceId={currentWorkspaceId}
885
+ >
886
+ {#snippet customSummary()}
887
+ <span>{getTriggerDisplayName(trigger.triggerKind)}</span>
888
+ <span class="text-secondary mx-1">&rarr;</span>
889
+ <span class="text-secondary">{trigger.scriptPath}</span>
890
+ {#if trigger.isFlow}
891
+ <Badge color="blue" size="xs">flow</Badge>
892
+ {/if}
893
+ {#if trigger.extraLabel}
894
+ <span class="text-tertiary text-xs">({trigger.extraLabel})</span>
895
+ {/if}
896
+ {/snippet}
897
+ {#snippet actions()}
898
+ {#if trigger.enabled != null}
899
+ <Badge color={trigger.enabled ? 'green' : 'gray'} size="xs">
900
+ {trigger.enabled ? 'Enabled' : 'Disabled'}
901
+ </Badge>
902
+ {/if}
903
+ <Button
904
+ size="xs"
905
+ variant="subtle"
906
+ onclick={() => {
907
+ deploymentDrawer?.openDrawer(trigger.path, 'trigger', {
908
+ triggers: { kind: trigger.triggerKind }
909
+ })
910
+ }}
911
+ >
912
+ <Upload size={12} />
913
+ Deploy
914
+ </Button>
915
+ <Button size="xs" variant="subtle" color="red" onclick={() => deleteTrigger(trigger)}>
916
+ <Trash2 size={12} />
917
+ </Button>
918
+ {/snippet}
919
+ </Row>
920
+ {/each}
921
+ </div>
922
+ {/if}
923
+ </div>
924
+
925
+ <DeployWorkspaceDrawer bind:this={deploymentDrawer} />
926
+ <DiffDrawer bind:this={diffDrawer} {isFlow} />
927
+ <ConfirmationModal
928
+ title="Delete trigger"
929
+ confirmationText="Delete"
930
+ open={!!triggerToDelete}
931
+ onConfirmed={confirmDeleteTrigger}
932
+ onCanceled={() => (triggerToDelete = undefined)}
933
+ >
934
+ {#if triggerToDelete}
935
+ Are you sure you want to delete the {getTriggerDisplayName(triggerToDelete.triggerKind)} trigger
936
+ '{triggerToDelete.path}'?
937
+ {/if}
938
+ </ConfirmationModal>
939
+ {:else}
940
+ <div class="flex items-center justify-center h-full">
941
+ <div class="text-gray-500">No comparison data available</div>
942
+ </div>
943
+ {/if}