windmill-components 1.542.5 → 1.555.0

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 (399) hide show
  1. package/package/aiStore.d.ts +13 -0
  2. package/package/aiStore.js +70 -0
  3. package/package/common.d.ts +6 -2
  4. package/package/components/AIAgentLogViewer.svelte +1 -1
  5. package/package/components/AIProviderPicker.svelte +25 -8
  6. package/package/components/ArgEnum.svelte +17 -7
  7. package/package/components/ArgEnum.svelte.d.ts +1 -0
  8. package/package/components/ArgInput.svelte +257 -188
  9. package/package/components/ArgInput.svelte.d.ts +4 -1
  10. package/package/components/ArrayTypeNarrowing.svelte +38 -32
  11. package/package/components/AutoscalingEvents.svelte +21 -5
  12. package/package/components/AutoscalingEvents.svelte.d.ts +4 -18
  13. package/package/components/ChannelSelector.svelte +92 -18
  14. package/package/components/ChannelSelector.svelte.d.ts +2 -0
  15. package/package/components/ConnectionSection.svelte +12 -1
  16. package/package/components/DateTimeInput.svelte +8 -6
  17. package/package/components/DeployButton.svelte +1 -1
  18. package/package/components/Dev.svelte +24 -9
  19. package/package/components/Dev.svelte.d.ts +23 -1
  20. package/package/components/DisplayResult.svelte +36 -23
  21. package/package/components/DropdownV2.svelte +8 -2
  22. package/package/components/DropdownV2.svelte.d.ts +1 -0
  23. package/package/components/DynamicInput.svelte +10 -10
  24. package/package/components/EditableSchemaForm.svelte +28 -13
  25. package/package/components/Editor.svelte +2 -1
  26. package/package/components/EditorSettings.svelte +5 -5
  27. package/package/components/EditorSettings.svelte.d.ts +4 -18
  28. package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
  29. package/package/components/FakeMonacoPlaceHolder.svelte +4 -2
  30. package/package/components/FakeMonacoPlaceHolder.svelte.d.ts +1 -0
  31. package/package/components/FieldHeader.svelte +5 -7
  32. package/package/components/FirstStepInputs.svelte +1 -1
  33. package/package/components/FlowHistoryJobPicker.svelte +3 -0
  34. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  35. package/package/components/FlowJobResult.svelte +5 -5
  36. package/package/components/FlowLogRow.svelte +2 -2
  37. package/package/components/FlowLogViewer.svelte +228 -57
  38. package/package/components/FlowLogViewer.svelte.d.ts +16 -5
  39. package/package/components/FlowLogViewerWrapper.svelte +56 -3
  40. package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
  41. package/package/components/FlowLoopIterationPreview.svelte +4 -4
  42. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  43. package/package/components/FlowMetadata.svelte +3 -4
  44. package/package/components/FlowMetadata.svelte.d.ts +4 -18
  45. package/package/components/FlowPlugConnect.svelte +8 -2
  46. package/package/components/FlowPlugConnect.svelte.d.ts +1 -0
  47. package/package/components/FlowPreviewContent.svelte +121 -94
  48. package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
  49. package/package/components/FlowStatusViewer.svelte +63 -59
  50. package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
  51. package/package/components/FlowStatusViewerInner.svelte +186 -94
  52. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
  53. package/package/components/FlowTimeline.svelte +110 -131
  54. package/package/components/FlowTimeline.svelte.d.ts +13 -4
  55. package/package/components/FlowTimelineBar.svelte +227 -0
  56. package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
  57. package/package/components/FolderEditor.svelte +6 -7
  58. package/package/components/GroupEditor.svelte +148 -141
  59. package/package/components/GroupEditor.svelte.d.ts +5 -4
  60. package/package/components/InputTransformForm.svelte +193 -71
  61. package/package/components/InputTransformForm.svelte.d.ts +3 -0
  62. package/package/components/InputTransformSchemaForm.svelte +10 -5
  63. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  64. package/package/components/InstanceSetting.svelte +34 -51
  65. package/package/components/InstanceSettings.svelte +12 -21
  66. package/package/components/JobArgs.svelte +15 -16
  67. package/package/components/JobArgs.svelte.d.ts +4 -18
  68. package/package/components/JobLoader.svelte +23 -42
  69. package/package/components/JobLoader.svelte.d.ts +2 -0
  70. package/package/components/JobStatus.svelte +1 -1
  71. package/package/components/JobStatus.svelte.d.ts +4 -18
  72. package/package/components/JsonEditor.svelte +18 -9
  73. package/package/components/JsonEditor.svelte.d.ts +1 -1
  74. package/package/components/JsonInputs.svelte +1 -1
  75. package/package/components/ModulePreviewForm.svelte +23 -19
  76. package/package/components/ModulePreviewResultViewer.svelte +1 -7
  77. package/package/components/NextcloudSetting.svelte +6 -1
  78. package/package/components/NumberTypeNarrowing.svelte +32 -16
  79. package/package/components/ObjectStoreConfigSettings.svelte +27 -19
  80. package/package/components/Password.svelte +7 -11
  81. package/package/components/Password.svelte.d.ts +5 -20
  82. package/package/components/PasswordArgInput.svelte +35 -15
  83. package/package/components/PasswordArgInput.svelte.d.ts +4 -18
  84. package/package/components/Path.svelte +2 -8
  85. package/package/components/Path.svelte.d.ts +1 -1
  86. package/package/components/QueuePosition.svelte +6 -2
  87. package/package/components/ResourceEditor.svelte +3 -10
  88. package/package/components/ResourcePicker.svelte +85 -72
  89. package/package/components/ResourcePicker.svelte.d.ts +2 -0
  90. package/package/components/RunChart.svelte +1 -1
  91. package/package/components/RunForm.svelte +16 -21
  92. package/package/components/S3ArrayHelperButton.svelte +18 -0
  93. package/package/components/S3ArrayHelperButton.svelte.d.ts +9 -0
  94. package/package/components/S3FilePicker.svelte +1 -1
  95. package/package/components/SchemaForm.svelte +18 -10
  96. package/package/components/SchemaForm.svelte.d.ts +7 -1
  97. package/package/components/SchemaFormWithArgPicker.svelte +1 -1
  98. package/package/components/ScriptBuilder.svelte +2 -2
  99. package/package/components/ScriptEditor.svelte +9 -9
  100. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  101. package/package/components/ShareModal.svelte +4 -4
  102. package/package/components/SimpleEditor.svelte +6 -2
  103. package/package/components/SimpleEditor.svelte.d.ts +3 -0
  104. package/package/components/StringTypeNarrowing.svelte +44 -25
  105. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  106. package/package/components/SuperadminSettingsInner.svelte +3 -3
  107. package/package/components/TeamSelector.svelte +83 -37
  108. package/package/components/TeamSelector.svelte.d.ts +0 -1
  109. package/package/components/TemplateEditor.svelte +18 -9
  110. package/package/components/Toast.svelte +2 -7
  111. package/package/components/Toast.svelte.d.ts +4 -18
  112. package/package/components/Toggle.svelte +17 -7
  113. package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
  114. package/package/components/WorkerGroup.svelte +2 -14
  115. package/package/components/apps/components/buttons/AppButton.svelte +66 -38
  116. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -2
  117. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -1
  118. package/package/components/apps/components/display/dbtable/utils.d.ts +8 -8
  119. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
  120. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
  121. package/package/components/apps/components/display/table/utils.js +14 -4
  122. package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
  123. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -5
  124. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  125. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -1
  126. package/package/components/apps/components/layout/AppTabs.svelte +116 -71
  127. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  128. package/package/components/apps/editor/AppEditorHeader.svelte +33 -271
  129. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +233 -0
  130. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +18 -0
  131. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +47 -0
  132. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +8 -0
  133. package/package/components/apps/editor/GridEditor.svelte +7 -2
  134. package/package/components/apps/editor/appDeploy.svelte.d.ts +1 -0
  135. package/package/components/apps/editor/appDeploy.svelte.js +6 -0
  136. package/package/components/apps/editor/appUtils.d.ts +1 -0
  137. package/package/components/apps/editor/appUtils.js +30 -1
  138. package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
  139. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -1
  140. package/package/components/apps/editor/component/components.d.ts +19 -4
  141. package/package/components/apps/editor/component/components.js +23 -3
  142. package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
  143. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -4
  144. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  145. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  146. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  147. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  148. package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
  149. package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
  150. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
  151. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
  152. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +58 -8
  153. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -1
  154. package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
  155. package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
  156. package/package/components/common/CloseButton.svelte +2 -2
  157. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  158. package/package/components/common/ResizeTransitionWrapper.svelte +39 -0
  159. package/package/components/common/ResizeTransitionWrapper.svelte.d.ts +12 -0
  160. package/package/components/common/badge/CountBadge.svelte +29 -0
  161. package/package/components/common/badge/CountBadge.svelte.d.ts +8 -0
  162. package/package/components/common/button/Button.svelte +1 -0
  163. package/package/components/common/button/ConnectionButton.svelte +6 -1
  164. package/package/components/common/button/ConnectionButton.svelte.d.ts +2 -0
  165. package/package/components/common/button/RefreshButton.svelte +8 -4
  166. package/package/components/common/button/RefreshButton.svelte.d.ts +3 -0
  167. package/package/components/common/calendarPicker/CalendarPicker.svelte +1 -1
  168. package/package/components/common/fileInput/FileInput.svelte +7 -6
  169. package/package/components/common/fileUpload/S3ArgInput.svelte +11 -9
  170. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +1 -0
  171. package/package/components/common/layout/List.svelte +3 -7
  172. package/package/components/common/layout/List.svelte.d.ts +7 -29
  173. package/package/components/common/popup/PopupV2.svelte +14 -25
  174. package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
  175. package/package/components/common/table/ScriptRow.svelte +22 -2
  176. package/package/components/common/toggleButton-v2/ToggleButton.svelte +17 -26
  177. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +16 -30
  178. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  179. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +3 -3
  180. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  181. package/package/components/copilot/CodeCompletionStatus.svelte +2 -1
  182. package/package/components/copilot/CronGen.svelte +1 -1
  183. package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
  184. package/package/components/copilot/FlowInlineScriptAIButton.svelte +2 -2
  185. package/package/components/copilot/IteratorGen.svelte +30 -25
  186. package/package/components/copilot/IteratorGen.svelte.d.ts +8 -7
  187. package/package/components/copilot/MetadataGen.svelte +4 -3
  188. package/package/components/copilot/PredicateGen.svelte +15 -12
  189. package/package/components/copilot/PredicateGen.svelte.d.ts +5 -4
  190. package/package/components/copilot/RegexGen.svelte +1 -1
  191. package/package/components/copilot/ScriptFix.svelte +1 -1
  192. package/package/components/copilot/ScriptGen.svelte +2 -1
  193. package/package/components/copilot/StepGenQuick.svelte +15 -16
  194. package/package/components/copilot/StepGenQuick.svelte.d.ts +14 -13
  195. package/package/components/copilot/StepInputGen.svelte +50 -36
  196. package/package/components/copilot/StepInputGen.svelte.d.ts +13 -10
  197. package/package/components/copilot/StepInputsGen.svelte +18 -19
  198. package/package/components/copilot/StepInputsGen.svelte.d.ts +4 -18
  199. package/package/components/copilot/autocomplete/Autocompletor.js +1 -1
  200. package/package/components/copilot/autocomplete/request.js +1 -1
  201. package/package/components/copilot/chat/AIChat.svelte +2 -1
  202. package/package/components/copilot/chat/AIChatManager.svelte.js +5 -3
  203. package/package/components/copilot/chat/AiChatLayout.svelte +2 -1
  204. package/package/components/copilot/chat/ProviderModelSelector.svelte +11 -10
  205. package/package/components/copilot/chat/ProviderModelSelector.svelte.d.ts +2 -17
  206. package/package/components/copilot/chat/flow/FlowAIButton.svelte +1 -1
  207. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
  208. package/package/components/copilot/chat/script/core.d.ts +4 -4
  209. package/package/components/copilot/chat/script/core.js +95 -35
  210. package/package/components/copilot/chat/shared.js +2 -1
  211. package/package/components/copilot/lib.d.ts +1 -0
  212. package/package/components/copilot/lib.js +7 -3
  213. package/package/components/custom_ui.d.ts +1 -0
  214. package/package/components/details/DetailPageLayout.svelte +3 -2
  215. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  216. package/package/components/flows/CreateActionsFlow.svelte +1 -1
  217. package/package/components/flows/FlowChatInterface.svelte +404 -0
  218. package/package/components/flows/FlowChatInterface.svelte.d.ts +19 -0
  219. package/package/components/flows/FlowChatMessage.svelte +41 -0
  220. package/package/components/flows/FlowChatMessage.svelte.d.ts +9 -0
  221. package/package/components/flows/FlowConversationsSidebar.svelte +213 -0
  222. package/package/components/flows/FlowConversationsSidebar.svelte.d.ts +15 -0
  223. package/package/components/flows/FlowEditor.svelte.d.ts +1 -1
  224. package/package/components/flows/FlowModuleIcon.svelte +10 -10
  225. package/package/components/flows/FlowProgressBar.svelte +16 -16
  226. package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
  227. package/package/components/flows/common/FlowCard.svelte +10 -2
  228. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  229. package/package/components/flows/common/FlowCardHeader.svelte +2 -1
  230. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  231. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
  232. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -1
  233. package/package/components/flows/content/FlowInput.svelte +381 -259
  234. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -1
  235. package/package/components/flows/content/FlowInputsQuick.svelte +56 -34
  236. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +3 -2
  237. package/package/components/flows/content/FlowModuleComponent.svelte +29 -11
  238. package/package/components/flows/flowInfers.d.ts +60 -0
  239. package/package/components/flows/flowInfers.js +72 -40
  240. package/package/components/flows/{flowStore.d.ts → flowStore.svelte.d.ts} +5 -1
  241. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -1
  242. package/package/components/flows/map/FlowErrorHandlerItem.svelte +4 -2
  243. package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
  244. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  245. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
  246. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  247. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -2
  248. package/package/components/flows/map/FlowStickyNode.svelte +2 -2
  249. package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
  250. package/package/components/flows/map/InsertModuleButton.svelte +8 -15
  251. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -4
  252. package/package/components/flows/map/InsertModuleInner.svelte +19 -20
  253. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +2 -2
  254. package/package/components/flows/map/MapItem.svelte +1 -1
  255. package/package/components/flows/map/VirtualItem.svelte +1 -2
  256. package/package/components/flows/pickers/PickHubScriptQuick.svelte +43 -52
  257. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +2 -1
  258. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +41 -26
  259. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
  260. package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
  261. package/package/components/flows/propPicker/PropPickerWrapper.svelte +1 -15
  262. package/package/components/git_sync/DetectionFlow.svelte +33 -44
  263. package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
  264. package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
  265. package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
  266. package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
  267. package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
  268. package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
  269. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
  270. package/package/components/git_sync/GitSyncSection.svelte +134 -14
  271. package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
  272. package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
  273. package/package/components/graph/FlowGraphV2.svelte +2 -1
  274. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  275. package/package/components/graph/graphBuilder.svelte.d.ts +2 -0
  276. package/package/components/graph/graphBuilder.svelte.js +1 -0
  277. package/package/components/graph/model.d.ts +5 -5
  278. package/package/components/graph/renderers/edges/BaseEdge.svelte +1 -0
  279. package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
  280. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
  281. package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
  282. package/package/components/graph/renderers/nodes/InputNode.svelte +13 -2
  283. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
  284. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -27
  285. package/package/components/home/ItemsList.svelte +1 -1
  286. package/package/components/instanceSettings.js +17 -0
  287. package/package/components/jobs/JobProgressBar.svelte +27 -21
  288. package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
  289. package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
  290. package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
  291. package/package/components/meltComponents/Popover.svelte +3 -2
  292. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  293. package/package/components/meltComponents/Tooltip.svelte +1 -1
  294. package/package/components/progressBar/ProgressBar.svelte +39 -53
  295. package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
  296. package/package/components/raw_apps/FileEditorIcon.svelte +1 -1
  297. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +4 -18
  298. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +2 -8
  299. package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +4 -18
  300. package/package/components/raw_apps/RawAppEditor.svelte +6 -7
  301. package/package/components/raw_apps/RawAppEditorHeader.svelte +48 -301
  302. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +18 -19
  303. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +10 -16
  304. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +13 -13
  305. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +8 -11
  306. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -2
  307. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
  308. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +7 -13
  309. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +8 -8
  310. package/package/components/raw_apps/RawAppPreview.svelte +3 -7
  311. package/package/components/raw_apps/RawAppPreview.svelte.d.ts +5 -19
  312. package/package/components/raw_apps/utils.d.ts +1 -1
  313. package/package/components/raw_apps/utils.js +3 -3
  314. package/package/components/runs/JobsLoader.svelte +1 -1
  315. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  316. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
  317. package/package/components/runs/RunOption.svelte +2 -2
  318. package/package/components/runs/RunsFilter.svelte +15 -12
  319. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  320. package/package/components/schema/AddPropertyV2.svelte +7 -4
  321. package/package/components/schema/EditableSchemaDrawer.svelte +19 -18
  322. package/package/components/schema/FlowPropertyEditor.svelte +9 -2
  323. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  324. package/package/components/schema/PropertyEditor.svelte +22 -26
  325. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  326. package/package/components/schema/SchemaFormDND.svelte +3 -2
  327. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  328. package/package/components/select/DraggableTags.svelte +2 -2
  329. package/package/components/select/MultiSelect.svelte +15 -9
  330. package/package/components/select/MultiSelect.svelte.d.ts +1 -0
  331. package/package/components/select/Select.svelte +12 -5
  332. package/package/components/select/Select.svelte.d.ts +11 -0
  333. package/package/components/select/SelectDropdown.svelte +98 -46
  334. package/package/components/select/SelectDropdown.svelte.d.ts +10 -0
  335. package/package/components/select/utils.svelte.js +2 -0
  336. package/package/components/settings/CreateToken.svelte +76 -49
  337. package/package/components/settings/WorkspaceUserSettings.svelte +111 -17
  338. package/package/components/sidebar/CriticalAlertTable.svelte +2 -1
  339. package/package/components/sidebar/Linkify.svelte +14 -0
  340. package/package/components/sidebar/Linkify.svelte.d.ts +5 -0
  341. package/package/components/sidebar/MenuLink.svelte +2 -1
  342. package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
  343. package/package/components/sidebar/SidebarContent.svelte +27 -27
  344. package/package/components/sidebar/WorkspaceMenu.svelte +8 -3
  345. package/package/components/table/Cell.svelte +7 -14
  346. package/package/components/table/Cell.svelte.d.ts +13 -35
  347. package/package/components/table/tableUtils.js +1 -1
  348. package/package/components/text_input/TextInput.svelte +30 -0
  349. package/package/components/text_input/TextInput.svelte.d.ts +17 -0
  350. package/package/components/triggers/AddTriggersButton.svelte +1 -0
  351. package/package/components/triggers/TriggersEditor.svelte +11 -1
  352. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  353. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  354. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
  355. package/package/components/triggers/gcp/utils.js +1 -0
  356. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
  357. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  358. package/package/components/triggers/triggers.svelte.js +8 -4
  359. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
  360. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
  361. package/package/components/triggers/websocket/utils.js +1 -0
  362. package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +2 -2
  363. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +3 -0
  364. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +49 -17
  365. package/package/components/tutorials/Tutorial.svelte +9 -0
  366. package/package/components/tutorials/Tutorial.svelte.d.ts +1 -0
  367. package/package/components/tutorials/app/AppTutorial.svelte +41 -57
  368. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +3 -5
  369. package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -2
  370. package/package/components/tutorials/utils.js +2 -154
  371. package/package/components/vscode.js +16 -8
  372. package/package/components/workspaceSettings/AISettings.svelte +12 -5
  373. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  374. package/package/components/workspaceSettings/CreateWorkspace.svelte +2 -2
  375. package/package/components/workspaceSettings/DucklakeSettings.svelte +64 -7
  376. package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
  377. package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
  378. package/package/components/workspaceSettings/StorageSettings.svelte +147 -77
  379. package/package/editorUtils.d.ts +1 -1
  380. package/package/gen/core/OpenAPI.js +1 -1
  381. package/package/gen/schemas.gen.d.ts +223 -17
  382. package/package/gen/schemas.gen.js +226 -17
  383. package/package/gen/services.gen.d.ts +221 -27
  384. package/package/gen/services.gen.js +440 -48
  385. package/package/gen/types.gen.d.ts +1067 -218
  386. package/package/hubPaths.json +2 -1
  387. package/package/script_helpers.js +5 -5
  388. package/package/services/JobManager.js +14 -9
  389. package/package/stores.d.ts +4 -12
  390. package/package/stores.js +5 -65
  391. package/package/timelineCompute.svelte.d.ts +21 -0
  392. package/package/timelineCompute.svelte.js +113 -0
  393. package/package/toast.js +2 -1
  394. package/package/utils.d.ts +16 -8
  395. package/package/utils.js +65 -12
  396. package/package/workspace_settings.d.ts +13 -8
  397. package/package/workspace_settings.js +46 -11
  398. package/package.json +4 -4
  399. /package/package/components/flows/{flowStore.js → flowStore.svelte.js} +0 -0
@@ -6,7 +6,8 @@ import CloseButton from '../common/CloseButton.svelte';
6
6
  import DraggableTags from './DraggableTags.svelte';
7
7
  import { Search } from 'lucide-svelte';
8
8
  import { twMerge } from 'tailwind-merge';
9
- let { items, placeholder = 'Select items', value = $bindable(), class: className = '', style, listAutoWidth = true, disabled = false, disablePortal = false, createText, reorderable = true, noItemsMsg, selectedUlClass = '', placeholderClass = '', allowClear = true, onOpen, groupBy, sortBy, onCreateItem } = $props();
9
+ import TextInput, { inputBorderClass } from '../text_input/TextInput.svelte';
10
+ let { items, placeholder = 'Select items', value = $bindable(), class: className = '', style, listAutoWidth = true, disabled = false, disablePortal = false, createText, reorderable = true, noItemsMsg, selectedUlClass = '', placeholderClass = '', allowClear = true, hideMainClearBtn = false, onOpen, groupBy, sortBy, onCreateItem } = $props();
10
11
  let filterText = $state('');
11
12
  let open = $state(false);
12
13
  let wrapperEl = $state();
@@ -44,7 +45,8 @@ function clearValue() {
44
45
  <div
45
46
  bind:this={wrapperEl}
46
47
  class={twMerge(
47
- 'relative min-h-8 flex items-center w-full bg-surface border border-gray-300 rounded-md text-tertiary',
48
+ 'relative min-h-10 flex items-center w-full bg-surface-secondary !text-secondary rounded-md',
49
+ inputBorderClass({ forceFocus: open && !disabled }),
48
50
  disabled ? 'pointer-events-none' : '',
49
51
  open && !disabled ? 'open' : '',
50
52
  disabled ? 'disabled' : '',
@@ -58,7 +60,9 @@ function clearValue() {
58
60
  <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
59
61
 
60
62
  {#if value.length === 0}
61
- <span class={twMerge('text-sm ml-2 h-full flex items-center flex-1', placeholderClass)}>
63
+ <span
64
+ class={twMerge('text-sm ml-4 h-full flex items-center flex-1 text-hint', placeholderClass)}
65
+ >
62
66
  {placeholder}
63
67
  </span>
64
68
  {:else}
@@ -79,10 +83,10 @@ function clearValue() {
79
83
  />
80
84
  </ul>
81
85
  {/if}
82
- {#if allowClear}
86
+ {#if allowClear && !hideMainClearBtn && !!value?.length}
83
87
  <CloseButton
84
88
  noBg
85
- class="mr-1 remove-all"
89
+ class="mr-1 remove-all bg-transparent text-hint"
86
90
  small
87
91
  on:close={(e) => (clearValue(), e.stopPropagation())}
88
92
  />
@@ -108,12 +112,14 @@ function clearValue() {
108
112
  {#snippet header()}
109
113
  {#if processedItems.length - value.length > 0 || onCreateItem}
110
114
  <div class="mx-2 mb-1 mt-2 flex items-center relative">
111
- <input
115
+ <TextInput
112
116
  bind:this={searchInputEl}
113
117
  bind:value={filterText}
114
- onblur={(e) => (e.preventDefault(), searchInputEl?.focus())}
115
- placeholder="Search"
116
- class="!pr-7"
118
+ inputProps={{
119
+ onblur: (e) => (e.preventDefault(), searchInputEl?.focus()),
120
+ placeholder: 'Search...'
121
+ }}
122
+ class="!pr-7 !bg-surface"
117
123
  />
118
124
  <Search size={16} class="absolute right-2 text-tertiary" />
119
125
  </div>
@@ -20,6 +20,7 @@ declare function $$render<Item extends {
20
20
  selectedUlClass?: string;
21
21
  placeholderClass?: string;
22
22
  allowClear?: boolean;
23
+ hideMainClearBtn?: boolean;
23
24
  groupBy?: (item: Item) => string;
24
25
  sortBy?: (a: Item, b: Item) => number;
25
26
  onOpen?: () => void;
@@ -6,7 +6,8 @@ import { untrack } from 'svelte';
6
6
  import { getLabel, processItems } from './utils.svelte';
7
7
  import SelectDropdown from './SelectDropdown.svelte';
8
8
  import { deepEqual } from 'fast-equals';
9
- let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, autofocus, RightIcon, createText, noItemsMsg, open = $bindable(false), id, groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem, startSnippet } = $props();
9
+ import { inputBaseClass, inputBorderClass } from '../text_input/TextInput.svelte';
10
+ let { items, placeholder = 'Please select', value = $bindable(), filterText = $bindable(''), class: className = '', clearable = false, listAutoWidth = true, disabled: _disabled = false, containerStyle = '', inputClass = '', disablePortal = false, loading = false, error = false, autofocus, RightIcon, createText, noItemsMsg, open = $bindable(false), id, itemLabelWrapperClasses, itemButtonWrapperClasses, groupBy, sortBy, onFocus, onBlur, onClear, onCreateItem, startSnippet, endSnippet, bottomSnippet } = $props();
10
11
  let disabled = $derived(_disabled || (loading && !value));
11
12
  let inputEl = $state();
12
13
  let processedItems = $derived.by(() => {
@@ -54,7 +55,7 @@ function clearValue() {
54
55
  </div>
55
56
  {:else if clearable && !disabled && value}
56
57
  <div class="absolute z-10 right-2 h-full flex items-center">
57
- <CloseButton class="text-secondary" noBg small on:close={clearValue} />
58
+ <CloseButton class="bg-transparent text-hint" noBg small on:close={clearValue} />
58
59
  </div>
59
60
  {:else if RightIcon}
60
61
  <div class="absolute z-10 right-2 h-full flex items-center">
@@ -72,10 +73,12 @@ function clearValue() {
72
73
  : (valueEntry?.label ?? getLabel({ value }) ?? placeholder)}
73
74
  style={containerStyle}
74
75
  class={twMerge(
75
- '!bg-surface text-ellipsis',
76
+ inputBaseClass,
77
+ inputBorderClass({ error, forceFocus: open }),
78
+ 'w-full',
76
79
  open ? '' : 'cursor-pointer',
77
- !loading && value ? '!placeholder-primary' : '',
78
- (clearable || RightIcon) && !disabled && value ? '!pr-8' : '',
80
+ !loading && value && !disabled ? '!placeholder-secondary' : 'placeholder-hint',
81
+ (clearable || RightIcon) && !disabled && value ? 'pr-8' : '',
79
82
  inputClass ?? ''
80
83
  )}
81
84
  autocomplete="off"
@@ -94,6 +97,10 @@ function clearValue() {
94
97
  getInputRect={inputEl && (() => inputEl!.getBoundingClientRect())}
95
98
  {listAutoWidth}
96
99
  {noItemsMsg}
100
+ {itemLabelWrapperClasses}
101
+ {itemButtonWrapperClasses}
97
102
  {startSnippet}
103
+ {endSnippet}
104
+ {bottomSnippet}
98
105
  />
99
106
  </div>
@@ -18,12 +18,15 @@ declare function $$render<Item extends {
18
18
  inputClass?: string;
19
19
  disablePortal?: boolean;
20
20
  loading?: boolean;
21
+ error?: boolean;
21
22
  autofocus?: boolean;
22
23
  RightIcon?: any;
23
24
  createText?: string;
24
25
  noItemsMsg?: string;
25
26
  open?: boolean;
26
27
  id?: string;
28
+ itemLabelWrapperClasses?: string;
29
+ itemButtonWrapperClasses?: string;
27
30
  groupBy?: (item: Item) => string;
28
31
  sortBy?: (a: Item, b: Item) => number;
29
32
  onFocus?: () => void;
@@ -32,6 +35,14 @@ declare function $$render<Item extends {
32
35
  onCreateItem?: (value: string) => void;
33
36
  startSnippet?: Snippet<[{
34
37
  item: ProcessedItem<Item["value"]>;
38
+ close: () => void;
39
+ }]>;
40
+ endSnippet?: Snippet<[{
41
+ item: ProcessedItem<Item["value"]>;
42
+ close: () => void;
43
+ }]>;
44
+ bottomSnippet?: Snippet<[{
45
+ close: () => void;
35
46
  }]>;
36
47
  };
37
48
  exports: {};
@@ -2,7 +2,7 @@
2
2
  import ConditionalPortal from '../common/drawer/ConditionalPortal.svelte';
3
3
  import { untrack } from 'svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
- let { processedItems: _processedItems, value, filterText, listAutoWidth = true, disabled, disablePortal = false, open, noItemsMsg = 'No items found', class: className = '', ulClass = '', header, getInputRect, onSelectValue, startSnippet } = $props();
5
+ let { processedItems: _processedItems, value, filterText, listAutoWidth = true, disabled, disablePortal = false, open, noItemsMsg = 'No items found', class: className = '', ulClass = '', itemLabelWrapperClasses = '', itemButtonWrapperClasses = '', header, getInputRect, onSelectValue, startSnippet, endSnippet, bottomSnippet } = $props();
6
6
  let processedItems = $derived(!filterText
7
7
  ? _processedItems
8
8
  : _processedItems?.filter((item) => item.__is_create || item?.label?.toLowerCase().includes(filterText?.toLowerCase())));
@@ -11,15 +11,15 @@ let dropdownPos = $state(computeDropdownPos());
11
11
  let keyArrowPos = $state();
12
12
  function computeDropdownPos() {
13
13
  if (!getInputRect || !listEl)
14
- return { width: 0, x: 0, y: 0 };
14
+ return { width: 0, height: 0, x: 0, y: 0, isBelow: true };
15
15
  let inputR = getInputRect();
16
16
  const listR = listEl.getBoundingClientRect();
17
- const openBelow = inputR.y + inputR.height + listR.height <= window.innerHeight;
17
+ const isBelow = inputR.y + inputR.height + listR.height <= window.innerHeight;
18
18
  let [x, y] = disablePortal ? [0, 0] : [inputR.x, inputR.y];
19
- if (openBelow)
20
- return { width: inputR.width, x: x, y: y + inputR.height };
19
+ if (isBelow)
20
+ return { width: inputR.width, height: listR.height, x: x, y: y + inputR.height, isBelow };
21
21
  else {
22
- return { width: inputR.width, x: x, y: y - listR.height };
22
+ return { width: inputR.width, height: listR.height, x: x, y: y - listR.height, isBelow };
23
23
  }
24
24
  }
25
25
  $effect(() => {
@@ -38,11 +38,47 @@ $effect(() => {
38
38
  [open, processedItems];
39
39
  untrack(() => (keyArrowPos = open && filterText ? 0 : undefined));
40
40
  });
41
+ // We do not want to render the dropdown when it is closed for performance reasons
42
+ // but we want to keep it in the DOM for a short time to allow for transitions to finish
43
+ //
44
+ // We do not use Svelte transitions because they can not animate in the opposite direction
45
+ // when the dropdown is opens above the input
46
+ // Also CSS transitions are smoother because they do not rely on JS / animation frames
47
+ let uiState = $state({ domExists: open, visible: open, timeout: null });
48
+ let initial = true;
49
+ $effect(() => {
50
+ let isOpen = open && !disabled;
51
+ untrack(() => {
52
+ if (initial) {
53
+ initial = false;
54
+ return;
55
+ }
56
+ if (uiState.timeout)
57
+ clearTimeout(uiState.timeout);
58
+ uiState = {
59
+ domExists: true,
60
+ visible: !isOpen,
61
+ timeout: setTimeout(() => {
62
+ if (isOpen) {
63
+ uiState.visible = true;
64
+ uiState.timeout = null;
65
+ }
66
+ else if (!isOpen) {
67
+ uiState.visible = false;
68
+ uiState.timeout = setTimeout(() => {
69
+ uiState.domExists = false;
70
+ uiState.timeout = null;
71
+ }, 500); // leave time for transition to finish
72
+ }
73
+ }, 0) // We need the height to be 0 then change immediately for the transition to play
74
+ };
75
+ });
76
+ });
41
77
  </script>
42
78
 
43
79
  <svelte:window
44
80
  on:keydown={(e) => {
45
- if (!open || !processedItems?.length) return
81
+ if (!uiState.visible || !processedItems?.length) return
46
82
  if (e.key === 'ArrowUp' && keyArrowPos !== undefined && processedItems.length > 0) {
47
83
  keyArrowPos = keyArrowPos <= 0 ? undefined : keyArrowPos - 1
48
84
  } else if (e.key === 'ArrowDown') {
@@ -62,55 +98,71 @@ $effect(() => {
62
98
  />
63
99
 
64
100
  <ConditionalPortal condition={!disablePortal} name="select-dropdown-portal">
65
- {#if open && !disabled}
101
+ {#if uiState.domExists}
66
102
  <div
67
103
  class={twMerge(
68
104
  disablePortal ? 'absolute' : 'fixed',
69
- 'flex flex-col z-[5001] max-h-64 overflow-y-auto bg-surface-secondary text-tertiary text-sm select-none border rounded-lg shadow-lg',
105
+ 'z-[5001] text-tertiary text-sm select-none',
106
+ dropdownPos.isBelow ? '' : 'flex flex-col justify-end',
107
+ uiState.visible ? '' : 'pointer-events-none',
70
108
  className
71
109
  )}
72
110
  style="{`top: ${dropdownPos.y}px; left: ${dropdownPos.x}px;`} {listAutoWidth
73
- ? `min-width: ${dropdownPos.width}px;`
111
+ ? `min-width: ${dropdownPos.width}px; height: ${dropdownPos.height}px;`
74
112
  : ''}"
75
- bind:this={listEl}
76
113
  >
77
- {@render header?.()}
78
- {#if processedItems?.length === 0}
79
- <div class="py-8 px-4 text-center text-primary">{noItemsMsg}</div>
80
- {/if}
81
- <ul class={twMerge('flex-1 overflow-y-auto flex flex-col', ulClass)}>
82
- {#each processedItems ?? [] as item, itemIndex}
83
- {#if (item.__select_group && itemIndex === 0) || processedItems?.[itemIndex - 1]?.__select_group !== item.__select_group}
84
- <li
85
- class={twMerge(
86
- 'mx-4 pb-1 mb-2 text-xs font-semibold text-primary border-b',
87
- itemIndex === 0 ? 'mt-3' : 'mt-6'
88
- )}
89
- >
90
- {item.__select_group}
91
- </li>
114
+ <div
115
+ class={twMerge(
116
+ 'overflow-clip rounded-md bg-surface-secondary shadow-lg transition-height',
117
+ dropdownPos.isBelow ? '' : 'flex flex-col justify-end'
118
+ )}
119
+ style="height: {uiState.visible ? dropdownPos.height : 0}px;"
120
+ >
121
+ <div bind:this={listEl} class="flex flex-col max-h-64 border rounded-md overflow-clip">
122
+ {@render header?.()}
123
+ {#if processedItems?.length === 0}
124
+ <div class="py-8 px-4 text-center text-primary">{noItemsMsg}</div>
92
125
  {/if}
93
- <li>
94
- <button
95
- class={twMerge(
96
- 'py-2 px-4 w-full font-normal text-left text-primary',
97
- itemIndex === keyArrowPos ? 'bg-surface-hover' : '',
98
- item.value === value ? 'bg-surface-selected' : 'hover:bg-surface-hover'
99
- )}
100
- onclick={(e) => {
101
- e.stopImmediatePropagation()
102
- onSelectValue(item)
103
- }}
104
- >
105
- {@render startSnippet?.({ item })}
106
- {item.label || '\xa0'}
107
- {#if item.subtitle}
108
- <div class="text-xs text-tertiary">{item.subtitle}</div>
126
+ <ul class={twMerge('flex-1 overflow-y-auto flex flex-col', ulClass)}>
127
+ {#each processedItems ?? [] as item, itemIndex}
128
+ {#if (item.__select_group && itemIndex === 0) || processedItems?.[itemIndex - 1]?.__select_group !== item.__select_group}
129
+ <li
130
+ class={twMerge(
131
+ 'mx-4 pb-1 mb-2 text-xs font-semibold text-primary border-b',
132
+ itemIndex === 0 ? 'mt-3' : 'mt-6'
133
+ )}
134
+ >
135
+ {item.__select_group}
136
+ </li>
109
137
  {/if}
110
- </button>
111
- </li>
112
- {/each}
113
- </ul>
138
+ <li>
139
+ <button
140
+ class={twMerge(
141
+ 'py-2 px-4 w-full font-normal text-left text-primary',
142
+ itemIndex === keyArrowPos ? 'bg-surface-hover' : '',
143
+ item.value === value ? 'bg-surface-selected' : 'hover:bg-surface-hover',
144
+ itemButtonWrapperClasses
145
+ )}
146
+ onclick={(e) => {
147
+ e.stopImmediatePropagation()
148
+ onSelectValue(item)
149
+ }}
150
+ >
151
+ {@render startSnippet?.({ item, close: () => (open = false) })}
152
+ <span class={itemLabelWrapperClasses}>
153
+ {item.label || '\xa0'}
154
+ </span>
155
+ {@render endSnippet?.({ item, close: () => (open = false) })}
156
+ {#if item.subtitle}
157
+ <div class="text-xs text-tertiary">{item.subtitle}</div>
158
+ {/if}
159
+ </button>
160
+ </li>
161
+ {/each}
162
+ </ul>
163
+ {@render bottomSnippet?.({ close: () => (open = false) })}
164
+ </div>
165
+ </div>
114
166
  </div>
115
167
  {/if}
116
168
  </ConditionalPortal>
@@ -12,11 +12,21 @@ declare function $$render<T>(): {
12
12
  noItemsMsg?: string;
13
13
  class?: string;
14
14
  ulClass?: string;
15
+ itemLabelWrapperClasses?: string;
16
+ itemButtonWrapperClasses?: string;
15
17
  header?: Snippet;
16
18
  getInputRect?: () => DOMRect;
17
19
  onSelectValue: (item: ProcessedItem<T>) => void;
18
20
  startSnippet?: Snippet<[{
19
21
  item: ProcessedItem<T>;
22
+ close: () => void;
23
+ }]>;
24
+ endSnippet?: Snippet<[{
25
+ item: ProcessedItem<T>;
26
+ close: () => void;
27
+ }]>;
28
+ bottomSnippet?: Snippet<[{
29
+ close: () => void;
20
30
  }]>;
21
31
  };
22
32
  exports: {};
@@ -39,6 +39,8 @@ export function getLabel(item) {
39
39
  export function safeSelectItems(list) {
40
40
  if (!list)
41
41
  return [];
42
+ if (!Array.isArray(list))
43
+ return [];
42
44
  return list
43
45
  .filter((item) => item !== undefined && item !== null)
44
46
  .map((item) => {
@@ -11,7 +11,11 @@ import TokenDisplay from './TokenDisplay.svelte';
11
11
  import ScopeSelector from './ScopeSelector.svelte';
12
12
  import Alert from '../common/alert/Alert.svelte';
13
13
  import FolderPicker from '../FolderPicker.svelte';
14
+ import TextInput from '../text_input/TextInput.svelte';
15
+ import Select from '../select/Select.svelte';
14
16
  let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined) } = $props();
17
+ // MCP clients do not allow names longer than 60 characters, here we use 55 because final tool name server side will add ~5 characters
18
+ const MAX_PATH_LENGTH = 55;
15
19
  let newToken = $state(undefined);
16
20
  let newMcpToken = $state(undefined);
17
21
  let newTokenExpiration = $state(undefined);
@@ -83,8 +87,15 @@ async function createToken(mcpMode = false) {
83
87
  }
84
88
  const workspaces = $derived(ensureCurrentWorkspaceIncluded($userWorkspaces, $workspaceStore));
85
89
  const mcpBaseUrl = $derived(`${window.location.origin}/api/mcp/w/${newTokenWorkspace}/sse?token=`);
86
- const warning = $derived(newMcpScope === 'favorites' ? `You do not have any favorite scripts or flows. You can favorite some scripts and flows to include them, or change the scope to "All scripts/flows" to include all your scripts and flows.` : 'Create your first scripts or flows to make them available via MCP.');
90
+ const warning = $derived(newMcpScope === 'favorites'
91
+ ? `You do not have any favorite scripts or flows. You can favorite some scripts and flows to include them, or change the scope to "All scripts/flows" to include all your scripts and flows.`
92
+ : 'Create your first scripts or flows to make them available via MCP.');
87
93
  const noScriptsOrFlowsAvailableWarning = $derived(includedRunnables.length === 0 ? warning : '');
94
+ const longPathRunnables = $derived(includedRunnables.filter((path) => path.length > MAX_PATH_LENGTH));
95
+ const validRunnables = $derived(includedRunnables.filter((path) => path.length <= MAX_PATH_LENGTH));
96
+ const longPathWarning = $derived(longPathRunnables.length > 0
97
+ ? `${longPathRunnables.length} script(s)/flow(s) have paths longer than 60 characters and will be excluded from MCP tools. Consider shortening the paths: ${longPathRunnables.slice(0, 3).join(', ')}${longPathRunnables.length > 3 ? ` and ${longPathRunnables.length - 3} more` : ''}`
98
+ : '');
88
99
  $effect(() => {
89
100
  if (mcpCreationMode) {
90
101
  getAllApps();
@@ -144,7 +155,10 @@ async function getScriptsAndFlows(favoriteOnly = false, workspace, folder) {
144
155
  }
145
156
  try {
146
157
  loadingRunnables = true;
147
- const [scripts, flows] = await Promise.all([getScripts(favoriteOnly, workspace, folder), getFlows(favoriteOnly, workspace, folder)]);
158
+ const [scripts, flows] = await Promise.all([
159
+ getScripts(favoriteOnly, workspace, folder),
160
+ getFlows(favoriteOnly, workspace, folder)
161
+ ]);
148
162
  const combined = [...scripts, ...flows];
149
163
  runnablesCache.set(cacheKey, combined);
150
164
  includedRunnables = combined;
@@ -301,7 +315,11 @@ $effect(() => {
301
315
 
302
316
  <div>
303
317
  <span class="block mb-1">Label <span class="text-xs text-tertiary">(optional)</span></span>
304
- <input type="text" bind:value={newTokenLabel} class="w-full" />
318
+ <TextInput
319
+ inputProps={{ type: 'text' }}
320
+ bind:value={newTokenLabel}
321
+ class="w-full !bg-surface"
322
+ />
305
323
  </div>
306
324
 
307
325
  {#if !mcpCreationMode}
@@ -309,58 +327,66 @@ $effect(() => {
309
327
  <span class="block mb-1"
310
328
  >Expires In <span class="text-xs text-tertiary">(optional)</span></span
311
329
  >
312
- <select bind:value={newTokenExpiration} class="w-full">
313
- <option value={undefined}>No expiration</option>
314
- <option value={15 * 60}>15m</option>
315
- <option value={30 * 60}>30m</option>
316
- <option value={1 * 60 * 60}>1h</option>
317
- <option value={1 * 24 * 60 * 60}>1d</option>
318
- <option value={7 * 24 * 60 * 60}>7d</option>
319
- <option value={30 * 24 * 60 * 60}>30d</option>
320
- <option value={90 * 24 * 60 * 60}>90d</option>
321
- </select>
330
+ <Select
331
+ bind:value={newTokenExpiration}
332
+ placeholder="No expiration"
333
+ inputClass="!bg-surface"
334
+ items={[
335
+ { label: 'No expiration', value: undefined },
336
+ { label: '15 minutes', value: 15 * 60 },
337
+ { label: '30 minutes', value: 30 * 60 },
338
+ { label: '1 hour', value: 1 * 60 * 60 },
339
+ { label: '1 day', value: 1 * 24 * 60 * 60 },
340
+ { label: '7 days', value: 7 * 24 * 60 * 60 },
341
+ { label: '30 days', value: 30 * 24 * 60 * 60 },
342
+ { label: '90 days', value: 90 * 24 * 60 * 60 }
343
+ ]}
344
+ />
322
345
  </div>
323
346
  {/if}
324
347
  {#if mcpCreationMode && (newMcpScope !== 'folder' || selectedFolder.length > 0)}
325
- {#if loadingRunnables}
326
- <div class="flex flex-col gap-2 col-span-2 pr-4">
327
- <span class="block text-xs text-tertiary">Scripts & Flows that will be available via MCP</span>
328
- <div class="flex flex-wrap gap-1">
329
- <Badge rounded small color="dark-gray" baseClass="animate-skeleton">Loading...</Badge>
330
- </div>
331
- </div>
332
- {:else}
333
- <div class="flex flex-col gap-2 col-span-2 pr-4">
334
- {#if noScriptsOrFlowsAvailableWarning}
335
- <Alert type="info" title="No scripts or flows available" size="xs">
336
- {noScriptsOrFlowsAvailableWarning}
337
- </Alert>
338
- {:else}
339
- <span class="block text-xs text-tertiary">Scripts & Flows that will be available via MCP</span>
348
+ {#if loadingRunnables}
349
+ <div class="flex flex-col gap-2 col-span-2 pr-4">
350
+ <span class="block text-xs text-tertiary"
351
+ >Scripts & Flows that will be available via MCP</span
352
+ >
340
353
  <div class="flex flex-wrap gap-1">
341
-
342
- {#if includedRunnables.length <= 5}
343
- {#each includedRunnables as scriptOrFlow}
344
- <Badge rounded small color="blue">{scriptOrFlow}</Badge>
345
- {/each}
354
+ <Badge rounded small color="dark-gray" baseClass="animate-skeleton">Loading...</Badge>
355
+ </div>
356
+ </div>
357
+ {:else}
358
+ <div class="flex flex-col gap-2 col-span-2 pr-4">
359
+ {#if noScriptsOrFlowsAvailableWarning}
360
+ <Alert type="info" title="No scripts or flows available" size="xs">
361
+ {noScriptsOrFlowsAvailableWarning}
362
+ </Alert>
346
363
  {:else}
347
- {#each includedRunnables.slice(0, 3) as scriptOrFlow}
348
- <Badge rounded small color="blue">{scriptOrFlow}</Badge>
349
- {/each}
350
- <Badge
351
- rounded
352
- small
353
- color="dark-gray"
354
- >
355
- +{includedRunnables.length - 3} more
356
- </Badge>
364
+ {#if longPathWarning}
365
+ <Alert type="warning" title="Some paths are too long" size="xs">
366
+ {longPathWarning}
367
+ </Alert>
357
368
  {/if}
358
- </div>
359
- {/if}
360
- </div>
361
- {/if}
369
+ <span class="block text-xs text-tertiary"
370
+ >Scripts & Flows that will be available via MCP</span
371
+ >
372
+ <div class="flex flex-wrap gap-1">
373
+ {#if validRunnables.length <= 5}
374
+ {#each validRunnables as scriptOrFlow}
375
+ <Badge rounded small color="blue">{scriptOrFlow}</Badge>
376
+ {/each}
377
+ {:else}
378
+ {#each validRunnables.slice(0, 3) as scriptOrFlow}
379
+ <Badge rounded small color="blue">{scriptOrFlow}</Badge>
380
+ {/each}
381
+ <Badge rounded small color="dark-gray">
382
+ +{validRunnables.length - 3} more
383
+ </Badge>
384
+ {/if}
385
+ </div>
386
+ {/if}
387
+ </div>
388
+ {/if}
362
389
  {/if}
363
-
364
390
  </div>
365
391
 
366
392
  <div class="mt-4 flex justify-end gap-2 flex-row">
@@ -373,7 +399,8 @@ $effect(() => {
373
399
  </Button>
374
400
  <Button
375
401
  on:click={() => createToken(mcpCreationMode)}
376
- disabled={mcpCreationMode && (newTokenWorkspace == undefined || (newMcpScope === 'folder' && !selectedFolder))}
402
+ disabled={mcpCreationMode &&
403
+ (newTokenWorkspace == undefined || (newMcpScope === 'folder' && !selectedFolder))}
377
404
  >
378
405
  New token
379
406
  </Button>