windmill-components 1.82.4 → 1.82.6

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 (169) hide show
  1. package/common.d.ts +2 -2
  2. package/components/ArgInput.svelte +72 -52
  3. package/components/ArgInput.svelte.d.ts +3 -1
  4. package/components/DisplayResult.svelte +17 -17
  5. package/components/Editor.svelte +3 -0
  6. package/components/Editor.svelte.d.ts +1 -0
  7. package/components/FieldHeader.svelte +1 -0
  8. package/components/FieldHeader.svelte.d.ts +4 -0
  9. package/components/FlowBuilder.svelte +0 -6
  10. package/components/FlowStatusViewer.svelte +4 -7
  11. package/components/FlowStatusViewer.svelte.d.ts +0 -1
  12. package/components/FlowViewer.svelte +1 -0
  13. package/components/InputTransformForm.svelte +1 -0
  14. package/components/LightweightArgInput.svelte +14 -1
  15. package/components/LightweightArgInput.svelte.d.ts +3 -1
  16. package/components/Multiselect.svelte.d.ts +2 -2
  17. package/components/SimpleEditor.svelte +1 -0
  18. package/components/SimpleEditor.svelte.d.ts +1 -0
  19. package/components/TemplateEditor.svelte +1 -0
  20. package/components/Toggle.svelte +1 -1
  21. package/components/Toggle.svelte.d.ts +1 -0
  22. package/components/apps/components/buttons/AppButton.svelte +17 -3
  23. package/components/apps/components/buttons/AppForm.svelte +10 -2
  24. package/components/apps/components/buttons/AppFormButton.svelte +82 -58
  25. package/components/apps/components/display/AppDisplayComponent.svelte +17 -23
  26. package/components/apps/components/display/AppHtml.svelte +1 -7
  27. package/components/apps/components/display/AppHtml.svelte.d.ts +0 -2
  28. package/components/apps/components/display/AppMap.svelte +1 -1
  29. package/components/apps/components/display/AppPdf.svelte +1 -1
  30. package/components/apps/components/display/PlotlyHtml.svelte +3 -20
  31. package/components/apps/components/display/PlotlyHtml.svelte.d.ts +0 -2
  32. package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  33. package/components/apps/components/display/table/AppTable.svelte +49 -75
  34. package/components/apps/components/display/table/AppTable.svelte.d.ts +1 -1
  35. package/components/apps/components/display/table/AppTableFooter.svelte +1 -2
  36. package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +0 -1
  37. package/components/apps/components/display/table/tableOptions.js +1 -1
  38. package/components/apps/components/helpers/DebouncedInput.svelte +0 -1
  39. package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +0 -2
  40. package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
  41. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -2
  42. package/components/apps/components/helpers/InputValue.svelte +3 -3
  43. package/components/apps/components/helpers/RefreshButton.svelte +10 -3
  44. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +0 -1
  45. package/components/apps/components/helpers/RunnableComponent.svelte +15 -19
  46. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -2
  47. package/components/apps/components/helpers/RunnableWrapper.svelte +1 -3
  48. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +0 -1
  49. package/components/apps/components/helpers/eval.d.ts +2 -4
  50. package/components/apps/components/helpers/eval.js +4 -6
  51. package/components/apps/components/inputs/AppCheckbox.svelte +4 -0
  52. package/components/apps/components/inputs/AppDateInput.svelte +2 -2
  53. package/components/apps/components/inputs/AppMultiSelect.svelte +5 -13
  54. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +2 -0
  55. package/components/apps/components/inputs/AppNumberInput.svelte +3 -3
  56. package/components/apps/components/inputs/AppSelect.svelte +4 -11
  57. package/components/apps/components/inputs/AppSelect.svelte.d.ts +2 -0
  58. package/components/apps/components/inputs/AppSliderInputs.svelte +1 -1
  59. package/components/apps/components/inputs/AppTextInput.svelte +43 -53
  60. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +1 -1
  61. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +1 -1
  62. package/components/apps/components/layout/AppContainer.svelte +2 -2
  63. package/components/apps/components/layout/AppDrawer.svelte +2 -1
  64. package/components/apps/components/layout/AppSplitpanes.svelte +3 -3
  65. package/components/apps/components/layout/AppTabs.svelte +1 -1
  66. package/components/apps/editor/AppEditor.svelte +21 -49
  67. package/components/apps/editor/AppEditorHeader.svelte +0 -5
  68. package/components/apps/editor/AppPreview.svelte +7 -18
  69. package/components/apps/editor/ComponentHeader.svelte +0 -1
  70. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -1
  71. package/components/apps/editor/GridEditor.svelte +12 -22
  72. package/components/apps/editor/GridViewer.svelte +2 -2
  73. package/components/apps/editor/GridViewer.svelte.d.ts +1 -1
  74. package/components/apps/editor/RecomputeAllComponents.svelte +7 -5
  75. package/components/apps/editor/SettingsPanel.svelte +4 -4
  76. package/components/apps/editor/SubGridEditor.svelte +12 -13
  77. package/components/apps/editor/appUtils.d.ts +0 -1
  78. package/components/apps/editor/appUtils.js +0 -19
  79. package/components/apps/editor/component/Component.svelte +8 -19
  80. package/components/apps/editor/component/Component.svelte.d.ts +1 -1
  81. package/components/apps/editor/component/ComponentNavigation.svelte +47 -57
  82. package/components/apps/editor/component/README.md +0 -4
  83. package/components/apps/editor/component/components.d.ts +28 -45
  84. package/components/apps/editor/component/components.js +27 -41
  85. package/components/apps/editor/component/sets.js +1 -2
  86. package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
  87. package/components/apps/editor/componentsPanel/CssProperty.svelte +48 -62
  88. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +2 -3
  89. package/components/apps/editor/componentsPanel/CssSettings.svelte +0 -1
  90. package/components/apps/editor/componentsPanel/store.js +4 -4
  91. package/components/apps/editor/contextPanel/ComponentOutput.svelte +26 -2
  92. package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +1 -0
  93. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +6 -8
  94. package/components/apps/editor/contextPanel/ContextPanel.svelte +14 -7
  95. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +25 -2
  96. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +25 -0
  97. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +16 -0
  98. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +40 -29
  99. package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +2 -1
  100. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +7 -2
  101. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -1
  102. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +11 -10
  103. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +3 -4
  104. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +0 -1
  105. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +1 -0
  106. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
  107. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +0 -2
  108. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +19 -22
  109. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +13 -42
  110. package/components/apps/editor/settingsPanel/GridTab.svelte +2 -1
  111. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -2
  112. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +0 -4
  113. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +0 -1
  114. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +2 -1
  115. package/components/apps/editor/settingsPanel/TableActions.svelte +3 -3
  116. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +12 -12
  117. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +2 -3
  118. package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +1 -5
  119. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +3 -3
  120. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +2 -3
  121. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +1 -4
  122. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +3 -3
  123. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +1 -1
  124. package/components/apps/inputType.d.ts +2 -2
  125. package/components/apps/rx.d.ts +2 -2
  126. package/components/apps/svelte-grid/Grid.svelte +34 -50
  127. package/components/apps/svelte-grid/Grid.svelte.d.ts +9 -14
  128. package/components/apps/svelte-grid/MoveResize.svelte +55 -76
  129. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +9 -15
  130. package/components/apps/svelte-grid/utils/helper.d.ts +1 -0
  131. package/components/apps/svelte-grid/utils/helper.js +3 -0
  132. package/components/apps/types.d.ts +5 -9
  133. package/components/apps/utils.d.ts +0 -2
  134. package/components/apps/utils.js +1 -33
  135. package/components/common/button/ButtonPopup.svelte +2 -5
  136. package/components/common/button/ButtonPopup.svelte.d.ts +1 -5
  137. package/components/common/button/ButtonPopupItem.svelte +1 -2
  138. package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -1
  139. package/components/common/index.d.ts +0 -1
  140. package/components/common/index.js +0 -1
  141. package/components/common/kbd/Kbd.svelte +1 -4
  142. package/components/common/kbd/Kbd.svelte.d.ts +14 -6
  143. package/components/common/menu/Menu.svelte +2 -8
  144. package/components/common/menu/Menu.svelte.d.ts +1 -4
  145. package/components/flows/map/MapItem.svelte +3 -3
  146. package/components/propertyPicker/ObjectViewer.svelte +3 -0
  147. package/components/scriptEditor/LogPanel.svelte +3 -3
  148. package/infer.js +1 -6
  149. package/package.json +2 -11
  150. package/utils.d.ts +0 -1
  151. package/utils.js +0 -3
  152. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +0 -170
  153. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte.d.ts +0 -18
  154. package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte +0 -130
  155. package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte.d.ts +0 -21
  156. package/components/apps/editor/componentsPanel/quickStyleProperties.d.ts +0 -535
  157. package/components/apps/editor/componentsPanel/quickStyleProperties.js +0 -598
  158. package/components/apps/editor/settingsPanel/StylePanel.svelte +0 -61
  159. package/components/apps/editor/settingsPanel/StylePanel.svelte.d.ts +0 -17
  160. package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +0 -47
  161. package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte.d.ts +0 -14
  162. package/components/apps/editor/settingsPanel/secondaryMenu/index.d.ts +0 -2
  163. package/components/apps/editor/settingsPanel/secondaryMenu/index.js +0 -2
  164. package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.d.ts +0 -12
  165. package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.js +0 -10
  166. package/components/common/clearableInput/ClearableInput.svelte +0 -56
  167. package/components/common/clearableInput/ClearableInput.svelte.d.ts +0 -28
  168. package/components/common/modal/AlwaysMountedModal.svelte +0 -109
  169. package/components/common/modal/AlwaysMountedModal.svelte.d.ts +0 -22
@@ -1,4 +1,4 @@
1
- <script>import { getContext } from 'svelte';
1
+ <script>import { getContext, afterUpdate } from 'svelte';
2
2
  import { classNames } from '../../../utils';
3
3
  import { columnConfiguration, isFixed, toggleFixed } from '../gridUtils';
4
4
  import { twMerge } from 'tailwind-merge';
@@ -6,20 +6,12 @@ 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 { dfs, expandGriditem, findGridItem } from './appUtils';
9
+ import { expandGriditem, findGridItem } from './appUtils';
10
10
  import Grid from '../svelte-grid/Grid.svelte';
11
- import { selectId } from '../utils';
12
- import { deepEqual } from 'fast-equals';
11
+ import Toggle from '../../Toggle.svelte';
13
12
  export let policy;
14
- const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
13
+ const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint } = getContext('AppViewerContext');
15
14
  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
- }
23
15
  function removeGridElement(component) {
24
16
  if (component) {
25
17
  $app.grid = $app.grid.filter((gridComponent) => {
@@ -45,9 +37,9 @@ function removeGridElement(component) {
45
37
  $selectedComponent = undefined;
46
38
  }
47
39
  }
48
- function selectComponent(e, id) {
40
+ function selectComponent(id) {
49
41
  if (!$connectingInput.opened) {
50
- selectId(e, id, selectedComponent, $app);
42
+ $selectedComponent = id;
51
43
  if ($focusedGrid?.parentComponentId != id) {
52
44
  $focusedGrid = undefined;
53
45
  }
@@ -89,8 +81,7 @@ function selectComponent(e, id) {
89
81
  >
90
82
  <div class={!$focusedGrid && $mode !== 'preview' ? 'border-gray-400 border border-dashed' : ''}>
91
83
  <Grid
92
- allIdsInPath={$allIdsInPath}
93
- selectedIds={$selectedComponent}
84
+ onTopId={$selectedComponent}
94
85
  items={$app.grid}
95
86
  on:redraw={(e) => {
96
87
  push(history, $app)
@@ -118,16 +109,16 @@ function selectComponent(e, id) {
118
109
  {/if}
119
110
  <!-- svelte-ignore a11y-click-events-have-key-events -->
120
111
  <div
121
- on:pointerdown={(e) => selectComponent(e, dataItem.id)}
112
+ on:pointerdown={() => selectComponent(dataItem.id)}
122
113
  class={classNames(
123
114
  'h-full w-full center-center',
124
- Boolean($selectedComponent?.includes(dataItem.id)) ? 'active-grid-item' : ''
115
+ $selectedComponent === dataItem.id ? 'active-grid-item' : ''
125
116
  )}
126
117
  >
127
118
  <Component
128
119
  render={true}
129
120
  component={dataItem.data}
130
- selected={Boolean($selectedComponent?.includes(dataItem.id))}
121
+ selected={$selectedComponent === dataItem.id}
131
122
  locked={isFixed(dataItem)}
132
123
  on:delete={() => removeGridElement(dataItem.data)}
133
124
  on:lock={() => {
@@ -139,7 +130,7 @@ function selectComponent(e, id) {
139
130
  }}
140
131
  on:expand={() => {
141
132
  push(history, $app)
142
- $selectedComponent = [dataItem.id]
133
+ $selectedComponent = dataItem.id
143
134
  expandGriditem($app.grid, dataItem.id, $breakpoint)
144
135
  $app = $app
145
136
  }}
@@ -158,8 +149,7 @@ function selectComponent(e, id) {
158
149
  inlineScript={script.inlineScript}
159
150
  name={script.name}
160
151
  fields={script.fields}
161
- doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
162
- recomputableByRefreshButton={script.autoRefresh ?? false}
152
+ doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged}
163
153
  />
164
154
  {/if}
165
155
  {/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 allIdsInPath = undefined;
11
+ export let onTopId = 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 = allIdsInPath?.includes(item.id)}
59
+ {@const onTop = item.id == onTopId}
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
- allIdsInPath?: string[] | undefined;
10
+ onTopId?: 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.values($runnableComponents).filter((x) => x.autoRefresh).length;
16
+ $: componentNumber = Object.keys($runnableComponents).length;
17
17
  function onClick(stopAfterClear = true) {
18
18
  if (timeout) {
19
19
  clearInterval(timeout);
@@ -39,10 +39,13 @@ function refresh() {
39
39
  }
40
40
  loading = true;
41
41
  Promise.all(Object.keys($runnableComponents).map((id) => {
42
- if (!$runnableComponents?.[id]?.autoRefresh) {
43
- return;
42
+ if (id.startsWith('bg_')) {
43
+ let index = parseInt(id.split('_')[1]);
44
+ if (!$app.hiddenInlineScripts[index]?.autoRefresh) {
45
+ return;
46
+ }
44
47
  }
45
- return $runnableComponents?.[id]?.cb?.();
48
+ return $runnableComponents?.[id]?.();
46
49
  })).finally(() => {
47
50
  loading = false;
48
51
  });
@@ -71,7 +74,6 @@ onMount(() => {
71
74
 
72
75
  <div class="flex items-center">
73
76
  <Button
74
- disabled={componentNumber == 0}
75
77
  on:click={() => onClick()}
76
78
  color={timeout ? 'blue' : 'light'}
77
79
  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 }) => $selectedComponent?.includes(`bg_${index}`));
14
- $: componentSettings = findComponentSettings($app, $selectedComponent?.[0]);
15
- $: tableActionSettings = findTableActionSettings($app, $selectedComponent?.[0]);
13
+ .find(({ script, index }) => `bg_${index}` === $selectedComponent);
14
+ $: componentSettings = findComponentSettings($app, $selectedComponent);
15
+ $: tableActionSettings = findTableActionSettings($app, $selectedComponent);
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 undefined;
32
+ return;
33
33
  if (app?.grid) {
34
34
  const gridItem = app.grid.find((x) => x.data?.id === id);
35
35
  if (gridItem) {
@@ -7,7 +7,6 @@ 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';
11
10
  export let containerHeight = undefined;
12
11
  export let containerWidth = undefined;
13
12
  let classes = '';
@@ -20,15 +19,16 @@ export let visible = true;
20
19
  export let id;
21
20
  export let shouldHighlight = true;
22
21
  const dispatch = createEventDispatcher();
23
- const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
22
+ const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint } = getContext('AppViewerContext');
24
23
  const editorContext = getContext('AppEditorContext');
25
24
  $: highlight = id === $focusedGrid?.parentComponentId && shouldHighlight;
26
25
  const onpointerdown = (e) => {
27
26
  dispatch('focus');
28
27
  };
29
- function selectComponent(e, id) {
28
+ function selectComponent(id) {
30
29
  if (!$connectingInput.opened) {
31
- selectId(e, id, selectedComponent, $app);
30
+ dispatch('focus');
31
+ $selectedComponent = id;
32
32
  }
33
33
  }
34
34
  function lock(dataItem) {
@@ -60,7 +60,6 @@ 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}
64
63
  items={$app.subgrids?.[subGridId] ?? []}
65
64
  on:redraw={(e) => {
66
65
  push(editorContext?.history, $app)
@@ -68,7 +67,7 @@ let container = undefined;
68
67
  $app.subgrids[subGridId] = e.detail
69
68
  }
70
69
  }}
71
- selectedIds={$selectedComponent}
70
+ onTopId={$selectedComponent}
72
71
  let:dataItem
73
72
  rowHeight={36}
74
73
  cols={columnConfiguration}
@@ -95,17 +94,17 @@ let container = undefined;
95
94
 
96
95
  <!-- svelte-ignore a11y-click-events-have-key-events -->
97
96
  <div
98
- on:pointerdown={(e) => selectComponent(e, dataItem.id)}
97
+ on:pointerdown={() => selectComponent(dataItem.id)}
99
98
  class={classNames(
100
99
  'h-full w-full center-center',
101
- $selectedComponent?.includes(dataItem.id) ? 'active-grid-item' : '',
100
+ $selectedComponent === dataItem.id ? 'active-grid-item' : '',
102
101
  'top-0'
103
102
  )}
104
103
  >
105
104
  <Component
106
105
  render={visible}
107
106
  component={dataItem.data}
108
- selected={Boolean($selectedComponent?.includes(dataItem.id))}
107
+ selected={$selectedComponent === dataItem.id}
109
108
  locked={isFixed(dataItem)}
110
109
  on:lock={() => lock(dataItem)}
111
110
  on:expand={() => {
@@ -114,7 +113,7 @@ let container = undefined;
114
113
  if (!parentGridItem) {
115
114
  return
116
115
  }
117
- $selectedComponent = [dataItem.id]
116
+ $selectedComponent = dataItem.id
118
117
  push(editorContext?.history, $app)
119
118
 
120
119
  expandGriditem(
@@ -131,7 +130,7 @@ let container = undefined;
131
130
  </div>
132
131
  {:else}
133
132
  <GridViewer
134
- allIdsInPath={$allIdsInPath}
133
+ onTopId={$selectedComponent}
135
134
  items={$app.subgrids?.[subGridId] ?? []}
136
135
  let:dataItem
137
136
  rowHeight={36}
@@ -142,13 +141,13 @@ let container = undefined;
142
141
  >
143
142
  <!-- svelte-ignore a11y-click-events-have-key-events -->
144
143
  <div
145
- on:pointerdown|stopPropagation={(e) => selectComponent(e, dataItem.id)}
144
+ on:pointerdown={() => selectComponent(dataItem.id)}
146
145
  class={classNames('h-full w-full center-center', 'top-0')}
147
146
  >
148
147
  <Component
149
148
  render={visible}
150
149
  component={dataItem.data}
151
- selected={Boolean($selectedComponent?.includes(dataItem.id))}
150
+ selected={$selectedComponent === dataItem.id}
152
151
  locked={isFixed(dataItem)}
153
152
  />
154
153
  </div>
@@ -3,7 +3,6 @@ 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;
7
6
  export declare function findGridItemParentGrid(app: App, id: string): string | undefined;
8
7
  export declare function allsubIds(app: App, parentId: string): string[];
9
8
  export declare function findGridItem(app: App, id: string): GridItem | undefined;
@@ -3,25 +3,6 @@ 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
- }
25
6
  function findGridItemById(root, subGrids, id) {
26
7
  for (const gridItem of allItems(root, subGrids)) {
27
8
  if (gridItem.id === id) {
@@ -1,6 +1,8 @@
1
1
  <script>import { getContext } from 'svelte';
2
+ import { Loader2 } from 'lucide-svelte';
2
3
  import { twMerge } from 'tailwind-merge';
3
4
  import ComponentHeader from '../ComponentHeader.svelte';
5
+ import { ccomponents, components } from './components';
4
6
  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';
5
7
  import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
6
8
  export let component;
@@ -9,9 +11,8 @@ export let locked = false;
9
11
  export let render;
10
12
  const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
11
13
  const editorContext = getContext('AppEditorContext');
12
- const movingcomponents = editorContext?.movingcomponents;
13
- $: ismoving =
14
- movingcomponents != undefined && $mode == 'dnd' && $movingcomponents?.includes(component.id);
14
+ const movingcomponent = editorContext?.movingcomponent;
15
+ $: ismoving = movingcomponent != undefined && $mode == 'dnd' && $movingcomponent === component.id;
15
16
  let initializing = undefined;
16
17
  let componentContainerHeight = 0;
17
18
  $: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
@@ -49,11 +50,9 @@ $: hasError = componentWithErrors.includes(component.id);
49
50
  <button
50
51
  class="border p-0.5 text-xs"
51
52
  on:click={() => {
52
- $movingcomponents = undefined
53
- }}
53
+ $movingcomponent = undefined
54
+ }}>Cancel move</button
54
55
  >
55
- Cancel move
56
- </button>
57
56
  </div>
58
57
  {/if}
59
58
  <div
@@ -61,6 +60,7 @@ $: hasError = componentWithErrors.includes(component.id);
61
60
  'h-full bg-white/40 outline-1',
62
61
  $hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
63
62
  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,7 +114,6 @@ $: hasError = componentWithErrors.includes(component.id);
114
114
  {:else if component.type === 'plotlycomponent'}
115
115
  <PlotlyHtml
116
116
  id={component.id}
117
- configuration={component.configuration}
118
117
  bind:initializing
119
118
  componentInput={component.componentInput}
120
119
  {render}
@@ -144,7 +143,7 @@ $: hasError = componentWithErrors.includes(component.id);
144
143
  customCss={component.customCss}
145
144
  bind:initializing
146
145
  componentInput={component.componentInput}
147
- actionButtons={component.actionButtons}
146
+ bind:actionButtons={component.actionButtons}
148
147
  {render}
149
148
  />
150
149
  {:else if component.type === 'aggridcomponent'}
@@ -234,16 +233,6 @@ $: hasError = componentWithErrors.includes(component.id);
234
233
  customCss={component.customCss}
235
234
  {render}
236
235
  />
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
- />
247
236
  {:else if component.type === 'emailinputcomponent'}
248
237
  <AppTextInput
249
238
  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;
@@ -4,9 +4,9 @@ import { push } from '../../../../history';
4
4
  import { sendUserToast } from '../../../../utils';
5
5
  import { gridColumns } from '../../gridUtils';
6
6
  const { app, selectedComponent, worldStore, focusedGrid, componentControl } = getContext('AppViewerContext');
7
- const { history, movingcomponents } = getContext('AppEditorContext');
8
- let tempGridItems = undefined;
9
- let copiedGridItems = undefined;
7
+ const { history, movingcomponent } = getContext('AppEditorContext');
8
+ let tempGridItem = undefined;
9
+ let copiedGridItem = undefined;
10
10
  function getSortedGridItemsOfChildren() {
11
11
  if (!$focusedGrid) {
12
12
  return $app.grid;
@@ -17,48 +17,48 @@ function getSortedGridItemsOfChildren() {
17
17
  return $app.subgrids[`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`] ?? [];
18
18
  }
19
19
  function getGridItems() {
20
- if ($app.grid.find((item) => item.id === $selectedComponent?.[0])) {
20
+ if ($app.grid.find((item) => item.id === $selectedComponent)) {
21
21
  return $app.grid;
22
22
  }
23
23
  if (!$app.subgrids) {
24
24
  return [];
25
25
  }
26
- return (Object.values($app.subgrids ?? {}).find((grid) => grid.find((item) => item.id === $selectedComponent?.[0])) ?? []);
26
+ return (Object.values($app.subgrids ?? {}).find((grid) => grid.find((item) => item.id === $selectedComponent)) ?? []);
27
27
  }
28
28
  function left(event) {
29
- if (!$componentControl[$selectedComponent?.[0] ?? '']?.left?.()) {
29
+ if (!$componentControl[$selectedComponent]?.left?.()) {
30
30
  const sortedGridItems = getGridItems();
31
- const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent?.[0] ?? '');
31
+ const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
32
32
  if (currentIndex !== -1 && currentIndex > 0) {
33
33
  const left = sortedGridItems[currentIndex - 1];
34
34
  if (left.data.type === 'tablecomponent' && left.data.actionButtons.length >= 1) {
35
- $selectedComponent = [left.data.actionButtons[left.data.actionButtons.length - 1].id];
35
+ $selectedComponent = left.data.actionButtons[left.data.actionButtons.length - 1].id;
36
36
  }
37
37
  else {
38
- $selectedComponent = [left.id];
38
+ $selectedComponent = left.id;
39
39
  }
40
40
  }
41
41
  }
42
42
  event.preventDefault();
43
43
  }
44
44
  function right(event) {
45
- let r = $componentControl[$selectedComponent?.[0] ?? '']?.right?.();
45
+ let r = $componentControl[$selectedComponent]?.right?.();
46
46
  if (typeof r === 'string') {
47
- $selectedComponent = [r];
47
+ $selectedComponent = r;
48
48
  r = $componentControl[r]?.right?.(true);
49
49
  }
50
50
  if (!r) {
51
51
  const sortedGridItems = getGridItems();
52
- const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent?.[0] ?? '');
52
+ const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
53
53
  if (currentIndex !== -1 && currentIndex < sortedGridItems.length - 1) {
54
- $selectedComponent = [sortedGridItems[currentIndex + 1].id];
54
+ $selectedComponent = sortedGridItems[currentIndex + 1].id;
55
55
  }
56
56
  }
57
57
  event.preventDefault();
58
58
  }
59
59
  function down(event) {
60
60
  if (!$focusedGrid) {
61
- $selectedComponent = [getSortedGridItemsOfChildren()[0]?.id];
61
+ $selectedComponent = getSortedGridItemsOfChildren()[0]?.id;
62
62
  event.preventDefault();
63
63
  }
64
64
  else if ($app.subgrids) {
@@ -68,7 +68,7 @@ function down(event) {
68
68
  return;
69
69
  }
70
70
  if (subgrid) {
71
- $selectedComponent = [subgrid[0].id];
71
+ $selectedComponent = subgrid[0].id;
72
72
  }
73
73
  event.preventDefault();
74
74
  }
@@ -81,9 +81,9 @@ function handleEscape(event) {
81
81
  function handleArrowUp(event) {
82
82
  if (!$selectedComponent)
83
83
  return;
84
- let parentId = findGridItemParentGrid($app, $selectedComponent?.[0])?.split('-')[0];
84
+ let parentId = findGridItemParentGrid($app, $selectedComponent)?.split('-')[0];
85
85
  if (parentId) {
86
- $selectedComponent = [parentId];
86
+ $selectedComponent = parentId;
87
87
  }
88
88
  else {
89
89
  $selectedComponent = undefined;
@@ -94,58 +94,49 @@ function handleCopy(event) {
94
94
  if (!$selectedComponent) {
95
95
  return;
96
96
  }
97
- tempGridItems = undefined;
98
- copiedGridItems = $selectedComponent
99
- .map((x) => findGridItem($app, x))
100
- .filter((x) => x != undefined);
97
+ tempGridItem = undefined;
98
+ copiedGridItem = findGridItem($app, $selectedComponent);
101
99
  }
102
100
  function handleCut(event) {
103
101
  if (!$selectedComponent) {
104
102
  return;
105
103
  }
106
- $movingcomponents = JSON.parse(JSON.stringify($selectedComponent));
104
+ $movingcomponent = $selectedComponent;
107
105
  push(history, $app);
108
- let gridItems = $selectedComponent
109
- .map((x) => findGridItem($app, x))
110
- .filter((x) => x != undefined);
111
- copiedGridItems = gridItems;
112
- if (!gridItems) {
106
+ const gridItem = findGridItem($app, $selectedComponent);
107
+ copiedGridItem = gridItem;
108
+ if (!gridItem) {
113
109
  return;
114
110
  }
115
111
  // Store the grid item in a temp variable so we can paste it later
116
- tempGridItems = gridItems;
112
+ tempGridItem = gridItem;
117
113
  }
118
114
  function handlePaste(event) {
119
115
  push(history, $app);
120
- $movingcomponents = undefined;
121
- if (tempGridItems != undefined) {
122
- for (let tempGridItem of tempGridItems) {
123
- if ($focusedGrid &&
124
- getAllSubgridsAndComponentIds($app, tempGridItem.data)[0].includes(`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`)) {
125
- sendUserToast('Cannot paste a component into itself', true);
126
- return;
127
- }
128
- let parentGrid = findGridItemParentGrid($app, tempGridItem.id);
129
- if (parentGrid) {
130
- $app.subgrids &&
131
- ($app.subgrids[parentGrid] = $app.subgrids[parentGrid].filter((item) => item.id !== tempGridItem?.id));
132
- }
133
- else {
134
- $app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
135
- }
136
- const gridItem = tempGridItem;
137
- insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
116
+ $movingcomponent = undefined;
117
+ if (tempGridItem != undefined) {
118
+ if ($focusedGrid &&
119
+ getAllSubgridsAndComponentIds($app, tempGridItem.data)[0].includes(`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`)) {
120
+ sendUserToast('Cannot paste a component into itself', true);
121
+ return;
122
+ }
123
+ let parentGrid = findGridItemParentGrid($app, tempGridItem.id);
124
+ if (parentGrid) {
125
+ $app.subgrids &&
126
+ ($app.subgrids[parentGrid] = $app.subgrids[parentGrid].filter((item) => item.id !== tempGridItem?.id));
138
127
  }
139
- copiedGridItems = tempGridItems;
140
- $selectedComponent = tempGridItems.map((x) => x.id);
141
- tempGridItems = undefined;
142
- }
143
- else if (copiedGridItems) {
144
- let nitems = [];
145
- for (let copiedGridItem of copiedGridItems) {
146
- nitems.push(insertNewGridItem($app, (id) => ({ ...copiedGridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, copiedGridItem[column]]))));
128
+ else {
129
+ $app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
147
130
  }
148
- $selectedComponent = nitems.map((x) => x);
131
+ const gridItem = tempGridItem;
132
+ insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
133
+ copiedGridItem = tempGridItem;
134
+ $selectedComponent = tempGridItem.id;
135
+ tempGridItem = undefined;
136
+ }
137
+ else if (copiedGridItem) {
138
+ const gridItem = copiedGridItem;
139
+ $selectedComponent = insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])));
149
140
  }
150
141
  $worldStore = $worldStore;
151
142
  $app = $app;
@@ -153,8 +144,7 @@ function handlePaste(event) {
153
144
  function keydown(event) {
154
145
  // Ignore keydown events if the user is typing in monaco
155
146
  let classes = event.target?.['className'];
156
- if ((typeof classes === 'string' && classes.includes('inputarea')) ||
157
- ['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
147
+ if (typeof classes === 'string' && classes.includes('inputarea')) {
158
148
  return;
159
149
  }
160
150
  switch (event.key) {
@@ -8,10 +8,6 @@
8
8
  1. Add the component to one of the component sets: `layout`, `buttons`,
9
9
  `inputs` or `display` _(this controls which group the component will be
10
10
  placed in in the **Insert** menu)_
11
- 1. [**`quickStyleProperties.ts`**](../componentsPanel/quickStyleProperties.ts):
12
- 1. Add the component to the `quickStyleProperties` record
13
- 1. _(optional)_ Add the CSS properties that could be applied to the component
14
- parts
15
11
  1. [**`Component.svelte`**](./Component.svelte):
16
12
  1. Add the new component in the Svelte `if` statement
17
13
  1. [**`default-codes.ts`**](./default-codes.ts):