windmill-components 1.434.1 → 1.444.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 (285) hide show
  1. package/package/components/ArgInput.svelte +12 -16
  2. package/package/components/ArgInput.svelte.d.ts +1 -0
  3. package/package/components/AssignableTags.svelte +3 -1
  4. package/package/components/AssignableTags.svelte.d.ts +1 -0
  5. package/package/components/AuthSettings.svelte +248 -0
  6. package/package/components/AuthSettings.svelte.d.ts +19 -0
  7. package/package/components/AutoscalingConfigEditor.svelte +2 -2
  8. package/package/components/CronInput.svelte +2 -2
  9. package/package/components/DeployWorkspace.svelte +1 -1
  10. package/package/components/Description.svelte +9 -0
  11. package/package/components/Description.svelte.d.ts +18 -0
  12. package/package/components/Dev.svelte +18 -3
  13. package/package/components/DisplayResult.svelte +7 -4
  14. package/package/components/DisplayResult.svelte.d.ts +1 -0
  15. package/package/components/DropdownV2.svelte +2 -1
  16. package/package/components/DropdownV2.svelte.d.ts +1 -0
  17. package/package/components/EditableSchemaForm.svelte +2 -2
  18. package/package/components/Editor.svelte +9 -6
  19. package/package/components/Editor.svelte.d.ts +4 -2
  20. package/package/components/EditorBar.svelte +51 -6
  21. package/package/components/ErrorOrRecoveryHandler.svelte +4 -3
  22. package/package/components/ExecutionDuration.svelte +2 -1
  23. package/package/components/FieldHeader.svelte +9 -1
  24. package/package/components/FieldHeader.svelte.d.ts +1 -0
  25. package/package/components/FlowBuilder.svelte +16 -3
  26. package/package/components/FlowGraphViewer.svelte +2 -0
  27. package/package/components/FlowPreviewContent.svelte +6 -15
  28. package/package/components/FlowStatusViewerInner.svelte +14 -10
  29. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/InputTransformSchemaForm.svelte +1 -1
  32. package/package/components/InstanceSetting.svelte +774 -0
  33. package/package/components/InstanceSetting.svelte.d.ts +27 -0
  34. package/package/components/InstanceSettings.svelte +68 -1005
  35. package/package/components/InstanceSettings.svelte.d.ts +0 -4
  36. package/package/components/Label.svelte +16 -6
  37. package/package/components/Label.svelte.d.ts +3 -0
  38. package/package/components/Login.svelte +17 -9
  39. package/package/components/OAuthSetting.svelte +4 -3
  40. package/package/components/OauthExtraParams.svelte +1 -1
  41. package/package/components/OauthScopes.svelte +2 -2
  42. package/package/components/ObjectStoreConfigSettings.svelte +141 -128
  43. package/package/components/QueueMetricsDrawer.svelte +5 -5
  44. package/package/components/ResourceEditor.svelte +4 -0
  45. package/package/components/ResourceEditor.svelte.d.ts +1 -0
  46. package/package/components/ResourceEditorDrawer.svelte +15 -3
  47. package/package/components/ResourceEditorDrawer.svelte.d.ts +2 -2
  48. package/package/components/ResourcePicker.svelte +16 -5
  49. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  50. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  51. package/package/components/RunPageSchedules.svelte +15 -10
  52. package/package/components/SavedInputs.svelte +1 -1
  53. package/package/components/ScheduleEditorInner.svelte +58 -27
  54. package/package/components/SchemaForm.svelte +7 -5
  55. package/package/components/SchemaForm.svelte.d.ts +1 -0
  56. package/package/components/ScriptBuilder.svelte +58 -5
  57. package/package/components/ScriptEditor.svelte +78 -40
  58. package/package/components/ScriptEditor.svelte.d.ts +17 -2
  59. package/package/components/ScriptPicker.svelte +41 -34
  60. package/package/components/ScriptPicker.svelte.d.ts +1 -0
  61. package/package/components/ScriptVersionHistory.svelte +1 -1
  62. package/package/components/Section.svelte +38 -35
  63. package/package/components/Section.svelte.d.ts +2 -0
  64. package/package/components/ServiceLogsInner.svelte +1 -1
  65. package/package/components/SimpleEditor.svelte +2 -0
  66. package/package/components/Subsection.svelte +52 -0
  67. package/package/components/Subsection.svelte.d.ts +27 -0
  68. package/package/components/SuperadminSettings.svelte +23 -13
  69. package/package/components/TemplateEditor.svelte +4 -3
  70. package/package/components/TestConnection.svelte +5 -0
  71. package/package/components/TestJobLoader.svelte +2 -1
  72. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  73. package/package/components/Toggle.svelte +2 -4
  74. package/package/components/UserSettings.svelte +1 -1
  75. package/package/components/WorkerGroup.svelte +4 -4
  76. package/package/components/WorkerTagPicker.svelte +4 -2
  77. package/package/components/WorkerTagPicker.svelte.d.ts +1 -0
  78. package/package/components/WorkerTagSelect.svelte +2 -0
  79. package/package/components/WorkerTagSelect.svelte.d.ts +1 -0
  80. package/package/components/apps/components/display/AppDisplayComponent.svelte +2 -1
  81. package/package/components/apps/components/display/dbtable/utils.js +26 -1
  82. package/package/components/apps/components/helpers/RunnableComponent.svelte +8 -2
  83. package/package/components/apps/components/inputs/AppDateInput.svelte +7 -1
  84. package/package/components/apps/components/inputs/AppS3FileInput.svelte +1 -1
  85. package/package/components/apps/editor/AppEditor.svelte +5 -34
  86. package/package/components/apps/editor/AppEditor.svelte.d.ts +1 -0
  87. package/package/components/apps/editor/AppEditorBottomPanel.svelte +4 -7
  88. package/package/components/apps/editor/AppEditorBottomPanel.svelte.d.ts +1 -3
  89. package/package/components/apps/editor/AppEditorHeader.svelte +148 -58
  90. package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +1 -0
  91. package/package/components/apps/editor/DeploymentHistory.svelte +1 -1
  92. package/package/components/apps/editor/RunnableJobPanel.svelte +6 -2
  93. package/package/components/apps/editor/RunnableJobPanel.svelte.d.ts +1 -0
  94. package/package/components/apps/editor/appUtils.d.ts +1 -0
  95. package/package/components/apps/editor/appUtils.js +17 -0
  96. package/package/components/apps/editor/component/components.d.ts +82 -81
  97. package/package/components/apps/editor/component/components.js +4 -3
  98. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
  99. package/package/components/apps/editor/componentsPanel/GroupList.svelte +12 -2
  100. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +1 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +53 -56
  103. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +1 -1
  104. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +3 -2
  105. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +1 -1
  106. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +16 -9
  107. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -0
  108. package/package/components/apps/inputType.d.ts +2 -2
  109. package/package/components/apps/types.d.ts +2 -0
  110. package/package/components/common/alert/ConnectionIndicator.svelte +30 -0
  111. package/package/components/common/alert/ConnectionIndicator.svelte.d.ts +20 -0
  112. package/package/components/common/alert/Notification.svelte +15 -0
  113. package/package/components/common/alert/Notification.svelte.d.ts +17 -0
  114. package/package/components/common/button/AnimatedButton.svelte +1 -1
  115. package/package/components/common/button/RefreshButton.svelte +30 -0
  116. package/package/components/common/button/RefreshButton.svelte.d.ts +18 -0
  117. package/package/components/common/fileDownload/FileDownload.svelte +4 -3
  118. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +1 -0
  119. package/package/components/common/fileUpload/FileUpload.svelte +3 -3
  120. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  121. package/package/components/common/layout/List.svelte +35 -0
  122. package/package/components/common/layout/List.svelte.d.ts +21 -0
  123. package/package/components/common/layout/ListElement.svelte +3 -0
  124. package/package/components/common/layout/ListElement.svelte.d.ts +27 -0
  125. package/package/components/common/menu/MenuV2.svelte +3 -2
  126. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  127. package/package/components/common/modal/Modal.svelte +6 -4
  128. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  129. package/package/components/common/modal/Modal2.svelte +101 -0
  130. package/package/components/common/modal/Modal2.svelte.d.ts +28 -0
  131. package/package/components/common/popup/Popup.svelte +5 -1
  132. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  133. package/package/components/common/toggleButton-v2/ToggleButton.svelte +1 -1
  134. package/package/components/copilot/FlowCopilotStatus.svelte +1 -1
  135. package/package/components/details/ClipboardPanel.svelte +12 -2
  136. package/package/components/details/ClipboardPanel.svelte.d.ts +2 -0
  137. package/package/components/details/CopyableCodeBlock.svelte +24 -0
  138. package/package/components/details/CopyableCodeBlock.svelte.d.ts +19 -0
  139. package/package/components/details/DetailPageLayout.svelte +3 -1
  140. package/package/components/details/EmailTriggerConfigSection.svelte +119 -0
  141. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +38 -0
  142. package/package/components/details/EmailTriggerPanel.svelte +27 -74
  143. package/package/components/details/EmailTriggerPanel.svelte.d.ts +7 -1
  144. package/package/components/flows/FlowEditor.svelte +1 -1
  145. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  146. package/package/components/flows/FlowHistoryInner.svelte +1 -1
  147. package/package/components/flows/content/BranchPredicateEditor.svelte +1 -1
  148. package/package/components/flows/content/FlowEditorPanel.svelte +30 -1
  149. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -0
  150. package/package/components/flows/content/FlowInput.svelte +2 -15
  151. package/package/components/flows/content/FlowInputs.svelte +1 -1
  152. package/package/components/flows/content/FlowInputsQuick.svelte +2 -2
  153. package/package/components/flows/content/FlowModuleComponent.svelte +9 -5
  154. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  155. package/package/components/flows/content/FlowModuleHeader.svelte +4 -1
  156. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  157. package/package/components/flows/content/FlowPathViewer.svelte +3 -1
  158. package/package/components/flows/content/FlowRetries.svelte +32 -5
  159. package/package/components/flows/content/FlowSettings.svelte +56 -48
  160. package/package/components/flows/flowStateUtils.d.ts +10 -1
  161. package/package/components/flows/flowStateUtils.js +23 -0
  162. package/package/components/flows/map/FlowModuleSchemaMap.svelte +9 -19
  163. package/package/components/flows/map/InsertModuleButton.svelte +3 -3
  164. package/package/components/flows/map/VirtualItem.svelte +29 -1
  165. package/package/components/flows/map/VirtualItem.svelte.d.ts +2 -0
  166. package/package/components/flows/pickers/TopLevelNode.svelte +2 -2
  167. package/package/components/flows/previousResults.js +8 -2
  168. package/package/components/flows/types.d.ts +1 -0
  169. package/package/components/graph/FlowGraphV2.svelte +5 -1
  170. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -0
  171. package/package/components/graph/renderers/nodes/InputNode.svelte +2 -0
  172. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +2 -0
  173. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +1 -1
  174. package/package/components/icons/CSharpIcon.svelte +14 -0
  175. package/package/components/icons/CSharpIcon.svelte.d.ts +25 -0
  176. package/package/components/icons/GitIcon.svelte +5 -2
  177. package/package/components/icons/XeroIcon.svelte +24 -0
  178. package/package/components/icons/XeroIcon.svelte.d.ts +17 -0
  179. package/package/components/icons/index.d.ts +3 -1
  180. package/package/components/icons/index.js +4 -2
  181. package/package/components/instanceSettings.d.ts +3 -1
  182. package/package/components/instanceSettings.js +77 -69
  183. package/package/components/meltComponents/Popover.svelte +82 -0
  184. package/package/components/meltComponents/Popover.svelte.d.ts +21 -0
  185. package/package/components/propertyPicker/PropPicker.svelte +5 -3
  186. package/package/components/runs/JobLoader.svelte +5 -2
  187. package/package/components/runs/JobPreview.svelte +5 -5
  188. package/package/components/runs/RunRow.svelte +3 -4
  189. package/package/components/runs/RunsFilter.svelte +4 -4
  190. package/package/components/schema/EditableSchemaDrawer.svelte +4 -4
  191. package/package/components/schema/PropertyEditor.svelte +1 -1
  192. package/package/components/schema/SchemaFormDND.svelte +2 -0
  193. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  194. package/package/components/scriptEditor/LogPanel.svelte +176 -164
  195. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
  196. package/package/components/search/GlobalSearchModal.svelte +3 -3
  197. package/package/components/sidebar/CriticalAlertModal.svelte +155 -9
  198. package/package/components/sidebar/CriticalAlertModalInner.svelte +65 -212
  199. package/package/components/sidebar/CriticalAlertModalInner.svelte.d.ts +2 -4
  200. package/package/components/sidebar/CriticalAlertTable.svelte +142 -0
  201. package/package/components/sidebar/CriticalAlertTable.svelte.d.ts +25 -0
  202. package/package/components/sidebar/OperatorMenu.svelte +30 -8
  203. package/package/components/sidebar/SideBarNotification.svelte +3 -6
  204. package/package/components/sidebar/SidebarContent.svelte +5 -5
  205. package/package/components/sidebar/WorkspaceMenu.svelte +9 -5
  206. package/package/components/sidebar/WorkspaceMenu.svelte.d.ts +1 -0
  207. package/package/components/sidebar/changelogs.js +82 -17
  208. package/package/components/splitPanes/SplitPanesOrColumnOnMobile.svelte +21 -21
  209. package/package/components/table/AutoDataTable.svelte +1 -1
  210. package/package/components/table/Cell.svelte +5 -3
  211. package/package/components/table/Cell.svelte.d.ts +1 -0
  212. package/package/components/table/DataTable.svelte +65 -58
  213. package/package/components/table/DataTable.svelte.d.ts +2 -0
  214. package/package/components/table/Head.svelte +1 -1
  215. package/package/components/table/Row.svelte +3 -1
  216. package/package/components/table/Row.svelte.d.ts +1 -0
  217. package/package/components/toast.js +3 -1
  218. package/package/components/triggers/CaptureButton.svelte +77 -0
  219. package/package/components/triggers/CaptureButton.svelte.d.ts +16 -0
  220. package/package/components/triggers/CaptureIcon.svelte +17 -0
  221. package/package/components/triggers/CaptureIcon.svelte.d.ts +23 -0
  222. package/package/components/triggers/CaptureSection.svelte +76 -0
  223. package/package/components/triggers/CaptureSection.svelte.d.ts +42 -0
  224. package/package/components/triggers/CaptureTable.svelte +224 -0
  225. package/package/components/triggers/CaptureTable.svelte.d.ts +43 -0
  226. package/package/components/triggers/CaptureWrapper.svelte +237 -0
  227. package/package/components/triggers/CaptureWrapper.svelte.d.ts +35 -0
  228. package/package/components/triggers/KafkaTriggerEditor.svelte +2 -2
  229. package/package/components/triggers/KafkaTriggerEditor.svelte.d.ts +2 -2
  230. package/package/components/triggers/KafkaTriggerEditorInner.svelte +47 -119
  231. package/package/components/triggers/KafkaTriggerEditorInner.svelte.d.ts +2 -2
  232. package/package/components/triggers/KafkaTriggersConfigSection.svelte +215 -0
  233. package/package/components/triggers/KafkaTriggersConfigSection.svelte.d.ts +36 -0
  234. package/package/components/triggers/KafkaTriggersPanel.svelte +73 -45
  235. package/package/components/triggers/KafkaTriggersPanel.svelte.d.ts +6 -0
  236. package/package/components/triggers/RouteEditor.svelte +2 -2
  237. package/package/components/triggers/RouteEditor.svelte.d.ts +2 -2
  238. package/package/components/triggers/RouteEditorConfigSection.svelte +162 -0
  239. package/package/components/triggers/RouteEditorConfigSection.svelte.d.ts +43 -0
  240. package/package/components/triggers/RouteEditorInner.svelte +98 -163
  241. package/package/components/triggers/RouteEditorInner.svelte.d.ts +2 -2
  242. package/package/components/triggers/RoutesPanel.svelte +69 -54
  243. package/package/components/triggers/RoutesPanel.svelte.d.ts +5 -0
  244. package/package/components/triggers/ScheduledPollPanel.svelte +5 -9
  245. package/package/components/triggers/TriggersEditor.svelte +119 -89
  246. package/package/components/triggers/TriggersEditor.svelte.d.ts +7 -0
  247. package/package/components/triggers/TriggersEditorSection.svelte +109 -0
  248. package/package/components/triggers/TriggersEditorSection.svelte.d.ts +29 -0
  249. package/package/components/triggers/TriggersWrapper.svelte +60 -0
  250. package/package/components/triggers/TriggersWrapper.svelte.d.ts +21 -0
  251. package/package/components/triggers/WebhooksConfigSection.svelte +382 -0
  252. package/package/components/triggers/WebhooksConfigSection.svelte.d.ts +39 -0
  253. package/package/components/triggers/WebhooksPanel.svelte +32 -331
  254. package/package/components/triggers/WebhooksPanel.svelte.d.ts +7 -1
  255. package/package/components/triggers/WebsocketEditorConfigSection.svelte +176 -0
  256. package/package/components/triggers/WebsocketEditorConfigSection.svelte.d.ts +37 -0
  257. package/package/components/triggers/WebsocketTriggerEditor.svelte +2 -2
  258. package/package/components/triggers/WebsocketTriggerEditor.svelte.d.ts +2 -2
  259. package/package/components/triggers/WebsocketTriggerEditorInner.svelte +29 -150
  260. package/package/components/triggers/WebsocketTriggerEditorInner.svelte.d.ts +2 -2
  261. package/package/components/triggers/WebsocketTriggersPanel.svelte +70 -45
  262. package/package/components/triggers/WebsocketTriggersPanel.svelte.d.ts +6 -0
  263. package/package/components/triggers.d.ts +6 -2
  264. package/package/components/triggers.js +16 -0
  265. package/package/components/wizards/AgGridWizard.svelte +4 -4
  266. package/package/editorUtils.d.ts +2 -0
  267. package/package/editorUtils.js +6 -3
  268. package/package/gen/core/OpenAPI.js +1 -1
  269. package/package/gen/schemas.gen.d.ts +17 -8
  270. package/package/gen/schemas.gen.js +17 -8
  271. package/package/gen/services.gen.d.ts +55 -5
  272. package/package/gen/services.gen.js +108 -5
  273. package/package/gen/types.gen.d.ts +180 -13
  274. package/package/hubPaths.json +6 -3
  275. package/package/infer.js +9 -0
  276. package/package/script_helpers.d.ts +5 -0
  277. package/package/script_helpers.js +68 -8
  278. package/package/scripts.d.ts +1 -1
  279. package/package/scripts.js +5 -1
  280. package/package/stores.d.ts +1 -0
  281. package/package/utils.d.ts +3 -1
  282. package/package/utils.js +20 -4
  283. package/package.json +11 -8
  284. package/package/components/flows/content/CapturePayload.svelte +0 -114
  285. package/package/components/flows/content/CapturePayload.svelte.d.ts +0 -17
@@ -10,11 +10,11 @@ import TestJobLoader from '../../TestJobLoader.svelte';
10
10
  import Toggle from '../../Toggle.svelte';
11
11
  import { AppService, DraftService } from '../../../gen';
12
12
  import { redo, undo } from '../../../history';
13
- import { enterpriseLicense, workspaceStore } from '../../../stores';
14
- import { AlignHorizontalSpaceAround, BellOff, Bug, Clipboard, DiffIcon, Expand, FileJson, FileUp, FormInput, History, Laptop2, Loader2, MoreVertical, RefreshCw, Save, Smartphone, FileClock, Sun, Moon, SunMoon } from 'lucide-svelte';
13
+ import { enterpriseLicense, userStore, workspaceStore } from '../../../stores';
14
+ import { AlignHorizontalSpaceAround, BellOff, Bug, DiffIcon, Expand, FileJson, FileUp, FormInput, History, Laptop2, Loader2, MoreVertical, RefreshCw, Save, Smartphone, FileClock, Sun, Moon, SunMoon } from 'lucide-svelte';
15
15
  import { createEventDispatcher, getContext } from 'svelte';
16
16
  import { Pane, Splitpanes } from 'svelte-splitpanes';
17
- import { classNames, cleanValueProperties, copyToClipboard, truncateRev, orderedJsonStringify, replaceFalseWithUndefined } from '../../../utils';
17
+ import { classNames, cleanValueProperties, truncateRev, orderedJsonStringify, replaceFalseWithUndefined, isFlowPreview } from '../../../utils';
18
18
  import { BG_PREFIX, allItems, toStatic } from '../utils';
19
19
  import AppExportButton from './AppExportButton.svelte';
20
20
  import AppInputs from './AppInputs.svelte';
@@ -22,7 +22,7 @@ import PanelSection from './settingsPanel/common/PanelSection.svelte';
22
22
  import PreviewToggle from './PreviewToggle.svelte';
23
23
  import ToggleButtonGroup from '../../common/toggleButton-v2/ToggleButtonGroup.svelte';
24
24
  import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
25
- // import UnsavedConfirmationModal from '../../common/confirmationModal/UnsavedConfirmationModal.svelte'
25
+ // import UnsavedConfirmationModal from '../../common/confirmationModal/UnsavedConfirmationModal.svelte'
26
26
  import Tooltip from '../../Tooltip.svelte';
27
27
  import { Sha256 } from '@aws-crypto/sha256-js';
28
28
  import { sendUserToast } from '../../../toast';
@@ -48,6 +48,9 @@ import ToggleEnable from '../../common/toggleButton-v2/ToggleEnable.svelte';
48
48
  import HideButton from './settingsPanel/HideButton.svelte';
49
49
  import DeployOverrideConfirmationModal from '../../common/confirmationModal/DeployOverrideConfirmationModal.svelte';
50
50
  import { computeS3FileInputPolicy, computeWorkspaceS3FileInputPolicy } from './appUtilsS3';
51
+ import { isCloudHosted } from '../../../cloud';
52
+ import { base } from '../../../base';
53
+ import ClipboardPanel from '../../details/ClipboardPanel.svelte';
51
54
  async function hash(message) {
52
55
  try {
53
56
  const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
@@ -260,14 +263,16 @@ async function createApp(path) {
260
263
  path,
261
264
  summary: $summary,
262
265
  policy,
263
- deployment_message: deploymentMsg
266
+ deployment_message: deploymentMsg,
267
+ custom_path: customPath
264
268
  }
265
269
  });
266
270
  savedApp = {
267
271
  summary: $summary,
268
272
  value: structuredClone($app),
269
273
  path: path,
270
- policy: policy
274
+ policy: policy,
275
+ custom_path: customPath
271
276
  };
272
277
  closeSaveDrawer();
273
278
  sendUserToast('App deployed successfully');
@@ -303,7 +308,8 @@ async function handleUpdateApp(npath) {
303
308
  summary: $summary,
304
309
  value: $app,
305
310
  path: newEditedPath || savedApp.draft?.path || savedApp.path,
306
- policy
311
+ policy,
312
+ custom_path: customPath
307
313
  }))) {
308
314
  await updateApp(npath);
309
315
  }
@@ -344,14 +350,18 @@ async function updateApp(npath) {
344
350
  summary: $summary,
345
351
  policy,
346
352
  path: npath,
347
- deployment_message: deploymentMsg
353
+ deployment_message: deploymentMsg,
354
+ // custom_path requires admin so to accept update without it, we need to send as undefined when non-admin (when undefined, it will be ignored)
355
+ // it also means that customPath needs to be set to '' instead of undefined to unset it (when admin)
356
+ custom_path: $userStore?.is_admin || $userStore?.is_super_admin ? customPath ?? '' : undefined
348
357
  }
349
358
  });
350
359
  savedApp = {
351
360
  summary: $summary,
352
361
  value: structuredClone($app),
353
362
  path: npath,
354
- policy
363
+ policy,
364
+ custom_path: customPath
355
365
  };
356
366
  const appHistory = await AppService.getAppHistoryByPath({
357
367
  workspace: $workspaceStore,
@@ -408,7 +418,8 @@ async function saveInitialDraft() {
408
418
  path: newEditedPath,
409
419
  summary: $summary,
410
420
  policy,
411
- draft_only: true
421
+ draft_only: true,
422
+ custom_path: customPath
412
423
  }
413
424
  });
414
425
  await DraftService.createDraft({
@@ -420,7 +431,8 @@ async function saveInitialDraft() {
420
431
  value: $app,
421
432
  path: newEditedPath,
422
433
  summary: $summary,
423
- policy
434
+ policy,
435
+ custom_path: customPath
424
436
  }
425
437
  }
426
438
  });
@@ -434,8 +446,10 @@ async function saveInitialDraft() {
434
446
  summary: $summary,
435
447
  value: structuredClone($app),
436
448
  path: newEditedPath,
437
- policy
438
- }
449
+ policy,
450
+ custom_path: customPath
451
+ },
452
+ custom_path: customPath
439
453
  };
440
454
  draftDrawerOpen = false;
441
455
  dispatch('savedNewAppPath', newEditedPath);
@@ -488,7 +502,8 @@ async function saveDraft(forceSave = false) {
488
502
  summary: $summary,
489
503
  policy,
490
504
  path: newEditedPath || path,
491
- draft_only: true
505
+ draft_only: true,
506
+ custom_path: customPath
492
507
  }
493
508
  });
494
509
  }
@@ -512,14 +527,16 @@ async function saveDraft(forceSave = false) {
512
527
  value: structuredClone($app),
513
528
  path: savedApp.draft_only ? newEditedPath || path : path,
514
529
  policy,
515
- draft_only: true
530
+ draft_only: true,
531
+ custom_path: customPath
516
532
  }
517
533
  : savedApp),
518
534
  draft: {
519
535
  summary: $summary,
520
536
  value: structuredClone($app),
521
537
  path: newEditedPath || path,
522
- policy
538
+ policy,
539
+ custom_path: customPath
523
540
  }
524
541
  };
525
542
  sendUserToast('Draft saved');
@@ -620,7 +637,7 @@ let dirtyPath = false;
620
637
  let path = undefined;
621
638
  let moreItems = [
622
639
  {
623
- displayName: 'Deployment History',
640
+ displayName: 'Deployment history',
624
641
  icon: History,
625
642
  action: () => {
626
643
  historyBrowserDrawerOpen = true;
@@ -650,14 +667,14 @@ let moreItems = [
650
667
  }
651
668
  },
652
669
  {
653
- displayName: 'App Inputs',
670
+ displayName: 'App inputs',
654
671
  icon: FormInput,
655
672
  action: () => {
656
673
  inputsDrawerOpen = true;
657
674
  }
658
675
  },
659
676
  {
660
- displayName: 'Schedule Reports',
677
+ displayName: 'Schedule reports',
661
678
  icon: FileClock,
662
679
  action: () => {
663
680
  appReportingDrawerOpen = true;
@@ -682,7 +699,8 @@ let moreItems = [
682
699
  summary: $summary,
683
700
  value: $app,
684
701
  path: newEditedPath || savedApp.draft?.path || savedApp.path,
685
- policy
702
+ policy,
703
+ custom_path: customPath
686
704
  }
687
705
  });
688
706
  },
@@ -721,24 +739,55 @@ function setTheme(newDarkMode) {
721
739
  }
722
740
  let priorDarkMode = document.documentElement.classList.contains('dark');
723
741
  setTheme($app?.darkMode);
742
+ let customPath = savedApp?.custom_path;
743
+ let dirtyCustomPath = false;
744
+ let customPathError = '';
745
+ $: fullCustomUrl = `${window.location.origin}${base}/a/${isCloudHosted() ? $workspaceStore + '/' : ''}${customPath}`;
746
+ async function appExists(customPath) {
747
+ return await AppService.customPathExists({
748
+ workspace: $workspaceStore,
749
+ customPath
750
+ });
751
+ }
752
+ let validateTimeout = undefined;
753
+ async function validateCustomPath(customPath) {
754
+ customPathError = '';
755
+ if (validateTimeout) {
756
+ clearTimeout(validateTimeout);
757
+ }
758
+ validateTimeout = setTimeout(async () => {
759
+ if (!/^[\w-]+(\/[\w-]+)*$/.test(customPath)) {
760
+ customPathError = 'Invalid path';
761
+ }
762
+ else if (customPath !== savedApp?.custom_path && (await appExists(customPath))) {
763
+ customPathError = 'Path already taken';
764
+ }
765
+ else {
766
+ customPathError = '';
767
+ }
768
+ validateTimeout = undefined;
769
+ }, 500);
770
+ }
771
+ $: customPath !== undefined && validateCustomPath(customPath);
724
772
  </script>
725
773
 
726
774
  <svelte:window on:keydown={onKeyDown} />
727
775
 
728
776
  <TestJobLoader bind:this={testJobLoader} bind:isLoading={testIsLoading} bind:job />
729
- <!-- <UnsavedConfirmationModal
730
- {diffDrawer}
731
- savedValue={savedApp}
732
- modifiedValue={{
733
- summary: $summary,
734
- value: $app,
735
- path: newEditedPath || savedApp?.draft?.path || savedApp?.path,
736
- policy
737
- }}
738
- additionalExitAction={() => {
739
- setTheme(priorDarkMode)
740
- }}
741
- /> -->
777
+ <!-- <UnsavedConfirmationModal -->
778
+ <!-- {diffDrawer} -->
779
+ <!-- savedValue={savedApp} -->
780
+ <!-- modifiedValue={{ -->
781
+ <!-- summary: $summary, -->
782
+ <!-- value: $app, -->
783
+ <!-- path: newEditedPath || savedApp?.draft?.path || savedApp?.path, -->
784
+ <!-- policy, -->
785
+ <!-- custom_path: customPath -->
786
+ <!-- }} -->
787
+ <!-- additionalExitAction={() => { -->
788
+ <!-- setTheme(priorDarkMode) -->
789
+ <!-- }} -->
790
+ <!-- /> -->
742
791
 
743
792
  <DeployOverrideConfirmationModal
744
793
  bind:deployedBy
@@ -750,7 +799,8 @@ setTheme($app?.darkMode);
750
799
  summary: $summary,
751
800
  value: $app,
752
801
  path: newEditedPath || savedApp?.draft?.path || savedApp?.path,
753
- policy
802
+ policy,
803
+ custom_path: customPath
754
804
  }}
755
805
  />
756
806
 
@@ -885,7 +935,8 @@ setTheme($app?.darkMode);
885
935
  summary: $summary,
886
936
  value: $app,
887
937
  path: newEditedPath || savedApp.draft?.path || savedApp.path,
888
- policy
938
+ policy,
939
+ custom_path: customPath
889
940
  },
890
941
  button: {
891
942
  text: 'Looks good, deploy',
@@ -907,7 +958,7 @@ setTheme($app?.darkMode);
907
958
  </Button>
908
959
  <Button
909
960
  startIcon={{ icon: Save }}
910
- disabled={pathError != ''}
961
+ disabled={pathError != '' || customPathError != ''}
911
962
  on:click={() => {
912
963
  if ($appPath == '') {
913
964
  createApp(newEditedPath)
@@ -957,29 +1008,68 @@ setTheme($app?.darkMode);
957
1008
  </div>
958
1009
 
959
1010
  <div class="my-6 box">
960
- Public url:
1011
+ <div class="text-secondary">
1012
+ <div>Public URL</div>
1013
+ </div>
961
1014
  {#if secretUrl}
962
- {@const url = `${window.location.hostname}/public/${$workspaceStore}/${secretUrl}`}
963
- {@const href = window.location.protocol + '//' + url}
964
- <a
965
- on:click={(e) => {
966
- e.preventDefault()
967
- copyToClipboard(href)
968
- }}
969
- {href}
970
- class="whitespace-nowrap text-ellipsis overflow-hidden mr-1 inline-flex gap-2"
971
- >
972
- {url}
973
- <span class="text-gray-700 ml-2">
974
- <Clipboard />
975
- </span>
976
- </a>
1015
+ {@const href = `${window.location.origin}${base}/public/${$workspaceStore}/${secretUrl}`}
1016
+ <ClipboardPanel content={href} size="md" />
977
1017
  {:else}<Loader2 class="animate-spin" />
978
1018
  {/if}
979
- <div class="text-xs text-secondary"
980
- >Share this url directly or embed it using an iframe (if requiring login, top-level domain
981
- of embedding app must be the same as the one of Windmill)</div
982
- >
1019
+ <div class="text-xs text-secondary mt-1">
1020
+ Share this url directly or embed it using an iframe (if requiring login, top-level domain
1021
+ of embedding app must be the same as the one of Windmill)
1022
+ </div>
1023
+
1024
+ <div class="mt-4">
1025
+ {#if !$enterpriseLicense}
1026
+ <Alert title="EE Only" type="warning" size="xs">
1027
+ Custom path is an enterprise only feature.
1028
+ </Alert>
1029
+ <div class="mb-2" />
1030
+ {:else if !($userStore?.is_admin || $userStore?.is_super_admin)}
1031
+ <Alert type="warning" title="Admin only" size="xs">
1032
+ Custom path can only be set by workspace admins
1033
+ </Alert>
1034
+ <div class="mb-2" />
1035
+ {/if}
1036
+ <Toggle
1037
+ on:change={({ detail }) => {
1038
+ customPath = detail ? '' : undefined
1039
+ }}
1040
+ checked={customPath !== undefined}
1041
+ options={{
1042
+ right: 'Use a custom URL'
1043
+ }}
1044
+ disabled={!$enterpriseLicense || !($userStore?.is_admin || $userStore?.is_super_admin)}
1045
+ />
1046
+
1047
+ {#if customPath !== undefined}
1048
+ <div class="text-secondary text-sm flex items-center gap-1 w-full justify-between">
1049
+ <div>Custom path</div>
1050
+ </div>
1051
+ <input
1052
+ disabled={!($userStore?.is_admin || $userStore?.is_super_admin)}
1053
+ type="text"
1054
+ autocomplete="off"
1055
+ bind:value={customPath}
1056
+ class={customPathError === ''
1057
+ ? ''
1058
+ : 'border border-red-700 bg-red-100 border-opacity-30 focus:border-red-700 focus:border-opacity-30 focus-visible:ring-red-700 focus-visible:ring-opacity-25 focus-visible:border-red-700'}
1059
+ on:input={() => {
1060
+ dirtyCustomPath = true
1061
+ }}
1062
+ />
1063
+ <div class="text-secondary text-sm flex items-center gap-1 mt-2 w-full justify-between">
1064
+ <div>Custom public URL</div>
1065
+ </div>
1066
+ <ClipboardPanel content={fullCustomUrl} size="md" />
1067
+
1068
+ <div class="text-red-600 dark:text-red-400 text-2xs mt-1.5"
1069
+ >{dirtyCustomPath ? customPathError : ''}
1070
+ </div>
1071
+ {/if}
1072
+ </div>
983
1073
  </div>
984
1074
  <Alert type="info" title="Only latest deployed app is publicly available">
985
1075
  You will still need to deploy the app to make visible the latest changes
@@ -1149,7 +1239,7 @@ setTheme($app?.darkMode);
1149
1239
  </div>
1150
1240
  {/if}
1151
1241
 
1152
- {#if job?.job_kind !== 'flow' && job?.job_kind !== 'flowpreview'}
1242
+ {#if job?.job_kind !== 'flow' && !isFlowPreview(job?.job_kind)}
1153
1243
  {@const jobResult = $jobsById[selectedJobId]}
1154
1244
  <Splitpanes horizontal class="grow border w-full">
1155
1245
  <Pane size={50} minSize={10}>
@@ -1208,7 +1298,7 @@ setTheme($app?.darkMode);
1208
1298
  <FlowProgressBar {job} class="py-4" />
1209
1299
  <div class="w-full mt-10 mb-20">
1210
1300
  <FlowStatusViewer
1211
- jobId={job.id}
1301
+ jobId={job?.id ?? ''}
1212
1302
  on:jobsLoaded={({ detail }) => {
1213
1303
  job = detail
1214
1304
  }}
@@ -14,6 +14,7 @@ declare const __propDef: {
14
14
  summary: string;
15
15
  policy: any;
16
16
  draft_only?: boolean | undefined;
17
+ custom_path?: string | undefined;
17
18
  } | undefined;
18
19
  version?: number | undefined;
19
20
  leftPanelHidden?: boolean | undefined;
@@ -113,7 +113,7 @@ loadVersions();
113
113
  color="blue"
114
114
  buttonType="button"
115
115
  btnClasses="!p-1 !w-[34px] !ml-1"
116
- aria-label="Save Deployment Message"
116
+ aria-label="Save deployment message"
117
117
  on:click={() => {
118
118
  updateDeploymentMsg(selected?.id, selectedVersion?.version)
119
119
  }}
@@ -5,10 +5,11 @@ export let float = true;
5
5
  export let hidden = false;
6
6
  export let testJob = undefined;
7
7
  export let jobToWatch = undefined;
8
+ export let width = undefined;
8
9
  const { runnableJobEditorPanel, selectedComponentInEditor } = getContext('AppEditorContext');
9
10
  let testIsLoading = false;
10
11
  let testJobLoader;
11
- $: $runnableJobEditorPanel.focused &&
12
+ $: ($runnableJobEditorPanel.focused || !float) &&
12
13
  $selectedComponentInEditor &&
13
14
  $runnableJobEditorPanel.jobs &&
14
15
  updateSelectedJob();
@@ -49,7 +50,10 @@ let resultDrawerOpen = false;
49
50
  <RunnableJobPanelInner {testIsLoading} {frontendJob} {testJob} />
50
51
  </div>
51
52
  {:else}
52
- <div class="flex flex-col w-full">
53
+ <div
54
+ class="flex flex-col min-w-0 grow h-full"
55
+ style={width !== undefined ? `width:${width}px;` : ''}
56
+ >
53
57
  {#if $selectedComponentInEditor}
54
58
  <RunnableJobPanelInner {testIsLoading} {frontendJob} {testJob} />
55
59
  {:else if !hidden}
@@ -9,6 +9,7 @@ declare const __propDef: {
9
9
  componentId: string;
10
10
  job: string;
11
11
  } | undefined;
12
+ width?: number | undefined;
12
13
  };
13
14
  events: {
14
15
  [evt: string]: CustomEvent<any>;
@@ -107,4 +107,5 @@ export type GridShadow = {
107
107
  h: number;
108
108
  };
109
109
  export declare function areShadowsTheSame(shadow1: GridShadow | undefined, shadow2: GridShadow | undefined): boolean;
110
+ export declare function animateTo(start: number, end: number, onUpdate: (newValue: number) => void): void;
110
111
  export {};
@@ -887,3 +887,20 @@ export function areShadowsTheSame(shadow1, shadow2) {
887
887
  shadow1.w === shadow2.w &&
888
888
  shadow1.h === shadow2.h);
889
889
  }
890
+ export function animateTo(start, end, onUpdate) {
891
+ const duration = 400;
892
+ const startTime = performance.now();
893
+ function animate(time) {
894
+ const elapsed = time - startTime;
895
+ const progress = Math.min(elapsed / duration, 1);
896
+ const currentValue = start + (end - start) * easeInOut(progress);
897
+ onUpdate(currentValue);
898
+ if (progress < 1) {
899
+ requestAnimationFrame(animate);
900
+ }
901
+ }
902
+ requestAnimationFrame(animate);
903
+ }
904
+ function easeInOut(t) {
905
+ return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
906
+ }