windmill-components 1.531.1 → 1.537.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 (153) hide show
  1. package/package/components/ArgInput.svelte +69 -19
  2. package/package/components/Auth0Setting.svelte +8 -3
  3. package/package/components/Dev.svelte +5 -4
  4. package/package/components/DiffDrawer.svelte +2 -2
  5. package/package/components/DiffEditor.svelte +34 -37
  6. package/package/components/DiffEditor.svelte.d.ts +23 -39
  7. package/package/components/EditableSchemaForm.svelte +67 -67
  8. package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
  9. package/package/components/Editor.svelte +32 -11
  10. package/package/components/Editor.svelte.d.ts +6 -0
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/EditorBar.svelte.d.ts +1 -0
  13. package/package/components/FieldHeader.svelte +1 -1
  14. package/package/components/FlowBuilder.svelte +7 -4
  15. package/package/components/FlowPreviewContent.svelte +3 -3
  16. package/package/components/FlowStatusViewer.svelte +28 -0
  17. package/package/components/FlowStatusViewerInner.svelte +72 -20
  18. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  19. package/package/components/ModulePreview.svelte +2 -1
  20. package/package/components/ModulePreview.svelte.d.ts +1 -0
  21. package/package/components/ModulePreviewForm.svelte +72 -65
  22. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  23. package/package/components/ModuleTest.svelte +10 -6
  24. package/package/components/ModuleTest.svelte.d.ts +1 -0
  25. package/package/components/OktaSetting.svelte +8 -3
  26. package/package/components/Portal.svelte +11 -7
  27. package/package/components/Portal.svelte.d.ts +19 -39
  28. package/package/components/ResourceEditor.svelte +4 -0
  29. package/package/components/RunForm.svelte +2 -2
  30. package/package/components/RunForm.svelte.d.ts +1 -1
  31. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  32. package/package/components/SchemaForm.svelte +1 -2
  33. package/package/components/ScriptBuilder.svelte +1 -1
  34. package/package/components/ScriptEditor.svelte +22 -7
  35. package/package/components/SimpleEditor.svelte +0 -1
  36. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  37. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  38. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  39. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  40. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  41. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
  42. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  43. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  44. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  45. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  46. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  47. package/package/components/common/button/model.d.ts +1 -1
  48. package/package/components/common/drawer/Disposable.svelte +51 -30
  49. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  50. package/package/components/common/drawer/Drawer.svelte +15 -11
  51. package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
  52. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
  53. package/package/components/copilot/MetadataGen.svelte +14 -3
  54. package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
  55. package/package/components/copilot/chat/AIChat.svelte +2 -4
  56. package/package/components/copilot/chat/AIChatInput.svelte +3 -3
  57. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
  58. package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
  59. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
  60. package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
  61. package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
  62. package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
  63. package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
  64. package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
  65. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  66. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  67. package/package/components/copilot/chat/context.d.ts +19 -1
  68. package/package/components/copilot/chat/context.js +1 -0
  69. package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
  70. package/package/components/copilot/chat/flow/core.d.ts +13 -1
  71. package/package/components/copilot/chat/flow/core.js +171 -19
  72. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  73. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  74. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  75. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  76. package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
  77. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  78. package/package/components/copilot/chat/script/core.d.ts +2 -2
  79. package/package/components/copilot/chat/script/core.js +54 -124
  80. package/package/components/copilot/chat/shared.d.ts +14 -2
  81. package/package/components/copilot/chat/shared.js +170 -7
  82. package/package/components/copilot/lib.js +12 -7
  83. package/package/components/copilot/shared.d.ts +1 -1
  84. package/package/components/copilot/shared.js +16 -10
  85. package/package/components/flows/FlowEditor.svelte +15 -1
  86. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowModuleIcon.svelte +39 -0
  88. package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
  89. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  90. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  91. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  92. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  93. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  94. package/package/components/flows/content/FlowInput.svelte +31 -34
  95. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  96. package/package/components/flows/content/FlowLoop.svelte +7 -0
  97. package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
  98. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  99. package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
  100. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  101. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  102. package/package/components/flows/dfs.d.ts +1 -1
  103. package/package/components/flows/dfs.js +6 -6
  104. package/package/components/flows/flowInfers.js +7 -7
  105. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  106. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
  107. package/package/components/flows/map/MapItem.svelte +12 -39
  108. package/package/components/flows/map/VirtualItem.svelte +1 -1
  109. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  110. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  111. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  112. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  113. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  114. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  115. package/package/components/flows/types.d.ts +16 -3
  116. package/package/components/flows/utils.js +3 -0
  117. package/package/components/graph/FlowGraphV2.svelte +1 -1
  118. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  119. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  120. package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
  121. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  122. package/package/components/schema/AddPropertyV2.svelte +2 -7
  123. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  124. package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
  125. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  126. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  127. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  128. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  129. package/package/components/schema/FlowPropertyEditor.svelte +83 -57
  130. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  131. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  132. package/package/components/schema/SchemaFormDND.svelte +11 -10
  133. package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
  134. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  135. package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
  136. package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
  137. package/package/components/settings/PremiumInfo.svelte +7 -2
  138. package/package/components/triggers/CaptureWrapper.svelte +2 -13
  139. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  140. package/package/components/triggers/TriggersWrapper.svelte +1 -0
  141. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  142. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  143. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  144. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  145. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  146. package/package/hubPaths.json +3 -1
  147. package/package/script_helpers.d.ts +2 -2
  148. package/package/script_helpers.js +2 -0
  149. package/package/stores.d.ts +1 -0
  150. package/package/stores.js +8 -1
  151. package/package/utils.d.ts +1 -1
  152. package/package.json +14 -14
  153. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
@@ -3,45 +3,25 @@ export function portal(el: any, options: any): {
3
3
  destroy: () => void;
4
4
  };
5
5
  export default Portal;
6
- type Portal = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
7
- [x: string]: any;
8
- name?: any;
9
- target?: string | HTMLElement | undefined;
10
- }, {
11
- default: {};
12
- }>, {
13
- [evt: string]: CustomEvent<any>;
14
- }, {
15
- default: {};
16
- }> & {
17
- $$bindings?: string | undefined;
6
+ type Portal = {
7
+ $on?(type: string, callback: (e: any) => void): () => void;
8
+ $set?(props: Partial<Props>): void;
18
9
  };
19
- declare const Portal: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
- [x: string]: any;
10
+ declare const Portal: import("svelte").Component<{
11
+ /**
12
+ * - DOM Element or CSS Selector
13
+ */
14
+ target?: string | HTMLElement | undefined;
21
15
  name?: any;
16
+ class?: string | undefined;
17
+ children?: import("svelte").Snippet<[]> | undefined;
18
+ }, {}, "">;
19
+ type Props = {
20
+ /**
21
+ * - DOM Element or CSS Selector
22
+ */
22
23
  target?: string | HTMLElement | undefined;
23
- }, {
24
- default: {};
25
- }>, {
26
- [evt: string]: CustomEvent<any>;
27
- }, {
28
- default: {};
29
- }, {}, string>;
30
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
31
- default: any;
32
- } ? Props extends Record<string, never> ? any : {
33
- children?: any;
34
- } : {});
35
- 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> {
36
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
37
- $$bindings?: Bindings;
38
- } & Exports;
39
- (internal: unknown, props: Props & {
40
- $$events?: Events;
41
- $$slots?: Slots;
42
- }): Exports & {
43
- $set?: any;
44
- $on?: any;
45
- };
46
- z_$$bindings?: Bindings;
47
- }
24
+ name?: any;
25
+ class?: string | undefined;
26
+ children?: import("svelte").Snippet<[]> | undefined;
27
+ };
@@ -18,6 +18,7 @@ import GfmMarkdown from './GfmMarkdown.svelte';
18
18
  import TestTriggerConnection from './triggers/TestTriggerConnection.svelte';
19
19
  import GitHubAppIntegration from './GitHubAppIntegration.svelte';
20
20
  import Button from './common/button/Button.svelte';
21
+ import { clearJsonSchemaResourceCache } from './schema/jsonSchemaResource.svelte';
21
22
  let { canSave = $bindable(true), resource_type = $bindable(undefined), path = $bindable(''), newResource = false, hidePath = false, onChange, defaultValues = undefined } = $props();
22
23
  let isValid = $state(true);
23
24
  let jsonError = $state('');
@@ -64,6 +65,9 @@ export async function editResource() {
64
65
  path: resourceToEdit.path,
65
66
  requestBody: { path, value: args, description }
66
67
  });
68
+ if (resourceToEdit.resource_type === 'json_schema') {
69
+ clearJsonSchemaResourceCache(resourceToEdit.path, $workspaceStore);
70
+ }
67
71
  sendUserToast(`Updated resource at ${path}`);
68
72
  dispatch('refresh', path);
69
73
  }
@@ -25,7 +25,7 @@ export async function setArgs(nargs) {
25
25
  export function run() {
26
26
  runAction(scheduledForStr, args ?? {}, invisible_to_owner, overrideTag);
27
27
  }
28
- let { runnable = $bindable(), runAction, buttonText = 'Run', schedulable = true, detailed = true, autofocus = false, topButton = false, loading = false, noVariablePicker = false, viewKeybinding = false, scheduledForStr = $bindable(), invisible_to_owner = $bindable(), overrideTag = $bindable(), args = $bindable(), jsonView = false, isValid = $bindable(true) } = $props();
28
+ let { runnable, runAction, buttonText = 'Run', schedulable = true, detailed = true, autofocus = false, topButton = false, loading = false, noVariablePicker = false, viewKeybinding = false, scheduledForStr = $bindable(), invisible_to_owner = $bindable(), overrideTag = $bindable(), args = $bindable(), jsonView = false, isValid = $bindable(true) } = $props();
29
29
  $effect.pre(() => {
30
30
  if (args == undefined) {
31
31
  args = {};
@@ -238,7 +238,7 @@ $effect(() => {
238
238
  bind:scheduledForStr
239
239
  bind:invisible_to_owner
240
240
  bind:overrideTag
241
- bind:runnable
241
+ {runnable}
242
242
  />
243
243
  {/snippet}
244
244
  </Popover>
@@ -33,6 +33,6 @@ declare const RunForm: import("svelte").Component<Props, {
33
33
  setArgs: (nargs: Record<string, any>) => Promise<void>;
34
34
  run: () => void;
35
35
  setCode: (code: string) => void;
36
- }, "args" | "invisible_to_owner" | "runnable" | "isValid" | "scheduledForStr" | "overrideTag">;
36
+ }, "args" | "invisible_to_owner" | "isValid" | "scheduledForStr" | "overrideTag">;
37
37
  type RunForm = ReturnType<typeof RunForm>;
38
38
  export default RunForm;
@@ -53,7 +53,19 @@ async function loadWorkerGroups() {
53
53
  {#if !$userStore?.operator}
54
54
  {#if $workerTags && $workerTags?.length > 0}
55
55
  <div class="w-full">
56
- <select placeholder="Worker group" bind:value={overrideTag}>
56
+ <select
57
+ placeholder="Worker group"
58
+ bind:value={
59
+ () => overrideTag ?? '',
60
+ (v) => {
61
+ if (v == '') {
62
+ overrideTag = undefined
63
+ } else {
64
+ overrideTag = v
65
+ }
66
+ }
67
+ }
68
+ >
57
69
  {#if overrideTag}
58
70
  <option value="">reset to default</option>
59
71
  {:else}
@@ -14,7 +14,7 @@ import ArgInput from './ArgInput.svelte';
14
14
  import { createEventDispatcher, untrack } from 'svelte';
15
15
  import { deepEqual } from 'fast-equals';
16
16
  import { dragHandleZone } from '@windmill-labs/svelte-dnd-action';
17
- let { schema = $bindable(), hiddenArgs = [], schemaFieldTooltip = {}, args = $bindable(undefined), disabledArgs = [], disabled = false, isValid = $bindable(true), autofocus = false, defaultValues = {}, shouldHideNoInputs = false, compact = false, linkedSecret = $bindable(undefined), linkedSecretCandidates = undefined, noVariablePicker = false, flexWrap = false, noDelete = false, prettifyHeader = false, disablePortal = false, showSchemaExplorer = false, showReset = false, onlyMaskPassword = false, dndConfig = undefined, items = undefined, helperScript = undefined, lightHeader = false, diff = {}, nestedParent = undefined, shouldDispatchChanges = false, nestedClasses = '', dynamicEnums = {}, largeGap = false, css = undefined, displayType = true, appPath = undefined, className = '', computeS3ForceViewerPolicies = undefined, workspace = undefined, actions } = $props();
17
+ let { schema = $bindable(), hiddenArgs = [], schemaFieldTooltip = {}, args = $bindable(undefined), disabledArgs = [], disabled = false, isValid = $bindable(true), autofocus = false, defaultValues = {}, shouldHideNoInputs = false, compact = false, linkedSecret = $bindable(undefined), linkedSecretCandidates = undefined, noVariablePicker = false, flexWrap = false, noDelete = false, prettifyHeader = false, disablePortal = false, showSchemaExplorer = false, showReset = false, onlyMaskPassword = false, dndConfig = undefined, items = undefined, helperScript = undefined, lightHeader = false, diff = {}, nestedParent = undefined, shouldDispatchChanges = false, nestedClasses = '', dynamicEnums = {}, largeGap = false, css = undefined, displayType = true, appPath = undefined, className = '', computeS3ForceViewerPolicies = undefined, workspace = undefined, actions: actions_render = undefined } = $props();
18
18
  const dispatch = createEventDispatcher();
19
19
  let inputCheck = $state({});
20
20
  export function setDefaults() {
@@ -135,7 +135,6 @@ $effect.pre(() => {
135
135
  $effect.pre(() => {
136
136
  isValid = allTrue(inputCheck ?? {});
137
137
  });
138
- const actions_render = $derived(actions);
139
138
  </script>
140
139
 
141
140
  {#if showReset}
@@ -908,7 +908,7 @@ async function loadWorkerTags() {
908
908
  >
909
909
  <LanguageIcon {lang} />
910
910
  <span class="ml-2 py-2 truncate">{label}</span>
911
- {#if lang === 'nu' || lang === 'ruby'}
911
+ {#if lang === 'ruby'}
912
912
  <span class="text-tertiary !text-xs"> BETA </span>
913
913
  {/if}
914
914
  </Button>
@@ -35,6 +35,7 @@ import { aiChatManager, AIMode } from './copilot/chat/AIChatManager.svelte';
35
35
  import { triggerableByAI } from '../actions/triggerableByAI.svelte';
36
36
  import AssetsDropdownButton from './assets/AssetsDropdownButton.svelte';
37
37
  import { assetEq } from './assets/lib';
38
+ import { editor as meditor } from 'monaco-editor';
38
39
  let { schema = $bindable(), code = $bindable(), path, lang, kind = undefined, template = 'script', tag, fixedOverflowWidgets = true, noSyncFromGithub = false, editor = $bindable(undefined), diffEditor = $bindable(undefined), collabMode = false, edit = true, noHistory = false, saveToWorkspace = false, watchChanges = false, customUi = undefined, args = $bindable(), selectedTab = $bindable('main'), hasPreprocessor = $bindable(false), captureTable = $bindable(undefined), showCaptures = true, stablePathForCaptures = '', lastSavedCode = undefined, lastDeployedCode = undefined, disableAi = false, assets = $bindable(), editor_bar_right } = $props();
39
40
  $effect.pre(() => {
40
41
  if (schema == undefined) {
@@ -162,6 +163,7 @@ export async function inferSchema(code, nlang, resetArgs = false) {
162
163
  onMount(() => {
163
164
  inferSchema(code);
164
165
  loadPastTests();
166
+ aiChatManager.saveAndClear();
165
167
  aiChatManager.changeMode(AIMode.SCRIPT);
166
168
  });
167
169
  setLicense();
@@ -272,7 +274,7 @@ function getError(job) {
272
274
  function showDiffMode() {
273
275
  diffMode = true;
274
276
  diffEditor?.setOriginal(lastDeployedCode ?? '');
275
- diffEditor?.setModified(editor?.getCode() ?? '');
277
+ diffEditor?.setModifiedModel(editor?.getModel());
276
278
  diffEditor?.show();
277
279
  editor?.hide();
278
280
  }
@@ -492,16 +494,29 @@ $effect(() => {
492
494
  {args}
493
495
  />
494
496
  <DiffEditor
495
- class="h-full"
497
+ className="h-full"
496
498
  bind:this={diffEditor}
499
+ modifiedModel={editor?.getModel() as meditor.ITextModel}
497
500
  automaticLayout
498
501
  defaultLang={scriptLangToEditorLang(lang)}
499
502
  {fixedOverflowWidgets}
500
- showButtons={diffMode}
501
- on:hideDiffMode={hideDiffMode}
502
- on:seeHistory={() => {
503
- showHistoryDrawer = true
504
- }}
503
+ buttons={diffMode
504
+ ? [
505
+ {
506
+ text: 'See changes history',
507
+ onClick: () => {
508
+ showHistoryDrawer = true
509
+ }
510
+ },
511
+ {
512
+ text: 'Quit diff mode',
513
+ onClick: () => {
514
+ hideDiffMode()
515
+ },
516
+ color: 'red'
517
+ }
518
+ ]
519
+ : []}
505
520
  />
506
521
  {/key}
507
522
  </div>
@@ -289,7 +289,6 @@ async function loadMonaco() {
289
289
  return;
290
290
  }
291
291
  try {
292
- console.log('fixedOverflowWidgets', fixedOverflowWidgets);
293
292
  editor = meditor.create(divEl, {
294
293
  ...editorConfig(code ?? '', lang, automaticLayout, fixedOverflowWidgets, $relativeLineNumbers),
295
294
  model,
@@ -15,6 +15,6 @@ interface Props {
15
15
  overrideAllowKindChange?: boolean;
16
16
  originalType?: string | undefined;
17
17
  }
18
- declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "disableCreate" | "pattern" | "format" | "enum_" | "enumLabels" | "contentEncoding" | "customErrorMessage" | "dateFormat" | "minRows" | "disableVariablePicker">;
18
+ declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "disableCreate" | "pattern" | "format" | "enum_" | "enumLabels" | "contentEncoding" | "customErrorMessage" | "minRows" | "disableVariablePicker" | "dateFormat">;
19
19
  type StringTypeNarrowing = ReturnType<typeof StringTypeNarrowing>;
20
20
  export default StringTypeNarrowing;
@@ -121,11 +121,11 @@ async function getMenuElements() {
121
121
  <Disposable
122
122
  {id}
123
123
  bind:this={disposable}
124
- on:open={() => {
124
+ onOpen={() => {
125
125
  outputs?.open.set(true)
126
126
  onOpenRecomputeIds?.forEach((id) => $runnableComponents?.[id]?.cb?.map((cb) => cb?.()))
127
127
  }}
128
- on:close={() => {
128
+ onClose={() => {
129
129
  outputs?.open.set(false)
130
130
  onCloseRecomputeIds?.forEach((id) => $runnableComponents?.[id]?.cb?.map((cb) => cb?.()))
131
131
  }}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">import { getContext } from 'svelte';
2
2
  import { handleEscape, handlePaste, handleArrowUp, handleCut, handleCopy, down, right, left } from './componentCallbacks.svelte';
3
- const { history, movingcomponents, jobsDrawerOpen } = getContext('AppEditorContext');
3
+ const { history, movingcomponents, jobsDrawerOpen, runnableJobEditorPanel } = getContext('AppEditorContext');
4
4
  const { app, selectedComponent, focusedGrid, componentControl } = getContext('AppViewerContext');
5
5
  const ctx = {
6
6
  history,
@@ -16,7 +16,8 @@ function keydown(event) {
16
16
  // Ignore keydown events if the user is typing in monaco
17
17
  let classes = event.target?.['className'];
18
18
  if ((typeof classes === 'string' && classes.includes('inputarea')) ||
19
- ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
19
+ ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName) ||
20
+ $runnableJobEditorPanel.focused) {
20
21
  return;
21
22
  }
22
23
  switch (event.key) {
@@ -350,7 +350,7 @@ let extraLib = $derived(isFrontend && worldStore
350
350
  <DiffEditor
351
351
  open={false}
352
352
  bind:this={diffEditor}
353
- class="h-full"
353
+ className="h-full"
354
354
  automaticLayout
355
355
  fixedOverflowWidgets
356
356
  defaultLang={scriptLangToEditorLang(inlineScript?.language)}
@@ -79,7 +79,6 @@ function refresh(runnable) {
79
79
  if (deepEqual(runnable, lastRunnable)) {
80
80
  return;
81
81
  }
82
- console.log('runnable', runnable);
83
82
  notFound = false;
84
83
  if (runnable.runType == 'script') {
85
84
  refreshScript(runnable);
@@ -218,6 +218,7 @@ $effect(() => {
218
218
  $effect(() => {
219
219
  items != undefined && handleItemsChange();
220
220
  });
221
+ const rnd = generateRandomString();
221
222
  </script>
222
223
 
223
224
  <div class="flex gap-2 flex-col mt-2 w-full">
@@ -267,7 +268,8 @@ $effect(() => {
267
268
  use:dragHandleZone={{
268
269
  items,
269
270
  flipDurationMs,
270
- dropTargetStyle: {}
271
+ dropTargetStyle: {},
272
+ type: rnd
271
273
  }}
272
274
  onconsider={handleConsider}
273
275
  onfinalize={handleFinalize}
@@ -92,6 +92,7 @@ function addCondition() {
92
92
  });
93
93
  component.numberOfSubgrids = items.length + 1;
94
94
  }
95
+ const rnd = generateRandomString();
95
96
  </script>
96
97
 
97
98
  <PanelSection title={'Conditions'}>
@@ -107,7 +108,8 @@ function addCondition() {
107
108
  use:dragHandleZone={{
108
109
  items: items,
109
110
  flipDurationMs: 200,
110
- dropTargetStyle: {}
111
+ dropTargetStyle: {},
112
+ type: rnd
111
113
  }}
112
114
  onconsider={handleConsider}
113
115
  onfinalize={handleFinalize}
@@ -94,6 +94,7 @@ function handleFinalize(e) {
94
94
  }
95
95
  let resolvedPaths = $state([]);
96
96
  let resolvedLabels = $state([]);
97
+ const rnd = generateRandomString();
97
98
  </script>
98
99
 
99
100
  <PanelSection
@@ -107,7 +108,8 @@ let resolvedLabels = $state([]);
107
108
  use:dragHandleZone={{
108
109
  items,
109
110
  flipDurationMs: 200,
110
- dropTargetStyle: {}
111
+ dropTargetStyle: {},
112
+ type: rnd
111
113
  }}
112
114
  onconsider={handleConsider}
113
115
  onfinalize={handleFinalize}
@@ -112,6 +112,7 @@ function handleFinalize(e) {
112
112
  });
113
113
  }
114
114
  }
115
+ const rnd = generateRandomString();
115
116
  </script>
116
117
 
117
118
  <PanelSection title={`${word}s ${tabs && tabs.length > 0 ? `(${tabs.length})` : ''}`}>
@@ -123,7 +124,8 @@ function handleFinalize(e) {
123
124
  use:dragHandleZone={{
124
125
  items,
125
126
  flipDurationMs: 200,
126
- dropTargetStyle: {}
127
+ dropTargetStyle: {},
128
+ type: rnd
127
129
  }}
128
130
  onconsider={handleConsider}
129
131
  onfinalize={handleFinalize}
@@ -3,7 +3,7 @@ import { addWhitespaceBeforeCapitals, capitalize } from '../../../../utils';
3
3
  import { cleanseOneOfConfiguration } from '../appUtils';
4
4
  import InputsSpecEditor from './InputsSpecEditor.svelte';
5
5
  let { key, oneOf = $bindable(), inputSpecsConfiguration, labels, shouldCapitalize, id, resourceOnly, tooltip, disabledOptions = [], acceptSelf = false, recomputeOnInputChanged = true, showOnDemandOnlyToggle = true } = $props();
6
- $effect(() => {
6
+ $effect.pre(() => {
7
7
  if (oneOf == undefined) {
8
8
  oneOf = { configuration: {}, selected: '' };
9
9
  }
@@ -35,59 +35,61 @@ function getValueOfDeprecated(obj) {
35
35
  </script>
36
36
 
37
37
  <div class="p-2 border">
38
- <div class="mb-2 text-sm font-semibold">
39
- {capitalize(addWhitespaceBeforeCapitals(key))}&nbsp;
40
- {#if tooltip}
41
- <Tooltip light>{tooltip}</Tooltip>
42
- {/if}
43
- </div>
44
- <select
45
- class="w-full border border-gray-300 rounded-md p-2"
46
- value={oneOf.selected}
47
- onchange={(e) => {
48
- oneOf = { ...oneOf, selected: e?.target?.['value'] }
49
- }}
50
- >
51
- {#each Object.keys(inputSpecsConfiguration ?? {}) as choice}
52
- {#if (!disabledOptions.includes(choice) && !getValueOfDeprecated(inputSpecsConfiguration[choice])) || oneOf.selected === choice}
53
- <option value={choice}>{labels?.[choice] ?? choice}</option>
38
+ {#if oneOf}
39
+ <div class="mb-2 text-sm font-semibold">
40
+ {capitalize(addWhitespaceBeforeCapitals(key))}&nbsp;
41
+ {#if tooltip}
42
+ <Tooltip light>{tooltip}</Tooltip>
54
43
  {/if}
55
- {/each}
56
- </select>
57
- {#if oneOf.selected !== 'none' && oneOf.selected !== 'errorOverlay'}
58
- <div class="mb-4"></div>
59
- {/if}
60
- <div class="flex flex-col gap-4">
61
- {#each Object.keys(inputSpecsConfiguration?.[oneOf.selected] ?? {}) as nestedKey}
62
- {@const config = {
63
- ...inputSpecsConfiguration?.[oneOf.selected]?.[nestedKey],
64
- ...oneOf.configuration?.[oneOf.selected]?.[nestedKey]
44
+ </div>
45
+ <select
46
+ class="w-full border border-gray-300 rounded-md p-2"
47
+ value={oneOf.selected}
48
+ onchange={(e) => {
49
+ oneOf = { ...oneOf, selected: e?.target?.['value'] }
65
50
  }}
51
+ >
52
+ {#each Object.keys(inputSpecsConfiguration ?? {}) as choice}
53
+ {#if (!disabledOptions.includes(choice) && !getValueOfDeprecated(inputSpecsConfiguration[choice])) || oneOf.selected === choice}
54
+ <option value={choice}>{labels?.[choice] ?? choice}</option>
55
+ {/if}
56
+ {/each}
57
+ </select>
58
+ {#if oneOf.selected !== 'none' && oneOf.selected !== 'errorOverlay'}
59
+ <div class="mb-4"></div>
60
+ {/if}
61
+ <div class="flex flex-col gap-4">
62
+ {#each Object.keys(inputSpecsConfiguration?.[oneOf.selected] ?? {}) as nestedKey}
63
+ {@const config = {
64
+ ...inputSpecsConfiguration?.[oneOf.selected]?.[nestedKey],
65
+ ...oneOf.configuration?.[oneOf.selected]?.[nestedKey]
66
+ }}
66
67
 
67
- {#if config && oneOf.configuration[oneOf.selected]}
68
- <InputsSpecEditor
69
- {recomputeOnInputChanged}
70
- key={nestedKey}
71
- bind:componentInput={oneOf.configuration[oneOf.selected][nestedKey]}
72
- {id}
73
- {acceptSelf}
74
- userInputEnabled={false}
75
- {shouldCapitalize}
76
- {resourceOnly}
77
- fieldType={config?.['fieldType']}
78
- subFieldType={config?.['subFieldType']}
79
- format={config?.['format']}
80
- selectOptions={config?.['selectOptions']}
81
- placeholder={config?.['placeholder']}
82
- customTitle={config?.['customTitle']}
83
- tooltip={config?.['tooltip']}
84
- fileUpload={config?.['fileUpload']}
85
- loading={config?.['loading']}
86
- documentationLink={config?.['documentationLink']}
87
- allowTypeChange={config?.['allowTypeChange']}
88
- {showOnDemandOnlyToggle}
89
- />
90
- {/if}
91
- {/each}
92
- </div>
68
+ {#if config && oneOf.configuration[oneOf.selected]}
69
+ <InputsSpecEditor
70
+ {recomputeOnInputChanged}
71
+ key={nestedKey}
72
+ bind:componentInput={oneOf.configuration[oneOf.selected][nestedKey]}
73
+ {id}
74
+ {acceptSelf}
75
+ userInputEnabled={false}
76
+ {shouldCapitalize}
77
+ {resourceOnly}
78
+ fieldType={config?.['fieldType']}
79
+ subFieldType={config?.['subFieldType']}
80
+ format={config?.['format']}
81
+ selectOptions={config?.['selectOptions']}
82
+ placeholder={config?.['placeholder']}
83
+ customTitle={config?.['customTitle']}
84
+ tooltip={config?.['tooltip']}
85
+ fileUpload={config?.['fileUpload']}
86
+ loading={config?.['loading']}
87
+ documentationLink={config?.['documentationLink']}
88
+ allowTypeChange={config?.['allowTypeChange']}
89
+ {showOnDemandOnlyToggle}
90
+ />
91
+ {/if}
92
+ {/each}
93
+ </div>
94
+ {/if}
93
95
  </div>
@@ -72,6 +72,7 @@ function handleFinalize(e) {
72
72
  const { items: newItems } = e.detail;
73
73
  items = newItems;
74
74
  }
75
+ const rnd = generateRandomString();
75
76
  </script>
76
77
 
77
78
  {#if components}
@@ -101,7 +102,8 @@ function handleFinalize(e) {
101
102
  use:dragHandleZone={{
102
103
  items,
103
104
  flipDurationMs: 200,
104
- dropTargetStyle: {}
105
+ dropTargetStyle: {},
106
+ type: rnd
105
107
  }}
106
108
  onconsider={handleConsider}
107
109
  onfinalize={handleFinalize}
@@ -1,7 +1,7 @@
1
1
  export declare const BUTTON_COLORS: readonly ["blue", "red", "dark", "light", "green", "gray", "none"];
2
2
  export declare namespace ButtonType {
3
3
  type Size = 'xs3' | 'xs2' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
- type Color = string;
4
+ type Color = 'blue' | 'red' | 'dark' | 'light' | 'green' | 'gray' | 'none' | 'marine' | 'nord';
5
5
  type Variant = 'contained' | 'border' | 'divider';
6
6
  type Target = '_self' | '_blank';
7
7
  type Element = HTMLButtonElement | HTMLAnchorElement;
@@ -1,17 +1,11 @@
1
- <script lang="ts" context="module">export let openedDrawers = [];
1
+ <script lang="ts" module>export let openedDrawers = $state({ val: [] });
2
2
  </script>
3
3
 
4
- <script lang="ts">import { createDispatcherIfMounted } from '../../../createDispatcherIfMounted';
5
- import { zIndexes } from '../../../zIndexes';
6
- import { createEventDispatcher } from 'svelte';
7
- export let open = false;
8
- export let id = (Math.random() + 1).toString(36).substring(10);
9
- export let preventEscape = false;
10
- if (open) {
11
- openedDrawers.push(id);
12
- }
13
- export let initialOffset = 0;
14
- let offset = initialOffset;
4
+ <script lang="ts">import { zIndexes } from '../../../zIndexes';
5
+ import { untrack } from 'svelte';
6
+ let { open = $bindable(false), id = (Math.random() + 1).toString(36).substring(10), preventEscape = false, initialOffset = 0, children, onOpen, onClose } = $props();
7
+ let offset = $state(initialOffset);
8
+ let zIndex = $derived(zIndexes.disposables + offset);
15
9
  export function toggleDrawer() {
16
10
  if (!open) {
17
11
  openDrawer();
@@ -21,26 +15,28 @@ export function toggleDrawer() {
21
15
  }
22
16
  }
23
17
  export function openDrawer() {
24
- open = true;
25
- offset = openedDrawers.length - 1;
26
- if (openedDrawers.includes(id)) {
27
- return;
18
+ if (!open) {
19
+ open = true;
20
+ if (openedDrawers.val.includes(id)) {
21
+ return;
22
+ }
23
+ offset = openedDrawers.val.length - 1;
24
+ openedDrawers.val.push(id);
28
25
  }
29
- openedDrawers.push(id);
30
26
  }
31
27
  export function closeDrawer() {
32
- open = false;
33
- offset = initialOffset;
34
- // remove the last opened drawer
35
- openedDrawers = openedDrawers.filter((drawer) => drawer !== id);
28
+ if (open) {
29
+ open = false;
30
+ offset = initialOffset;
31
+ // remove the last opened drawer
32
+ openedDrawers.val = openedDrawers.val.filter((drawer) => drawer !== id);
33
+ }
36
34
  }
37
35
  export function isOpen() {
38
36
  return open;
39
37
  }
40
- const dispatch = createEventDispatcher();
41
- const dispatchIfMounted = createDispatcherIfMounted(dispatch);
42
38
  function handleClickAway(e) {
43
- const last = openedDrawers[openedDrawers.length - 1];
39
+ const last = openedDrawers.val[openedDrawers.val.length - 1];
44
40
  if (last === id) {
45
41
  e.stopPropagation();
46
42
  closeDrawer();
@@ -50,9 +46,10 @@ function onKeyDown(event) {
50
46
  if (open) {
51
47
  switch (event.key) {
52
48
  case 'Escape':
53
- if ((id == openedDrawers[openedDrawers.length - 1] || openedDrawers.length == 0) &&
49
+ if ((id == openedDrawers.val[openedDrawers.val.length - 1] ||
50
+ openedDrawers.val.length == 0) &&
54
51
  !preventEscape) {
55
- openedDrawers.pop();
52
+ openedDrawers.val.pop();
56
53
  event.preventDefault();
57
54
  event.stopPropagation();
58
55
  event.stopImmediatePropagation();
@@ -62,10 +59,34 @@ function onKeyDown(event) {
62
59
  }
63
60
  }
64
61
  }
65
- $: zIndex = zIndexes.disposables + offset;
66
- $: dispatchIfMounted(open ? 'open' : 'close');
62
+ if (open) {
63
+ openedDrawers.val.push(id);
64
+ }
65
+ let wasEverOpen = false;
66
+ let lastOpen = open;
67
+ $effect.pre(() => {
68
+ if (open === untrack(() => lastOpen)) {
69
+ return;
70
+ }
71
+ lastOpen = open;
72
+ if (open) {
73
+ // console.log('open', id, wasEverOpen)
74
+ wasEverOpen = true;
75
+ onOpen?.();
76
+ }
77
+ else if (untrack(() => wasEverOpen)) {
78
+ // console.log('close', id)
79
+ onClose?.();
80
+ }
81
+ });
67
82
  </script>
68
83
 
69
- <svelte:window on:keydown={onKeyDown} />
84
+ <svelte:window onkeydown={onKeyDown} />
70
85
 
71
- <slot {handleClickAway} {zIndex} {closeDrawer} {open} />
86
+ {@render children?.({
87
+ handleClickAway,
88
+ zIndex,
89
+ closeDrawer,
90
+ open,
91
+ isTop: openedDrawers.val[openedDrawers.val.length - 1] == id
92
+ })}