windmill-components 1.82.2 → 1.82.4

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 (138) hide show
  1. package/common.d.ts +2 -2
  2. package/components/ArgInput.svelte +52 -72
  3. package/components/ArgInput.svelte.d.ts +1 -3
  4. package/components/DisplayResult.svelte +17 -17
  5. package/components/Editor.svelte +0 -3
  6. package/components/Editor.svelte.d.ts +0 -1
  7. package/components/FieldHeader.svelte +0 -1
  8. package/components/FieldHeader.svelte.d.ts +0 -4
  9. package/components/FlowBuilder.svelte +6 -0
  10. package/components/FlowStatusViewer.svelte +7 -4
  11. package/components/FlowStatusViewer.svelte.d.ts +1 -0
  12. package/components/FlowViewer.svelte +0 -1
  13. package/components/InputTransformForm.svelte +0 -1
  14. package/components/LightweightArgInput.svelte +1 -14
  15. package/components/LightweightArgInput.svelte.d.ts +1 -3
  16. package/components/SimpleEditor.svelte +0 -1
  17. package/components/SimpleEditor.svelte.d.ts +0 -1
  18. package/components/TemplateEditor.svelte +0 -1
  19. package/components/Toggle.svelte +1 -1
  20. package/components/Toggle.svelte.d.ts +0 -1
  21. package/components/apps/components/buttons/AppButton.svelte +3 -17
  22. package/components/apps/components/buttons/AppForm.svelte +2 -10
  23. package/components/apps/components/buttons/AppFormButton.svelte +1 -13
  24. package/components/apps/components/display/AppDisplayComponent.svelte +23 -17
  25. package/components/apps/components/display/AppHtml.svelte +7 -1
  26. package/components/apps/components/display/AppHtml.svelte.d.ts +2 -0
  27. package/components/apps/components/display/AppMap.svelte +1 -1
  28. package/components/apps/components/display/AppPdf.svelte +1 -1
  29. package/components/apps/components/display/PlotlyHtml.svelte +20 -3
  30. package/components/apps/components/display/PlotlyHtml.svelte.d.ts +2 -0
  31. package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  32. package/components/apps/components/display/table/AppTable.svelte +75 -49
  33. package/components/apps/components/display/table/AppTable.svelte.d.ts +1 -1
  34. package/components/apps/components/display/table/AppTableFooter.svelte +2 -1
  35. package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +1 -0
  36. package/components/apps/components/display/table/tableOptions.js +1 -1
  37. package/components/apps/components/helpers/DebouncedInput.svelte +1 -0
  38. package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +2 -0
  39. package/components/apps/components/helpers/HiddenComponent.svelte +3 -2
  40. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
  41. package/components/apps/components/helpers/InputValue.svelte +3 -3
  42. package/components/apps/components/helpers/RefreshButton.svelte +3 -10
  43. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +1 -0
  44. package/components/apps/components/helpers/RunnableComponent.svelte +19 -15
  45. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  46. package/components/apps/components/helpers/RunnableWrapper.svelte +3 -1
  47. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  48. package/components/apps/components/helpers/eval.d.ts +4 -2
  49. package/components/apps/components/helpers/eval.js +6 -4
  50. package/components/apps/components/inputs/AppCheckbox.svelte +0 -4
  51. package/components/apps/components/inputs/AppDateInput.svelte +2 -2
  52. package/components/apps/components/inputs/AppMultiSelect.svelte +13 -5
  53. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +0 -2
  54. package/components/apps/components/inputs/AppNumberInput.svelte +3 -3
  55. package/components/apps/components/inputs/AppSelect.svelte +11 -4
  56. package/components/apps/components/inputs/AppSelect.svelte.d.ts +0 -2
  57. package/components/apps/components/inputs/AppSliderInputs.svelte +1 -1
  58. package/components/apps/components/inputs/AppTextInput.svelte +53 -43
  59. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +1 -1
  60. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +1 -1
  61. package/components/apps/components/layout/AppContainer.svelte +2 -2
  62. package/components/apps/components/layout/AppDrawer.svelte +1 -2
  63. package/components/apps/components/layout/AppSplitpanes.svelte +3 -3
  64. package/components/apps/components/layout/AppTabs.svelte +1 -1
  65. package/components/apps/editor/AppEditor.svelte +36 -10
  66. package/components/apps/editor/AppEditorHeader.svelte +5 -0
  67. package/components/apps/editor/AppPreview.svelte +17 -5
  68. package/components/apps/editor/ComponentHeader.svelte +1 -0
  69. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -1
  70. package/components/apps/editor/GridEditor.svelte +22 -12
  71. package/components/apps/editor/GridViewer.svelte +2 -2
  72. package/components/apps/editor/GridViewer.svelte.d.ts +1 -1
  73. package/components/apps/editor/RecomputeAllComponents.svelte +5 -7
  74. package/components/apps/editor/SettingsPanel.svelte +4 -4
  75. package/components/apps/editor/SubGridEditor.svelte +13 -12
  76. package/components/apps/editor/appUtils.d.ts +1 -0
  77. package/components/apps/editor/appUtils.js +19 -0
  78. package/components/apps/editor/component/Component.svelte +19 -8
  79. package/components/apps/editor/component/Component.svelte.d.ts +1 -1
  80. package/components/apps/editor/component/ComponentNavigation.svelte +55 -46
  81. package/components/apps/editor/component/components.d.ts +45 -28
  82. package/components/apps/editor/component/components.js +41 -27
  83. package/components/apps/editor/component/sets.js +2 -1
  84. package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
  85. package/components/apps/editor/componentsPanel/CssProperty.svelte +0 -26
  86. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +0 -2
  87. package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -0
  88. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +13 -10
  89. package/components/apps/editor/componentsPanel/quickStyleProperties.js +3 -0
  90. package/components/apps/editor/componentsPanel/store.js +4 -4
  91. package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -26
  92. package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +0 -1
  93. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +8 -6
  94. package/components/apps/editor/contextPanel/ContextPanel.svelte +7 -14
  95. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +2 -25
  96. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +29 -40
  97. package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +1 -2
  98. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -7
  99. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -1
  100. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +10 -11
  101. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +4 -3
  102. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  103. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +0 -1
  104. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
  105. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +2 -0
  106. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +22 -19
  107. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +22 -3
  108. package/components/apps/editor/settingsPanel/GridTab.svelte +1 -2
  109. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  110. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +4 -0
  111. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -0
  112. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +1 -2
  113. package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -2
  114. package/components/apps/editor/settingsPanel/TableActions.svelte +3 -3
  115. package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +5 -1
  116. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +3 -3
  117. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +3 -2
  118. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +4 -1
  119. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +2 -2
  120. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +1 -1
  121. package/components/apps/inputType.d.ts +2 -2
  122. package/components/apps/rx.d.ts +2 -2
  123. package/components/apps/svelte-grid/Grid.svelte +50 -34
  124. package/components/apps/svelte-grid/Grid.svelte.d.ts +14 -9
  125. package/components/apps/svelte-grid/MoveResize.svelte +76 -55
  126. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +15 -9
  127. package/components/apps/svelte-grid/utils/helper.d.ts +0 -1
  128. package/components/apps/svelte-grid/utils/helper.js +0 -3
  129. package/components/apps/types.d.ts +7 -4
  130. package/components/apps/utils.d.ts +2 -0
  131. package/components/apps/utils.js +33 -1
  132. package/components/flows/map/MapItem.svelte +3 -3
  133. package/components/propertyPicker/ObjectViewer.svelte +0 -3
  134. package/components/scriptEditor/LogPanel.svelte +3 -3
  135. package/infer.js +6 -1
  136. package/package.json +1 -2
  137. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +0 -25
  138. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +0 -16
@@ -27,6 +27,8 @@ import ItemPicker from '../../ItemPicker.svelte';
27
27
  import VariableEditor from '../../VariableEditor.svelte';
28
28
  import { SecondaryMenu } from './settingsPanel/secondaryMenu';
29
29
  import { Component, Paintbrush, Plus } from 'lucide-svelte';
30
+ import { findGridItem, findGridItemParentGrid } from './appUtils';
31
+ import { findItemsById } from '../svelte-grid/utils/matrix';
30
32
  export let app;
31
33
  export let path;
32
34
  export let initialMode = 'dnd';
@@ -62,7 +64,7 @@ setContext('AppViewerContext', {
62
64
  mode,
63
65
  connectingInput,
64
66
  breakpoint,
65
- runnableComponents,
67
+ runnableComponents: writable({}),
66
68
  appPath: path,
67
69
  workspace: $workspaceStore ?? '',
68
70
  onchange: () => saveDraft(),
@@ -77,13 +79,14 @@ setContext('AppViewerContext', {
77
79
  parentWidth: writable(0),
78
80
  state: writable({}),
79
81
  componentControl: writable({}),
80
- hoverStore: writable(undefined)
82
+ hoverStore: writable(undefined),
83
+ allIdsInPath: writable([])
81
84
  });
82
85
  setContext('AppEditorContext', {
83
86
  history,
84
87
  pickVariableCallback,
85
88
  ontextfocus: writable(undefined),
86
- movingcomponent: writable(undefined),
89
+ movingcomponents: writable(undefined),
87
90
  selectedComponentInEditor: writable(undefined)
88
91
  });
89
92
  let timeout = undefined;
@@ -110,11 +113,36 @@ function hashchange(e) {
110
113
  $: previewing = $mode === 'preview';
111
114
  $: width = $breakpoint === 'sm' ? 'min-w-[400px] max-w-[656px]' : 'min-w-[710px] w-full';
112
115
  let selectedTab = 'insert';
113
- $: if ($selectedComponent) {
116
+ let befSelected = undefined;
117
+ $: if ($selectedComponent?.[0] != befSelected) {
118
+ befSelected = $selectedComponent?.[0];
114
119
  selectedTab = 'settings';
115
- }
116
- else {
117
- selectedTab = 'insert';
120
+ if (befSelected) {
121
+ if (!['ctx', 'state'].includes(befSelected) && !befSelected?.startsWith('bg_')) {
122
+ let item = findGridItem($appStore, befSelected);
123
+ if (item?.data.type === 'containercomponent') {
124
+ $focusedGrid = {
125
+ parentComponentId: befSelected,
126
+ subGridIndex: 0
127
+ };
128
+ }
129
+ else {
130
+ let subgrid = findGridItemParentGrid($appStore, befSelected);
131
+ if (subgrid) {
132
+ try {
133
+ $focusedGrid = {
134
+ parentComponentId: subgrid.split('-')[0],
135
+ subGridIndex: parseInt(subgrid.split('-')[1])
136
+ };
137
+ }
138
+ catch { }
139
+ }
140
+ else {
141
+ $focusedGrid = undefined;
142
+ }
143
+ }
144
+ }
145
+ }
118
146
  }
119
147
  let itemPicker = undefined;
120
148
  $: if ($pickVariableCallback) {
@@ -185,7 +213,7 @@ let variableEditor = undefined;
185
213
  {#if $appStore.grid}
186
214
  <ComponentNavigation />
187
215
 
188
- <div on:pointerdown|stopPropagation class={width}>
216
+ <div on:pointerdown|stopPropagation class={twMerge(width, 'mx-auto')}>
189
217
  <GridEditor {policy} />
190
218
  </div>
191
219
 
@@ -208,7 +236,6 @@ let variableEditor = undefined;
208
236
  <Tab value="insert" size="xs">
209
237
  <div class="m-1 center-center gap-1">
210
238
  <Plus size={18} />
211
- <span>Insert</span>
212
239
  </div>
213
240
  </Tab>
214
241
  <Tab value="settings" size="xs">
@@ -220,7 +247,6 @@ let variableEditor = undefined;
220
247
  <Tab value="css" size="xs">
221
248
  <div class="m-1 center-center gap-1">
222
249
  <Paintbrush size={18} />
223
- <span>Styling</span>
224
250
  </div>
225
251
  </Tab>
226
252
  <div slot="content" class="h-full overflow-y-auto">
@@ -177,6 +177,11 @@ let lock = false;
177
177
  function onKeyDown(event) {
178
178
  if (lock)
179
179
  return;
180
+ let classes = event.target?.['className'];
181
+ if ((typeof classes === 'string' && classes.includes('inputarea')) ||
182
+ ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
183
+ return;
184
+ }
180
185
  lock = true;
181
186
  switch (event.key) {
182
187
  case 'Z':
@@ -10,6 +10,8 @@ import { Component } from './component';
10
10
  import { twMerge } from 'tailwind-merge';
11
11
  import { columnConfiguration } from '../gridUtils';
12
12
  import { HiddenComponent } from '../components';
13
+ import { deepEqual } from 'fast-equals';
14
+ import { dfs } from './appUtils';
13
15
  export let app;
14
16
  export let appPath;
15
17
  export let breakpoint;
@@ -28,7 +30,7 @@ const connectingInput = writable({
28
30
  input: undefined,
29
31
  hoveredComponent: undefined
30
32
  });
31
- const runnableComponents = writable({});
33
+ const allIdsInPath = writable([]);
32
34
  const parentWidth = writable(0);
33
35
  setContext('AppViewerContext', {
34
36
  worldStore: buildWorld(context),
@@ -38,7 +40,7 @@ setContext('AppViewerContext', {
38
40
  mode,
39
41
  connectingInput,
40
42
  breakpoint,
41
- runnableComponents,
43
+ runnableComponents: writable({}),
42
44
  appPath,
43
45
  workspace,
44
46
  onchange: undefined,
@@ -53,13 +55,21 @@ setContext('AppViewerContext', {
53
55
  parentWidth,
54
56
  state: writable({}),
55
57
  componentControl: writable({}),
56
- hoverStore: writable(undefined)
58
+ hoverStore: writable(undefined),
59
+ allIdsInPath
57
60
  });
58
61
  let ncontext = context;
59
62
  function hashchange(e) {
60
63
  ncontext.hash = e.newURL.split('#')[1];
61
64
  ncontext = ncontext;
62
65
  }
66
+ let previousSelectedIds = undefined;
67
+ $: if (!deepEqual(previousSelectedIds, $selectedComponent)) {
68
+ previousSelectedIds = $selectedComponent;
69
+ $allIdsInPath = ($selectedComponent ?? [])
70
+ .flatMap((id) => dfs(app.grid, id, app.subgrids ?? {}))
71
+ .filter((x) => x != undefined);
72
+ }
63
73
  $: width = $breakpoint === 'sm' ? 'max-w-[640px]' : 'w-full ';
64
74
  $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-none' : '';
65
75
  </script>
@@ -100,7 +110,7 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
100
110
  >
101
111
  <div>
102
112
  <GridViewer
103
- onTopId={$selectedComponent}
113
+ allIdsInPath={$allIdsInPath}
104
114
  items={app.grid}
105
115
  let:dataItem
106
116
  rowHeight={36}
@@ -110,7 +120,7 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
110
120
  <!-- svelte-ignore a11y-click-events-have-key-events -->
111
121
  <div
112
122
  class={'h-full w-full center-center'}
113
- on:pointerdown={() => ($selectedComponent = dataItem.id)}
123
+ on:pointerdown={() => ($selectedComponent = [dataItem.id])}
114
124
  >
115
125
  <Component render={true} component={dataItem.data} selected={false} locked={true} />
116
126
  </div>
@@ -141,6 +151,8 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
141
151
  inlineScript={script.inlineScript}
142
152
  name={script.name}
143
153
  fields={script.fields}
154
+ doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
155
+ recomputableByRefreshButton={script.autoRefresh ?? false}
144
156
  />
145
157
  {/if}
146
158
  {/each}
@@ -21,6 +21,7 @@ function openDebugRuns() {
21
21
 
22
22
  {#if selected || hover}
23
23
  <span
24
+ on:mousedown|stopPropagation|capture
24
25
  draggable="false"
25
26
  title={`Id: ${component.id}`}
26
27
  class={twMerge(
@@ -8,8 +8,8 @@ declare const __propDef: {
8
8
  hover?: boolean | undefined;
9
9
  };
10
10
  events: {
11
- pointerdown: PointerEvent;
12
11
  mousedown: MouseEvent;
12
+ pointerdown: PointerEvent;
13
13
  expand: CustomEvent<any>;
14
14
  lock: CustomEvent<any>;
15
15
  } & {
@@ -1,4 +1,4 @@
1
- <script>import { getContext, afterUpdate } from 'svelte';
1
+ <script>import { getContext } from 'svelte';
2
2
  import { classNames } from '../../../utils';
3
3
  import { columnConfiguration, isFixed, toggleFixed } from '../gridUtils';
4
4
  import { twMerge } from 'tailwind-merge';
@@ -6,12 +6,20 @@ import RecomputeAllComponents from './RecomputeAllComponents.svelte';
6
6
  import HiddenComponent from '../components/helpers/HiddenComponent.svelte';
7
7
  import Component from './component/Component.svelte';
8
8
  import { push } from '../../../history';
9
- import { expandGriditem, findGridItem } from './appUtils';
9
+ import { dfs, expandGriditem, findGridItem } from './appUtils';
10
10
  import Grid from '../svelte-grid/Grid.svelte';
11
- import Toggle from '../../Toggle.svelte';
11
+ import { selectId } from '../utils';
12
+ import { deepEqual } from 'fast-equals';
12
13
  export let policy;
13
- const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint } = getContext('AppViewerContext');
14
+ const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
14
15
  const { history } = getContext('AppEditorContext');
16
+ let previousSelectedIds = undefined;
17
+ $: if (!deepEqual(previousSelectedIds, $selectedComponent)) {
18
+ previousSelectedIds = $selectedComponent;
19
+ $allIdsInPath = ($selectedComponent ?? [])
20
+ .flatMap((id) => dfs($app.grid, id, $app.subgrids ?? {}))
21
+ .filter((x) => x != undefined);
22
+ }
15
23
  function removeGridElement(component) {
16
24
  if (component) {
17
25
  $app.grid = $app.grid.filter((gridComponent) => {
@@ -37,9 +45,9 @@ function removeGridElement(component) {
37
45
  $selectedComponent = undefined;
38
46
  }
39
47
  }
40
- function selectComponent(id) {
48
+ function selectComponent(e, id) {
41
49
  if (!$connectingInput.opened) {
42
- $selectedComponent = id;
50
+ selectId(e, id, selectedComponent, $app);
43
51
  if ($focusedGrid?.parentComponentId != id) {
44
52
  $focusedGrid = undefined;
45
53
  }
@@ -81,7 +89,8 @@ function selectComponent(id) {
81
89
  >
82
90
  <div class={!$focusedGrid && $mode !== 'preview' ? 'border-gray-400 border border-dashed' : ''}>
83
91
  <Grid
84
- onTopId={$selectedComponent}
92
+ allIdsInPath={$allIdsInPath}
93
+ selectedIds={$selectedComponent}
85
94
  items={$app.grid}
86
95
  on:redraw={(e) => {
87
96
  push(history, $app)
@@ -109,16 +118,16 @@ function selectComponent(id) {
109
118
  {/if}
110
119
  <!-- svelte-ignore a11y-click-events-have-key-events -->
111
120
  <div
112
- on:pointerdown={() => selectComponent(dataItem.id)}
121
+ on:pointerdown={(e) => selectComponent(e, dataItem.id)}
113
122
  class={classNames(
114
123
  'h-full w-full center-center',
115
- $selectedComponent === dataItem.id ? 'active-grid-item' : ''
124
+ Boolean($selectedComponent?.includes(dataItem.id)) ? 'active-grid-item' : ''
116
125
  )}
117
126
  >
118
127
  <Component
119
128
  render={true}
120
129
  component={dataItem.data}
121
- selected={$selectedComponent === dataItem.id}
130
+ selected={Boolean($selectedComponent?.includes(dataItem.id))}
122
131
  locked={isFixed(dataItem)}
123
132
  on:delete={() => removeGridElement(dataItem.data)}
124
133
  on:lock={() => {
@@ -130,7 +139,7 @@ function selectComponent(id) {
130
139
  }}
131
140
  on:expand={() => {
132
141
  push(history, $app)
133
- $selectedComponent = dataItem.id
142
+ $selectedComponent = [dataItem.id]
134
143
  expandGriditem($app.grid, dataItem.id, $breakpoint)
135
144
  $app = $app
136
145
  }}
@@ -149,7 +158,8 @@ function selectComponent(id) {
149
158
  inlineScript={script.inlineScript}
150
159
  name={script.name}
151
160
  fields={script.fields}
152
- doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged}
161
+ doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
162
+ recomputableByRefreshButton={script.autoRefresh ?? false}
153
163
  />
154
164
  {/if}
155
165
  {/each}
@@ -8,7 +8,7 @@ export let rowHeight;
8
8
  export let cols;
9
9
  export let gap = [10, 10];
10
10
  export let throttleUpdate = 100;
11
- export let onTopId = undefined;
11
+ export let allIdsInPath = undefined;
12
12
  export let containerWidth = undefined;
13
13
  export let parentWidth = undefined;
14
14
  let getComputedCols;
@@ -56,7 +56,7 @@ onMount(() => {
56
56
  <div class="svlt-grid-container" style="height: {containerHeight}px" bind:this={container}>
57
57
  {#if xPerPx}
58
58
  {#each items as item (item.id)}
59
- {@const onTop = item.id == onTopId}
59
+ {@const onTop = allIdsInPath?.includes(item.id)}
60
60
  {@const width =
61
61
  Math.min(getComputedCols, item[getComputedCols] && item[getComputedCols].w) * xPerPx -
62
62
  gapX * 2}
@@ -7,7 +7,7 @@ declare class __sveltets_Render<T> {
7
7
  cols: [number, number][];
8
8
  gap?: number[] | undefined;
9
9
  throttleUpdate?: number | undefined;
10
- onTopId?: string | undefined;
10
+ allIdsInPath?: string[] | undefined;
11
11
  containerWidth?: number | undefined;
12
12
  parentWidth?: number | undefined;
13
13
  };
@@ -13,7 +13,7 @@ $: !firstLoad &&
13
13
  $worldStore.initializedOutputs ==
14
14
  allItems($app.grid, $app.subgrids).length + $app.hiddenInlineScripts.length &&
15
15
  refresh();
16
- $: componentNumber = Object.keys($runnableComponents).length;
16
+ $: componentNumber = Object.values($runnableComponents).filter((x) => x.autoRefresh).length;
17
17
  function onClick(stopAfterClear = true) {
18
18
  if (timeout) {
19
19
  clearInterval(timeout);
@@ -39,13 +39,10 @@ function refresh() {
39
39
  }
40
40
  loading = true;
41
41
  Promise.all(Object.keys($runnableComponents).map((id) => {
42
- if (id.startsWith('bg_')) {
43
- let index = parseInt(id.split('_')[1]);
44
- if (!$app.hiddenInlineScripts[index]?.autoRefresh) {
45
- return;
46
- }
42
+ if (!$runnableComponents?.[id]?.autoRefresh) {
43
+ return;
47
44
  }
48
- return $runnableComponents?.[id]?.();
45
+ return $runnableComponents?.[id]?.cb?.();
49
46
  })).finally(() => {
50
47
  loading = false;
51
48
  });
@@ -74,6 +71,7 @@ onMount(() => {
74
71
 
75
72
  <div class="flex items-center">
76
73
  <Button
74
+ disabled={componentNumber == 0}
77
75
  on:click={() => onClick()}
78
76
  color={timeout ? 'blue' : 'light'}
79
77
  variant={timeout ? 'contained' : 'border'}
@@ -10,9 +10,9 @@ import BackgroundScriptTriggerList from './settingsPanel/triggerLists/Background
10
10
  const { selectedComponent, app, stateId } = getContext('AppViewerContext');
11
11
  $: hiddenInlineScript = $app?.hiddenInlineScripts
12
12
  ?.map((x, i) => ({ script: x, index: i }))
13
- .find(({ script, index }) => `bg_${index}` === $selectedComponent);
14
- $: componentSettings = findComponentSettings($app, $selectedComponent);
15
- $: tableActionSettings = findTableActionSettings($app, $selectedComponent);
13
+ .find(({ script, index }) => $selectedComponent?.includes(`bg_${index}`));
14
+ $: componentSettings = findComponentSettings($app, $selectedComponent?.[0]);
15
+ $: tableActionSettings = findTableActionSettings($app, $selectedComponent?.[0]);
16
16
  function findTableActionSettings(app, id) {
17
17
  return allItems(app.grid, app.subgrids)
18
18
  .map((x) => {
@@ -29,7 +29,7 @@ function findTableActionSettings(app, id) {
29
29
  }
30
30
  function findComponentSettings(app, id) {
31
31
  if (!id)
32
- return;
32
+ return undefined;
33
33
  if (app?.grid) {
34
34
  const gridItem = app.grid.find((x) => x.data?.id === id);
35
35
  if (gridItem) {
@@ -7,6 +7,7 @@ import { expandGriditem, findGridItem } from './appUtils';
7
7
  import { push } from '../../../history';
8
8
  import Grid from '../svelte-grid/Grid.svelte';
9
9
  import GridViewer from './GridViewer.svelte';
10
+ import { selectId } from '../utils';
10
11
  export let containerHeight = undefined;
11
12
  export let containerWidth = undefined;
12
13
  let classes = '';
@@ -19,16 +20,15 @@ export let visible = true;
19
20
  export let id;
20
21
  export let shouldHighlight = true;
21
22
  const dispatch = createEventDispatcher();
22
- const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint } = getContext('AppViewerContext');
23
+ const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
23
24
  const editorContext = getContext('AppEditorContext');
24
25
  $: highlight = id === $focusedGrid?.parentComponentId && shouldHighlight;
25
26
  const onpointerdown = (e) => {
26
27
  dispatch('focus');
27
28
  };
28
- function selectComponent(id) {
29
+ function selectComponent(e, id) {
29
30
  if (!$connectingInput.opened) {
30
- dispatch('focus');
31
- $selectedComponent = id;
31
+ selectId(e, id, selectedComponent, $app);
32
32
  }
33
33
  }
34
34
  function lock(dataItem) {
@@ -60,6 +60,7 @@ let container = undefined;
60
60
  {#if $mode !== 'preview'}
61
61
  <div class={highlight ? 'border-gray-400 border border-dashed min-h-full' : ''}>
62
62
  <Grid
63
+ allIdsInPath={$allIdsInPath}
63
64
  items={$app.subgrids?.[subGridId] ?? []}
64
65
  on:redraw={(e) => {
65
66
  push(editorContext?.history, $app)
@@ -67,7 +68,7 @@ let container = undefined;
67
68
  $app.subgrids[subGridId] = e.detail
68
69
  }
69
70
  }}
70
- onTopId={$selectedComponent}
71
+ selectedIds={$selectedComponent}
71
72
  let:dataItem
72
73
  rowHeight={36}
73
74
  cols={columnConfiguration}
@@ -94,17 +95,17 @@ let container = undefined;
94
95
 
95
96
  <!-- svelte-ignore a11y-click-events-have-key-events -->
96
97
  <div
97
- on:pointerdown={() => selectComponent(dataItem.id)}
98
+ on:pointerdown={(e) => selectComponent(e, dataItem.id)}
98
99
  class={classNames(
99
100
  'h-full w-full center-center',
100
- $selectedComponent === dataItem.id ? 'active-grid-item' : '',
101
+ $selectedComponent?.includes(dataItem.id) ? 'active-grid-item' : '',
101
102
  'top-0'
102
103
  )}
103
104
  >
104
105
  <Component
105
106
  render={visible}
106
107
  component={dataItem.data}
107
- selected={$selectedComponent === dataItem.id}
108
+ selected={Boolean($selectedComponent?.includes(dataItem.id))}
108
109
  locked={isFixed(dataItem)}
109
110
  on:lock={() => lock(dataItem)}
110
111
  on:expand={() => {
@@ -113,7 +114,7 @@ let container = undefined;
113
114
  if (!parentGridItem) {
114
115
  return
115
116
  }
116
- $selectedComponent = dataItem.id
117
+ $selectedComponent = [dataItem.id]
117
118
  push(editorContext?.history, $app)
118
119
 
119
120
  expandGriditem(
@@ -130,7 +131,7 @@ let container = undefined;
130
131
  </div>
131
132
  {:else}
132
133
  <GridViewer
133
- onTopId={$selectedComponent}
134
+ allIdsInPath={$allIdsInPath}
134
135
  items={$app.subgrids?.[subGridId] ?? []}
135
136
  let:dataItem
136
137
  rowHeight={36}
@@ -141,13 +142,13 @@ let container = undefined;
141
142
  >
142
143
  <!-- svelte-ignore a11y-click-events-have-key-events -->
143
144
  <div
144
- on:pointerdown={() => selectComponent(dataItem.id)}
145
+ on:pointerdown|stopPropagation={(e) => selectComponent(e, dataItem.id)}
145
146
  class={classNames('h-full w-full center-center', 'top-0')}
146
147
  >
147
148
  <Component
148
149
  render={visible}
149
150
  component={dataItem.data}
150
- selected={$selectedComponent === dataItem.id}
151
+ selected={Boolean($selectedComponent?.includes(dataItem.id))}
151
152
  locked={isFixed(dataItem)}
152
153
  />
153
154
  </div>
@@ -3,6 +3,7 @@ import { components, type AppComponent, type BaseComponent } from './component';
3
3
  import type { Output, World } from '../rx';
4
4
  import type { FilledItem } from '../svelte-grid/types';
5
5
  import type { EvalAppInput, StaticAppInput } from '../inputType';
6
+ export declare function dfs(grid: GridItem[], id: string, subgrids: Record<string, GridItem[]>): string[] | undefined;
6
7
  export declare function findGridItemParentGrid(app: App, id: string): string | undefined;
7
8
  export declare function allsubIds(app: App, parentId: string): string[];
8
9
  export declare function findGridItem(app: App, id: string): GridItem | undefined;
@@ -3,6 +3,25 @@ import { ccomponents, components, getRecommendedDimensionsByComponent } from './
3
3
  import { gridColumns } from '../gridUtils';
4
4
  import { allItems } from '../utils';
5
5
  import gridHelp from '../svelte-grid/utils/helper';
6
+ export function dfs(grid, id, subgrids) {
7
+ for (const item of grid) {
8
+ if (item.id === id) {
9
+ return [id];
10
+ }
11
+ else if (item.data.type == 'tablecomponent' && item.data.actionButtons.find((x) => x.id)) {
12
+ return [item.id, id];
13
+ }
14
+ else {
15
+ for (let i = 0; i < (item.data.numberOfSubgrids ?? 0); i++) {
16
+ const res = dfs(subgrids[`${item.id}-${i}`], id, subgrids);
17
+ if (res) {
18
+ return [item.id, ...res];
19
+ }
20
+ }
21
+ }
22
+ }
23
+ return undefined;
24
+ }
6
25
  function findGridItemById(root, subGrids, id) {
7
26
  for (const gridItem of allItems(root, subGrids)) {
8
27
  if (gridItem.id === id) {
@@ -1,8 +1,6 @@
1
1
  <script>import { getContext } from 'svelte';
2
- import { Loader2 } from 'lucide-svelte';
3
2
  import { twMerge } from 'tailwind-merge';
4
3
  import ComponentHeader from '../ComponentHeader.svelte';
5
- import { ccomponents, components } from './components';
6
4
  import { AppBarChart, AppDisplayComponent, AppTable, AppText, AppButton, AppPieChart, AppSelect, AppCheckbox, AppTextInput, AppNumberInput, AppDateInput, AppForm, AppScatterChart, AppTimeseries, AppHtml, AppSliderInputs, AppFormButton, VegaLiteHtml, PlotlyHtml, AppRangeInput, AppTabs, AppIcon, AppCurrencyInput, AppDivider, AppFileInput, AppImage, AppContainer, AppAggridTable, AppDrawer, AppMap, AppSplitpanes, AppPdf } from '../../components';
7
5
  import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
8
6
  export let component;
@@ -11,8 +9,9 @@ export let locked = false;
11
9
  export let render;
12
10
  const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
13
11
  const editorContext = getContext('AppEditorContext');
14
- const movingcomponent = editorContext?.movingcomponent;
15
- $: ismoving = movingcomponent != undefined && $mode == 'dnd' && $movingcomponent === component.id;
12
+ const movingcomponents = editorContext?.movingcomponents;
13
+ $: ismoving =
14
+ movingcomponents != undefined && $mode == 'dnd' && $movingcomponents?.includes(component.id);
16
15
  let initializing = undefined;
17
16
  let componentContainerHeight = 0;
18
17
  $: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
@@ -50,9 +49,11 @@ $: hasError = componentWithErrors.includes(component.id);
50
49
  <button
51
50
  class="border p-0.5 text-xs"
52
51
  on:click={() => {
53
- $movingcomponent = undefined
54
- }}>Cancel move</button
52
+ $movingcomponents = undefined
53
+ }}
55
54
  >
55
+ Cancel move
56
+ </button>
56
57
  </div>
57
58
  {/if}
58
59
  <div
@@ -60,7 +61,6 @@ $: hasError = componentWithErrors.includes(component.id);
60
61
  'h-full bg-white/40 outline-1',
61
62
  $hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
62
63
  selected && $mode !== 'preview' ? 'outline outline-indigo-600' : '',
63
- ccomponents[component.type].softWrap || hasError ? '' : 'overflow-auto',
64
64
  $mode != 'preview' ? 'cursor-pointer' : '',
65
65
  'relative z-auto',
66
66
  $app.css?.['app']?.['component']?.class,
@@ -114,6 +114,7 @@ $: hasError = componentWithErrors.includes(component.id);
114
114
  {:else if component.type === 'plotlycomponent'}
115
115
  <PlotlyHtml
116
116
  id={component.id}
117
+ configuration={component.configuration}
117
118
  bind:initializing
118
119
  componentInput={component.componentInput}
119
120
  {render}
@@ -143,7 +144,7 @@ $: hasError = componentWithErrors.includes(component.id);
143
144
  customCss={component.customCss}
144
145
  bind:initializing
145
146
  componentInput={component.componentInput}
146
- bind:actionButtons={component.actionButtons}
147
+ actionButtons={component.actionButtons}
147
148
  {render}
148
149
  />
149
150
  {:else if component.type === 'aggridcomponent'}
@@ -233,6 +234,16 @@ $: hasError = componentWithErrors.includes(component.id);
233
234
  customCss={component.customCss}
234
235
  {render}
235
236
  />
237
+ {:else if component.type === 'textareainputcomponent'}
238
+ <AppTextInput
239
+ id={component.id}
240
+ verticalAlignment={component.verticalAlignment}
241
+ configuration={component.configuration}
242
+ customCss={component.customCss}
243
+ inputType="textarea"
244
+ appCssKey="textareainputcomponent"
245
+ {render}
246
+ />
236
247
  {:else if component.type === 'emailinputcomponent'}
237
248
  <AppTextInput
238
249
  verticalAlignment={component.verticalAlignment}
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import { type AppComponent } from './components';
2
+ import type { AppComponent } from './components';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  component: AppComponent;