windmill-components 1.56.2 → 1.57.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 (224) hide show
  1. package/assets/app.css +5 -1
  2. package/components/ArgInput.svelte +6 -6
  3. package/components/CenteredModal.svelte +15 -14
  4. package/components/CenteredModal.svelte.d.ts +1 -0
  5. package/components/DisplayResult.svelte +1 -1
  6. package/components/Dropdown.svelte +4 -3
  7. package/components/Dropdown.svelte.d.ts +2 -0
  8. package/components/Editor.svelte +6 -4
  9. package/components/Editor.svelte.d.ts +2 -0
  10. package/components/EditorBar.svelte +15 -1
  11. package/components/FlowBuilder.svelte +18 -10
  12. package/components/FlowPreviewContent.svelte +1 -1
  13. package/components/GroupEditor.svelte +1 -0
  14. package/components/IconedResourceType.svelte +2 -2
  15. package/components/InputTransformForm.svelte +50 -40
  16. package/components/InputTransformForm.svelte.d.ts +1 -0
  17. package/components/ItemPicker.svelte +63 -57
  18. package/components/ItemPicker.svelte.d.ts +1 -2
  19. package/components/LogViewer.svelte +6 -5
  20. package/components/ModulePreview.svelte +20 -22
  21. package/components/MoveDrawer.svelte +40 -16
  22. package/components/MoveDrawer.svelte.d.ts +2 -2
  23. package/components/PageHeader.svelte +1 -1
  24. package/components/Path.svelte +5 -2
  25. package/components/Popover.svelte +14 -20
  26. package/components/Popover.svelte.d.ts +5 -0
  27. package/components/RadioButton.svelte +5 -3
  28. package/components/RadioButton.svelte.d.ts +2 -0
  29. package/components/ResourceEditor.svelte +2 -1
  30. package/components/ResourcePicker.svelte +1 -0
  31. package/components/RunChart.svelte +0 -1
  32. package/components/SchemaEditor.svelte +3 -0
  33. package/components/SchemaForm.svelte +86 -77
  34. package/components/SchemaForm.svelte.d.ts +4 -0
  35. package/components/ScriptBuilder.svelte +2 -1
  36. package/components/ScriptEditor.svelte +88 -77
  37. package/components/ShareModal.svelte.d.ts +2 -2
  38. package/components/SimpleEditor.svelte +17 -0
  39. package/components/Star.svelte +15 -9
  40. package/components/StringTypeNarrowing.svelte +30 -8
  41. package/components/TemplateEditor.svelte +21 -11
  42. package/components/TestJobLoader.svelte +94 -68
  43. package/components/TestJobLoader.svelte.d.ts +10 -8
  44. package/components/Toggle.svelte +30 -7
  45. package/components/Toggle.svelte.d.ts +4 -0
  46. package/components/Tooltip.svelte +1 -1
  47. package/components/VariableEditor.svelte +4 -3
  48. package/components/VariableEditor.svelte.d.ts +2 -2
  49. package/components/apps/components/DisplayComponent.svelte +1 -1
  50. package/components/apps/components/buttons/AppButton.svelte +16 -10
  51. package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  52. package/components/apps/components/dataDisplay/AppBarChart.svelte +17 -8
  53. package/components/apps/components/dataDisplay/AppHtml.svelte +23 -0
  54. package/components/apps/components/dataDisplay/AppHtml.svelte.d.ts +23 -0
  55. package/components/apps/components/dataDisplay/AppPieChart.svelte +11 -7
  56. package/components/apps/components/dataDisplay/AppScatterChart.svelte +46 -0
  57. package/components/apps/components/dataDisplay/AppScatterChart.svelte.d.ts +21 -0
  58. package/components/apps/components/dataDisplay/AppText.svelte +44 -7
  59. package/components/apps/components/dataDisplay/AppText.svelte.d.ts +1 -0
  60. package/components/apps/components/dataDisplay/AppTimeseries.svelte +57 -0
  61. package/components/apps/components/dataDisplay/AppTimeseries.svelte.d.ts +22 -0
  62. package/components/apps/components/form/AppForm.svelte +35 -18
  63. package/components/apps/components/helpers/AlignWrapper.svelte +2 -1
  64. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +1 -0
  65. package/components/apps/components/helpers/InputValue.svelte +20 -14
  66. package/components/apps/components/helpers/InputValue.svelte.d.ts +3 -0
  67. package/components/apps/components/helpers/NonRunnableComponent.svelte +7 -6
  68. package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  69. package/components/apps/components/helpers/RefreshButton.svelte +16 -11
  70. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +2 -0
  71. package/components/apps/components/helpers/RunnableComponent.svelte +119 -102
  72. package/components/apps/components/helpers/RunnableWrapper.svelte +6 -1
  73. package/components/apps/components/selectInputs/AppCheckbox.svelte +4 -0
  74. package/components/apps/components/selectInputs/AppSelect.svelte +2 -0
  75. package/components/apps/components/table/AppTable.svelte +64 -35
  76. package/components/apps/components/table/AppTableFooter.svelte +2 -1
  77. package/components/apps/components/table/tableOptions.d.ts +2 -9
  78. package/components/apps/components/table/tableOptions.js +5 -2
  79. package/components/apps/components/textInputs/AppTextInput.svelte +7 -4
  80. package/components/apps/editor/AppEditor.svelte +136 -65
  81. package/components/apps/editor/AppEditor.svelte.d.ts +3 -0
  82. package/components/apps/editor/AppEditorHeader.svelte +349 -51
  83. package/components/apps/editor/AppEditorHeader.svelte.d.ts +2 -4
  84. package/components/apps/editor/AppExportButton.svelte +34 -0
  85. package/components/apps/editor/AppExportButton.svelte.d.ts +17 -0
  86. package/components/apps/editor/AppPreview.svelte +20 -7
  87. package/components/apps/editor/AppPreview.svelte.d.ts +6 -0
  88. package/components/apps/editor/AppPublishButton.svelte +53 -0
  89. package/components/apps/editor/AppPublishButton.svelte.d.ts +18 -0
  90. package/components/apps/editor/ComponentEditor.svelte +39 -8
  91. package/components/apps/editor/ComponentEditor.svelte.d.ts +1 -0
  92. package/components/apps/editor/ComponentHeader.svelte +38 -29
  93. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -1
  94. package/components/apps/editor/GridEditor.svelte +105 -67
  95. package/components/apps/editor/GridEditor.svelte.d.ts +6 -1
  96. package/components/apps/editor/RecomputeAllComponents.svelte +80 -19
  97. package/components/apps/editor/SettingsPanel.svelte +2 -2
  98. package/components/apps/editor/TablePanel.svelte +1 -0
  99. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -39
  100. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -1
  101. package/components/apps/editor/componentsPanel/componentStaticValues.js +3 -2
  102. package/components/apps/editor/componentsPanel/data.js +201 -91
  103. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -0
  104. package/components/apps/editor/contextPanel/ContextPanel.svelte +69 -47
  105. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -2
  106. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
  107. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +56 -20
  108. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -0
  109. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +5 -1
  110. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +2 -0
  111. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +72 -23
  112. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  113. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +30 -22
  114. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +78 -77
  115. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +38 -33
  116. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -4
  117. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +1 -11
  118. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +27 -9
  119. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +19 -24
  120. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +1 -0
  121. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +12 -5
  122. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +2 -3
  123. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +59 -33
  124. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +5 -2
  125. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -2
  126. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +21 -3
  127. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +1 -3
  128. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  129. package/components/apps/editor/settingsPanel/TableActions.svelte +27 -18
  130. package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +1 -0
  131. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +10 -2
  132. package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +3 -0
  133. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +6 -4
  134. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +24 -0
  135. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +17 -0
  136. package/components/apps/editor/settingsPanel/inputEditor/RowInputEditor.svelte +6 -0
  137. package/components/apps/editor/settingsPanel/inputEditor/RowInputEditor.svelte.d.ts +17 -0
  138. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +11 -21
  139. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  140. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +1 -2
  141. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +42 -13
  142. package/components/apps/editorUtils.d.ts +1 -0
  143. package/components/apps/editorUtils.js +11 -0
  144. package/components/apps/gridUtils.js +2 -1
  145. package/components/apps/inputType.d.ts +12 -6
  146. package/components/apps/rx.d.ts +3 -3
  147. package/components/apps/rx.js +9 -4
  148. package/components/apps/store.d.ts +2 -0
  149. package/components/apps/store.js +2 -0
  150. package/components/apps/types.d.ts +20 -4
  151. package/components/apps/utils.d.ts +2 -2
  152. package/components/apps/utils.js +25 -9
  153. package/components/common/button/Button.svelte +8 -8
  154. package/components/common/button/Button.svelte.d.ts +2 -0
  155. package/components/common/confirmationModal/ConfirmationModal.svelte +1 -0
  156. package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -1
  157. package/components/common/popup/Popup.svelte +1 -1
  158. package/components/common/table/AppRow.svelte +31 -4
  159. package/components/common/table/AppRow.svelte.d.ts +4 -0
  160. package/components/common/table/FlowRow.svelte +9 -5
  161. package/components/common/table/Row.svelte +10 -8
  162. package/components/common/table/ScriptRow.svelte +15 -13
  163. package/components/common/tabs/Tabs.svelte +1 -1
  164. package/components/common/toggleButton/ToggleButton.svelte +2 -0
  165. package/components/common/toggleButton/ToggleButton.svelte.d.ts +1 -0
  166. package/components/flows/CreateActionsApp.svelte +43 -0
  167. package/components/flows/CreateActionsApp.svelte.d.ts +14 -0
  168. package/components/flows/CreateActionsFlow.svelte +6 -1
  169. package/components/flows/content/DynamicInputHelpBox.svelte +1 -1
  170. package/components/flows/content/FlowConstants.svelte +82 -0
  171. package/components/flows/content/FlowConstants.svelte.d.ts +14 -0
  172. package/components/flows/content/FlowEditorPanel.svelte +3 -0
  173. package/components/flows/content/FlowInputs.svelte +2 -2
  174. package/components/flows/content/FlowModuleComponent.svelte +4 -1
  175. package/components/flows/content/FlowModuleHeader.svelte +41 -89
  176. package/components/flows/content/FlowModuleHeader.svelte.d.ts +2 -2
  177. package/components/flows/content/FlowSettings.svelte +1 -1
  178. package/components/flows/flowStore.d.ts +1 -1
  179. package/components/flows/flowStore.js +8 -8
  180. package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  181. package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  182. package/components/flows/map/FlowConstantsItem.svelte +13 -0
  183. package/components/flows/map/FlowConstantsItem.svelte.d.ts +14 -0
  184. package/components/flows/map/FlowInputsItem.svelte +1 -2
  185. package/components/flows/map/FlowModuleSchemaItem.svelte +34 -25
  186. package/components/flows/map/FlowModuleSchemaMap.svelte +9 -3
  187. package/components/flows/map/FlowSettingsItem.svelte +6 -8
  188. package/components/flows/pickers/PickHubScript.svelte +1 -1
  189. package/components/flows/propPicker/PropPickerWrapper.svelte +42 -31
  190. package/components/home/ItemsList.svelte +6 -4
  191. package/components/icons/ClickhouseIcon.svelte +22 -0
  192. package/components/icons/ClickhouseIcon.svelte.d.ts +17 -0
  193. package/components/icons/FaunadbIcon.svelte +19 -0
  194. package/components/icons/FaunadbIcon.svelte.d.ts +17 -0
  195. package/components/icons/OpenaiIcon.svelte +18 -0
  196. package/components/icons/OpenaiIcon.svelte.d.ts +17 -0
  197. package/components/icons/index.d.ts +7 -1
  198. package/components/icons/index.js +8 -2
  199. package/components/propertyPicker/ObjectViewer.svelte +11 -4
  200. package/components/propertyPicker/PropPicker.svelte +1 -1
  201. package/components/scriptEditor/LogPanel.svelte +26 -22
  202. package/components/sidebar/FavoriteMenu.svelte +23 -19
  203. package/components/sidebar/SidebarContent.svelte +16 -16
  204. package/components/sidebar/WorkspaceMenu.svelte +18 -17
  205. package/components/splitPanes/SplitPanesWrapper.svelte +1 -5
  206. package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +0 -1
  207. package/editorUtils.js +2 -0
  208. package/gen/core/OpenAPI.js +1 -1
  209. package/gen/models/Policy.d.ts +1 -0
  210. package/gen/services/AppService.d.ts +18 -0
  211. package/gen/services/AppService.js +30 -0
  212. package/gen/services/GranularAclService.d.ts +3 -3
  213. package/gen/services/ResourceService.d.ts +15 -0
  214. package/gen/services/ResourceService.js +17 -0
  215. package/infer.js +4 -0
  216. package/logout.d.ts +1 -0
  217. package/logout.js +5 -3
  218. package/package.json +502 -489
  219. package/stores.d.ts +1 -0
  220. package/stores.js +13 -5
  221. package/utils.d.ts +1 -1
  222. package/utils.js +17 -10
  223. package/components/apps/CreateApp.svelte +0 -68
  224. package/components/apps/CreateApp.svelte.d.ts +0 -14
package/assets/app.css CHANGED
@@ -27,6 +27,10 @@
27
27
  whitespace: normal !important;
28
28
  }
29
29
 
30
+ pre code.hljs {
31
+ overflow: visible !important;
32
+ }
33
+
30
34
  svelte-virtual-list-row {
31
35
  overflow: visible !important;
32
36
  }
@@ -40,7 +44,7 @@
40
44
  box-shadow: none !important;
41
45
  }
42
46
 
43
- .templatable-editor span.mtk20 {
47
+ .Template-editor span.mtk20 {
44
48
  color: black !important;
45
49
  }
46
50
  }
@@ -157,7 +157,7 @@ $: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncod
157
157
  bind:value={description}
158
158
  placeholder="Field description"
159
159
  />
160
- {#if type == 'string' && !contentEncoding && format != 'date-time'}
160
+ {#if type == 'string' && format != 'date-time'}
161
161
  <StringTypeNarrowing bind:format bind:pattern bind:enum_ bind:contentEncoding />
162
162
  {:else if type == 'object'}
163
163
  <ObjectTypeNarrowing bind:format />
@@ -300,18 +300,18 @@ $: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncod
300
300
  </select>
301
301
  {:else if inputCat == 'date'}
302
302
  <input {autofocus} class="inline-block" type="datetime-local" bind:value />
303
- {:else if inputCat == 'sql'}
304
- <div class="border rounded mb-4 w-full border-gray-700">
303
+ {:else if inputCat == 'sql' || inputCat == 'yaml'}
304
+ <div class="border my-1 mb-4 w-full border-gray-400">
305
305
  <SimpleEditor
306
306
  on:focus={() => dispatch('focus')}
307
307
  on:blur={() => dispatch('blur')}
308
308
  bind:this={editor}
309
- lang="sql"
309
+ lang={inputCat}
310
310
  bind:code={value}
311
- class="few-lines-editor"
312
311
  on:change={async () => {
313
312
  dispatch('input', { rawValue: value, isRaw: false })
314
313
  }}
314
+ autoHeight
315
315
  />
316
316
  </div>
317
317
  {:else if inputCat == 'base64'}
@@ -360,7 +360,7 @@ $: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncod
360
360
  variant="border"
361
361
  color="blue"
362
362
  size="sm"
363
- btnClasses="min-w-min items-center leading-4 py-0"
363
+ btnClasses="min-w-min min-h-[34px] items-center leading-4 py-0"
364
364
  on:click={() => {
365
365
  pickForField = label
366
366
  itemPicker?.openDrawer?.()
@@ -3,35 +3,36 @@ import { onMount } from 'svelte';
3
3
  import WindmillIcon from './icons/WindmillIcon.svelte';
4
4
  export let subtitle = undefined;
5
5
  export let title = 'Windmill';
6
+ export let disableLogo = false;
6
7
  let version = '';
7
8
  onMount(async () => {
8
9
  version = await SettingsService.backendVersion();
9
10
  });
10
11
  </script>
11
12
 
12
- <div class="flex justify-center min-h-screen pt-10 relative bg-[#3b4252]">
13
- <div class="w-10/12 md:w-7/12 lg:w-6/12 xl:4/12 m-auto z-10">
14
- <div class="border rounded-md py-4 px-16 shadow-md bg-gray-50">
15
- <h1 class="justify-center text-center font-medium pb-4">
13
+ <div class="center-center min-h-screen p-4 relative bg-[#3b4252]">
14
+ <div class="border rounded-md shadow-md bg-white w-full max-w-[640px]
15
+ p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10">
16
+ <div class="mb-10">
17
+ <h1 class="text-center">
16
18
  {title}
17
19
  </h1>
18
20
  {#if subtitle}
19
- <p class="justify-center text-center font-medium pb-2 text-xs">
21
+ <p class="text-sm text-center text-gray-600 mt-2">
20
22
  {subtitle}
21
23
  </p>
22
24
  {/if}
23
- <slot />
24
25
  </div>
25
-
26
- <!-- empty row to make the form a little bit above vertical centering-->
27
- <div class="py-12" />
26
+ <slot />
28
27
  </div>
29
- <div class="hidden lg:block absolute top-10 right-50">
30
- <div class="animate-[spin_100s_linear_infinite] ">
31
- <WindmillIcon white height="100px" width="100px" />
28
+ {#if !disableLogo}
29
+ <div class="hidden lg:block absolute top-10 right-50">
30
+ <div class="animate-[spin_100s_linear_infinite] ">
31
+ <WindmillIcon white height="100px" width="100px" />
32
+ </div>
33
+ <h2 class="text-center pt-2 text-gray-100">Windmill</h2>
32
34
  </div>
33
- <h2 class="text-center pt-2 text-gray-100">Windmill</h2>
34
- </div>
35
+ {/if}
35
36
  <div class="absolute top-0 right-0 text-2xs text-gray-300 italic px-3 py-1">
36
37
  <span class="font-mono">{version}</span>
37
38
  </div>
@@ -3,6 +3,7 @@ declare const __propDef: {
3
3
  props: {
4
4
  subtitle?: string | undefined;
5
5
  title?: string | undefined;
6
+ disableLogo?: boolean | undefined;
6
7
  };
7
8
  events: {
8
9
  [evt: string]: CustomEvent<any>;
@@ -73,7 +73,7 @@ let payload = '';
73
73
  class="grid grid-flow-col-dense border border-gray-200 rounded-md "
74
74
  >
75
75
  {#each Object.keys(result) as col}
76
- <div class="flex flex-col max-h-40 min-w-full overflow-auto">
76
+ <div class="flex flex-col max-h-40 min-w-full">
77
77
  <div
78
78
  class="px-12 text-left uppercase border-b bg-gray-50 overflow-hidden rounded-t-md "
79
79
  >
@@ -1,17 +1,18 @@
1
1
  <script>import { createEventDispatcher } from 'svelte';
2
2
  import Icon from 'svelte-awesome';
3
- import { faEllipsisH } from '@fortawesome/free-solid-svg-icons';
3
+ import { MoreHorizontal } from 'lucide-svelte';
4
4
  import { Button, Menu } from './common';
5
5
  export let dropdownItems;
6
6
  export let name = undefined;
7
7
  export let placement = 'bottom-start';
8
+ export let btnClasses = '!text-blue-500 bg-transparent';
8
9
  const dispatch = createEventDispatcher();
9
10
  </script>
10
11
 
11
12
  <Menu {placement} let:close>
12
- <Button color="light" size="xs" btnClasses="!text-blue-500 bg-transparent" slot="trigger">
13
+ <Button nonCaptureEvent color="light" size="xs" {btnClasses} {...$$restProps} slot="trigger">
13
14
  {#if !$$slots.default}
14
- <Icon data={faEllipsisH} scale={1.2} />
15
+ <MoreHorizontal size={20} />
15
16
  {:else}
16
17
  <slot />
17
18
  {/if}
@@ -2,9 +2,11 @@ import { SvelteComponentTyped } from "svelte";
2
2
  import type { DropdownItem } from '../utils';
3
3
  declare const __propDef: {
4
4
  props: {
5
+ [x: string]: any;
5
6
  dropdownItems: DropdownItem[];
6
7
  name?: string | undefined;
7
8
  placement?: "top-start" | "top-end" | "bottom-start" | "bottom-end" | undefined;
9
+ btnClasses?: string | undefined;
8
10
  };
9
11
  events: {
10
12
  click: CustomEvent<any>;
@@ -28,6 +28,7 @@ languages.typescript.typescriptDefaults.setDiagnosticsOptions({
28
28
  noSuggestionDiagnostics: true,
29
29
  noSyntaxValidation: true
30
30
  });
31
+ languages.typescript.typescriptDefaults.setExtraLibs([]);
31
32
  meditor.defineTheme('myTheme', {
32
33
  base: 'vs',
33
34
  inherit: true,
@@ -105,7 +106,7 @@ export function setCode(ncode) {
105
106
  editor.setValue(ncode);
106
107
  }
107
108
  }
108
- function format() {
109
+ export function format() {
109
110
  if (editor) {
110
111
  code = getCode();
111
112
  editor.getAction('editor.action.formatDocument').run();
@@ -156,7 +157,6 @@ export async function reloadWebsocket() {
156
157
  markdown: {
157
158
  isTrusted: true
158
159
  },
159
- // workspaceFolder: { uri: Uri.parse(`/tmp/${name}`), name: 'tmp', index: 0 },
160
160
  initializationOptions,
161
161
  middleware: {
162
162
  workspace: {
@@ -354,14 +354,16 @@ async function closeWebsockets() {
354
354
  async function loadMonaco() {
355
355
  const model = meditor.createModel(code, lang, mUri.parse(uri));
356
356
  model.updateOptions(updateOptions);
357
- editor = meditor.create(divEl, editorConfig(model, code, lang, automaticLayout, fixedOverflowWidgets));
357
+ editor = meditor.create(divEl, {
358
+ ...editorConfig(model, code, lang, automaticLayout, fixedOverflowWidgets)
359
+ });
358
360
  let timeoutModel = undefined;
359
361
  editor.onDidChangeModelContent((event) => {
360
362
  $dirtyStore = true;
361
363
  timeoutModel && clearTimeout(timeoutModel);
362
364
  timeoutModel = setTimeout(() => {
363
365
  code = getCode();
364
- dispatch('change');
366
+ dispatch('change', code);
365
367
  }, 500);
366
368
  });
367
369
  editor.onDidFocusEditorText(() => {
@@ -22,6 +22,7 @@ declare const __propDef: {
22
22
  insertAtBeginning?: ((code: string) => void) | undefined;
23
23
  insertAtLine?: ((code: string, line: number) => void) | undefined;
24
24
  setCode?: ((ncode: string) => void) | undefined;
25
+ format?: (() => void) | undefined;
25
26
  clearContent?: (() => Promise<void>) | undefined;
26
27
  reloadWebsocket?: (() => Promise<void>) | undefined;
27
28
  addAction?: ((id: string, label: string, callback: (editor: meditor.IStandaloneCodeEditor) => void, keybindings?: number[]) => void) | undefined;
@@ -44,6 +45,7 @@ export default class Editor extends SvelteComponentTyped<EditorProps, EditorEven
44
45
  get insertAtBeginning(): (code: string) => void;
45
46
  get insertAtLine(): (code: string, line: number) => void;
46
47
  get setCode(): (ncode: string) => void;
48
+ get format(): () => void;
47
49
  get clearContent(): () => Promise<void>;
48
50
  get reloadWebsocket(): () => Promise<void>;
49
51
  get addAction(): (id: string, label: string, callback: (editor: meditor.IStandaloneCodeEditor) => void, keybindings?: number[]) => void;
@@ -3,7 +3,7 @@
3
3
 
4
4
  <script>import { ResourceService, VariableService } from '../gen';
5
5
  import { getScriptByPath, sendUserToast } from '../utils';
6
- import { faCube, faDollarSign, faEye, faRotate, faRotateLeft } from '@fortawesome/free-solid-svg-icons';
6
+ import { faBroom, faCube, faDollarSign, faEye, faRotate, faRotateLeft } from '@fortawesome/free-solid-svg-icons';
7
7
  import { workspaceStore } from '../stores';
8
8
  import ItemPicker from './ItemPicker.svelte';
9
9
  import ResourceEditor from './ResourceEditor.svelte';
@@ -286,6 +286,20 @@ async function onScriptPick(e) {
286
286
  </span>
287
287
  </Button></div
288
288
  >
289
+ <div>
290
+ <Button
291
+ btnClasses="!font-medium"
292
+ size="xs"
293
+ spacingSize="md"
294
+ color="light"
295
+ on:click={editor.format}
296
+ startIcon={{ icon: faBroom }}
297
+ >
298
+ {#if !iconOnly}
299
+ Format (Ctrl+S)
300
+ {/if}
301
+ </Button></div
302
+ >
289
303
  </div>
290
304
  <div class="py-1">
291
305
  <div>
@@ -2,13 +2,12 @@
2
2
  import { page } from '$app/stores';
3
3
  import { FlowService, ScheduleService } from '../gen';
4
4
  import { userStore, workspaceStore } from '../stores';
5
- import { encodeState, formatCron, loadHubScripts, sendUserToast, setQueryWithoutLoad } from '../utils';
5
+ import { encodeState, formatCron, loadHubScripts, sendUserToast } from '../utils';
6
6
  import { faCalendarAlt, faEye, faPen, faSave } from '@fortawesome/free-solid-svg-icons';
7
7
  import { setContext } from 'svelte';
8
- import { Icon } from 'svelte-awesome';
9
8
  import { writable } from 'svelte/store';
10
9
  import CenteredPage from './CenteredPage.svelte';
11
- import { Badge, Button, Drawer, DrawerContent } from './common';
10
+ import { Button, Drawer, DrawerContent } from './common';
12
11
  import { dirtyStore } from './common/confirmationModal/dirtyStore';
13
12
  import UnsavedConfirmationModal from './common/confirmationModal/UnsavedConfirmationModal.svelte';
14
13
  import { OFFSET } from './CronInput.svelte';
@@ -50,6 +49,7 @@ async function saveFlow() {
50
49
  const { cron, args, enabled } = $scheduleStore;
51
50
  $dirtyStore = false;
52
51
  if (initialPath === '') {
52
+ localStorage.removeItem('flow');
53
53
  await FlowService.createFlow({
54
54
  workspace: $workspaceStore,
55
55
  requestBody: {
@@ -65,6 +65,7 @@ async function saveFlow() {
65
65
  }
66
66
  }
67
67
  else {
68
+ localStorage.removeItem(`flow-${initialPath}`);
68
69
  await FlowService.updateFlow({
69
70
  workspace: $workspaceStore,
70
71
  path: initialPath,
@@ -112,16 +113,23 @@ async function saveFlow() {
112
113
  }
113
114
  let timeout = undefined;
114
115
  $: {
115
- if ($flowStore && $flowStateStore) {
116
- setUrl();
116
+ if ($flowStore || $selectedIdStore) {
117
+ saveDraft();
117
118
  }
118
119
  }
119
- function setUrl() {
120
+ function saveDraft() {
120
121
  timeout && clearTimeout(timeout);
121
- timeout = setTimeout(() => setQueryWithoutLoad($page.url, 'state', encodeState({
122
- flow: $flowStore,
123
- selectedId: $selectedIdStore
124
- })), 500);
122
+ timeout = setTimeout(() => {
123
+ try {
124
+ localStorage.setItem(initialPath ? `flow-${initialPath}` : 'flow', encodeState({
125
+ flow: $flowStore,
126
+ selectedId: $selectedIdStore
127
+ }));
128
+ }
129
+ catch (err) {
130
+ console.error(err);
131
+ }
132
+ }, 500);
125
133
  }
126
134
  const selectedIdStore = writable(selectedId);
127
135
  const scheduleStore = writable({ args: {}, cron: '', enabled: false });
@@ -50,7 +50,7 @@ function extractFlow(previewMode) {
50
50
  }
51
51
  else {
52
52
  const flow = JSON.parse(JSON.stringify($flowStore));
53
- const idOrders = dfs(flow.value.modules);
53
+ const idOrders = dfs(flow.value.modules, (x) => x.id);
54
54
  let upToIndex = idOrders.indexOf($selectedId);
55
55
  if (upToIndex != -1) {
56
56
  flow.value.modules = sliceModules(flow.value.modules, upToIndex, idOrders);
@@ -85,6 +85,7 @@ function getRole(x) {
85
85
  placeholder="Summary of the group"
86
86
  />
87
87
  <Button
88
+ disabled={!can_write}
88
89
  size="xs"
89
90
  on:click={async () => {
90
91
  await GroupService.updateGroup({
@@ -8,12 +8,12 @@ export let center = false;
8
8
  $: name_prefix = name.split('_')[0];
9
9
  </script>
10
10
 
11
- <div class=" truncate flex flex-row gap-2 {center ? 'justify-center items-center' : ''} -pl-2">
11
+ <div class="truncate flex flex-row gap-2 {center ? 'justify-center items-center' : ''} -pl-2">
12
12
  {#if !silent && !after}
13
13
  {name}
14
14
  {/if}
15
15
  {#if APP_TO_ICON_COMPONENT[name_prefix]}
16
- <span class="text-gray-700">
16
+ <span class="text-gray-700 grayscale">
17
17
  <svelte:component this={APP_TO_ICON_COMPONENT[name_prefix]} {height} {width} />
18
18
  </span>
19
19
  {:else}
@@ -18,6 +18,7 @@ export let previousModuleId;
18
18
  export let pickForField = undefined;
19
19
  export let variableEditor = undefined;
20
20
  export let itemPicker = undefined;
21
+ export let noDynamicToggle = false;
21
22
  let monaco = undefined;
22
23
  let monacoTemplate = undefined;
23
24
  let argInput = undefined;
@@ -53,7 +54,7 @@ function setPropertyType(rawValue) {
53
54
  }
54
55
  }
55
56
  function isStaticTemplate(inputCat) {
56
- return inputCat === 'string' || inputCat === 'sql';
57
+ return inputCat === 'string' || inputCat === 'sql' || inputCat == 'yaml';
57
58
  }
58
59
  function connectProperty(rawValue) {
59
60
  if (isStaticTemplate(inputCat)) {
@@ -90,13 +91,16 @@ function onFocus() {
90
91
  }
91
92
  }
92
93
  const { focusProp, propPickerConfig } = getContext('PropPickerWrapper');
93
- $: isStaticTemplate(inputCat) && propertyType == 'static' && setPropertyType(arg.value);
94
+ $: isStaticTemplate(inputCat) && propertyType == 'static' && setPropertyType(arg?.value);
94
95
  const openBracket = '${';
95
96
  const closeBracket = '}';
97
+ $: schema.properties[argName].default &&
98
+ !arg?.value &&
99
+ monacoTemplate?.setCode(schema.properties[argName].default);
96
100
  </script>
97
101
 
98
102
  {#if arg != undefined}
99
- <div class="flex flex-row justify-between gap-1 mb-1">
103
+ <div class="flex flex-row justify-between gap-1 pb-1">
100
104
  <div class="flex items-center flex-wrap grow">
101
105
  <FieldHeader
102
106
  label={argName}
@@ -118,21 +122,8 @@ const closeBracket = '}';
118
122
  </span>
119
123
  {/if}
120
124
  </div>
121
- <div class="flex flex-row-reverse gap-x-4 gap-y-1 flex-wrap">
122
- <div>
123
- <Button
124
- variant="contained"
125
- color="blue"
126
- size="xs"
127
- on:click={() => {
128
- focusProp(argName, 'connect', (path) => {
129
- connectProperty(path)
130
- return true
131
- })
132
- }}>Connect &rightarrow;</Button
133
- >
134
- </div>
135
- <div>
125
+ {#if !noDynamicToggle}
126
+ <div class="flex flex-row gap-x-4 gap-y-1 flex-wrap">
136
127
  <ToggleButtonGroup
137
128
  bind:selected={propertyType}
138
129
  on:selected={(e) => {
@@ -143,24 +134,29 @@ const closeBracket = '}';
143
134
  argName,
144
135
  previousModuleId,
145
136
  staticTemplate
146
- ? `\`${arg.value ?? ''}\``
137
+ ? `\`${arg?.value ?? ''}\``
147
138
  : arg.value
148
- ? JSON.stringify(arg.value, null, 4)
139
+ ? JSON.stringify(arg?.value, null, 4)
149
140
  : ''
150
141
  )
151
142
  }
152
-
153
- arg.value = undefined
143
+ if (arg) {
144
+ arg.value = undefined
145
+ }
154
146
  propertyType = 'javascript'
155
147
  arg.type = 'javascript'
156
148
  } else {
157
149
  if (staticTemplate) {
158
- arg.value = codeToStaticTemplate(arg.expr)
159
- setPropertyType(arg.value)
150
+ if (arg) {
151
+ arg.value = codeToStaticTemplate(arg.expr)
152
+ }
153
+ setPropertyType(arg?.value)
160
154
  } else {
161
- arg.type = 'static'
162
- arg.value = undefined
163
- arg.expr = undefined
155
+ if (arg) {
156
+ arg.type = 'static'
157
+ arg.value = undefined
158
+ arg.expr = undefined
159
+ }
164
160
  }
165
161
  propertyType = 'static'
166
162
  }
@@ -168,7 +164,7 @@ const closeBracket = '}';
168
164
  >
169
165
  {#if isStaticTemplate(inputCat)}
170
166
  <ToggleButton light position="left" value="static" size="xs">
171
- {'${} '}Templatable &nbsp; <Tooltip
167
+ {'${} '}Template &nbsp; <Tooltip
172
168
  >Write javascript expressions between "{openBracket}" and "{closeBracket}". You may
173
169
  refer to contextual objects like 'flow_input', or 'result' or functions like
174
170
  'resource' and 'variable'
@@ -188,13 +184,25 @@ const closeBracket = '}';
188
184
  Dynamic (JS)
189
185
  </ToggleButton>
190
186
  </ToggleButtonGroup>
187
+ <Button
188
+ variant="contained"
189
+ color="blue"
190
+ size="xs"
191
+ on:click={() => {
192
+ focusProp(argName, 'connect', (path) => {
193
+ connectProperty(path)
194
+ return true
195
+ })
196
+ }}>Connect &rightarrow;</Button
197
+ >
191
198
  </div>
192
- </div>
199
+ {/if}
193
200
  </div>
201
+
194
202
  <div class="max-w-xs" />
195
203
 
196
204
  <div
197
- class="relative {$propPickerConfig?.propName == argName
205
+ class="relative mb-6 {$propPickerConfig?.propName == argName
198
206
  ? 'outline outline-offset-0 outline-2 outline-blue-500 rounded-md'
199
207
  : ''}"
200
208
  >
@@ -205,14 +213,17 @@ const closeBracket = '}';
205
213
  Connect input &rightarrow;
206
214
  </span>
207
215
  {/if}
208
- {#if isStaticTemplate(inputCat) && propertyType == 'static'}
209
- <div class="py-1 rounded border border-1 border-gray-500">
210
- <TemplateEditor
211
- bind:this={monacoTemplate}
212
- {extraLib}
213
- on:focus={onFocus}
214
- bind:code={arg.value}
215
- />
216
+ {#if isStaticTemplate(inputCat) && propertyType == 'static' && !noDynamicToggle}
217
+ <div class="py-1 mt-2 min-h-[28px] rounded border border-1 border-gray-500">
218
+ {#if arg}
219
+ <TemplateEditor
220
+ bind:this={monacoTemplate}
221
+ {extraLib}
222
+ on:focus={onFocus}
223
+ bind:code={arg.value}
224
+ fontSize={14}
225
+ />
226
+ {/if}
216
227
  </div>
217
228
  {:else if propertyType === undefined || propertyType == 'static'}
218
229
  <ArgInput
@@ -263,7 +274,6 @@ const closeBracket = '}';
263
274
  Not recognized input type {argName}
264
275
  {/if}
265
276
  </div>
266
- <div class="mb-6" />
267
277
  {:else}
268
- <p class="text-sm text-gray-700">Arg at {argName} is undefined</p>
278
+ <p class="text-sm text-gray-700">Argument at {argName} is undefined</p>
269
279
  {/if}
@@ -14,6 +14,7 @@ declare const __propDef: {
14
14
  pickForField?: string | undefined;
15
15
  variableEditor?: VariableEditor | undefined;
16
16
  itemPicker?: ItemPicker | undefined;
17
+ noDynamicToggle?: boolean | undefined;
17
18
  };
18
19
  events: {
19
20
  [evt: string]: CustomEvent<any>;