windmill-components 1.79.0 → 1.82.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 (204) hide show
  1. package/components/ArgInput.svelte +3 -0
  2. package/components/ArgInput.svelte.d.ts +1 -0
  3. package/components/DisplayResult.svelte +18 -15
  4. package/components/Multiselect.svelte.d.ts +2 -2
  5. package/components/SchemaEditor.svelte +15 -10
  6. package/components/SettingSection.svelte +1 -1
  7. package/components/Toggle.svelte +5 -2
  8. package/components/Toggle.svelte.d.ts +1 -0
  9. package/components/apps/components/buttons/AppButton.svelte +35 -56
  10. package/components/apps/components/buttons/AppButton.svelte.d.ts +2 -1
  11. package/components/apps/components/buttons/AppForm.svelte +24 -24
  12. package/components/apps/components/buttons/AppForm.svelte.d.ts +1 -1
  13. package/components/apps/components/buttons/AppFormButton.svelte +79 -94
  14. package/components/apps/components/buttons/AppFormButton.svelte.d.ts +1 -3
  15. package/components/apps/components/display/AppBarChart.svelte +2 -2
  16. package/components/apps/components/display/AppBarChart.svelte.d.ts +1 -1
  17. package/components/apps/components/display/AppDisplayComponent.svelte +2 -2
  18. package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -1
  19. package/components/apps/components/display/AppHtml.svelte +10 -2
  20. package/components/apps/components/display/AppHtml.svelte.d.ts +1 -1
  21. package/components/apps/components/display/AppIcon.svelte +4 -1
  22. package/components/apps/components/display/AppIcon.svelte.d.ts +1 -1
  23. package/components/apps/components/display/AppImage.svelte +28 -15
  24. package/components/apps/components/display/AppImage.svelte.d.ts +1 -1
  25. package/components/apps/components/display/AppMap.svelte.d.ts +1 -1
  26. package/components/apps/components/display/AppPdf.svelte +3 -2
  27. package/components/apps/components/display/AppPdf.svelte.d.ts +1 -1
  28. package/components/apps/components/display/AppPieChart.svelte +2 -2
  29. package/components/apps/components/display/AppPieChart.svelte.d.ts +1 -1
  30. package/components/apps/components/display/AppScatterChart.svelte +2 -2
  31. package/components/apps/components/display/AppScatterChart.svelte.d.ts +1 -1
  32. package/components/apps/components/display/AppText.svelte +35 -22
  33. package/components/apps/components/display/AppText.svelte.d.ts +1 -1
  34. package/components/apps/components/display/AppTimeseries.svelte +2 -2
  35. package/components/apps/components/display/AppTimeseries.svelte.d.ts +1 -1
  36. package/components/apps/components/display/PlotlyHtml.svelte +3 -3
  37. package/components/apps/components/display/VegaLiteHtml.svelte +2 -2
  38. package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  39. package/components/apps/components/display/table/AppTable.svelte +40 -17
  40. package/components/apps/components/display/table/AppTable.svelte.d.ts +1 -1
  41. package/components/apps/components/helpers/HiddenComponent.svelte +6 -3
  42. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -1
  43. package/components/apps/components/helpers/InputValue.svelte +9 -9
  44. package/components/apps/components/helpers/Loader.svelte +18 -0
  45. package/components/apps/components/helpers/Loader.svelte.d.ts +18 -0
  46. package/components/apps/components/helpers/NonRunnableComponent.svelte +1 -12
  47. package/components/apps/components/helpers/ResolveConfig.svelte +29 -0
  48. package/components/apps/components/helpers/ResolveConfig.svelte.d.ts +21 -0
  49. package/components/apps/components/helpers/RunnableComponent.svelte +117 -89
  50. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +14 -3
  51. package/components/apps/components/helpers/RunnableWrapper.svelte +50 -9
  52. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +27 -2
  53. package/components/apps/components/inputs/AppCheckbox.svelte +1 -1
  54. package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +1 -1
  55. package/components/apps/components/inputs/AppDateInput.svelte.d.ts +1 -1
  56. package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -1
  57. package/components/apps/components/inputs/AppMultiSelect.svelte +0 -1
  58. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +1 -1
  59. package/components/apps/components/inputs/AppNumberInput.svelte +1 -1
  60. package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +1 -3
  61. package/components/apps/components/inputs/AppRangeInput.svelte +7 -1
  62. package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +2 -1
  63. package/components/apps/components/inputs/AppSelect.svelte +8 -3
  64. package/components/apps/components/inputs/AppSelect.svelte.d.ts +1 -1
  65. package/components/apps/components/inputs/AppSliderInputs.svelte +7 -1
  66. package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +2 -1
  67. package/components/apps/components/inputs/AppTextInput.svelte +4 -4
  68. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +1 -3
  69. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +17 -19
  70. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +1 -1
  71. package/components/apps/components/layout/AppContainer.svelte +7 -4
  72. package/components/apps/components/layout/AppContainer.svelte.d.ts +1 -1
  73. package/components/apps/components/layout/AppDivider.svelte +4 -1
  74. package/components/apps/components/layout/AppDivider.svelte.d.ts +1 -1
  75. package/components/apps/components/layout/AppDrawer.svelte +7 -4
  76. package/components/apps/components/layout/AppDrawer.svelte.d.ts +1 -1
  77. package/components/apps/components/layout/AppSplitpanes.svelte +34 -21
  78. package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +1 -3
  79. package/components/apps/components/layout/AppTabs.svelte +17 -34
  80. package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -2
  81. package/components/apps/editor/AppEditor.svelte +17 -13
  82. package/components/apps/editor/AppEditorHeader.svelte +2 -3
  83. package/components/apps/editor/AppPreview.svelte +11 -17
  84. package/components/apps/editor/ComponentHeader.svelte +10 -8
  85. package/components/apps/editor/ComponentHeader.svelte.d.ts +0 -1
  86. package/components/apps/editor/GridEditor.svelte +21 -50
  87. package/components/apps/editor/GridEditor.svelte.d.ts +0 -2
  88. package/components/apps/editor/RecomputeAllComponents.svelte +13 -2
  89. package/components/apps/editor/SettingsPanel.svelte +103 -40
  90. package/components/apps/editor/SubGridEditor.svelte +32 -41
  91. package/components/apps/editor/SubGridEditor.svelte.d.ts +1 -2
  92. package/components/apps/editor/appUtils.d.ts +49 -7
  93. package/components/apps/editor/appUtils.js +133 -37
  94. package/components/apps/editor/component/Component.svelte +22 -11
  95. package/components/apps/editor/component/Component.svelte.d.ts +1 -2
  96. package/components/apps/editor/component/ComponentNavigation.svelte +19 -12
  97. package/components/apps/editor/component/README.md +4 -0
  98. package/components/apps/editor/component/components.d.ts +1550 -17
  99. package/components/apps/editor/component/components.js +295 -325
  100. package/components/apps/editor/component/default-codes.d.ts +1 -1
  101. package/components/apps/editor/component/default-codes.js +25 -25
  102. package/components/apps/editor/componentsPanel/ComponentList.svelte +18 -3
  103. package/components/apps/editor/componentsPanel/CssProperty.svelte +92 -50
  104. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +8 -3
  105. package/components/apps/editor/componentsPanel/CssSettings.svelte +48 -90
  106. package/components/apps/editor/componentsPanel/ListItem.svelte +3 -0
  107. package/components/apps/editor/componentsPanel/ListItem.svelte.d.ts +2 -0
  108. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +167 -0
  109. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte.d.ts +18 -0
  110. package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte +130 -0
  111. package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte.d.ts +21 -0
  112. package/components/apps/editor/componentsPanel/quickStyleProperties.d.ts +535 -0
  113. package/components/apps/editor/componentsPanel/quickStyleProperties.js +595 -0
  114. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +1 -1
  115. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +146 -130
  116. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +2 -1
  117. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +31 -3
  118. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  119. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +42 -76
  120. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +67 -17
  121. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +1 -3
  122. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +27 -0
  123. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte.d.ts +17 -0
  124. package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -0
  125. package/components/apps/editor/inlineScriptsPanel/utils.js +6 -5
  126. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +10 -2
  127. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +37 -31
  128. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +4 -104
  129. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +113 -67
  130. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +5 -3
  131. package/components/apps/editor/settingsPanel/GridTab.svelte +0 -1
  132. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +99 -80
  133. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +8 -0
  134. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +25 -2
  135. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +1 -0
  136. package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +52 -0
  137. package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte.d.ts +28 -0
  138. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +70 -26
  139. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +2 -0
  140. package/components/apps/editor/settingsPanel/StylePanel.svelte +23 -0
  141. package/components/apps/editor/settingsPanel/StylePanel.svelte.d.ts +17 -0
  142. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +7 -5
  143. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +3 -2
  144. package/components/apps/editor/settingsPanel/TableActions.svelte +8 -63
  145. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +12 -12
  146. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +3 -4
  147. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +3 -1
  148. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -4
  149. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +5 -5
  150. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +2 -0
  151. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +48 -32
  152. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +8 -2
  153. package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte +46 -0
  154. package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte.d.ts +20 -0
  155. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +7 -0
  156. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -0
  157. package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +47 -0
  158. package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte.d.ts +14 -0
  159. package/components/apps/editor/settingsPanel/secondaryMenu/index.d.ts +2 -0
  160. package/components/apps/editor/settingsPanel/secondaryMenu/index.js +2 -0
  161. package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.d.ts +12 -0
  162. package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.js +10 -0
  163. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +20 -70
  164. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +1 -0
  165. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +14 -8
  166. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +5 -1
  167. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +85 -27
  168. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +4 -6
  169. package/components/apps/gridUtils.js +1 -1
  170. package/components/apps/inputType.d.ts +12 -16
  171. package/components/apps/rx.d.ts +2 -0
  172. package/components/apps/rx.js +8 -2
  173. package/components/apps/svelte-grid/Grid.svelte +0 -4
  174. package/components/apps/svelte-grid/Grid.svelte.d.ts +1 -1
  175. package/components/apps/svelte-grid/MoveResize.svelte +24 -30
  176. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +0 -4
  177. package/components/apps/svelte-grid/types.d.ts +1 -7
  178. package/components/apps/svelte-grid/utils/helper.js +6 -10
  179. package/components/apps/types.d.ts +22 -22
  180. package/components/apps/utils.d.ts +2 -2
  181. package/components/apps/utils.js +13 -11
  182. package/components/common/button/ButtonPopup.svelte +5 -2
  183. package/components/common/button/ButtonPopup.svelte.d.ts +5 -1
  184. package/components/common/button/ButtonPopupItem.svelte +2 -1
  185. package/components/common/button/ButtonPopupItem.svelte.d.ts +1 -0
  186. package/components/common/clearableInput/ClearableInput.svelte +56 -0
  187. package/components/common/clearableInput/ClearableInput.svelte.d.ts +28 -0
  188. package/components/common/index.d.ts +1 -0
  189. package/components/common/index.js +1 -0
  190. package/components/common/kbd/Kbd.svelte +4 -1
  191. package/components/common/kbd/Kbd.svelte.d.ts +6 -14
  192. package/components/common/menu/Menu.svelte +8 -2
  193. package/components/common/menu/Menu.svelte.d.ts +4 -1
  194. package/components/common/modal/AlwaysMountedModal.svelte +109 -0
  195. package/components/common/modal/AlwaysMountedModal.svelte.d.ts +22 -0
  196. package/components/common/skeleton/Skeleton.svelte +1 -1
  197. package/components/flows/flowStateUtils.js +8 -1
  198. package/package.json +672 -659
  199. package/utils.d.ts +1 -0
  200. package/utils.js +3 -0
  201. package/components/apps/editor/GridPanel.svelte +0 -31
  202. package/components/apps/editor/GridPanel.svelte.d.ts +0 -18
  203. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +0 -12
  204. package/components/apps/editor/componentsPanel/componentStaticValues.js +0 -25
@@ -19,7 +19,8 @@ export let id;
19
19
  export let defaultUserInput = false;
20
20
  export let fields = {};
21
21
  export let syncFields = false;
22
- const { runnableComponents, stateId, worldStore, state, appPath } = getContext('AppViewerContext');
22
+ export let transformer = false;
23
+ const { runnableComponents, stateId, worldStore, state, appPath, app } = getContext('AppViewerContext');
23
24
  let editor;
24
25
  let simpleEditor;
25
26
  let validCode = true;
@@ -34,21 +35,21 @@ async function inferInlineScriptSchema(language, content, schema) {
34
35
  }
35
36
  return schema;
36
37
  }
37
- $: inlineScript.path = `${appPath}/${name}`;
38
+ $: inlineScript && (inlineScript.path = `${appPath}/${name}`);
38
39
  onMount(async () => {
39
40
  if (inlineScript && !inlineScript.schema) {
40
41
  if (inlineScript.language != 'frontend') {
41
42
  inlineScript.schema = await inferInlineScriptSchema(inlineScript?.language, inlineScript?.content, emptySchema());
42
43
  }
43
44
  }
44
- if (inlineScript.schema) {
45
+ if (inlineScript?.schema && inlineScript.language != 'frontend') {
45
46
  loadSchemaAndInputsByName();
46
47
  }
47
48
  });
48
49
  const dispatch = createEventDispatcher();
49
50
  let runLoading = false;
50
51
  async function loadSchemaAndInputsByName() {
51
- if (syncFields) {
52
+ if (syncFields && inlineScript) {
52
53
  const newSchema = inlineScript.schema ?? emptySchema();
53
54
  const newFields = computeFields(newSchema, defaultUserInput, fields);
54
55
  if (!deepEqual(newFields, fields)) {
@@ -59,13 +60,13 @@ async function loadSchemaAndInputsByName() {
59
60
  }
60
61
  let isMac = navigator.userAgent.indexOf('Mac OS X') !== -1;
61
62
  $: extraLib =
62
- inlineScript.language == 'frontend' && worldStore
63
+ inlineScript?.language == 'frontend' && worldStore
63
64
  ? buildExtraLib($worldStore?.outputsById ?? {}, id, false, $state, true)
64
65
  : undefined;
65
- let refreshOn = inlineScript.refreshOn?.map((x) => `${x.id}.${x.key}`).join(' ') ?? '';
66
+ let refreshOn = inlineScript?.refreshOn?.map((x) => `${x.id}.${x.key}`).join(' ') ?? '';
66
67
  $: handleRefreshOn(refreshOn);
67
68
  function handleRefreshOn(refreshOn) {
68
- if (refreshOn && refreshOn != '') {
69
+ if (refreshOn && refreshOn != '' && inlineScript) {
69
70
  inlineScript.refreshOn = refreshOn
70
71
  .split(' ')
71
72
  .filter((x) => x.split('.').length == 2)
@@ -77,147 +78,162 @@ function handleRefreshOn(refreshOn) {
77
78
  }
78
79
  </script>
79
80
 
80
- {#if inlineScript.language != 'frontend'}
81
- <InlineScriptEditorDrawer {editor} bind:this={inlineScriptEditorDrawer} bind:inlineScript />
82
- {/if}
83
-
84
- <div class="h-full flex flex-col gap-1">
85
- <div class="flex justify-between w-full gap-2 px-2 pt-1 flex-row items-center">
86
- {#if name !== undefined}
87
- <input
88
- on:keydown|stopPropagation
89
- bind:value={name}
90
- placeholder="Inline script name"
91
- class="!text-xs !rounded-xs"
92
- />
93
- {/if}
94
- <div class="flex w-full flex-row gap-2 items-center justify-end">
95
- {#if validCode}
96
- <Badge color="green" baseClass="!text-2xs">Valid</Badge>
97
- {:else}
98
- <Badge color="red" baseClass="!text-2xs">Invalid</Badge>
99
- {/if}
81
+ {#if inlineScript}
82
+ {#if inlineScript.language != 'frontend'}
83
+ <InlineScriptEditorDrawer {editor} bind:this={inlineScriptEditorDrawer} bind:inlineScript />
84
+ {/if}
100
85
 
101
- {#if id.startsWith('unused-') || id.startsWith('bg_')}
102
- <Popover notClickable placement="bottom">
103
- <Button
104
- size="xs"
105
- color="light"
106
- btnClasses="!px-2 !bg-red-100 hover:!bg-red-200"
107
- aria-label="Delete"
108
- on:click={() => dispatch('delete')}
109
- >
110
- <Trash2 size={14} class="text-red-800" />
111
- </Button>
112
- <svelte:fragment slot="text">Delete</svelte:fragment>
113
- </Popover>
114
- {/if}
115
- {#if inlineScript.language != 'frontend'}
116
- <Popover notClickable placement="bottom">
117
- <Button
118
- size="xs"
119
- color="light"
120
- btnClasses="!px-2 !bg-gray-100 hover:!bg-gray-200"
121
- aria-label="Open full editor"
122
- on:click={() => {
123
- inlineScriptEditorDrawer?.openDrawer()
124
- }}
125
- >
126
- <Maximize2 size={14} />
127
- </Button>
128
- <svelte:fragment slot="text">Open full editor</svelte:fragment>
129
- </Popover>
86
+ <div class="h-full flex flex-col gap-1">
87
+ <div class="flex justify-between w-full gap-2 px-2 pt-1 flex-row items-center">
88
+ {#if name !== undefined}
89
+ {#if !transformer}
90
+ <input
91
+ on:keydown|stopPropagation
92
+ bind:value={name}
93
+ placeholder="Inline script name"
94
+ class="!text-xs !rounded-xs"
95
+ />
96
+ {:else}
97
+ <span class="text-xs font-semibold truncate w-full">{name} of {id}</span>
98
+ {/if}
130
99
  {/if}
100
+ <div class="flex w-full flex-row gap-2 items-center justify-end">
101
+ {#if validCode}
102
+ <Badge color="green" baseClass="!text-2xs">Valid</Badge>
103
+ {:else}
104
+ <Badge color="red" baseClass="!text-2xs">Invalid</Badge>
105
+ {/if}
131
106
 
132
- <Button
133
- variant="border"
134
- size="xs"
135
- color="light"
136
- btnClasses="!px-2 !py-1"
137
- on:click={async () => {
138
- editor?.format()
139
- simpleEditor?.format()
140
- }}
141
- >
142
- <div class="flex flex-row gap-1 items-center">
143
- Format
107
+ {#if id.startsWith('unused-') || id.startsWith('bg_')}
108
+ <Popover notClickable placement="bottom">
109
+ <Button
110
+ size="xs"
111
+ color="light"
112
+ btnClasses="!px-2 !bg-red-100 hover:!bg-red-200"
113
+ aria-label="Delete"
114
+ on:click={() => dispatch('delete')}
115
+ >
116
+ <Trash2 size={14} class="text-red-800" />
117
+ </Button>
118
+ <svelte:fragment slot="text">Delete</svelte:fragment>
119
+ </Popover>
120
+ {/if}
121
+ {#if inlineScript.language != 'frontend'}
122
+ <Popover notClickable placement="bottom">
123
+ <Button
124
+ size="xs"
125
+ color="light"
126
+ btnClasses="!px-2 !bg-gray-100 hover:!bg-gray-200"
127
+ aria-label="Open full editor"
128
+ on:click={() => {
129
+ inlineScriptEditorDrawer?.openDrawer()
130
+ }}
131
+ >
132
+ Full Editor&nbsp;<Maximize2 size={14} />
133
+ </Button>
134
+ <svelte:fragment slot="text">Open full editor</svelte:fragment>
135
+ </Popover>
136
+ {/if}
144
137
 
145
- <div class="flex flex-row items-center gap-1">
146
- <Kbd>{isMac ? '⌘' : 'CTRL'}</Kbd>
147
- <Kbd>S</Kbd>
148
- </div>
149
- </div>
150
- </Button>
151
- {#if $runnableComponents[id] != undefined}
152
138
  <Button
153
- loading={runLoading}
154
- size="xs"
155
- color="dark"
156
139
  variant="border"
157
- btnClasses="!px-2 !py-1 !bg-gray-700 !text-white hover:!bg-gray-900"
140
+ size="xs"
141
+ color="light"
142
+ btnClasses="!px-2 !py-1"
158
143
  on:click={async () => {
159
- runLoading = true
160
- await $runnableComponents[id]?.()
161
- runLoading = false
144
+ editor?.format()
145
+ simpleEditor?.format()
162
146
  }}
163
147
  >
164
148
  <div class="flex flex-row gap-1 items-center">
165
- Run
149
+ Format
166
150
 
167
151
  <div class="flex flex-row items-center gap-1">
168
152
  <Kbd>{isMac ? '⌘' : 'CTRL'}</Kbd>
169
- <Kbd>
170
- <div class="h-4 flex items-center justify-center">
171
- <CornerDownLeft size={10} />
172
- </div>
173
- </Kbd>
153
+ <Kbd>S</Kbd>
174
154
  </div>
175
155
  </div>
176
156
  </Button>
177
- {/if}
157
+ {#if $runnableComponents[id] != undefined}
158
+ <Button
159
+ loading={runLoading}
160
+ size="xs"
161
+ color="dark"
162
+ variant="border"
163
+ btnClasses="!px-2 !py-1 !bg-gray-700 !text-white hover:!bg-gray-900"
164
+ on:click={async () => {
165
+ runLoading = true
166
+ await $runnableComponents[id]?.(!transformer ? inlineScript : undefined)
167
+ runLoading = false
168
+ }}
169
+ >
170
+ <div class="flex flex-row gap-1 items-center">
171
+ Run
172
+
173
+ <div class="flex flex-row items-center gap-1">
174
+ <Kbd>{isMac ? '⌘' : 'CTRL'}</Kbd>
175
+ <Kbd>
176
+ <div class="h-4 flex items-center justify-center">
177
+ <CornerDownLeft size={10} />
178
+ </div>
179
+ </Kbd>
180
+ </div>
181
+ </div>
182
+ </Button>
183
+ {/if}
184
+ </div>
178
185
  </div>
179
- </div>
180
186
 
181
- <div class="border h-full">
182
- {#if inlineScript.language != 'frontend'}
183
- <Editor
184
- bind:this={editor}
185
- class="flex flex-1 grow h-full"
186
- lang={scriptLangToEditorLang(inlineScript?.language)}
187
- bind:code={inlineScript.content}
188
- fixedOverflowWidgets={true}
189
- cmdEnterAction={async () => {
190
- runLoading = true
191
- await $runnableComponents[id]?.()
192
- runLoading = false
193
- }}
194
- on:change={async (e) => {
195
- if (inlineScript && inlineScript.language != 'frontend') {
196
- const oldSchema = JSON.stringify(inlineScript.schema)
197
- if (inlineScript.schema == undefined) {
198
- inlineScript.schema = emptySchema()
187
+ <!-- {inlineScript.content} -->
188
+
189
+ <div class="border h-full">
190
+ {#if inlineScript.language != 'frontend'}
191
+ <Editor
192
+ bind:this={editor}
193
+ class="flex flex-1 grow h-full"
194
+ lang={scriptLangToEditorLang(inlineScript?.language)}
195
+ bind:code={inlineScript.content}
196
+ fixedOverflowWidgets={true}
197
+ cmdEnterAction={async () => {
198
+ if (inlineScript) {
199
+ inlineScript.content = editor?.getCode() ?? ''
199
200
  }
200
- await inferInlineScriptSchema(inlineScript?.language, e.detail, inlineScript.schema)
201
- if (JSON.stringify(inlineScript.schema) != oldSchema) {
202
- inlineScript = inlineScript
203
- loadSchemaAndInputsByName()
201
+ runLoading = true
202
+ await $runnableComponents[id]?.(inlineScript)
203
+ runLoading = false
204
+ }}
205
+ on:change={async (e) => {
206
+ if (inlineScript && inlineScript.language != 'frontend') {
207
+ const oldSchema = JSON.stringify(inlineScript.schema)
208
+ if (inlineScript.schema == undefined) {
209
+ inlineScript.schema = emptySchema()
210
+ }
211
+ await inferInlineScriptSchema(inlineScript?.language, e.detail, inlineScript.schema)
212
+ if (JSON.stringify(inlineScript.schema) != oldSchema) {
213
+ inlineScript = inlineScript
214
+ loadSchemaAndInputsByName()
215
+ }
204
216
  }
205
- }
206
- }}
207
- />
208
- {:else}
209
- <SimpleEditor
210
- bind:this={simpleEditor}
211
- cmdEnterAction={async () => {
212
- runLoading = true
213
- await $runnableComponents[id]?.()
214
- runLoading = false
215
- }}
216
- class="h-full"
217
- {extraLib}
218
- bind:code={inlineScript.content}
219
- lang="javascript"
220
- />
221
- {/if}
217
+ $app = $app
218
+ }}
219
+ />
220
+ {:else}
221
+ <SimpleEditor
222
+ bind:this={simpleEditor}
223
+ cmdEnterAction={async () => {
224
+ runLoading = true
225
+ await $runnableComponents[id]?.(!transformer ? inlineScript : undefined)
226
+ runLoading = false
227
+ }}
228
+ class="h-full"
229
+ {extraLib}
230
+ bind:code={inlineScript.content}
231
+ lang="javascript"
232
+ on:change={() => {
233
+ $app = $app
234
+ }}
235
+ />
236
+ {/if}
237
+ </div>
222
238
  </div>
223
- </div>
239
+ {/if}
@@ -3,12 +3,13 @@ import type { InlineScript } from '../../types';
3
3
  import type { AppInput } from '../../inputType';
4
4
  declare const __propDef: {
5
5
  props: {
6
- inlineScript: InlineScript;
6
+ inlineScript: InlineScript | undefined;
7
7
  name?: string | undefined;
8
8
  id: string;
9
9
  defaultUserInput?: boolean | undefined;
10
10
  fields?: Record<string, AppInput> | undefined;
11
11
  syncFields?: boolean | undefined;
12
+ transformer?: boolean | undefined;
12
13
  };
13
14
  events: {
14
15
  keydown: KeyboardEvent;
@@ -11,9 +11,12 @@ import EmptyInlineScript from './EmptyInlineScript.svelte';
11
11
  import InlineScriptEditor from './InlineScriptEditor.svelte';
12
12
  import { computeFields } from './utils';
13
13
  import { deepEqual } from 'fast-equals';
14
+ import { getContext } from 'svelte';
14
15
  export let componentInput;
15
16
  export let defaultUserInput = false;
16
17
  export let id;
18
+ export let transformer;
19
+ const { app } = getContext('AppViewerContext');
17
20
  async function fork(path) {
18
21
  let { content, language, schema } = await getScriptByPath(path);
19
22
  if (componentInput && componentInput.type == 'runnable') {
@@ -67,7 +70,27 @@ function deleteInlineScript() {
67
70
  </DrawerContent>
68
71
  </Drawer>
69
72
 
70
- {#if componentInput && componentInput.type == 'runnable'}
73
+ {#if transformer}
74
+ {#if componentInput?.type == 'runnable' && componentInput.transformer}
75
+ <InlineScriptEditor
76
+ transformer
77
+ defaultUserInput={false}
78
+ {id}
79
+ bind:inlineScript={componentInput.transformer}
80
+ name="Transformer"
81
+ on:delete={() => {
82
+ if (componentInput?.type == 'runnable') {
83
+ componentInput.transformer = undefined
84
+ componentInput = componentInput
85
+ }
86
+ }}
87
+ />
88
+ {:else}
89
+ <span class="px-2 text-gray-600"
90
+ >Selected editor component is a transformer but component has no transformer
91
+ </span>
92
+ {/if}
93
+ {:else if componentInput && componentInput.type == 'runnable'}
71
94
  {#if componentInput?.runnable?.type === 'runnableByName' && componentInput?.runnable?.name !== undefined}
72
95
  {#if componentInput.runnable.inlineScript}
73
96
  <InlineScriptEditor
@@ -91,6 +114,7 @@ function deleteInlineScript() {
91
114
  componentInput?.runnable?.type === 'runnableByName'
92
115
  ) {
93
116
  componentInput.runnable.inlineScript = e.detail
117
+ $app = $app
94
118
  }
95
119
  }}
96
120
  />
@@ -109,6 +133,7 @@ function deleteInlineScript() {
109
133
  componentInput.runnable?.type === 'runnableByPath'
110
134
  ) {
111
135
  fork(componentInput.runnable.path)
136
+ $app = $app
112
137
  }
113
138
  }}
114
139
  >
@@ -127,8 +152,10 @@ function deleteInlineScript() {
127
152
  on:click={() => {
128
153
  flowPath = componentInput?.['runnable']?.path
129
154
  drawerFlowViewer.openDrawer()
130
- }}>Expand</Button
155
+ }}
131
156
  >
157
+ Expand
158
+ </Button>
132
159
  <Button
133
160
  size="xs"
134
161
  startIcon={{ icon: faPen }}
@@ -142,8 +169,9 @@ function deleteInlineScript() {
142
169
  endIcon={{ icon: faExternalLinkAlt }}
143
170
  target="_blank"
144
171
  href="/flows/get/{componentInput?.['runnable']?.path}?workspace_id={$workspaceStore}"
145
- >Details page</Button
146
172
  >
173
+ Details page
174
+ </Button>
147
175
  </div>
148
176
  <FlowPathViewer path={componentInput.runnable.path} />
149
177
  {:else}
@@ -5,6 +5,7 @@ declare const __propDef: {
5
5
  componentInput: AppInput | undefined;
6
6
  defaultUserInput?: boolean | undefined;
7
7
  id: string;
8
+ transformer: boolean;
8
9
  };
9
10
  events: {
10
11
  [evt: string]: CustomEvent<any>;
@@ -4,114 +4,80 @@ import { Pane, Splitpanes } from 'svelte-splitpanes';
4
4
  import InlineScriptsPanelList from './InlineScriptsPanelList.svelte';
5
5
  import InlineScriptEditor from './InlineScriptEditor.svelte';
6
6
  import EmptyInlineScript from './EmptyInlineScript.svelte';
7
- import InlineScriptEditorPanel from './InlineScriptEditorPanel.svelte';
7
+ import InlineScriptsPanelWithTable from './InlineScriptsPanelWithTable.svelte';
8
+ import { findGridItem } from '../appUtils';
8
9
  const { app, runnableComponents } = getContext('AppViewerContext');
9
- let selectedScriptComponentId = undefined;
10
+ const { selectedComponentInEditor } = getContext('AppEditorContext');
10
11
  function deleteBackgroundScript(index) {
11
12
  // remove the script from the array at the index
12
13
  $app.hiddenInlineScripts.splice(index, 1);
13
14
  $app.hiddenInlineScripts = [...$app.hiddenInlineScripts];
14
15
  delete $runnableComponents[`bg_${index}`];
15
16
  }
17
+ $: gridItem =
18
+ $selectedComponentInEditor && !$selectedComponentInEditor.startsWith('bg_')
19
+ ? findGridItem($app, $selectedComponentInEditor?.split('_')?.[0])
20
+ : undefined;
21
+ $: hiddenInlineScript = $app?.hiddenInlineScripts?.findIndex((k_, index) => `bg_${index}` === $selectedComponentInEditor);
22
+ $: unusedInlineScript = $app?.unusedInlineScripts?.findIndex((k_, index) => `unused-${index}` === $selectedComponentInEditor);
16
23
  </script>
17
24
 
18
25
  <SplitPanesWrapper>
19
26
  <Splitpanes class="!overflow-visible">
20
27
  <Pane size={25}>
21
- <InlineScriptsPanelList bind:selectedScriptComponentId />
28
+ <InlineScriptsPanelList />
22
29
  </Pane>
23
30
  <Pane size={75}>
24
- {#if !selectedScriptComponentId}
31
+ {#if !$selectedComponentInEditor}
25
32
  <div class="text-sm text-gray-500 text-center py-8 px-2">
26
33
  Select a script on the left panel
27
34
  </div>
28
- {/if}
29
-
30
- {#each $app.grid as gridItem (gridItem?.data?.id)}
31
- {#if gridItem?.data?.id && gridItem.data.id === selectedScriptComponentId}
32
- <InlineScriptEditorPanel
33
- defaultUserInput={gridItem?.data?.type == 'formcomponent' ||
34
- gridItem?.data?.type == 'formbuttoncomponent'}
35
- id={gridItem.data.id}
36
- bind:componentInput={gridItem.data.componentInput}
37
- />
38
- {/if}
39
-
40
- {#if gridItem?.data?.type === 'tablecomponent'}
41
- {#each gridItem.data.actionButtons as actionButton (actionButton.id)}
42
- {#if actionButton.id === selectedScriptComponentId}
43
- <InlineScriptEditorPanel
44
- id={actionButton.id}
45
- bind:componentInput={actionButton.componentInput}
46
- />
47
- {/if}
48
- {/each}
49
- {/if}
50
- {/each}
51
-
52
- {#if $app.subgrids}
53
- {#each Object.keys($app.subgrids ?? {}) as key (key)}
54
- {#each $app.subgrids[key] as gridItem (gridItem?.data?.id)}
55
- {#if gridItem?.data?.id && gridItem.data.id === selectedScriptComponentId}
56
- <InlineScriptEditorPanel
57
- defaultUserInput={gridItem.data?.type == 'formcomponent' ||
58
- gridItem?.data?.type == 'formbuttoncomponent'}
59
- id={gridItem.data.id}
60
- bind:componentInput={gridItem.data.componentInput}
61
- />
62
- {/if}
63
-
64
- {#if gridItem?.data?.type === 'tablecomponent'}
65
- {#each gridItem.data.actionButtons as actionButton, index (index)}
66
- {#if actionButton.id === selectedScriptComponentId}
67
- <InlineScriptEditorPanel
68
- id={actionButton.id}
69
- bind:componentInput={actionButton.componentInput}
70
- />
71
- {/if}
72
- {/each}
73
- {/if}
74
- {/each}
75
- {/each}
76
- {/if}
77
-
78
- {#each $app.unusedInlineScripts as unusedInlineScript, index (index)}
79
- {#if `unused-${index}` === selectedScriptComponentId}
35
+ {:else if gridItem}
36
+ {#key gridItem?.id}
37
+ <InlineScriptsPanelWithTable bind:gridItem />
38
+ {/key}
39
+ {:else if unusedInlineScript > -1 && $app.unusedInlineScripts?.[unusedInlineScript]}
40
+ {#key unusedInlineScript}
80
41
  <InlineScriptEditor
81
- id={`unused-${index}`}
82
- bind:name={unusedInlineScript.name}
83
- bind:inlineScript={unusedInlineScript.inlineScript}
42
+ id={`unused-${unusedInlineScript}`}
43
+ bind:name={$app.unusedInlineScripts[unusedInlineScript].name}
44
+ bind:inlineScript={$app.unusedInlineScripts[unusedInlineScript].inlineScript}
84
45
  on:delete={() => {
85
46
  // remove the script from the array at the index
86
- $app.unusedInlineScripts.splice(index, 1)
47
+ $app.unusedInlineScripts.splice(unusedInlineScript, 1)
87
48
  $app.unusedInlineScripts = [...$app.unusedInlineScripts]
88
49
  }}
89
50
  />
90
- {/if}
91
- {/each}
92
- {#each $app?.hiddenInlineScripts ?? [] as hiddenInlineScript, index (index)}
93
- {#if `bg_${index}` === selectedScriptComponentId}
94
- {#if hiddenInlineScript.inlineScript}
51
+ {/key}
52
+ {:else if hiddenInlineScript > -1}
53
+ {#key hiddenInlineScript}
54
+ {#if $app.hiddenInlineScripts?.[hiddenInlineScript]?.inlineScript}
95
55
  <InlineScriptEditor
96
- id={`bg_${index}`}
97
- bind:inlineScript={hiddenInlineScript.inlineScript}
98
- bind:name={hiddenInlineScript.name}
99
- bind:fields={hiddenInlineScript.fields}
56
+ id={`bg_${hiddenInlineScript}`}
57
+ bind:inlineScript={$app.hiddenInlineScripts[hiddenInlineScript].inlineScript}
58
+ bind:name={$app.hiddenInlineScripts[hiddenInlineScript].name}
59
+ bind:fields={$app.hiddenInlineScripts[hiddenInlineScript].fields}
100
60
  syncFields
101
- on:delete={() => deleteBackgroundScript(index)}
61
+ on:delete={() => deleteBackgroundScript(hiddenInlineScript)}
102
62
  />
103
63
  {:else}
104
64
  <EmptyInlineScript
105
- id={`b_${index}`}
106
- name={hiddenInlineScript.name}
107
- on:delete={() => deleteBackgroundScript(index)}
65
+ id={`b_${hiddenInlineScript}`}
66
+ name={$app.hiddenInlineScripts[hiddenInlineScript].name}
67
+ on:delete={() => deleteBackgroundScript(hiddenInlineScript)}
108
68
  on:new={(e) => {
109
- hiddenInlineScript.inlineScript = e.detail
69
+ if ($app.hiddenInlineScripts[hiddenInlineScript]) {
70
+ $app.hiddenInlineScripts[hiddenInlineScript].inlineScript = e.detail
71
+ }
110
72
  }}
111
73
  />
112
74
  {/if}
113
- {/if}
114
- {/each}
75
+ {/key}
76
+ {:else}
77
+ <div class="text-sm text-gray-500 text-center py-8 px-2">
78
+ No script found at id {$selectedComponentInEditor}
79
+ </div>
80
+ {/if}
115
81
  </Pane>
116
82
  </Splitpanes>
117
83
  </SplitPanesWrapper>