windmill-components 1.550.0 → 1.555.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 (268) hide show
  1. package/package/aiStore.d.ts +13 -0
  2. package/package/aiStore.js +70 -0
  3. package/package/common.d.ts +2 -1
  4. package/package/components/AIProviderPicker.svelte +25 -8
  5. package/package/components/ArgEnum.svelte +3 -2
  6. package/package/components/ArgEnum.svelte.d.ts +1 -0
  7. package/package/components/ArgInput.svelte +235 -174
  8. package/package/components/ArgInput.svelte.d.ts +4 -1
  9. package/package/components/ArrayTypeNarrowing.svelte +38 -32
  10. package/package/components/AutoscalingEvents.svelte +21 -5
  11. package/package/components/AutoscalingEvents.svelte.d.ts +4 -18
  12. package/package/components/DateTimeInput.svelte +8 -6
  13. package/package/components/DeployButton.svelte +1 -1
  14. package/package/components/Dev.svelte +6 -4
  15. package/package/components/EditableSchemaForm.svelte +7 -6
  16. package/package/components/Editor.svelte +2 -1
  17. package/package/components/EditorSettings.svelte +5 -5
  18. package/package/components/EditorSettings.svelte.d.ts +4 -18
  19. package/package/components/FakeMonacoPlaceHolder.svelte +4 -2
  20. package/package/components/FakeMonacoPlaceHolder.svelte.d.ts +1 -0
  21. package/package/components/FieldHeader.svelte +5 -7
  22. package/package/components/FirstStepInputs.svelte +1 -1
  23. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  24. package/package/components/FlowPlugConnect.svelte +8 -2
  25. package/package/components/FlowPlugConnect.svelte.d.ts +1 -0
  26. package/package/components/FlowPreviewContent.svelte +113 -92
  27. package/package/components/FlowPreviewContent.svelte.d.ts +3 -3
  28. package/package/components/FlowStatusViewer.svelte +3 -2
  29. package/package/components/FlowStatusViewerInner.svelte +1 -1
  30. package/package/components/FolderEditor.svelte +6 -7
  31. package/package/components/GroupEditor.svelte +148 -141
  32. package/package/components/GroupEditor.svelte.d.ts +5 -4
  33. package/package/components/InputTransformForm.svelte +88 -82
  34. package/package/components/InputTransformSchemaForm.svelte +5 -4
  35. package/package/components/InstanceSetting.svelte +17 -9
  36. package/package/components/JsonEditor.svelte +18 -9
  37. package/package/components/JsonEditor.svelte.d.ts +1 -1
  38. package/package/components/JsonInputs.svelte +1 -1
  39. package/package/components/ModulePreviewForm.svelte +23 -19
  40. package/package/components/NumberTypeNarrowing.svelte +32 -16
  41. package/package/components/ObjectStoreConfigSettings.svelte +27 -19
  42. package/package/components/Path.svelte +2 -8
  43. package/package/components/Path.svelte.d.ts +1 -1
  44. package/package/components/ResourceEditor.svelte +3 -10
  45. package/package/components/ResourcePicker.svelte +85 -72
  46. package/package/components/ResourcePicker.svelte.d.ts +2 -0
  47. package/package/components/RunChart.svelte +1 -1
  48. package/package/components/RunForm.svelte +11 -7
  49. package/package/components/S3ArrayHelperButton.svelte +12 -6
  50. package/package/components/S3ArrayHelperButton.svelte.d.ts +1 -0
  51. package/package/components/S3FilePicker.svelte +1 -1
  52. package/package/components/SchemaForm.svelte +18 -10
  53. package/package/components/SchemaForm.svelte.d.ts +7 -1
  54. package/package/components/SchemaFormWithArgPicker.svelte +1 -1
  55. package/package/components/ScriptBuilder.svelte +2 -2
  56. package/package/components/ScriptEditor.svelte +4 -3
  57. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  58. package/package/components/ShareModal.svelte +4 -4
  59. package/package/components/SimpleEditor.svelte +6 -2
  60. package/package/components/SimpleEditor.svelte.d.ts +3 -0
  61. package/package/components/StringTypeNarrowing.svelte +5 -1
  62. package/package/components/SuperadminSettingsInner.svelte +3 -3
  63. package/package/components/TemplateEditor.svelte +18 -9
  64. package/package/components/Toast.svelte +2 -7
  65. package/package/components/Toast.svelte.d.ts +4 -18
  66. package/package/components/Toggle.svelte +17 -7
  67. package/package/components/ToggleHubWorkspaceQuick.svelte +3 -3
  68. package/package/components/WorkerGroup.svelte +2 -14
  69. package/package/components/apps/components/buttons/AppButton.svelte +57 -39
  70. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -2
  71. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -1
  72. package/package/components/apps/components/display/dbtable/utils.d.ts +8 -8
  73. package/package/components/apps/components/display/table/utils.js +13 -3
  74. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -3
  75. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -1
  76. package/package/components/apps/editor/AppEditorHeader.svelte +33 -271
  77. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +233 -0
  78. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +18 -0
  79. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +47 -0
  80. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +8 -0
  81. package/package/components/apps/editor/GridEditor.svelte +7 -2
  82. package/package/components/apps/editor/appDeploy.svelte.d.ts +1 -0
  83. package/package/components/apps/editor/appDeploy.svelte.js +6 -0
  84. package/package/components/apps/editor/appUtils.d.ts +1 -0
  85. package/package/components/apps/editor/appUtils.js +30 -1
  86. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -1
  87. package/package/components/apps/editor/component/components.d.ts +3 -3
  88. package/package/components/apps/editor/component/components.js +1 -1
  89. package/package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
  90. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -4
  91. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  92. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  93. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  94. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +58 -8
  95. package/package/components/auditLogs/AuditLogsFilters.svelte +1 -1
  96. package/package/components/common/ResizeTransitionWrapper.svelte +39 -0
  97. package/package/components/common/ResizeTransitionWrapper.svelte.d.ts +12 -0
  98. package/package/components/common/badge/CountBadge.svelte +29 -0
  99. package/package/components/common/badge/CountBadge.svelte.d.ts +8 -0
  100. package/package/components/common/button/Button.svelte +1 -0
  101. package/package/components/common/button/ConnectionButton.svelte +6 -1
  102. package/package/components/common/button/ConnectionButton.svelte.d.ts +2 -0
  103. package/package/components/common/button/RefreshButton.svelte +8 -4
  104. package/package/components/common/button/RefreshButton.svelte.d.ts +3 -0
  105. package/package/components/common/calendarPicker/CalendarPicker.svelte +1 -1
  106. package/package/components/common/fileInput/FileInput.svelte +7 -6
  107. package/package/components/common/fileUpload/S3ArgInput.svelte +11 -9
  108. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +1 -0
  109. package/package/components/common/popup/PopupV2.svelte +6 -0
  110. package/package/components/common/toggleButton-v2/ToggleButton.svelte +17 -26
  111. package/package/components/common/toggleButton-v2/ToggleButton.svelte.d.ts +16 -30
  112. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  113. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +3 -3
  114. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  115. package/package/components/copilot/CodeCompletionStatus.svelte +2 -1
  116. package/package/components/copilot/CronGen.svelte +1 -1
  117. package/package/components/copilot/FlowInlineScriptAIButton.svelte +2 -2
  118. package/package/components/copilot/IteratorGen.svelte +30 -25
  119. package/package/components/copilot/IteratorGen.svelte.d.ts +8 -7
  120. package/package/components/copilot/MetadataGen.svelte +4 -3
  121. package/package/components/copilot/PredicateGen.svelte +15 -12
  122. package/package/components/copilot/PredicateGen.svelte.d.ts +5 -4
  123. package/package/components/copilot/RegexGen.svelte +1 -1
  124. package/package/components/copilot/ScriptFix.svelte +1 -1
  125. package/package/components/copilot/ScriptGen.svelte +2 -1
  126. package/package/components/copilot/StepGenQuick.svelte +15 -16
  127. package/package/components/copilot/StepGenQuick.svelte.d.ts +14 -13
  128. package/package/components/copilot/StepInputGen.svelte +50 -36
  129. package/package/components/copilot/StepInputGen.svelte.d.ts +13 -10
  130. package/package/components/copilot/StepInputsGen.svelte +18 -19
  131. package/package/components/copilot/StepInputsGen.svelte.d.ts +4 -18
  132. package/package/components/copilot/autocomplete/Autocompletor.js +1 -1
  133. package/package/components/copilot/autocomplete/request.js +1 -1
  134. package/package/components/copilot/chat/AIChat.svelte +2 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +2 -1
  136. package/package/components/copilot/chat/AiChatLayout.svelte +2 -1
  137. package/package/components/copilot/chat/ProviderModelSelector.svelte +10 -9
  138. package/package/components/copilot/chat/ProviderModelSelector.svelte.d.ts +2 -17
  139. package/package/components/copilot/chat/flow/FlowAIButton.svelte +1 -1
  140. package/package/components/copilot/chat/script/core.js +2 -1
  141. package/package/components/copilot/chat/shared.js +2 -1
  142. package/package/components/copilot/lib.js +2 -1
  143. package/package/components/details/DetailPageLayout.svelte +3 -2
  144. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  145. package/package/components/flows/CreateActionsFlow.svelte +1 -1
  146. package/package/components/flows/FlowChatInterface.svelte +404 -0
  147. package/package/components/flows/FlowChatInterface.svelte.d.ts +19 -0
  148. package/package/components/flows/FlowChatMessage.svelte +41 -0
  149. package/package/components/flows/FlowChatMessage.svelte.d.ts +9 -0
  150. package/package/components/flows/FlowConversationsSidebar.svelte +213 -0
  151. package/package/components/flows/FlowConversationsSidebar.svelte.d.ts +15 -0
  152. package/package/components/flows/FlowEditor.svelte.d.ts +1 -1
  153. package/package/components/flows/FlowModuleIcon.svelte +10 -10
  154. package/package/components/flows/common/FlowCard.svelte +10 -2
  155. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  156. package/package/components/flows/common/FlowCardHeader.svelte +2 -1
  157. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  158. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
  159. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -1
  160. package/package/components/flows/content/FlowInput.svelte +381 -259
  161. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -1
  162. package/package/components/flows/content/FlowInputsQuick.svelte +55 -34
  163. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +2 -2
  164. package/package/components/flows/content/FlowModuleComponent.svelte +5 -10
  165. package/package/components/flows/flowInfers.d.ts +60 -0
  166. package/package/components/flows/flowInfers.js +72 -66
  167. package/package/components/flows/{flowStore.d.ts → flowStore.svelte.d.ts} +1 -0
  168. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -1
  169. package/package/components/flows/map/FlowErrorHandlerItem.svelte +4 -2
  170. package/package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -0
  171. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  172. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -2
  173. package/package/components/flows/map/FlowStickyNode.svelte +2 -2
  174. package/package/components/flows/map/FlowStickyNode.svelte.d.ts +1 -0
  175. package/package/components/flows/map/InsertModuleButton.svelte +5 -2
  176. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -3
  177. package/package/components/flows/map/InsertModuleInner.svelte +3 -1
  178. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +2 -2
  179. package/package/components/flows/map/VirtualItem.svelte +1 -2
  180. package/package/components/flows/pickers/PickHubScriptQuick.svelte +8 -3
  181. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
  182. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +15 -12
  183. package/package/components/flows/propPicker/PropPickerWrapper.svelte +1 -15
  184. package/package/components/graph/FlowGraphV2.svelte +2 -1
  185. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  186. package/package/components/graph/graphBuilder.svelte.d.ts +2 -0
  187. package/package/components/graph/graphBuilder.svelte.js +1 -0
  188. package/package/components/graph/renderers/edges/BaseEdge.svelte +1 -0
  189. package/package/components/graph/renderers/nodes/InputNode.svelte +13 -2
  190. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +2 -27
  191. package/package/components/instanceSettings.js +17 -0
  192. package/package/components/progressBar/ProgressBar.svelte +1 -1
  193. package/package/components/raw_apps/FileEditorIcon.svelte +1 -1
  194. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +4 -18
  195. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +2 -8
  196. package/package/components/raw_apps/RawAppBackgroundRunner.svelte.d.ts +4 -18
  197. package/package/components/raw_apps/RawAppEditor.svelte +6 -7
  198. package/package/components/raw_apps/RawAppEditorHeader.svelte +48 -301
  199. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +18 -19
  200. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +10 -16
  201. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +13 -13
  202. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +8 -11
  203. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -2
  204. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +0 -1
  205. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +7 -13
  206. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +8 -8
  207. package/package/components/raw_apps/RawAppPreview.svelte +3 -7
  208. package/package/components/raw_apps/RawAppPreview.svelte.d.ts +5 -19
  209. package/package/components/raw_apps/utils.d.ts +1 -1
  210. package/package/components/raw_apps/utils.js +3 -3
  211. package/package/components/runs/RunOption.svelte +2 -2
  212. package/package/components/runs/RunsFilter.svelte +15 -12
  213. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  214. package/package/components/schema/EditableSchemaDrawer.svelte +19 -18
  215. package/package/components/schema/FlowPropertyEditor.svelte +9 -2
  216. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  217. package/package/components/schema/PropertyEditor.svelte +22 -26
  218. package/package/components/schema/SchemaFormDND.svelte +3 -2
  219. package/package/components/schema/SchemaFormDND.svelte.d.ts +1 -0
  220. package/package/components/select/DraggableTags.svelte +2 -2
  221. package/package/components/select/MultiSelect.svelte +14 -8
  222. package/package/components/select/Select.svelte +12 -5
  223. package/package/components/select/Select.svelte.d.ts +11 -0
  224. package/package/components/select/SelectDropdown.svelte +98 -46
  225. package/package/components/select/SelectDropdown.svelte.d.ts +10 -0
  226. package/package/components/select/utils.svelte.js +2 -0
  227. package/package/components/settings/CreateToken.svelte +76 -49
  228. package/package/components/settings/WorkspaceUserSettings.svelte +20 -17
  229. package/package/components/sidebar/CriticalAlertTable.svelte +2 -1
  230. package/package/components/sidebar/Linkify.svelte +14 -0
  231. package/package/components/sidebar/Linkify.svelte.d.ts +5 -0
  232. package/package/components/sidebar/WorkspaceMenu.svelte +8 -3
  233. package/package/components/table/tableUtils.js +1 -1
  234. package/package/components/text_input/TextInput.svelte +30 -0
  235. package/package/components/text_input/TextInput.svelte.d.ts +17 -0
  236. package/package/components/triggers/TriggersEditor.svelte +11 -1
  237. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  238. package/package/components/triggers/triggers.svelte.js +8 -4
  239. package/package/components/tutorials/FlowBuilderTutorialErrorHandler.svelte +2 -2
  240. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +3 -0
  241. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +49 -17
  242. package/package/components/tutorials/Tutorial.svelte +9 -0
  243. package/package/components/tutorials/Tutorial.svelte.d.ts +1 -0
  244. package/package/components/tutorials/app/AppTutorial.svelte +41 -57
  245. package/package/components/tutorials/app/BackgroundRunnablesTutorial.svelte +3 -5
  246. package/package/components/tutorials/app/ConnectionTutorial.svelte +2 -2
  247. package/package/components/tutorials/utils.js +2 -154
  248. package/package/components/vscode.js +16 -8
  249. package/package/components/workspaceSettings/AISettings.svelte +4 -3
  250. package/package/components/workspaceSettings/CreateWorkspace.svelte +2 -2
  251. package/package/components/workspaceSettings/DucklakeSettings.svelte +64 -7
  252. package/package/components/workspaceSettings/StorageSettings.svelte +24 -26
  253. package/package/editorUtils.d.ts +1 -1
  254. package/package/gen/core/OpenAPI.js +1 -1
  255. package/package/gen/schemas.gen.d.ts +82 -1
  256. package/package/gen/schemas.gen.js +82 -1
  257. package/package/gen/services.gen.d.ts +175 -1
  258. package/package/gen/services.gen.js +345 -2
  259. package/package/gen/types.gen.d.ts +1324 -549
  260. package/package/script_helpers.js +5 -5
  261. package/package/services/JobManager.js +4 -2
  262. package/package/stores.d.ts +4 -13
  263. package/package/stores.js +5 -68
  264. package/package/toast.js +2 -1
  265. package/package/utils.d.ts +1 -0
  266. package/package/utils.js +3 -0
  267. package/package.json +5 -5
  268. /package/package/components/flows/{flowStore.js → flowStore.svelte.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  interface Props {
2
2
  noEditor: boolean;
3
3
  disabled: boolean;
4
- onTestFlow?: () => void;
4
+ onTestFlow?: () => Promise<string | undefined>;
5
5
  previewOpen: boolean;
6
6
  }
7
7
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
@@ -1,15 +1,17 @@
1
+ <script module lang="ts">"use strict";
2
+ let cachedOwners = {};
3
+ let cachedIntegrations = [];
4
+ </script>
5
+
1
6
  <script lang="ts">import { isCloudHosted } from '../../../cloud';
2
7
  import { sendUserToast } from '../../../toast';
3
8
  import FlowScriptPickerQuick from '../pickers/FlowScriptPickerQuick.svelte';
4
- import WorkspaceScriptPickerQuick from '../pickers/WorkspaceScriptPickerQuick.svelte';
5
9
  import { defaultScriptLanguages, processLangs } from '../../../scripts';
6
- import { defaultScripts, enterpriseLicense, userStore } from '../../../stores';
10
+ import { defaultScripts, enterpriseLicense, userStore, workspaceStore } from '../../../stores';
7
11
  import { createEventDispatcher, getContext, onDestroy, onMount, untrack } from 'svelte';
8
- import PickHubScriptQuick from '../pickers/PickHubScriptQuick.svelte';
9
12
  import {} from '../../../gen';
10
13
  import ListFiltersQuick from '../../home/ListFiltersQuick.svelte';
11
14
  import { Folder, User } from 'lucide-svelte';
12
- import { copilotInfo } from '../../../stores';
13
15
  import { twMerge } from 'tailwind-merge';
14
16
  import { fade } from 'svelte/transition';
15
17
  import { flip } from 'svelte/animate';
@@ -19,14 +21,18 @@ import { SettingsIcon } from 'lucide-svelte';
19
21
  import DefaultScriptsInner from '../../DefaultScriptsInner.svelte';
20
22
  import GenAiQuick from './GenAiQuick.svelte';
21
23
  import FlowToplevelNode from '../pickers/FlowToplevelNode.svelte';
24
+ import { copilotInfo } from '../../../aiStore';
22
25
  const dispatch = createEventDispatcher();
23
26
  let { summary = undefined, filter = $bindable(''), disableAi = false, preFilter = 'hub', funcDesc, owners = $bindable([]), loading = $bindable(false), small = false, kind, selectedKind = kind, displayPath = false, refreshCount = 0 } = $props();
27
+ if ($workspaceStore && cachedOwners?.[$workspaceStore]) {
28
+ owners = cachedOwners[$workspaceStore];
29
+ }
24
30
  let lang = $state(undefined);
25
31
  let filteredWorkspaceItems = $state([]);
26
32
  let hubCompletions = $state([]);
27
33
  const { insertButtonOpen } = getContext('FlowEditorContext');
28
34
  let selected = $state(undefined);
29
- let integrations = $state([]);
35
+ let integrations = $state(cachedIntegrations);
30
36
  let customUi = getContext('customUi');
31
37
  function displayLang(lang, kind) {
32
38
  if (kind == 'trigger') {
@@ -365,41 +371,56 @@ let aiLength = $derived(funcDesc?.length > 0 && !disableAi && selectedKind != 'f
365
371
  {#if !selected && (preFilter !== 'workspace' || funcDesc?.length > 0)}
366
372
  <div class="pt-2 pb-0 text-2xs font-light text-secondary ml-2">Workspace</div>
367
373
  {/if}
368
- <WorkspaceScriptPickerQuick
369
- bind:owners
370
- bind:ownerFilter={selected}
371
- bind:filteredWithOwner={filteredWorkspaceItems}
372
- {filter}
373
- kind={selectedKind}
374
- selected={selectedByKeyboard - inlineScripts?.length - aiLength - topLevelNodes.length}
375
- on:pickScript
376
- on:pickFlow
377
- {displayPath}
378
- {refreshCount}
379
- />
374
+ {#await import('../pickers/WorkspaceScriptPickerQuick.svelte') then Module}
375
+ <Module.default
376
+ bind:owners={
377
+ () => owners,
378
+ (v) => {
379
+ $workspaceStore && (cachedOwners[$workspaceStore] = v)
380
+ owners = v
381
+ }
382
+ }
383
+ bind:ownerFilter={selected}
384
+ bind:filteredWithOwner={filteredWorkspaceItems}
385
+ {filter}
386
+ kind={selectedKind}
387
+ selected={selectedByKeyboard - inlineScripts?.length - aiLength - topLevelNodes.length}
388
+ on:pickScript
389
+ on:pickFlow
390
+ {displayPath}
391
+ {refreshCount}
392
+ />
393
+ {/await}
380
394
  {/if}
381
395
  {#if selectedKind != 'preprocessor' && selectedKind != 'flow'}
382
396
  {#if (!selected || selected?.kind === 'integrations') && (preFilter === 'hub' || preFilter === 'all')}
383
397
  {#if !selected && preFilter !== 'hub'}
384
398
  <div class=" pb-0 text-2xs font-light text-secondary ml-2">Hub</div>
385
399
  {/if}
386
-
387
- <PickHubScriptQuick
388
- bind:items={hubCompletions}
389
- bind:filter
390
- bind:apps={integrations}
391
- appFilter={selected?.name}
392
- kind={selectedKind}
393
- selected={selectedByKeyboard -
394
- inlineScripts?.length -
395
- aiLength -
396
- filteredWorkspaceItems?.length -
397
- topLevelNodes.length}
398
- on:pickScript
399
- bind:loading
400
- {displayPath}
401
- {refreshCount}
402
- />
400
+ {#await import('../pickers/PickHubScriptQuick.svelte') then Module}
401
+ <Module.default
402
+ bind:items={hubCompletions}
403
+ bind:filter
404
+ bind:apps={
405
+ () => integrations,
406
+ (v) => {
407
+ cachedIntegrations = v
408
+ integrations = v
409
+ }
410
+ }
411
+ appFilter={selected?.name}
412
+ kind={selectedKind}
413
+ selected={selectedByKeyboard -
414
+ inlineScripts?.length -
415
+ aiLength -
416
+ filteredWorkspaceItems?.length -
417
+ topLevelNodes.length}
418
+ on:pickScript
419
+ bind:loading
420
+ {displayPath}
421
+ {refreshCount}
422
+ />
423
+ {/await}
403
424
  {/if}
404
425
  {/if}
405
426
  </Scrollable>
@@ -26,8 +26,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
26
26
  z_$$bindings?: Bindings;
27
27
  }
28
28
  declare const FlowInputsQuick: $$__sveltets_2_IsomorphicComponent<Props, {
29
- pickScript: CustomEvent<any>;
30
- pickFlow: CustomEvent<any>;
29
+ pickScript: any;
30
+ pickFlow: any;
31
31
  new: CustomEvent<any>;
32
32
  } & {
33
33
  [evt: string]: CustomEvent<any>;
@@ -486,7 +486,7 @@ function onJobDone() {
486
486
  ></div>
487
487
  {/if}
488
488
  <InputTransformSchemaForm
489
- class="px-1 xl:px-2"
489
+ class="px-2 xl:px-4"
490
490
  bind:this={inputTransformSchemaForm}
491
491
  pickableProperties={stepPropPicker.pickableProperties}
492
492
  schema={flowStateStore.val[$selectedId]?.schema ?? {}}
@@ -766,19 +766,14 @@ function onJobDone() {
766
766
  {#if flowModule.value['language'] === 'deno'}
767
767
  <ToggleButton
768
768
  value="s3_client"
769
- size="sm"
769
+ small
770
770
  label="S3 lite client"
771
771
  {item}
772
772
  />
773
773
  {:else}
774
- <ToggleButton
775
- value="s3_client"
776
- size="sm"
777
- label="Boto3"
778
- {item}
779
- />
780
- <ToggleButton value="polars" size="sm" label="Polars" {item} />
781
- <ToggleButton value="duckdb" size="sm" label="DuckDB" {item} />
774
+ <ToggleButton value="s3_client" small label="Boto3" {item} />
775
+ <ToggleButton value="polars" small label="Polars" {item} />
776
+ <ToggleButton value="duckdb" small label="DuckDB" {item} />
782
777
  {/if}
783
778
  {/snippet}
784
779
  </ToggleButtonGroup>
@@ -1,5 +1,65 @@
1
1
  import type { Schema } from '../../common';
2
2
  import type { FlowModule, InputTransform } from '../../gen';
3
+ export declare const AI_AGENT_SCHEMA: {
4
+ $schema: string;
5
+ properties: {
6
+ provider: {
7
+ type: string;
8
+ format: string;
9
+ };
10
+ output_type: {
11
+ type: string;
12
+ description: string;
13
+ enum: string[];
14
+ default: string;
15
+ };
16
+ user_message: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ system_prompt: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ streaming: {
25
+ type: string;
26
+ description: string;
27
+ default: boolean;
28
+ showExpr: string;
29
+ };
30
+ messages_context_length: {
31
+ type: string;
32
+ description: string;
33
+ showExpr: string;
34
+ };
35
+ output_schema: {
36
+ type: string;
37
+ description: string;
38
+ format: string;
39
+ showExpr: string;
40
+ };
41
+ user_images: {
42
+ type: string;
43
+ description: string;
44
+ items: {
45
+ type: "object";
46
+ resourceType: string;
47
+ };
48
+ };
49
+ max_completion_tokens: {
50
+ type: string;
51
+ description: string;
52
+ };
53
+ temperature: {
54
+ type: string;
55
+ description: string;
56
+ showExpr: string;
57
+ };
58
+ };
59
+ required: string[];
60
+ type: string;
61
+ order: string[];
62
+ };
3
63
  export declare function loadSchemaFromModule(module: FlowModule): Promise<{
4
64
  input_transforms: Record<string, InputTransform>;
5
65
  schema: Schema;
@@ -1,6 +1,76 @@
1
1
  import { inferArgs, loadSchemaFromPath } from '../../infer';
2
2
  import { loadSchemaFlow } from '../../scripts';
3
3
  import { emptySchema } from '../../utils';
4
+ export const AI_AGENT_SCHEMA = {
5
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
6
+ properties: {
7
+ provider: {
8
+ type: 'object',
9
+ format: 'ai-provider'
10
+ },
11
+ output_type: {
12
+ type: 'string',
13
+ description: 'The type of output the AI agent will generate (text or image). Image output requires a configured workspace S3 storage, will ignore tools, and only works with OpenAI, Google AI and OpenRouter gemini-image-preview model.',
14
+ enum: ['text', 'image'],
15
+ default: 'text'
16
+ },
17
+ user_message: {
18
+ type: 'string',
19
+ description: 'The message to give as input to the AI agent. You can turn on chat input mode on the input interface to link this field to the message sent by the user.'
20
+ },
21
+ system_prompt: {
22
+ type: 'string',
23
+ description: 'The system prompt to give as input to the AI agent.'
24
+ },
25
+ streaming: {
26
+ type: 'boolean',
27
+ description: 'Whether to stream the output of the AI agent.',
28
+ default: false,
29
+ showExpr: "fields.output_type === 'text'"
30
+ },
31
+ messages_context_length: {
32
+ type: 'number',
33
+ description: 'Maximum number of conversation messages to store and retrieve from memory. If not set or 0, memory is disabled.',
34
+ showExpr: "fields.output_type === 'text'"
35
+ },
36
+ output_schema: {
37
+ type: 'object',
38
+ description: 'JSON schema that the AI agent will follow for its response format.',
39
+ format: 'json-schema',
40
+ showExpr: "fields.output_type === 'text'"
41
+ },
42
+ user_images: {
43
+ type: 'array',
44
+ description: 'Array of images to give as input to the AI agent. Requires a configured workspace S3 storage.',
45
+ items: {
46
+ type: 'object',
47
+ resourceType: 's3object'
48
+ }
49
+ },
50
+ max_completion_tokens: {
51
+ type: 'number',
52
+ description: 'The maximum number of output tokens.'
53
+ },
54
+ temperature: {
55
+ type: 'number',
56
+ description: 'Controls randomness in text generation. Range: 0.0 (deterministic) to 2.0 (random).',
57
+ showExpr: "fields.output_type === 'text'"
58
+ }
59
+ },
60
+ required: ['provider', 'user_message', 'output_type'],
61
+ type: 'object',
62
+ order: [
63
+ 'provider',
64
+ 'output_type',
65
+ 'user_message',
66
+ 'system_prompt',
67
+ 'messages_context_length',
68
+ 'output_schema',
69
+ 'user_images',
70
+ 'max_completion_tokens',
71
+ 'temperature'
72
+ ]
73
+ };
4
74
  export async function loadSchemaFromModule(module) {
5
75
  const mod = module.value;
6
76
  if (mod.type == 'rawscript' || mod.type === 'script' || mod.type === 'flow') {
@@ -42,80 +112,16 @@ export async function loadSchemaFromModule(module) {
42
112
  };
43
113
  }
44
114
  else if (mod.type === 'aiagent') {
45
- const schema = {
46
- $schema: 'https://json-schema.org/draft/2020-12/schema',
47
- properties: {
48
- provider: {
49
- type: 'object',
50
- format: 'ai-provider'
51
- },
52
- output_type: {
53
- type: 'string',
54
- description: 'The type of output the AI agent will generate (text or image). Image output requires a configured workspace S3 storage, will ignore tools, and only works with OpenAI, Google AI and OpenRouter gemini-image-preview model.',
55
- enum: ['text', 'image'],
56
- default: 'text'
57
- },
58
- user_message: {
59
- type: 'string',
60
- description: 'The message to give as input to the AI agent.'
61
- },
62
- system_prompt: {
63
- type: 'string',
64
- description: 'The system prompt to give as input to the AI agent.'
65
- },
66
- streaming: {
67
- type: 'boolean',
68
- description: 'Whether to stream the output of the AI agent (only used if output_type is text).',
69
- default: false,
70
- showExpr: "fields.output_type === 'text'"
71
- },
72
- user_images: {
73
- type: 'array',
74
- description: 'Array of images to give as input to the AI agent. Requires a configured workspace S3 storage.',
75
- items: {
76
- type: 'object',
77
- resourceType: 's3object'
78
- }
79
- },
80
- max_completion_tokens: {
81
- type: 'number',
82
- description: 'The maximum number of output tokens.'
83
- },
84
- temperature: {
85
- type: 'number',
86
- description: 'Controls randomness in text generation. Range: 0.0 (deterministic) to 2.0 (random).',
87
- showExpr: "fields.output_type === 'text'"
88
- },
89
- output_schema: {
90
- type: 'object',
91
- description: 'JSON schema that the AI agent will follow for its response format (only used if output_type is text).',
92
- format: 'json-schema',
93
- showExpr: "fields.output_type === 'text'"
94
- }
95
- },
96
- required: ['provider', 'user_message', 'output_type'],
97
- type: 'object',
98
- order: [
99
- 'provider',
100
- 'output_type',
101
- 'user_message',
102
- 'system_prompt',
103
- 'user_images',
104
- 'max_completion_tokens',
105
- 'temperature',
106
- 'output_schema'
107
- ]
108
- };
109
115
  let input_transforms = mod.input_transforms ?? {};
110
116
  return {
111
- input_transforms: Object.keys(schema?.properties ?? {}).reduce((accu, key) => {
117
+ input_transforms: Object.keys(AI_AGENT_SCHEMA.properties ?? {}).reduce((accu, key) => {
112
118
  accu[key] = input_transforms[key] ?? {
113
119
  type: 'static',
114
120
  value: undefined
115
121
  };
116
122
  return accu;
117
123
  }, {}),
118
- schema
124
+ schema: AI_AGENT_SCHEMA
119
125
  };
120
126
  }
121
127
  return {
@@ -49,6 +49,7 @@ export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow)
49
49
  placeholder?: string | undefined;
50
50
  oneOf?: /*elided*/ any[] | undefined;
51
51
  originalType?: string | undefined;
52
+ disabled?: boolean | undefined;
52
53
  };
53
54
  };
54
55
  order?: string[] | undefined;
@@ -36,7 +36,7 @@ export async function runPreview() {
36
36
  }
37
37
  previewMode = 'whole';
38
38
  flowPreviewContent?.refresh();
39
- flowPreviewContent?.test();
39
+ return await flowPreviewContent?.test();
40
40
  }
41
41
  export function cancelTest() {
42
42
  flowPreviewContent?.cancelTest();
@@ -7,7 +7,7 @@ import { twMerge } from 'tailwind-merge';
7
7
  import { refreshStateStore } from '../../../svelte5Utils.svelte';
8
8
  import ModuleAcceptReject, { getAiModuleAction } from '../../copilot/chat/flow/ModuleAcceptReject.svelte';
9
9
  import { aiModuleActionToBgColor } from '../../copilot/chat/flow/utils';
10
- let { small, clazz } = $props();
10
+ let { small, clazz, disableAi } = $props();
11
11
  const dispatch = createEventDispatcher();
12
12
  const { selectedId, flowStateStore, flowStore } = getContext('FlowEditorContext');
13
13
  async function insertFailureModule(inlineScript, wsScript) {
@@ -82,8 +82,10 @@ const action = $derived(getAiModuleAction('failure'));
82
82
  {/if}
83
83
  </div>
84
84
  {:else}
85
+ <!-- Index 0 is used by the tutorial to identify the first "Add step" -->
85
86
  <InsertModuleButton
86
- index={0}
87
+ {disableAi}
88
+ index="error-handler-button"
87
89
  placement={'bottom-center'}
88
90
  on:new={(e) => {
89
91
  insertFailureModule(e.detail.inlineScript)
@@ -2,6 +2,7 @@ import type { ScriptLang } from '../../../gen';
2
2
  type $$ComponentProps = {
3
3
  small: boolean;
4
4
  clazz: string;
5
+ disableAi?: boolean;
5
6
  };
6
7
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
7
8
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -11,7 +11,7 @@ import { dfs as dfsPreviousResults } from '../previousResults';
11
11
  import { Drawer } from '../../common';
12
12
  import DrawerContent from '../../common/drawer/DrawerContent.svelte';
13
13
  import { getDependeeAndDependentComponents } from '../flowExplorer';
14
- import { replaceId } from '../flowStore';
14
+ import { replaceId } from '../flowStore.svelte';
15
15
  import FlowModuleSchemaItemViewer from './FlowModuleSchemaItemViewer.svelte';
16
16
  import OutputPicker from '../propPicker/OutputPicker.svelte';
17
17
  import OutputPickerInner from '../propPicker/OutputPickerInner.svelte';
@@ -6,12 +6,13 @@ import { push } from '../../../history.svelte';
6
6
  import ConfirmationModal from '../../common/confirmationModal/ConfirmationModal.svelte';
7
7
  import Portal from '../../Portal.svelte';
8
8
  import { getDependentComponents } from '../flowExplorer';
9
- import { copilotInfo, tutorialsToDo, workspaceStore } from '../../../stores';
9
+ import { tutorialsToDo, workspaceStore } from '../../../stores';
10
+ import { copilotInfo } from '../../../aiStore';
10
11
  import FlowTutorials from '../../FlowTutorials.svelte';
11
12
  import { ignoredTutorials } from '../../tutorials/ignoredTutorials';
12
13
  import { tutorialInProgress } from '../../../tutorialUtils';
13
14
  import FlowGraphV2 from '../../graph/FlowGraphV2.svelte';
14
- import { replaceId } from '../flowStore';
15
+ import { replaceId } from '../flowStore.svelte';
15
16
  import { setScheduledPollSchedule } from '../../triggers';
16
17
  import { JobService } from '../../../gen';
17
18
  import { dfsByModule } from '../previousResults';
@@ -259,6 +260,7 @@ $effect(() => {
259
260
  class={`z-50 absolute inline-flex flex-col gap-2 top-3 left-1/2 -translate-x-1/2 flex-initial items-center transition-colors duration-[400ms] ease-linear bg-surface-100`}
260
261
  >
261
262
  <FlowStickyNode
263
+ {disableAi}
262
264
  {showFlowAiButton}
263
265
  {disableSettings}
264
266
  {disableStaticInputs}
@@ -298,6 +300,7 @@ $effect(() => {
298
300
  {showJobStatus}
299
301
  suspendStatus={suspendStatus.val}
300
302
  {flowHasChanged}
303
+ chatInputEnabled={Boolean(flowStore.val.value?.chat_input_enabled)}
301
304
  onDelete={(id) => {
302
305
  dependents = getDependentComponents(id, flowStore.val)
303
306
  const cb = () => {
@@ -5,7 +5,7 @@ import { twMerge } from 'tailwind-merge';
5
5
  import FlowErrorHandlerItem from './FlowErrorHandlerItem.svelte';
6
6
  import FlowAIButton from '../../copilot/chat/flow/FlowAIButton.svelte';
7
7
  import Popover from '../../Popover.svelte';
8
- let { disableSettings, disableStaticInputs, smallErrorHandler, aiChatOpen, showFlowAiButton, toggleAiChat } = $props();
8
+ let { disableSettings, disableStaticInputs, smallErrorHandler, aiChatOpen, showFlowAiButton, toggleAiChat, disableAi } = $props();
9
9
  const { selectedId, flowStore } = getContext('FlowEditorContext');
10
10
  const nodeClass = 'border w-fit rounded p-1 px-2 bg-surface text-sm cursor-pointer flex items-center h-[28px] hover:!bg-surface-secondary active:!bg-surface';
11
11
  const nodeSelectedClass = 'outline outline-offset-1 outline-2 outline-slate-800 dark:bg-white/5 dark:outline-slate-400/60 dark:outline-gray-400';
@@ -45,7 +45,7 @@ const nodeSelectedClass = 'outline outline-offset-1 outline-2 outline-slate-800
45
45
  </Popover>
46
46
  {/if}
47
47
  <Popover>
48
- <FlowErrorHandlerItem small={smallErrorHandler} on:generateStep clazz={nodeClass} />
48
+ <FlowErrorHandlerItem {disableAi} small={smallErrorHandler} on:generateStep clazz={nodeClass} />
49
49
  {#snippet text()}
50
50
  Error Handler
51
51
  {/snippet}
@@ -5,6 +5,7 @@ interface Props {
5
5
  aiChatOpen?: boolean;
6
6
  showFlowAiButton?: boolean;
7
7
  toggleAiChat?: () => void;
8
+ disableAi?: boolean;
8
9
  }
9
10
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
10
11
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -4,7 +4,7 @@ import { twMerge } from 'tailwind-merge';
4
4
  import PopupV2 from '../../common/popup/PopupV2.svelte';
5
5
  import { flip, offset } from 'svelte-floating-ui/dom';
6
6
  import { SchedulePollIcon } from '../../icons';
7
- let { index = 0, funcDesc = $bindable(''), kind = 'script', iconSize = 12, clazz = '', placement = 'bottom-center' } = $props();
7
+ let { index = 0, funcDesc = $bindable(''), kind = 'script', iconSize = 12, clazz = '', placement = 'bottom-center', disableAi = false } = $props();
8
8
  let floatingConfig = {
9
9
  strategy: 'fixed',
10
10
  // @ts-ignore
@@ -44,7 +44,9 @@ shouldUsePortal={true} -->
44
44
  'w-[17.5px] h-[17.5px] flex items-center justify-center !outline-[1px] outline dark:outline-gray-500 outline-gray-300 text-secondary bg-surface focus:outline-none hover:bg-surface-hover rounded',
45
45
  clazz
46
46
  )}
47
- onpointerdown={() => (open = !open)}
47
+ onpointerdown={() => {
48
+ open = !open
49
+ }}
48
50
  >
49
51
  {#if kind === 'trigger'}
50
52
  <SchedulePollIcon size={14} />
@@ -67,6 +69,7 @@ shouldUsePortal={true} -->
67
69
  on:pickScript
68
70
  allowTrigger={index == 0}
69
71
  {kind}
72
+ {disableAi}
70
73
  />
71
74
  {/snippet}
72
75
  </PopupV2>
@@ -2,12 +2,13 @@ type Alignment = 'start' | 'end' | 'center';
2
2
  type Side = 'top' | 'bottom';
3
3
  type Placement = `${Side}-${Alignment}`;
4
4
  interface Props {
5
- index?: number;
5
+ index?: number | 'error-handler-button';
6
6
  funcDesc?: string;
7
7
  kind?: 'script' | 'trigger' | 'preprocessor' | 'failure';
8
8
  iconSize?: number;
9
9
  clazz?: string;
10
10
  placement?: Placement;
11
+ disableAi?: boolean;
11
12
  }
12
13
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
13
14
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -25,8 +26,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
25
26
  declare const InsertModuleButton: $$__sveltets_2_IsomorphicComponent<Props, {
26
27
  insert: CustomEvent<any>;
27
28
  new: CustomEvent<any>;
28
- pickFlow: CustomEvent<any>;
29
- pickScript: CustomEvent<any>;
29
+ pickFlow: any;
30
+ pickScript: any;
30
31
  } & {
31
32
  [evt: string]: CustomEvent<any>;
32
33
  }, {}, {}, "funcDesc">;
@@ -17,6 +17,7 @@ let loading = $state(false);
17
17
  let small = $derived(kind === 'preprocessor' || kind === 'failure');
18
18
  let width = $state(0);
19
19
  let height = $state(0);
20
+ let owners = $state([]);
20
21
  let displayPath = $derived(width > 650 || height > 400);
21
22
  </script>
22
23
 
@@ -46,7 +47,7 @@ let displayPath = $derived(width > 650 || height > 400);
46
47
  {#if selectedKind != 'preprocessor' && selectedKind != 'flow'}
47
48
  <ToggleHubWorkspaceQuick bind:selected={preFilter} />
48
49
  {/if}
49
- <RefreshButton {loading} on:click={() => (refreshCount.val += 1)} />
50
+ <RefreshButton size="md" light {loading} on:click={() => (refreshCount.val += 1)} />
50
51
  </div>
51
52
 
52
53
  <div class="flex flex-row grow min-h-0">
@@ -141,6 +142,7 @@ let displayPath = $derived(width > 650 || height > 400);
141
142
  {disableAi}
142
143
  {funcDesc}
143
144
  {kind}
145
+ bind:owners
144
146
  on:close={() => {
145
147
  dispatch('close')
146
148
  }}
@@ -22,8 +22,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
22
22
  declare const InsertModuleInner: $$__sveltets_2_IsomorphicComponent<Props, {
23
23
  insert: CustomEvent<any>;
24
24
  new: CustomEvent<any>;
25
- pickScript: CustomEvent<any>;
26
- pickFlow: CustomEvent<any>;
25
+ pickScript: any;
26
+ pickFlow: any;
27
27
  close: CustomEvent<any>;
28
28
  } & {
29
29
  [evt: string]: CustomEvent<any>;
@@ -41,13 +41,12 @@ const outputType = $derived(showJobStatus
41
41
  <div class="flex flex-col w-full">
42
42
  <div
43
43
  style={borderColor ? `border-color: ${borderColor};` : 'border: 0'}
44
- class="flex flex-row gap-1 justify-between {center
44
+ class="flex flex-row justify-between {center
45
45
  ? 'items-center'
46
46
  : 'items-baseline'} w-full overflow-hidden rounded-sm border p-2 text-2xs module text-primary border-gray-400 dark:border-gray-600"
47
47
  >
48
48
  {#if icon}
49
49
  {@render icon?.()}
50
- <span class="mr-2"></span>
51
50
  {/if}
52
51
  <div class="flex flex-col flex-grow shrink-0 max-w-full min-w-0">
53
52
  {#if label}