windmill-components 1.84.6 → 1.86.0

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 (271) hide show
  1. package/components/AppConnect.svelte +2 -2
  2. package/components/ArgInfo.svelte +4 -6
  3. package/components/ArgInput.svelte +12 -12
  4. package/components/ArgInput.svelte.d.ts +1 -2
  5. package/components/CenteredModal.svelte +9 -7
  6. package/components/CronInput.svelte +301 -64
  7. package/components/CronInput.svelte.d.ts +3 -3
  8. package/components/DisplayResult.svelte +5 -7
  9. package/components/Dropdown.svelte +5 -4
  10. package/components/Editor.svelte +138 -83
  11. package/components/Editor.svelte.d.ts +10 -4
  12. package/components/EditorBar.svelte +72 -36
  13. package/components/EditorBar.svelte.d.ts +1 -1
  14. package/components/FlowBuilder.svelte +136 -110
  15. package/components/FlowGraphViewer.svelte +5 -8
  16. package/components/FlowGraphViewer.svelte.d.ts +1 -0
  17. package/components/FlowPreviewContent.svelte +14 -11
  18. package/components/FlowStatusViewer.svelte +54 -44
  19. package/components/FlowViewer.svelte +1 -1
  20. package/components/FolderEditor.svelte +2 -10
  21. package/components/FolderUsageInfo.svelte +1 -1
  22. package/components/GroupEditor.svelte +6 -15
  23. package/components/HighlightCode.svelte +1 -1
  24. package/components/InlineCodeCopy.svelte +2 -1
  25. package/components/InputTransformForm.svelte +75 -73
  26. package/components/InputTransformSchemaForm.svelte +1 -1
  27. package/components/InputTransformsViewer.svelte +1 -1
  28. package/components/LightweightArgInput.svelte +12 -0
  29. package/components/LightweightArgInput.svelte.d.ts +1 -0
  30. package/components/LightweightSchemaForm.svelte +2 -1
  31. package/components/LightweightSchemaForm.svelte.d.ts +2 -0
  32. package/components/Modal.svelte +2 -2
  33. package/components/ModulePreview.svelte +11 -11
  34. package/components/ModuleStatus.svelte +0 -1
  35. package/components/Multiselect.svelte +1 -0
  36. package/components/ObjectResourceInput.svelte +1 -23
  37. package/components/Path.svelte +56 -94
  38. package/components/Popover.svelte +7 -19
  39. package/components/Range.svelte +1 -4
  40. package/components/ResourceEditor.svelte +6 -6
  41. package/components/ResourcePicker.svelte +2 -2
  42. package/components/RunForm.svelte +5 -6
  43. package/components/ScheduleEditor.svelte +23 -13
  44. package/components/SchemaModal.svelte +1 -0
  45. package/components/SchemaModal.svelte.d.ts +1 -1
  46. package/components/ScriptBuilder.svelte +201 -206
  47. package/components/ScriptBuilder.svelte.d.ts +2 -0
  48. package/components/ScriptEditor.svelte +38 -38
  49. package/components/ScriptEditor.svelte.d.ts +5 -1
  50. package/components/ScriptSchema.svelte +1 -20
  51. package/components/ScriptSchema.svelte.d.ts +0 -1
  52. package/components/SearchItems.svelte +1 -1
  53. package/components/SharedBadge.svelte +0 -1
  54. package/components/SimpleEditor.svelte +17 -37
  55. package/components/SimpleEditor.svelte.d.ts +6 -0
  56. package/components/Star.svelte +2 -1
  57. package/components/TemplateEditor.svelte +21 -29
  58. package/components/TemplateEditor.svelte.d.ts +3 -0
  59. package/components/Toast.svelte +50 -0
  60. package/components/Toast.svelte.d.ts +18 -0
  61. package/components/apps/components/buttons/AppButton.svelte +2 -1
  62. package/components/apps/components/display/AppBarChart.svelte +5 -5
  63. package/components/apps/components/display/AppHtml.svelte +9 -6
  64. package/components/apps/components/display/AppIcon.svelte +3 -0
  65. package/components/apps/components/display/AppImage.svelte +4 -1
  66. package/components/apps/components/display/AppMap.svelte +3 -0
  67. package/components/apps/components/display/AppPdf.svelte +14 -11
  68. package/components/apps/components/display/AppText.svelte +152 -60
  69. package/components/apps/components/display/AppText.svelte.d.ts +4 -0
  70. package/components/apps/components/display/table/AppAggridTable.svelte +25 -12
  71. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -1
  72. package/components/apps/components/display/table/AppTable.svelte +1 -2
  73. package/components/apps/components/display/table/AppTableFooter.svelte +0 -1
  74. package/components/apps/components/helpers/AlignWrapper.svelte +1 -20
  75. package/components/apps/components/helpers/HiddenComponent.svelte +12 -6
  76. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
  77. package/components/apps/components/helpers/InitializeComponent.svelte +12 -0
  78. package/components/apps/components/helpers/InitializeComponent.svelte.d.ts +16 -0
  79. package/components/apps/components/helpers/InputValue.svelte +6 -0
  80. package/components/apps/components/helpers/NonRunnableComponent.svelte +4 -3
  81. package/components/apps/components/helpers/RunnableComponent.svelte +24 -6
  82. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  83. package/components/apps/components/helpers/RunnableWrapper.svelte +8 -2
  84. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  85. package/components/apps/components/helpers/eval.d.ts +4 -0
  86. package/components/apps/components/helpers/eval.js +3 -1
  87. package/components/apps/components/inputs/AppCheckbox.svelte +3 -0
  88. package/components/apps/components/inputs/AppDateInput.svelte +3 -0
  89. package/components/apps/components/inputs/AppFileInput.svelte +4 -0
  90. package/components/apps/components/inputs/AppMultiSelect.svelte +5 -2
  91. package/components/apps/components/inputs/AppNumberInput.svelte +3 -0
  92. package/components/apps/components/inputs/AppRangeInput.svelte +8 -5
  93. package/components/apps/components/inputs/AppSelect.svelte +3 -9
  94. package/components/apps/components/inputs/AppSliderInputs.svelte +2 -0
  95. package/components/apps/components/inputs/AppTextInput.svelte +12 -5
  96. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +3 -0
  97. package/components/apps/components/layout/AppContainer.svelte +3 -0
  98. package/components/apps/components/layout/AppDivider.svelte +3 -0
  99. package/components/apps/components/layout/AppDrawer.svelte +3 -0
  100. package/components/apps/components/layout/AppSplitpanes.svelte +3 -0
  101. package/components/apps/components/layout/AppTabs.svelte +4 -1
  102. package/components/apps/editor/AppEditor.svelte +42 -35
  103. package/components/apps/editor/AppEditorHeader.svelte +23 -15
  104. package/components/apps/editor/AppPreview.svelte +5 -3
  105. package/components/apps/editor/ComponentHeader.svelte +20 -1
  106. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -0
  107. package/components/apps/editor/GridEditor.svelte +2 -2
  108. package/components/apps/editor/RecomputeAllComponents.svelte +7 -4
  109. package/components/apps/editor/SettingsPanel.svelte +1 -0
  110. package/components/apps/editor/SubGridEditor.svelte +5 -5
  111. package/components/apps/editor/appUtils.js +13 -3
  112. package/components/apps/editor/component/Component.svelte +24 -2
  113. package/components/apps/editor/component/ComponentWrapper.svelte +5 -0
  114. package/components/apps/editor/component/components.d.ts +39 -39
  115. package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -26
  116. package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -3
  117. package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  118. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +2 -2
  119. package/components/apps/editor/contextPanel/ContextPanel.svelte +1 -2
  120. package/components/apps/editor/contextPanel/components/IdEditor.svelte +90 -0
  121. package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +18 -0
  122. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +92 -21
  123. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +4 -3
  124. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +3 -3
  125. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +50 -37
  126. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -3
  127. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +14 -6
  128. package/components/apps/editor/settingsPanel/TableActions.svelte +1 -1
  129. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
  130. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +8 -3
  131. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +0 -2
  132. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
  133. package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +2 -5
  134. package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte +2 -5
  135. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +15 -7
  136. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +2 -1
  137. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +2 -2
  138. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +1 -1
  139. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +6 -5
  140. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +1 -1
  141. package/components/apps/inputType.d.ts +1 -0
  142. package/components/apps/rx.d.ts +0 -2
  143. package/components/apps/rx.js +1 -3
  144. package/components/apps/svelte-grid/utils/helper.js +1 -1
  145. package/components/apps/types.d.ts +12 -0
  146. package/components/apps/utils.d.ts +3 -1
  147. package/components/apps/utils.js +26 -2
  148. package/components/build_workers.d.ts +14 -0
  149. package/components/build_workers.js +45 -0
  150. package/components/common/badge/Badge.svelte +0 -1
  151. package/components/common/button/Button.svelte +46 -24
  152. package/components/common/button/Button.svelte.d.ts +7 -1
  153. package/components/common/button/ButtonDropdown.svelte +25 -0
  154. package/components/common/button/ButtonDropdown.svelte.d.ts +27 -0
  155. package/components/common/button/model.d.ts +2 -3
  156. package/components/common/button/model.js +7 -3
  157. package/components/common/drawer/Drawer.svelte +2 -3
  158. package/components/common/drawer/DrawerContent.svelte +2 -6
  159. package/components/common/fileInput/FileInput.svelte +5 -1
  160. package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  161. package/components/common/index.d.ts +0 -2
  162. package/components/common/index.js +0 -2
  163. package/components/common/menu/Menu.svelte.d.ts +1 -1
  164. package/components/common/popup/Popup.svelte +16 -8
  165. package/components/common/popup/Popup.svelte.d.ts +6 -0
  166. package/components/common/table/AppRow.svelte +0 -1
  167. package/components/common/table/FlowRow.svelte +0 -1
  168. package/components/common/table/ScriptRow.svelte +2 -3
  169. package/components/common/tabs/Tab.svelte +10 -5
  170. package/components/common/tabs/Tabs.svelte +20 -1
  171. package/components/common/tabs/Tabs.svelte.d.ts +3 -0
  172. package/components/flows/CreateActionsApp.svelte +14 -9
  173. package/components/flows/CreateActionsFlow.svelte +11 -10
  174. package/components/flows/FlowEditor.svelte +2 -2
  175. package/components/flows/content/CapturePayload.svelte +2 -4
  176. package/components/flows/content/DynamicInputHelpBox.svelte +1 -0
  177. package/components/flows/content/FlowBranchesAllWrapper.svelte +2 -2
  178. package/components/flows/content/FlowBranchesOneWrapper.svelte +2 -2
  179. package/components/flows/content/FlowInputsFlow.svelte +1 -1
  180. package/components/flows/content/FlowInputsFlow.svelte.d.ts +1 -3
  181. package/components/flows/content/FlowModuleComponent.svelte +27 -28
  182. package/components/flows/content/FlowModuleWrapper.svelte +0 -1
  183. package/components/flows/content/FlowRetries.svelte +1 -2
  184. package/components/flows/content/FlowSchedules.svelte +3 -1
  185. package/components/flows/content/ScriptEditorDrawer.svelte +1 -1
  186. package/components/flows/flowStateUtils.d.ts +0 -3
  187. package/components/flows/flowStateUtils.js +3 -23
  188. package/components/flows/header/FlowImportExportMenu.svelte +10 -12
  189. package/components/flows/header/FlowPreviewButtons.svelte +21 -24
  190. package/components/flows/idUtils.d.ts +4 -0
  191. package/components/flows/idUtils.js +47 -0
  192. package/components/flows/map/FlowModuleSchemaItem.svelte +6 -6
  193. package/components/flows/map/MapItem.svelte +9 -9
  194. package/components/flows/map/MapItem.svelte.d.ts +0 -1
  195. package/components/flows/scheduleUtils.d.ts +1 -0
  196. package/components/flows/scheduleUtils.js +2 -1
  197. package/components/flows/utils.d.ts +0 -2
  198. package/components/flows/utils.js +3 -35
  199. package/components/graph/FlowGraph.svelte +22 -8
  200. package/components/graph/FlowGraph.svelte.d.ts +2 -0
  201. package/components/graph/svelvet/collapsible/controllers/util.js +3 -14
  202. package/components/graph/svelvet/container/views/GraphView.svelte +25 -42
  203. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  204. package/components/graph/svelvet/container/views/Svelvet.svelte +5 -3
  205. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +3 -0
  206. package/components/graph/svelvet/edges/controllers/anchorCbDev.js +5 -5
  207. package/components/graph/svelvet/edges/controllers/util.js +1 -1
  208. package/components/graph/svelvet/edges/models/Edge.js +2 -2
  209. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +1 -1
  210. package/components/graph/svelvet/nodes/models/Node.js +0 -1
  211. package/components/graph/svelvet/nodes/views/Node.svelte +0 -1
  212. package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -1
  213. package/components/graph/svelvet/store/controllers/util.d.ts +1 -1
  214. package/components/graph/svelvet/store/controllers/util.js +3 -3
  215. package/components/home/ItemsList.svelte +11 -11
  216. package/components/icons/WindmillIcon.svelte +4 -0
  217. package/components/icons/WindmillIcon.svelte.d.ts +1 -0
  218. package/components/propertyPicker/ObjectViewer.svelte +0 -5
  219. package/components/propertyPicker/ObjectViewer.svelte.d.ts +0 -1
  220. package/components/propertyPicker/PropPicker.svelte +2 -2
  221. package/components/scripts/CreateActionsScript.svelte +4 -22
  222. package/components/sidebar/WorkspaceMenu.svelte +8 -4
  223. package/editorUtils.d.ts +3 -0
  224. package/editorUtils.js +7 -2
  225. package/gen/core/OpenAPI.js +1 -1
  226. package/gen/index.d.ts +7 -1
  227. package/gen/index.js +3 -0
  228. package/gen/models/CreateInput.d.ts +5 -0
  229. package/gen/models/CreateInput.js +4 -0
  230. package/gen/models/EditSchedule.d.ts +1 -0
  231. package/gen/models/Input.d.ts +6 -0
  232. package/gen/models/Input.js +4 -0
  233. package/gen/models/MainArgSignature.d.ts +8 -0
  234. package/gen/models/MainArgSignature.js +8 -1
  235. package/gen/models/NewSchedule.d.ts +1 -1
  236. package/gen/models/NewTokenImpersonate.d.ts +5 -0
  237. package/gen/models/NewTokenImpersonate.js +4 -0
  238. package/gen/models/RunnableType.d.ts +5 -0
  239. package/gen/models/RunnableType.js +9 -0
  240. package/gen/models/Schedule.d.ts +1 -1
  241. package/gen/models/UpdateInput.d.ts +4 -0
  242. package/gen/models/UpdateInput.js +4 -0
  243. package/gen/services/FlowService.d.ts +18 -0
  244. package/gen/services/FlowService.js +19 -0
  245. package/gen/services/InputService.d.ts +78 -0
  246. package/gen/services/InputService.js +95 -0
  247. package/gen/services/JobService.d.ts +35 -15
  248. package/gen/services/JobService.js +25 -7
  249. package/gen/services/ScheduleService.d.ts +2 -2
  250. package/gen/services/ScheduleService.js +1 -1
  251. package/gen/services/ScriptService.d.ts +10 -0
  252. package/gen/services/ScriptService.js +16 -0
  253. package/gen/services/UserService.d.ts +12 -0
  254. package/gen/services/UserService.js +13 -0
  255. package/infer.js +3 -0
  256. package/init_scripts/python_init_code.d.ts +1 -1
  257. package/init_scripts/python_init_code.js +2 -2
  258. package/package.json +684 -673
  259. package/script_helpers.d.ts +1 -1
  260. package/script_helpers.js +7 -5
  261. package/stores.js +14 -1
  262. package/user.d.ts +1 -1
  263. package/user.js +6 -6
  264. package/utils.d.ts +2 -2
  265. package/utils.js +21 -11
  266. package/components/common/button/ButtonPopup.svelte +0 -75
  267. package/components/common/button/ButtonPopup.svelte.d.ts +0 -39
  268. package/components/common/button/ButtonPopupItem.svelte +0 -48
  269. package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -28
  270. package/components/graph/svelvet/editEdges/views/EditEdge.svelte +0 -151
  271. package/components/graph/svelvet/editEdges/views/EditEdge.svelte.d.ts +0 -20
@@ -1,17 +1,17 @@
1
- <script>import { Clipboard } from 'lucide-svelte';
1
+ <script>import { isCodeInjection } from '../../../flows/utils';
2
+ import Tooltip from '../../../Tooltip.svelte';
3
+ import { Clipboard } from 'lucide-svelte';
4
+ import { getContext } from 'svelte';
5
+ import { get } from 'svelte/store';
6
+ import { twMerge } from 'tailwind-merge';
2
7
  import { copyToClipboard } from '../../../../utils';
3
8
  import Button from '../../../common/button/Button.svelte';
4
9
  import Popover from '../../../Popover.svelte';
5
- import AlignWrapper from '../helpers/AlignWrapper.svelte';
6
- import RunnableWrapper from '../helpers/RunnableWrapper.svelte';
7
- import { twMerge } from 'tailwind-merge';
8
- import { getContext } from 'svelte';
9
10
  import { initConfig, initOutput } from '../../editor/appUtils';
10
- import Tooltip from '../../../Tooltip.svelte';
11
- import { get } from 'svelte/store';
12
- import ResolveConfig from '../helpers/ResolveConfig.svelte';
13
11
  import { components } from '../../editor/component';
14
- import { isCodeInjection } from '../../../flows/utils';
12
+ import AlignWrapper from '../helpers/AlignWrapper.svelte';
13
+ import ResolveConfig from '../helpers/ResolveConfig.svelte';
14
+ import RunnableWrapper from '../helpers/RunnableWrapper.svelte';
15
15
  export let id;
16
16
  export let componentInput;
17
17
  export let horizontalAlignment = 'left';
@@ -20,8 +20,9 @@ export let configuration;
20
20
  export let initializing = undefined;
21
21
  export let customCss = undefined;
22
22
  export let render;
23
+ export let editorMode = false;
23
24
  let resolvedConfig = initConfig(components['textcomponent'].initialData.configuration, configuration);
24
- const { app, worldStore, mode } = getContext('AppViewerContext');
25
+ const { app, worldStore, mode, componentControl } = getContext('AppViewerContext');
25
26
  const editorcontext = getContext('AppEditorContext');
26
27
  let result = undefined;
27
28
  if (componentInput?.type == 'template' && !isCodeInjection(componentInput.eval)) {
@@ -58,10 +59,60 @@ function getClasses() {
58
59
  return '';
59
60
  }
60
61
  }
62
+ function getClassesByType() {
63
+ switch (resolvedConfig.style) {
64
+ case 'Title':
65
+ return 'h1-textarea';
66
+ case 'Subtitle':
67
+ return 'h3-textarea';
68
+ case 'Body':
69
+ return 'p-textarea';
70
+ case 'Caption':
71
+ return 'p-textarea';
72
+ case 'Label':
73
+ return 'label';
74
+ default:
75
+ return 'p-textarea';
76
+ }
77
+ }
61
78
  let component = 'p';
62
79
  let classes = '';
80
+ function getHorizontalAlignement() {
81
+ if (horizontalAlignment) {
82
+ switch (horizontalAlignment) {
83
+ case 'left':
84
+ return '!text-left';
85
+ case 'center':
86
+ return '!text-center';
87
+ case 'right':
88
+ return '!text-right';
89
+ default:
90
+ return '!text-left';
91
+ }
92
+ }
93
+ }
63
94
  $: resolvedConfig.style && (component = getComponent());
64
95
  $: resolvedConfig.style && (classes = getClasses());
96
+ $: initialValue = componentInput?.type == 'template' ? componentInput.eval : '';
97
+ $: editableValue = initialValue ? JSON.parse(JSON.stringify(initialValue)) : '';
98
+ let rows = 1;
99
+ function onInput(e) {
100
+ const target = e.target;
101
+ if (target.value) {
102
+ $componentControl[id]?.setCode?.(target.value);
103
+ editableValue;
104
+ autosize();
105
+ }
106
+ }
107
+ function autosize() {
108
+ const el = document.getElementById(`text-${id}`);
109
+ setTimeout(() => {
110
+ if (el !== null) {
111
+ el.style.cssText = 'height:auto; padding:0';
112
+ el.style.cssText = 'height:' + el.scrollHeight + 'px';
113
+ }
114
+ }, 0);
115
+ }
65
116
  </script>
66
117
 
67
118
  {#each Object.keys(components['textcomponent'].initialData.configuration) as key (key)}
@@ -74,58 +125,99 @@ $: resolvedConfig.style && (classes = getClasses());
74
125
  {/each}
75
126
 
76
127
  <RunnableWrapper {outputs} {render} {componentInput} {id} bind:initializing bind:result>
77
- <div class="h-full w-full overflow-hidden">
78
- <AlignWrapper {horizontalAlignment} {verticalAlignment}>
79
- {#if !result || result === ''}
80
- <div class="text-gray-400 bg-gray-100 flex justify-center items-center h-full w-full">
81
- No text
82
- </div>
83
- {:else}
84
- <!-- svelte-ignore a11y-click-events-have-key-events -->
85
- <div
86
- class="flex flex-wrap gap-2 pb-0.5 {$mode === 'dnd' && componentInput?.type == 'template'
87
- ? 'cursor-text'
88
- : ''}"
89
- on:click={() => {
90
- if ($mode === 'dnd' && componentInput?.type == 'template') {
91
- let ontextfocus = editorcontext?.ontextfocus
92
- if (ontextfocus) {
93
- get(ontextfocus)?.()
94
- }
128
+ <div
129
+ class="h-full w-full overflow-hidden"
130
+ on:dblclick={() => {
131
+ if (!editorMode) {
132
+ editorMode = true
133
+ document.getElementById(`text-${id}`)?.focus()
134
+ autosize()
135
+ }
136
+ }}
137
+ on:keydown|stopPropagation
138
+ >
139
+ {#if editorMode && componentInput?.type == 'template'}
140
+ <AlignWrapper {horizontalAlignment} {verticalAlignment}>
141
+ <textarea
142
+ class={twMerge(
143
+ 'whitespace-pre-wrap !outline-none !border-0 !bg-transparent !resize-none !overflow-hidden !ring-0 !p-0 text-center',
144
+ $app.css?.['textcomponent']?.['text']?.class,
145
+ customCss?.text?.class,
146
+ classes,
147
+ getClasses(),
148
+ getClassesByType(),
149
+ getHorizontalAlignement()
150
+ )}
151
+ on:pointerdown|stopPropagation
152
+ style={[$app.css?.['textcomponent']?.['text']?.style, customCss?.text?.style].join(';')}
153
+ id={`text-${id}`}
154
+ on:pointerenter={() => {
155
+ const elem = document.getElementById(`text-${id}`)
156
+ if (elem) {
157
+ elem.focus()
95
158
  }
96
159
  }}
97
- >
98
- <svelte:element
99
- this={component}
100
- class={twMerge(
101
- 'whitespace-pre-wrap',
102
- $app.css?.['textcomponent']?.['text']?.class,
103
- customCss?.text?.class,
104
- classes
105
- )}
106
- style={[$app.css?.['textcomponent']?.['text']?.style, customCss?.text?.style].join(';')}
160
+ {rows}
161
+ on:input={onInput}
162
+ value={editableValue}
163
+ />
164
+ </AlignWrapper>
165
+ {:else}
166
+ <AlignWrapper {horizontalAlignment} {verticalAlignment}>
167
+ {#if !result || result === ''}
168
+ <div class="text-gray-400 bg-gray-100 flex justify-center items-center h-full w-full">
169
+ No text
170
+ </div>
171
+ {:else}
172
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
173
+ <div
174
+ class="flex flex-wrap gap-2 pb-0.5 {$mode === 'dnd' &&
175
+ componentInput?.type == 'template'
176
+ ? 'cursor-text'
177
+ : ''}"
178
+ on:click={() => {
179
+ if ($mode === 'dnd' && componentInput?.type == 'template') {
180
+ let ontextfocus = editorcontext?.ontextfocus
181
+ if (ontextfocus) {
182
+ get(ontextfocus)?.()
183
+ }
184
+ }
185
+ }}
107
186
  >
108
- {String(result)}
109
- {#if resolvedConfig.tooltip != ''}
110
- <Tooltip>{resolvedConfig.tooltip}</Tooltip>
111
- {/if}
112
- {#if resolvedConfig.copyButton && result}
113
- <Popover notClickable>
114
- <Button
115
- variant="border"
116
- size="xs"
117
- color="dark"
118
- btnClasses="!p-1"
119
- on:click={() => copyToClipboard(result)}
120
- >
121
- <Clipboard size={14} strokeWidth={2} />
122
- </Button>
123
- <svelte:fragment slot="text">Copy to clipboard</svelte:fragment>
124
- </Popover>
125
- {/if}
126
- </svelte:element>
127
- </div>
128
- {/if}
129
- </AlignWrapper>
187
+ <svelte:element
188
+ this={component}
189
+ class={twMerge(
190
+ 'whitespace-pre-wrap',
191
+ $app.css?.['textcomponent']?.['text']?.class,
192
+ customCss?.text?.class,
193
+ classes
194
+ )}
195
+ style={[$app.css?.['textcomponent']?.['text']?.style, customCss?.text?.style].join(
196
+ ';'
197
+ )}
198
+ >
199
+ {String(result)}
200
+ {#if resolvedConfig.tooltip && resolvedConfig.tooltip != ''}
201
+ <Tooltip>{resolvedConfig.tooltip}</Tooltip>
202
+ {/if}
203
+ {#if resolvedConfig.copyButton && result}
204
+ <Popover notClickable>
205
+ <Button
206
+ variant="border"
207
+ size="xs"
208
+ color="dark"
209
+ btnClasses="!p-1"
210
+ on:click={() => copyToClipboard(result)}
211
+ >
212
+ <Clipboard size={14} strokeWidth={2} />
213
+ </Button>
214
+ <svelte:fragment slot="text">Copy to clipboard</svelte:fragment>
215
+ </Popover>
216
+ {/if}
217
+ </svelte:element>
218
+ </div>
219
+ {/if}
220
+ </AlignWrapper>
221
+ {/if}
130
222
  </div>
131
223
  </RunnableWrapper>
@@ -11,8 +11,12 @@ declare const __propDef: {
11
11
  initializing?: boolean | undefined;
12
12
  customCss?: ComponentCustomCSS<'textcomponent'> | undefined;
13
13
  render: boolean;
14
+ editorMode?: boolean | undefined;
14
15
  };
15
16
  events: {
17
+ keydown: KeyboardEvent;
18
+ pointerdown: PointerEvent;
19
+ } & {
16
20
  [evt: string]: CustomEvent<any>;
17
21
  };
18
22
  slots: {};
@@ -1,20 +1,20 @@
1
- <script>import AgGridSvelte from 'ag-grid-svelte/AgGridSvelte.svelte';
2
- import 'ag-grid-community/styles/ag-grid.css';
1
+ <script>import 'ag-grid-community/styles/ag-grid.css';
3
2
  import 'ag-grid-community/styles/ag-theme-alpine.css';
3
+ import AgGridSvelte from 'ag-grid-svelte/AgGridSvelte.svelte';
4
+ import { isObject } from '../../../../../utils';
4
5
  import { getContext, onMount } from 'svelte';
5
6
  import RunnableWrapper from '../../helpers/RunnableWrapper.svelte';
6
- import { isObject } from '../../../../../utils';
7
- import Alert from '../../../../common/alert/Alert.svelte';
8
7
  import { initConfig, initOutput } from '../../../editor/appUtils';
9
- import ResolveConfig from '../../helpers/ResolveConfig.svelte';
10
8
  import { components } from '../../../editor/component';
9
+ import Alert from '../../../../common/alert/Alert.svelte';
10
+ import ResolveConfig from '../../helpers/ResolveConfig.svelte';
11
11
  export let id;
12
12
  export let componentInput;
13
13
  export let configuration;
14
14
  export let initializing = undefined;
15
15
  export let render;
16
16
  let result = undefined;
17
- const { worldStore, selectedComponent } = getContext('AppViewerContext');
17
+ const { worldStore, selectedComponent, componentControl } = getContext('AppViewerContext');
18
18
  let resolvedConfig = initConfig(components['aggridcomponent'].initialData.configuration, configuration);
19
19
  let outputs = initOutput($worldStore, id, {
20
20
  selectedRowIndex: 0,
@@ -22,13 +22,14 @@ let outputs = initOutput($worldStore, id, {
22
22
  result: [],
23
23
  loading: false,
24
24
  page: 0,
25
- newChange: { row: 0, column: '', value: undefined }
25
+ newChange: { row: 0, column: '', value: undefined },
26
+ ready: undefined
26
27
  });
27
28
  let selectedRowIndex = -1;
28
- function toggleRow(row, rowIndex) {
29
- if (selectedRowIndex !== rowIndex) {
29
+ function toggleRow(rowIndex) {
30
+ if (selectedRowIndex !== rowIndex && result) {
30
31
  selectedRowIndex = rowIndex;
31
- outputs?.selectedRow.set(row.original);
32
+ outputs?.selectedRow.set(result[rowIndex]);
32
33
  outputs?.selectedRowIndex.set(rowIndex);
33
34
  }
34
35
  }
@@ -42,7 +43,7 @@ $: selectedRowIndex === -1 &&
42
43
  // We need to wait until the component is mounted so the world is created
43
44
  mounted &&
44
45
  outputs &&
45
- toggleRow({ original: result[0] }, 0);
46
+ toggleRow(0);
46
47
  $: outputs?.result?.set(result ?? []);
47
48
  let clientHeight;
48
49
  let clientWidth;
@@ -75,7 +76,7 @@ function onCellValueChanged(event) {
75
76
  <RunnableWrapper {outputs} {render} {componentInput} {id} bind:initializing bind:result>
76
77
  {#if Array.isArray(result) && result.every(isObject)}
77
78
  <div
78
- class="border border-gray-300 shadow-sm divide-y divide-gray-300 flex flex-col h-full"
79
+ class="border border-gray-300 shadow-sm divide-y divide-gray-300 flex flex-col h-full"
79
80
  bind:clientHeight
80
81
  bind:clientWidth
81
82
  >
@@ -97,6 +98,18 @@ function onCellValueChanged(event) {
97
98
  onPaginationChanged={(event) => {
98
99
  outputs?.page.set(event.api.paginationGetCurrentPage())
99
100
  }}
101
+ rowSelection="single"
102
+ suppressRowDeselection={true}
103
+ onSelectionChanged={(e) => {
104
+ const row = e.api.getSelectedNodes()?.[0]?.rowIndex
105
+ if (row != undefined) {
106
+ toggleRow(row)
107
+ }
108
+ }}
109
+ onGridReady={(e) => {
110
+ outputs?.ready.set(true)
111
+ $componentControl[id] = { agGrid: { api: e.api, columnApi: e.columnApi } }
112
+ }}
100
113
  />
101
114
  {/key}
102
115
  </div>
@@ -1,8 +1,8 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  import 'ag-grid-community/styles/ag-grid.css';
3
3
  import 'ag-grid-community/styles/ag-theme-alpine.css';
4
- import type { RichConfigurations } from '../../../types';
5
4
  import type { AppInput } from '../../../inputType';
5
+ import type { RichConfigurations } from '../../../types';
6
6
  declare const __propDef: {
7
7
  props: {
8
8
  id: string;
@@ -1,5 +1,4 @@
1
1
  <script>import { getContext, onMount } from 'svelte';
2
- import InputValue from '../../helpers/InputValue.svelte';
3
2
  import RunnableWrapper from '../../helpers/RunnableWrapper.svelte';
4
3
  import { writable } from 'svelte/store';
5
4
  import { createSvelteTable, flexRender } from '@tanstack/svelte-table';
@@ -251,7 +250,7 @@ $componentControl[id] = {
251
250
  on:keypress={() => toggleRow(row, rowIndex)}
252
251
  on:click={() => toggleRow(row, rowIndex)}
253
252
  >
254
- <div class="center-center h-full w-full flex-wrap gap-1 ">
253
+ <div class="center-center h-full w-full flex-wrap gap-1">
255
254
  {#each actionButtons as actionButton, actionIndex (actionButton?.id)}
256
255
  <!-- svelte-ignore a11y-mouse-events-have-key-events -->
257
256
  <div
@@ -2,7 +2,6 @@
2
2
  import { faDownload } from '@fortawesome/free-solid-svg-icons';
3
3
  import { ChevronLeft, ChevronRight } from 'lucide-svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
- import { tableOptions } from './tableOptions';
6
5
  export let result;
7
6
  export let manualPagination;
8
7
  export let pageSize;
@@ -1,4 +1,5 @@
1
1
  <script>import { twMerge } from 'tailwind-merge';
2
+ import { tailwindHorizontalAlignment, tailwindVerticalAlignment } from '../../utils';
2
3
  export let horizontalAlignment = undefined;
3
4
  export let verticalAlignment = undefined;
4
5
  export let noWFull = false;
@@ -6,26 +7,6 @@ let c = '';
6
7
  export { c as class };
7
8
  export let style = '';
8
9
  export let render = true;
9
- function tailwindHorizontalAlignment(alignment) {
10
- if (!alignment)
11
- return '';
12
- const classes = {
13
- left: 'justify-start',
14
- center: 'justify-center',
15
- right: 'justify-end'
16
- };
17
- return classes[alignment];
18
- }
19
- function tailwindVerticalAlignment(alignment) {
20
- if (!alignment)
21
- return '';
22
- const classes = {
23
- top: 'items-start',
24
- center: 'items-center',
25
- bottom: 'items-end'
26
- };
27
- return classes[alignment];
28
- }
29
10
  $: classes = twMerge('flex z-auto', noWFull ? '' : 'w-full', tailwindHorizontalAlignment(horizontalAlignment), tailwindVerticalAlignment(verticalAlignment), verticalAlignment ? 'h-full' : '', c);
30
11
  </script>
31
12
 
@@ -1,16 +1,22 @@
1
- <script>import { getContext } from 'svelte';
1
+ <script>import { getContext, onMount } from 'svelte';
2
2
  import { initOutput } from '../../editor/appUtils';
3
3
  import RunnableComponent from './RunnableComponent.svelte';
4
4
  export let id;
5
5
  export let name;
6
6
  export let inlineScript;
7
7
  export let fields;
8
- export let doNotRecomputeOnInputChanged;
8
+ export let recomputeOnInputChanged;
9
9
  export let recomputableByRefreshButton;
10
- let result = undefined;
11
- const { worldStore } = getContext('AppViewerContext');
10
+ export let noBackendValue = undefined;
11
+ const { worldStore, staticExporter, noBackend } = getContext('AppViewerContext');
12
+ let result = noBackend ? noBackendValue : undefined;
13
+ onMount(() => {
14
+ $staticExporter[id] = () => {
15
+ return result;
16
+ };
17
+ });
12
18
  let outputs = initOutput($worldStore, id, {
13
- result: undefined,
19
+ result: result,
14
20
  loading: false
15
21
  });
16
22
  </script>
@@ -20,7 +26,7 @@ let outputs = initOutput($worldStore, id, {
20
26
  {id}
21
27
  {fields}
22
28
  autoRefresh={true}
23
- {doNotRecomputeOnInputChanged}
29
+ {recomputeOnInputChanged}
24
30
  bind:result
25
31
  transformer={undefined}
26
32
  runnable={{
@@ -7,8 +7,9 @@ declare const __propDef: {
7
7
  name: string;
8
8
  inlineScript: InlineScript | undefined;
9
9
  fields: Record<string, StaticAppInput | ConnectedAppInput | RowAppInput | UserAppInput>;
10
- doNotRecomputeOnInputChanged: boolean;
10
+ recomputeOnInputChanged: boolean;
11
11
  recomputableByRefreshButton: boolean;
12
+ noBackendValue?: any;
12
13
  };
13
14
  events: {
14
15
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,12 @@
1
+ <script>import { getContext, onDestroy, onMount } from 'svelte';
2
+ export let id;
3
+ const { initialized } = getContext('AppViewerContext');
4
+ onMount(() => {
5
+ if (!$initialized.initializedComponents.includes(id)) {
6
+ $initialized.initializedComponents = [...$initialized.initializedComponents, id];
7
+ }
8
+ });
9
+ onDestroy(() => {
10
+ $initialized.initializedComponents = $initialized.initializedComponents.filter((c) => c !== id);
11
+ });
12
+ </script>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ id: string;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type InitializeComponentProps = typeof __propDef.props;
12
+ export type InitializeComponentEvents = typeof __propDef.events;
13
+ export type InitializeComponentSlots = typeof __propDef.slots;
14
+ export default class InitializeComponent extends SvelteComponentTyped<InitializeComponentProps, InitializeComponentEvents, InitializeComponentSlots> {
15
+ }
16
+ export {};
@@ -26,8 +26,14 @@ $: if (input && !deepEqual(input, lastInput)) {
26
26
  const { worldStore, state, mode } = getContext('AppViewerContext');
27
27
  $: stateId = $worldStore?.stateId;
28
28
  let timeout = undefined;
29
+ let firstDebounce = true;
29
30
  const debounce_ms = 50;
30
31
  function debounce(cb) {
32
+ if (firstDebounce) {
33
+ firstDebounce = false;
34
+ cb();
35
+ return;
36
+ }
31
37
  if (timeout) {
32
38
  clearTimeout(timeout);
33
39
  }
@@ -1,7 +1,6 @@
1
- <script>import { Loader2 } from 'lucide-svelte';
2
- import { getContext } from 'svelte';
3
- import { fade } from 'svelte/transition';
1
+ <script>import { getContext } from 'svelte';
4
2
  import InputValue from './InputValue.svelte';
3
+ import InitializeComponent from './InitializeComponent.svelte';
5
4
  export let componentInput;
6
5
  export let id;
7
6
  export let result;
@@ -15,6 +14,8 @@ function setOutput(v) {
15
14
  $: result && outputs && setOutput(result);
16
15
  </script>
17
16
 
17
+ <InitializeComponent {id} />
18
+
18
19
  {#if componentInput.type !== 'runnable'}
19
20
  <InputValue {id} input={componentInput} bind:value={result} />
20
21
  {/if}
@@ -6,10 +6,11 @@ import { AppService } from '../../../../gen';
6
6
  import { classNames, defaultIfEmptyString, emptySchema, sendUserToast } from '../../../../utils';
7
7
  import { deepEqual } from 'fast-equals';
8
8
  import { Bug } from 'lucide-svelte';
9
- import { createEventDispatcher, getContext } from 'svelte';
9
+ import { createEventDispatcher, getContext, onDestroy } from 'svelte';
10
10
  import { computeGlobalContext, eval_like } from './eval';
11
11
  import InputValue from './InputValue.svelte';
12
12
  import RefreshButton from './RefreshButton.svelte';
13
+ import { selectId } from '../../editor/appUtils';
13
14
  // Component props
14
15
  export let id;
15
16
  export let fields;
@@ -25,17 +26,25 @@ export let initializing = undefined;
25
26
  export let render;
26
27
  export let outputs;
27
28
  export let extraKey = '';
28
- export let doNotRecomputeOnInputChanged = false;
29
+ export let recomputeOnInputChanged = true;
29
30
  export let loading = false;
30
31
  export let recomputableByRefreshButton = true;
31
- const { worldStore, runnableComponents, workspace, appPath, isEditor, jobs, noBackend, errorByComponent, mode, stateId, state, componentControl } = getContext('AppViewerContext');
32
+ export let refreshOnStart = false;
33
+ const { worldStore, runnableComponents, workspace, appPath, isEditor, jobs, noBackend, errorByComponent, mode, stateId, state, componentControl, initialized, selectedComponent, app, connectingInput } = getContext('AppViewerContext');
32
34
  const dispatch = createEventDispatcher();
33
35
  $runnableComponents[id] = {
34
36
  autoRefresh: autoRefresh && recomputableByRefreshButton,
37
+ refreshOnStart,
35
38
  cb: async (inlineScript) => {
36
39
  await executeComponent(true, inlineScript);
37
40
  }
38
41
  };
42
+ if (!$initialized.initializedComponents.includes(id)) {
43
+ $initialized.initializedComponents = [...$initialized.initializedComponents, id];
44
+ }
45
+ onDestroy(() => {
46
+ $initialized.initializedComponents = $initialized.initializedComponents.filter((c) => c !== id);
47
+ });
39
48
  $runnableComponents = $runnableComponents;
40
49
  let args = undefined;
41
50
  let testIsLoading = false;
@@ -68,8 +77,8 @@ $: (runnableInputValues || extraQueryParams || args) &&
68
77
  $: refreshOn =
69
78
  runnable && runnable.type === 'runnableByName' ? runnable.inlineScript?.refreshOn ?? [] : [];
70
79
  function refreshIfAutoRefresh(_src) {
71
- const refreshEnabled = autoRefresh && (!doNotRecomputeOnInputChanged || refreshOn?.length > 0);
72
- if (refreshEnabled && $worldStore.initialized) {
80
+ const refreshEnabled = autoRefresh && ((recomputeOnInputChanged ?? true) || refreshOn?.length > 0);
81
+ if (refreshEnabled && $initialized.initialized) {
73
82
  setDebouncedExecute();
74
83
  }
75
84
  }
@@ -113,6 +122,7 @@ function generateNextFrontendJobId() {
113
122
  return `${prefix}#${nextJobNumber}`;
114
123
  }
115
124
  async function executeComponent(noToast = false, inlineScriptOverride) {
125
+ console.debug('execute', id);
116
126
  if (runnable?.type === 'runnableByName' && runnable.inlineScript?.language === 'frontend') {
117
127
  loading = true;
118
128
  try {
@@ -241,6 +251,10 @@ async function setResult(res) {
241
251
  $errorByComponent = $errorByComponent;
242
252
  }
243
253
  }
254
+ function handleInputClick(e) {
255
+ const event = e;
256
+ !$connectingInput.opened && selectId(event, id, selectedComponent, $app);
257
+ }
244
258
  </script>
245
259
 
246
260
  {#each Object.entries(fields ?? {}) as [key, v] (key)}
@@ -287,7 +301,11 @@ async function setResult(res) {
287
301
  <div class="h-full flex relative flex-row flex-wrap {wrapperClass}" style={wrapperStyle}>
288
302
  {#if (autoRefresh || forceSchemaDisplay) && schemaStripped && Object.keys(schemaStripped?.properties ?? {}).length > 0}
289
303
  <div class="px-2 h-fit min-h-0">
290
- <LightweightSchemaForm schema={schemaStripped} bind:args />
304
+ <LightweightSchemaForm
305
+ schema={schemaStripped}
306
+ bind:args
307
+ on:inputClicked={handleInputClick}
308
+ />
291
309
  </div>
292
310
  {/if}
293
311
 
@@ -23,9 +23,10 @@ declare const __propDef: {
23
23
  loading: Output<boolean>;
24
24
  };
25
25
  extraKey?: string | undefined;
26
- doNotRecomputeOnInputChanged?: boolean | undefined;
26
+ recomputeOnInputChanged?: boolean | undefined;
27
27
  loading?: boolean | undefined;
28
28
  recomputableByRefreshButton?: boolean | undefined;
29
+ refreshOnStart?: boolean | undefined;
29
30
  runComponent?: (() => Promise<void>) | undefined;
30
31
  };
31
32
  events: {