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
@@ -1,6 +1,6 @@
1
1
  <script>import Button from '../../../common/button/Button.svelte';
2
2
  import { faTrash } from '@fortawesome/free-solid-svg-icons';
3
- import { createEventDispatcher, onMount } from 'svelte';
3
+ import { createEventDispatcher, getContext, onMount } from 'svelte';
4
4
  import { CheckCircle, Code2, X } from 'lucide-svelte';
5
5
  import InlineScriptEditorDrawer from './InlineScriptEditorDrawer.svelte';
6
6
  import { inferArgs } from '../../../../infer';
@@ -8,9 +8,13 @@ import Badge from '../../../common/badge/Badge.svelte';
8
8
  import { fly } from 'svelte/transition';
9
9
  import Editor from '../../../Editor.svelte';
10
10
  import { scriptLangToEditorLang } from '../../../../utils';
11
+ import Tooltip from '../../../Tooltip.svelte';
11
12
  let inlineScriptEditorDrawer;
12
13
  export let inlineScript;
13
14
  export let name = undefined;
15
+ export let id;
16
+ const { runnableComponents } = getContext('AppEditorContext');
17
+ let editor;
14
18
  let validCode = false;
15
19
  async function inferInlineScriptSchema(language, content, schema) {
16
20
  try {
@@ -29,12 +33,13 @@ onMount(async () => {
29
33
  }
30
34
  });
31
35
  const dispatch = createEventDispatcher();
36
+ let runLoading = false;
32
37
  </script>
33
38
 
34
- <InlineScriptEditorDrawer bind:this={inlineScriptEditorDrawer} bind:inlineScript />
39
+ <InlineScriptEditorDrawer {editor} bind:this={inlineScriptEditorDrawer} bind:inlineScript />
35
40
 
36
- <div class="h-full p-4 flex flex-col gap-2" transition:fly={{ duration: 50 }}>
37
- <div class="flex justify-between w-full gap-1 flex-row items-center">
41
+ <div class="h-full flex flex-col gap-1" transition:fly={{ duration: 50 }}>
42
+ <div class="flex justify-between w-full gap-1 px-2 pt-1 flex-row items-center">
38
43
  {#if name !== undefined}
39
44
  <input bind:value={name} placeholder="Inline script name" />
40
45
  {/if}
@@ -50,13 +55,41 @@ const dispatch = createEventDispatcher();
50
55
  {/if}
51
56
 
52
57
  <Button
53
- size="xs"
54
- color="light"
55
58
  variant="border"
56
- iconOnly
57
- startIcon={{ icon: faTrash }}
58
- on:click={() => dispatch('delete')}
59
- />
59
+ size="xs"
60
+ color="blue"
61
+ on:click={async () => {
62
+ editor.format()
63
+ }}
64
+ >
65
+ Format&nbsp;<Tooltip>Ctrl+S</Tooltip>
66
+ </Button>
67
+ {#if id.startsWith('unused-')}
68
+ <Button
69
+ size="xs"
70
+ color="light"
71
+ variant="border"
72
+ iconOnly
73
+ startIcon={{ icon: faTrash }}
74
+ on:click={() => dispatch('delete')}
75
+ />
76
+ {:else}
77
+ <Button
78
+ loading={runLoading}
79
+ size="xs"
80
+ color="blue"
81
+ on:click={async () => {
82
+ runLoading = true
83
+ await $runnableComponents[id]?.()
84
+ runLoading = false
85
+ }}
86
+ >
87
+ Run&nbsp;<Tooltip
88
+ >Ctrl+Enter to run the script and see the result in the component directly</Tooltip
89
+ >
90
+ </Button>
91
+ {/if}
92
+
60
93
  <Button
61
94
  size="xs"
62
95
  color="blue"
@@ -74,20 +107,23 @@ const dispatch = createEventDispatcher();
74
107
 
75
108
  <div class="border h-full">
76
109
  <Editor
110
+ bind:this={editor}
77
111
  class="flex flex-1 grow h-full"
78
112
  lang={scriptLangToEditorLang(inlineScript?.language)}
79
113
  bind:code={inlineScript.content}
80
- fixedOverflowWidgets={false}
81
- on:change={async () => {
114
+ fixedOverflowWidgets={true}
115
+ cmdEnterAction={async () => {
116
+ runLoading = true
117
+ await $runnableComponents[id]?.()
118
+ runLoading = false
119
+ }}
120
+ on:change={async (e) => {
82
121
  if (inlineScript) {
83
- let schema = await inferInlineScriptSchema(
84
- inlineScript?.language,
85
- inlineScript.content,
86
- inlineScript.schema
87
- )
88
-
89
- inlineScript.schema = schema
90
- inlineScript = inlineScript
122
+ const oldSchema = JSON.stringify(inlineScript.schema)
123
+ await inferInlineScriptSchema(inlineScript?.language, e.detail, inlineScript.schema)
124
+ if (JSON.stringify(inlineScript.schema) != oldSchema) {
125
+ inlineScript = inlineScript
126
+ }
91
127
  }
92
128
  }}
93
129
  />
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  props: {
5
5
  inlineScript: InlineScript;
6
6
  name?: string | undefined;
7
+ id: string;
7
8
  };
8
9
  events: {
9
10
  delete: CustomEvent<any>;
@@ -3,6 +3,7 @@ import ScriptEditor from '../../../ScriptEditor.svelte';
3
3
  import { faSave } from '@fortawesome/free-solid-svg-icons';
4
4
  let scriptEditorDrawer;
5
5
  export let inlineScript;
6
+ export let editor = undefined;
6
7
  export function openDrawer() {
7
8
  scriptEditorDrawer.openDrawer?.();
8
9
  }
@@ -13,7 +14,10 @@ export function openDrawer() {
13
14
  title="Script Editor"
14
15
  noPadding
15
16
  forceOverflowVisible
16
- on:close={scriptEditorDrawer.closeDrawer}
17
+ on:close={() => {
18
+ scriptEditorDrawer.closeDrawer()
19
+ editor?.setCode(inlineScript.content)
20
+ }}
17
21
  >
18
22
  {#if inlineScript}
19
23
  <ScriptEditor
@@ -1,8 +1,10 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import type Editor from '../../../Editor.svelte';
2
3
  import type { InlineScript } from '../../types';
3
4
  declare const __propDef: {
4
5
  props: {
5
6
  inlineScript: InlineScript;
7
+ editor?: Editor | undefined;
6
8
  openDrawer?: (() => void) | undefined;
7
9
  };
8
10
  events: {
@@ -1,14 +1,22 @@
1
- <script>import Button from '../../../common/button/Button.svelte';
1
+ <script>import { Drawer, DrawerContent } from '../../../common';
2
+ import Button from '../../../common/button/Button.svelte';
2
3
  import FlowModuleScript from '../../../flows/content/FlowModuleScript.svelte';
3
- import { getScriptByPath } from '../../../../utils';
4
- import { faCodeBranch } from '@fortawesome/free-solid-svg-icons';
4
+ import FlowPathViewer from '../../../flows/content/FlowPathViewer.svelte';
5
+ import { inferArgs } from '../../../../infer';
6
+ import { emptySchema, getScriptByPath } from '../../../../utils';
7
+ import { faCodeBranch, faExternalLinkAlt, faEye, faPen } from '@fortawesome/free-solid-svg-icons';
5
8
  import { clearResultAppInput } from '../../utils';
6
9
  import EmptyInlineScript from './EmptyInlineScript.svelte';
7
10
  import InlineScriptEditor from './InlineScriptEditor.svelte';
8
11
  export let componentInput;
12
+ export let id;
9
13
  async function fork(path) {
10
- const { content, language, schema } = await getScriptByPath(path);
14
+ let { content, language, schema } = await getScriptByPath(path);
11
15
  if (componentInput && componentInput.type == 'runnable') {
16
+ if (!schema || Object.keys(schema).length == 0) {
17
+ schema = emptySchema();
18
+ await inferArgs(language, content, schema);
19
+ }
12
20
  componentInput.runnable = {
13
21
  type: 'runnableByName',
14
22
  name: path,
@@ -24,13 +32,21 @@ async function fork(path) {
24
32
  console.error('componentInput is undefined');
25
33
  }
26
34
  }
27
- // $: inlineScript && (componentInput = componentInput)
35
+ let drawerFlowViewer;
36
+ let flowPath = '';
28
37
  </script>
29
38
 
39
+ <Drawer bind:this={drawerFlowViewer} size="1200px">
40
+ <DrawerContent title="Flow {flowPath}" on:close={drawerFlowViewer.closeDrawer}>
41
+ <FlowPathViewer path={flowPath ?? ''} />
42
+ </DrawerContent>
43
+ </Drawer>
44
+
30
45
  {#if componentInput && componentInput.type == 'runnable'}
31
46
  {#if componentInput?.runnable?.type === 'runnableByName' && componentInput?.runnable?.name !== undefined}
32
47
  {#if componentInput.runnable.inlineScript}
33
48
  <InlineScriptEditor
49
+ {id}
34
50
  bind:inlineScript={componentInput.runnable.inlineScript}
35
51
  bind:name={componentInput.runnable.name}
36
52
  on:delete={() => {
@@ -41,6 +57,7 @@ async function fork(path) {
41
57
  />
42
58
  {:else}
43
59
  <EmptyInlineScript
60
+ {id}
44
61
  name={componentInput.runnable.name}
45
62
  on:new={(e) => {
46
63
  if (
@@ -55,25 +72,57 @@ async function fork(path) {
55
72
  {/if}
56
73
  {:else if componentInput?.runnable?.type === 'runnableByPath' && componentInput?.runnable?.path}
57
74
  <div class="p-2 h-full flex flex-col gap-2 ">
58
- <div>
59
- <Button
60
- size="xs"
61
- startIcon={{ icon: faCodeBranch }}
62
- on:click={() => {
63
- if (
64
- componentInput &&
65
- componentInput.type == 'runnable' &&
66
- componentInput.runnable?.type === 'runnableByPath'
67
- ) {
68
- fork(componentInput.runnable.path)
69
- }
70
- }}
71
- >
72
- Fork
73
- </Button>
74
- </div>
75
+ {#if componentInput.runnable.runType == 'script' || componentInput.runnable.runType == 'hubscript'}
76
+ <div>
77
+ <Button
78
+ size="xs"
79
+ startIcon={{ icon: faCodeBranch }}
80
+ on:click={() => {
81
+ if (
82
+ componentInput &&
83
+ componentInput.type == 'runnable' &&
84
+ componentInput.runnable?.type === 'runnableByPath'
85
+ ) {
86
+ fork(componentInput.runnable.path)
87
+ }
88
+ }}
89
+ >
90
+ Fork
91
+ </Button>
92
+ </div>
93
+ {/if}
75
94
  <div class="border w-full">
76
- <FlowModuleScript path={componentInput.runnable.path} />
95
+ {#if componentInput.runnable.runType == 'script' || componentInput.runnable.runType == 'hubscript'}
96
+ <FlowModuleScript path={componentInput.runnable.path} />
97
+ {:else if componentInput.runnable.runType == 'flow'}
98
+ <div class="py-1 flex gap-2 w-full flex-row-reverse">
99
+ <Button
100
+ size="xs"
101
+ startIcon={{ icon: faEye }}
102
+ on:click={() => {
103
+ flowPath = componentInput?.['runnable']?.path
104
+ drawerFlowViewer.openDrawer()
105
+ }}>Expand</Button
106
+ >
107
+ <Button
108
+ size="xs"
109
+ startIcon={{ icon: faPen }}
110
+ endIcon={{ icon: faExternalLinkAlt }}
111
+ target="_blank"
112
+ href="/flows/edit/{componentInput?.['runnable']?.path}?nodraft=true">Edit</Button
113
+ >
114
+ <Button
115
+ size="xs"
116
+ startIcon={{ icon: faEye }}
117
+ endIcon={{ icon: faExternalLinkAlt }}
118
+ target="_blank"
119
+ href="/flows/get/{componentInput?.['runnable']?.path}">Details page</Button
120
+ >
121
+ </div>
122
+ <FlowPathViewer path={componentInput.runnable.path} />
123
+ {:else}
124
+ Unrecognized runType {componentInput.runnable.runType}
125
+ {/if}
77
126
  </div>
78
127
  </div>
79
128
  {/if}
@@ -3,6 +3,7 @@ import type { AppInput } from '../../inputType';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  componentInput: AppInput | undefined;
6
+ id: string;
6
7
  };
7
8
  events: {
8
9
  [evt: string]: CustomEvent<any>;
@@ -1,35 +1,43 @@
1
1
  <script>import { getContext } from 'svelte';
2
2
  import SplitPanesWrapper from '../../../splitPanes/SplitPanesWrapper.svelte';
3
- import { Pane } from 'svelte-splitpanes';
3
+ import { Pane, Splitpanes } from 'svelte-splitpanes';
4
4
  import InlineScriptsPanelList from './InlineScriptsPanelList.svelte';
5
5
  import InlineScriptEditorPanel from './InlineScriptEditorPanel.svelte';
6
6
  import InlineScriptEditor from './InlineScriptEditor.svelte';
7
- const { app } = getContext('AppEditorContext');
7
+ const { lazyGrid, app } = getContext('AppEditorContext');
8
8
  let selectedScriptComponentId = undefined;
9
9
  </script>
10
10
 
11
11
  <SplitPanesWrapper>
12
- <Pane size={25}>
13
- <InlineScriptsPanelList bind:selectedScriptComponentId />
14
- </Pane>
15
- <Pane size={75}>
16
- {#each $app.grid as gridComponent, index (index)}
17
- {#if gridComponent.data.id === selectedScriptComponentId}
18
- <InlineScriptEditorPanel bind:componentInput={gridComponent.data.componentInput} />
19
- {/if}
12
+ <Splitpanes class="!overflow-visible">
13
+ <Pane size={25}>
14
+ <InlineScriptsPanelList bind:selectedScriptComponentId />
15
+ </Pane>
16
+ <Pane size={75}>
17
+ {#each $lazyGrid as gridComponent, index (index)}
18
+ {#if gridComponent.data.id === selectedScriptComponentId}
19
+ <InlineScriptEditorPanel
20
+ id={gridComponent.data.id}
21
+ bind:componentInput={gridComponent.data.componentInput}
22
+ />
23
+ {/if}
20
24
 
21
- {#if gridComponent.data.type === 'tablecomponent'}
22
- {#each gridComponent.data.actionButtons as actionButton, index (index)}
23
- {#if actionButton.id === selectedScriptComponentId}
24
- <InlineScriptEditorPanel bind:componentInput={actionButton.componentInput} />
25
- {/if}
26
- {/each}
27
- {/if}
28
- {/each}
29
- {#if Array.isArray($app.unusedInlineScripts)}
25
+ {#if gridComponent.data.type === 'tablecomponent'}
26
+ {#each gridComponent.data.actionButtons as actionButton, index (index)}
27
+ {#if actionButton.id === selectedScriptComponentId}
28
+ <InlineScriptEditorPanel
29
+ id={actionButton.id}
30
+ bind:componentInput={actionButton.componentInput}
31
+ />
32
+ {/if}
33
+ {/each}
34
+ {/if}
35
+ {/each}
30
36
  {#each $app.unusedInlineScripts as unusedInlineScript, index (index)}
31
- {#if unusedInlineScript.name === selectedScriptComponentId}
37
+ {#if `unused-${index}` === selectedScriptComponentId}
32
38
  <InlineScriptEditor
39
+ id={`unused-${index}`}
40
+ bind:name={unusedInlineScript.name}
33
41
  bind:inlineScript={unusedInlineScript.inlineScript}
34
42
  on:delete={() => {
35
43
  // remove the script from the array at the index
@@ -39,6 +47,6 @@ let selectedScriptComponentId = undefined;
39
47
  />
40
48
  {/if}
41
49
  {/each}
42
- {/if}
43
- </Pane>
50
+ </Pane>
51
+ </Splitpanes>
44
52
  </SplitPanesWrapper>
@@ -3,12 +3,14 @@ import { classNames } from '../../../../utils';
3
3
  import { getContext } from 'svelte';
4
4
  import PanelSection from '../settingsPanel/common/PanelSection.svelte';
5
5
  export let selectedScriptComponentId = undefined;
6
- const { app, selectedComponent } = getContext('AppEditorContext');
7
- function selectInlineScript(id, subId) {
8
- selectedScriptComponentId = subId ? subId : id;
9
- $selectedComponent = selectedScriptComponentId;
6
+ const { app, selectedComponent, lazyGrid } = getContext('AppEditorContext');
7
+ function selectInlineScript(id) {
8
+ selectedScriptComponentId = id;
9
+ if (!id.startsWith('unused-')) {
10
+ $selectedComponent = selectedScriptComponentId;
11
+ }
10
12
  }
11
- $: runnablesByName = $app.grid.reduce((acc, gridComponent) => {
13
+ $: runnablesByName = $lazyGrid.reduce((acc, gridComponent) => {
12
14
  const component = gridComponent.data;
13
15
  if (component.type === 'tablecomponent') {
14
16
  component.actionButtons.forEach((actionButton) => {
@@ -16,8 +18,7 @@ $: runnablesByName = $app.grid.reduce((acc, gridComponent) => {
16
18
  if (actionButton.componentInput.runnable?.type === 'runnableByName') {
17
19
  acc.push({
18
20
  name: actionButton.componentInput.runnable.name,
19
- id: gridComponent.id,
20
- subId: actionButton.id
21
+ id: actionButton.id
21
22
  });
22
23
  }
23
24
  }
@@ -34,7 +35,7 @@ $: runnablesByName = $app.grid.reduce((acc, gridComponent) => {
34
35
  }
35
36
  return acc;
36
37
  }, []);
37
- $: runnablesByPath = $app.grid.reduce((acc, gridComponent) => {
38
+ $: runnablesByPath = $lazyGrid.reduce((acc, gridComponent) => {
38
39
  const component = gridComponent.data;
39
40
  if (component.type === 'tablecomponent') {
40
41
  component.actionButtons.forEach((actionButton) => {
@@ -42,8 +43,7 @@ $: runnablesByPath = $app.grid.reduce((acc, gridComponent) => {
42
43
  if (actionButton.componentInput.runnable?.type === 'runnableByPath') {
43
44
  acc.push({
44
45
  name: actionButton.componentInput.runnable.path,
45
- id: gridComponent.id,
46
- subId: actionButton.id
46
+ id: actionButton.id
47
47
  });
48
48
  }
49
49
  }
@@ -68,73 +68,74 @@ $: {
68
68
  }
69
69
  </script>
70
70
 
71
- <PanelSection title="Inline scripts" smallPadding>
72
- <div class="flex flex-col gap-2 w-full">
73
- {#if runnablesByName.length > 0}
74
- <div class="flex gap-2 flex-col ">
75
- {#each runnablesByName as { name, id, subId }, index (index)}
76
- <!-- svelte-ignore a11y-click-events-have-key-events -->
77
- <div
78
- class="{classNames(
79
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-sm cursor-pointer hover:bg-blue-50 hover:text-blue-400',
80
- selectedScriptComponentId === (subId ? subId : id) ? 'border-blue-500 border' : ''
81
- )},"
82
- on:click={() => selectInlineScript(id, subId)}
83
- >
84
- <span class="text-xs truncate">{name}</span>
85
- <div>
86
- <Badge color="dark-indigo">{id}</Badge>
87
- {#if subId}
88
- <Badge color="dark-indigo">{subId}</Badge>
89
- {/if}
71
+ <div class="h-full flex flex-col gap-4">
72
+ <PanelSection title="Inline scripts" smallPadding>
73
+ <div class="flex flex-col gap-2 w-full">
74
+ {#if runnablesByName.length > 0}
75
+ <div class="flex gap-2 flex-col ">
76
+ {#each runnablesByName as { name, id }, index (index)}
77
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
78
+ <div
79
+ class="{classNames(
80
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-sm cursor-pointer hover:bg-blue-50 hover:text-blue-400',
81
+ selectedScriptComponentId === id ? 'border-blue-500 border' : ''
82
+ )},"
83
+ on:click={() => selectInlineScript(id)}
84
+ >
85
+ <span class="text-xs truncate">{name}</span>
86
+ <div>
87
+ <Badge color="dark-indigo">{id}</Badge>
88
+ </div>
89
+ </div>
90
+ {/each}
91
+ </div>
92
+ {/if}
93
+
94
+ {#if $app.unusedInlineScripts?.length > 0}
95
+ <div class="flex gap-2 flex-col ">
96
+ {#each $app.unusedInlineScripts as unusedInlineScript, index (index)}
97
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
98
+ <div
99
+ class="{classNames(
100
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
101
+ selectedScriptComponentId === `unused-${index}` ? 'bg-blue-100 text-blue-600' : ''
102
+ )},"
103
+ on:click={() => selectInlineScript(`unused-${index}`)}
104
+ >
105
+ <span class="text-xs truncate">{unusedInlineScript.name}</span>
106
+ <Badge color="red">Detached</Badge>
90
107
  </div>
91
- </div>
92
- {/each}
93
- </div>
94
- {:else}
95
- <div class="text-sm text-gray-500">No inline scripts</div>
96
- {/if}
108
+ {/each}
109
+ </div>
110
+ {/if}
97
111
 
98
- {#if Array.isArray($app.unusedInlineScripts) && $app.unusedInlineScripts.length > 0}
99
- <div class="flex gap-2 flex-col ">
100
- {#each $app.unusedInlineScripts as unusedInlineScript, index (index)}
101
- <!-- svelte-ignore a11y-click-events-have-key-events -->
102
- <div
103
- class="{classNames(
104
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
105
- selectedScriptComponentId === '' ? 'bg-blue-100 text-blue-600' : ''
106
- )},"
107
- on:click={() => selectInlineScript(unusedInlineScript.name)}
108
- >
109
- <span class="text-xs truncate">{unusedInlineScript.name}</span>
110
- <Badge color="red">Unused</Badge>
111
- </div>
112
- {/each}
113
- </div>
114
- {/if}
115
- </div>
116
- </PanelSection>
112
+ {#if runnablesByName.length == 0 && $app.unusedInlineScripts?.length == 0}
113
+ <div class="text-sm text-gray-500">No inline scripts</div>
114
+ {/if}
115
+ </div>
116
+ </PanelSection>
117
117
 
118
- <PanelSection title="Runnable by path" smallPadding>
119
- <div class="flex flex-col gap-2 w-full">
120
- {#if runnablesByPath.length > 0}
121
- <div class="flex gap-2 flex-col ">
122
- {#each runnablesByPath as { name, id }, index (index)}
123
- <!-- svelte-ignore a11y-click-events-have-key-events -->
124
- <div
125
- class="{classNames(
126
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
127
- selectedScriptComponentId === id ? 'bg-blue-100 text-blue-600' : ''
128
- )},"
129
- on:click={() => selectInlineScript(id)}
130
- >
131
- <span class="text-xs truncate">{name}</span>
132
- <Badge color="dark-indigo">{id}</Badge>
133
- </div>
134
- {/each}
135
- </div>
136
- {:else}
137
- <div class="text-sm text-gray-500">No inline scripts</div>
138
- {/if}
139
- </div>
140
- </PanelSection>
118
+ <PanelSection title="Others" smallPadding>
119
+ <div class="flex flex-col gap-2 w-full">
120
+ {#if runnablesByPath.length > 0}
121
+ <div class="flex gap-2 flex-col ">
122
+ {#each runnablesByPath as { name, id }, index (index)}
123
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
124
+ <div
125
+ class="{classNames(
126
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
127
+ selectedScriptComponentId === id ? 'bg-blue-100 text-blue-600' : ''
128
+ )},"
129
+ on:click={() => selectInlineScript(id)}
130
+ >
131
+ <span class="text-xs truncate">{name}</span>
132
+ <Badge color="dark-indigo">{id}</Badge>
133
+ </div>
134
+ {/each}
135
+ </div>
136
+ {:else}
137
+ <div class="text-sm text-gray-500">No items</div>
138
+ {/if}
139
+ </div>
140
+ </PanelSection>
141
+ </div>
@@ -6,38 +6,43 @@ export let component;
6
6
 
7
7
  {#if component.verticalAlignment !== undefined}
8
8
  <PanelSection title="Alignment">
9
- {#if component.horizontalAlignment}
10
- <div class="w-full text-xs font-semibold">Horizontal</div>
11
-
12
- <div class="w-full">
13
- <ToggleButtonGroup bind:selected={component.horizontalAlignment}>
14
- <ToggleButton position="left" value="left" size="xs">
15
- <AlignStartVertical size={16} />
16
- </ToggleButton>
17
- <ToggleButton position="center" value="center" size="xs">
18
- <AlignCenterVertical size={16} />
19
- </ToggleButton>
20
- <ToggleButton position="right" value="right" size="xs">
21
- <AlignEndVertical size={16} />
22
- </ToggleButton>
23
- </ToggleButtonGroup>
24
- </div>
25
- {/if}
26
- {#if component.type !== 'formcomponent' && component.verticalAlignment}
27
- <div class="w-full text-xs font-semibold">Vertical</div>
28
- <div class="w-full">
29
- <ToggleButtonGroup bind:selected={component.verticalAlignment}>
30
- <ToggleButton position="left" value="top" size="xs">
31
- <AlignStartHorizontal size={16} />
32
- </ToggleButton>
33
- <ToggleButton position="center" value="center" size="xs">
34
- <AlignCenterHorizontal size={16} />
35
- </ToggleButton>
36
- <ToggleButton position="right" value="bottom" size="xs">
37
- <AlignEndHorizontal size={16} />
38
- </ToggleButton>
39
- </ToggleButtonGroup>
40
- </div>
41
- {/if}
9
+ <div class="flex flex-wrap gap-2">
10
+ {#if component.horizontalAlignment}
11
+ <div class="flex flex-col gap-0.5">
12
+ <div class="text-xs font-semibold">Horizontal</div>
13
+ <div>
14
+ <ToggleButtonGroup bind:selected={component.horizontalAlignment}>
15
+ <ToggleButton position="left" value="left" size="xs">
16
+ <AlignStartVertical size={16} />
17
+ </ToggleButton>
18
+ <ToggleButton position="center" value="center" size="xs">
19
+ <AlignCenterVertical size={16} />
20
+ </ToggleButton>
21
+ <ToggleButton position="right" value="right" size="xs">
22
+ <AlignEndVertical size={16} />
23
+ </ToggleButton>
24
+ </ToggleButtonGroup>
25
+ </div>
26
+ </div>
27
+ {/if}
28
+ {#if component.type !== 'formcomponent' && component.verticalAlignment}
29
+ <div class="flex flex-col gap-0.5">
30
+ <div class="text-xs font-semibold">Vertical</div>
31
+ <div>
32
+ <ToggleButtonGroup bind:selected={component.verticalAlignment}>
33
+ <ToggleButton position="left" value="top" size="xs">
34
+ <AlignStartHorizontal size={16} />
35
+ </ToggleButton>
36
+ <ToggleButton position="center" value="center" size="xs">
37
+ <AlignCenterHorizontal size={16} />
38
+ </ToggleButton>
39
+ <ToggleButton position="right" value="bottom" size="xs">
40
+ <AlignEndHorizontal size={16} />
41
+ </ToggleButton>
42
+ </ToggleButtonGroup>
43
+ </div>
44
+ </div>
45
+ {/if}
46
+ </div>
42
47
  </PanelSection>
43
48
  {/if}