windmill-components 1.78.0 → 1.82.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 (214) hide show
  1. package/components/ArgInput.svelte +3 -0
  2. package/components/ArgInput.svelte.d.ts +1 -0
  3. package/components/DisplayResult.svelte +18 -15
  4. package/components/SchemaEditor.svelte +15 -10
  5. package/components/SettingSection.svelte +1 -1
  6. package/components/Toggle.svelte +5 -2
  7. package/components/Toggle.svelte.d.ts +1 -0
  8. package/components/apps/components/buttons/AppButton.svelte +50 -70
  9. package/components/apps/components/buttons/AppButton.svelte.d.ts +8 -3
  10. package/components/apps/components/buttons/AppForm.svelte +22 -15
  11. package/components/apps/components/buttons/AppForm.svelte.d.ts +3 -3
  12. package/components/apps/components/buttons/AppFormButton.svelte +32 -24
  13. package/components/apps/components/buttons/AppFormButton.svelte.d.ts +3 -5
  14. package/components/apps/components/display/AppBarChart.svelte +2 -2
  15. package/components/apps/components/display/AppBarChart.svelte.d.ts +3 -3
  16. package/components/apps/components/display/AppDisplayComponent.svelte +2 -2
  17. package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -1
  18. package/components/apps/components/display/AppHtml.svelte +10 -2
  19. package/components/apps/components/display/AppHtml.svelte.d.ts +1 -1
  20. package/components/apps/components/display/AppIcon.svelte +4 -1
  21. package/components/apps/components/display/AppIcon.svelte.d.ts +3 -4
  22. package/components/apps/components/display/AppImage.svelte +28 -15
  23. package/components/apps/components/display/AppImage.svelte.d.ts +3 -4
  24. package/components/apps/components/display/AppMap.svelte +3 -3
  25. package/components/apps/components/display/AppMap.svelte.d.ts +3 -4
  26. package/components/apps/components/display/AppPdf.svelte +3 -2
  27. package/components/apps/components/display/AppPdf.svelte.d.ts +3 -4
  28. package/components/apps/components/display/AppPieChart.svelte +2 -2
  29. package/components/apps/components/display/AppPieChart.svelte.d.ts +3 -3
  30. package/components/apps/components/display/AppScatterChart.svelte +2 -2
  31. package/components/apps/components/display/AppScatterChart.svelte.d.ts +3 -3
  32. package/components/apps/components/display/AppText.svelte +35 -22
  33. package/components/apps/components/display/AppText.svelte.d.ts +3 -3
  34. package/components/apps/components/display/AppTimeseries.svelte +2 -2
  35. package/components/apps/components/display/AppTimeseries.svelte.d.ts +3 -3
  36. package/components/apps/components/display/PlotlyHtml.svelte +2 -2
  37. package/components/apps/components/display/VegaLiteHtml.svelte +2 -2
  38. package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +2 -1
  39. package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  40. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +2 -1
  41. package/components/apps/components/display/table/AppTable.svelte +102 -34
  42. package/components/apps/components/display/table/AppTable.svelte.d.ts +3 -3
  43. package/components/apps/components/helpers/HiddenComponent.svelte +6 -3
  44. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -1
  45. package/components/apps/components/helpers/InputValue.svelte +11 -7
  46. package/components/apps/components/helpers/InputValue.svelte.d.ts +3 -1
  47. package/components/apps/components/helpers/Loader.svelte +18 -0
  48. package/components/apps/components/helpers/Loader.svelte.d.ts +18 -0
  49. package/components/apps/components/helpers/NonRunnableComponent.svelte +1 -12
  50. package/components/apps/components/helpers/ResolveConfig.svelte +29 -0
  51. package/components/apps/components/helpers/ResolveConfig.svelte.d.ts +21 -0
  52. package/components/apps/components/helpers/RunnableComponent.svelte +126 -93
  53. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +13 -3
  54. package/components/apps/components/helpers/RunnableWrapper.svelte +48 -9
  55. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +26 -2
  56. package/components/apps/components/helpers/eval.js +36 -1
  57. package/components/apps/components/inputs/AppCheckbox.svelte +1 -1
  58. package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +3 -4
  59. package/components/apps/components/inputs/AppDateInput.svelte.d.ts +3 -4
  60. package/components/apps/components/inputs/AppFileInput.svelte.d.ts +3 -4
  61. package/components/apps/components/inputs/AppMultiSelect.svelte +0 -1
  62. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +3 -4
  63. package/components/apps/components/inputs/AppNumberInput.svelte +1 -1
  64. package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +3 -6
  65. package/components/apps/components/inputs/AppRangeInput.svelte +7 -1
  66. package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +4 -4
  67. package/components/apps/components/inputs/AppSelect.svelte +8 -2
  68. package/components/apps/components/inputs/AppSelect.svelte.d.ts +3 -4
  69. package/components/apps/components/inputs/AppSliderInputs.svelte +7 -1
  70. package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +4 -4
  71. package/components/apps/components/inputs/AppTextInput.svelte +4 -4
  72. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +3 -6
  73. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +17 -19
  74. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +3 -4
  75. package/components/apps/components/layout/AppContainer.svelte +7 -5
  76. package/components/apps/components/layout/AppContainer.svelte.d.ts +1 -3
  77. package/components/apps/components/layout/AppDivider.svelte +4 -1
  78. package/components/apps/components/layout/AppDivider.svelte.d.ts +3 -4
  79. package/components/apps/components/layout/AppDrawer.svelte +7 -4
  80. package/components/apps/components/layout/AppDrawer.svelte.d.ts +3 -4
  81. package/components/apps/components/layout/AppSplitpanes.svelte +34 -25
  82. package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +1 -5
  83. package/components/apps/components/layout/AppTabs.svelte +22 -37
  84. package/components/apps/components/layout/AppTabs.svelte.d.ts +3 -5
  85. package/components/apps/editor/AppEditor.svelte +6 -3
  86. package/components/apps/editor/AppEditorHeader.svelte +4 -5
  87. package/components/apps/editor/AppInputs.svelte +13 -14
  88. package/components/apps/editor/AppPreview.svelte +12 -16
  89. package/components/apps/editor/ComponentHeader.svelte +58 -57
  90. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -2
  91. package/components/apps/editor/GridEditor.svelte +21 -50
  92. package/components/apps/editor/GridEditor.svelte.d.ts +0 -2
  93. package/components/apps/editor/RecomputeAllComponents.svelte +13 -2
  94. package/components/apps/editor/SettingsPanel.svelte +104 -30
  95. package/components/apps/editor/SubGridEditor.svelte +34 -43
  96. package/components/apps/editor/SubGridEditor.svelte.d.ts +2 -3
  97. package/components/apps/editor/appUtils.d.ts +49 -6
  98. package/components/apps/editor/appUtils.js +145 -37
  99. package/components/apps/editor/component/Component.svelte +37 -22
  100. package/components/apps/editor/component/Component.svelte.d.ts +1 -2
  101. package/components/apps/editor/component/ComponentNavigation.svelte +28 -12
  102. package/components/apps/editor/component/components.d.ts +1550 -16
  103. package/components/apps/editor/component/components.js +295 -304
  104. package/components/apps/editor/component/default-codes.d.ts +1 -1
  105. package/components/apps/editor/component/default-codes.js +25 -25
  106. package/components/apps/editor/componentsPanel/ComponentList.svelte +18 -3
  107. package/components/apps/editor/componentsPanel/CssProperty.svelte +5 -3
  108. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +3 -1
  109. package/components/apps/editor/componentsPanel/CssSettings.svelte +48 -90
  110. package/components/apps/editor/componentsPanel/ListItem.svelte +3 -0
  111. package/components/apps/editor/componentsPanel/ListItem.svelte.d.ts +2 -0
  112. package/components/apps/editor/contextPanel/ContextPanel.svelte +4 -5
  113. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +0 -1
  114. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte.d.ts +1 -3
  115. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +12 -2
  116. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -2
  117. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +158 -129
  118. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +2 -1
  119. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +31 -3
  120. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  121. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +42 -74
  122. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +68 -18
  123. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +1 -3
  124. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +27 -0
  125. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte.d.ts +17 -0
  126. package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -0
  127. package/components/apps/editor/inlineScriptsPanel/utils.js +6 -5
  128. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +10 -2
  129. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +37 -31
  130. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +4 -104
  131. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +108 -87
  132. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +5 -3
  133. package/components/apps/editor/settingsPanel/GridTab.svelte +0 -1
  134. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +128 -13
  135. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +14 -2
  136. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +35 -100
  137. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +3 -2
  138. package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +52 -0
  139. package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte.d.ts +28 -0
  140. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +73 -25
  141. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +2 -0
  142. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +7 -5
  143. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +3 -2
  144. package/components/apps/editor/settingsPanel/TableActionLabel.svelte.d.ts +2 -2
  145. package/components/apps/editor/settingsPanel/TableActions.svelte +8 -63
  146. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -2
  147. package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +0 -1
  148. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +2 -4
  149. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +3 -1
  150. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -4
  151. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +5 -5
  152. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +2 -0
  153. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +59 -37
  154. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +8 -2
  155. package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte +46 -0
  156. package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte.d.ts +20 -0
  157. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +7 -0
  158. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -0
  159. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +31 -0
  160. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +22 -0
  161. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +24 -0
  162. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +21 -0
  163. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +156 -0
  164. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +22 -0
  165. package/components/apps/editor/settingsPanel/triggerLists/triggerListUtils.d.ts +2 -0
  166. package/components/apps/editor/settingsPanel/triggerLists/triggerListUtils.js +11 -0
  167. package/components/apps/gridUtils.js +1 -1
  168. package/components/apps/inputType.d.ts +23 -18
  169. package/components/apps/rx.d.ts +2 -0
  170. package/components/apps/rx.js +10 -3
  171. package/components/apps/svelte-grid/Grid.svelte +1 -5
  172. package/components/apps/svelte-grid/Grid.svelte.d.ts +1 -1
  173. package/components/apps/svelte-grid/MoveResize.svelte +24 -30
  174. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +0 -4
  175. package/components/apps/svelte-grid/types.d.ts +1 -7
  176. package/components/apps/svelte-grid/utils/helper.js +6 -10
  177. package/components/apps/types.d.ts +32 -15
  178. package/components/apps/utils.d.ts +2 -2
  179. package/components/apps/utils.js +13 -11
  180. package/components/common/skeleton/Skeleton.svelte +1 -1
  181. package/components/flows/flowStateUtils.js +8 -1
  182. package/components/flows/flowStore.js +1 -1
  183. package/components/graph/FlowGraph.svelte +0 -2
  184. package/components/graph/FlowGraph.svelte.d.ts +0 -1
  185. package/components/graph/svelvet/container/views/GraphView.svelte +3 -28
  186. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -3
  187. package/components/graph/svelvet/container/views/Svelvet.svelte +1 -17
  188. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -8
  189. package/components/graph/svelvet/customCss/controllers/getCss.js +0 -11
  190. package/components/graph/svelvet/edges/controllers/util.js +1 -2
  191. package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +2 -2
  192. package/components/graph/svelvet/nodes/controllers/util.js +1 -1
  193. package/components/graph/svelvet/nodes/models/Node.d.ts +0 -4
  194. package/components/graph/svelvet/nodes/models/Node.js +3 -41
  195. package/components/graph/svelvet/store/controllers/storeApi.js +2 -7
  196. package/components/graph/svelvet/store/controllers/util.d.ts +0 -7
  197. package/components/graph/svelvet/store/controllers/util.js +4 -36
  198. package/components/graph/svelvet/store/types/types.d.ts +0 -5
  199. package/components/home/ItemsList.svelte +1 -1
  200. package/package.json +13 -8
  201. package/utils.d.ts +2 -0
  202. package/utils.js +6 -0
  203. package/components/apps/editor/GridPanel.svelte +0 -31
  204. package/components/apps/editor/GridPanel.svelte.d.ts +0 -18
  205. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +0 -12
  206. package/components/apps/editor/componentsPanel/componentStaticValues.js +0 -25
  207. package/components/graph/svelvet/nodes/views/EditNode.svelte +0 -147
  208. package/components/graph/svelvet/nodes/views/EditNode.svelte.d.ts +0 -33
  209. package/components/graph/svelvet/resizableNodes/controllers/util.d.ts +0 -11
  210. package/components/graph/svelvet/resizableNodes/controllers/util.js +0 -24
  211. package/components/graph/svelvet/resizableNodes/models/ResizeNode.d.ts +0 -33
  212. package/components/graph/svelvet/resizableNodes/models/ResizeNode.js +0 -71
  213. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte +0 -81
  214. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte.d.ts +0 -20
@@ -1,5 +1,5 @@
1
1
  import { getNextId } from '../../flows/flowStateUtils';
2
- import { getRecommendedDimensionsByComponent } from './component';
2
+ import { ccomponents, components, getRecommendedDimensionsByComponent } from './component';
3
3
  import { gridColumns } from '../gridUtils';
4
4
  import { allItems } from '../utils';
5
5
  import gridHelp from '../svelte-grid/utils/helper';
@@ -13,14 +13,14 @@ function findGridItemById(root, subGrids, id) {
13
13
  }
14
14
  export function findGridItemParentGrid(app, id) {
15
15
  const gridItem = app.grid.find((x) => x.id === id);
16
- if (gridItem) {
16
+ if (gridItem || app.subgrids === undefined) {
17
17
  return undefined;
18
18
  }
19
19
  else {
20
- for (const key in app.subgrids) {
20
+ for (const key of Object.keys(app.subgrids ?? {})) {
21
21
  const subGrid = app.subgrids[key];
22
- const gridItem = subGrid.find((x) => x.id === id);
23
- if (gridItem) {
22
+ const gridItemIdx = subGrid.findIndex((x) => x.id === id);
23
+ if (gridItemIdx > -1) {
24
24
  return key;
25
25
  }
26
26
  }
@@ -29,7 +29,13 @@ export function findGridItemParentGrid(app, id) {
29
29
  export function allsubIds(app, parentId) {
30
30
  let item = findGridItem(app, parentId);
31
31
  if (!item?.data.numberOfSubgrids) {
32
- return [parentId];
32
+ let subIds = [parentId];
33
+ if (item) {
34
+ if (item.data.type === 'tablecomponent') {
35
+ subIds.push(...item.data.actionButtons?.map((x) => x.id));
36
+ }
37
+ }
38
+ return subIds;
33
39
  }
34
40
  return getAllSubgridsAndComponentIds(app, item?.data)[1];
35
41
  }
@@ -42,10 +48,23 @@ export function getNextGridItemId(app) {
42
48
  const id = getNextId([...new Set(withoutDash)]);
43
49
  return id;
44
50
  }
45
- export function createNewGridItem(grid, id, data) {
51
+ export function getAllRecomputeIdsForComponent(app, id) {
52
+ if (!app || !id)
53
+ return [];
54
+ const items = allItems(app.grid, app.subgrids);
55
+ const recomputedBy = [];
56
+ items.forEach((item) => {
57
+ if (item.data.type === 'buttoncomponent') {
58
+ if (item.data.recomputeIds?.includes(id)) {
59
+ recomputedBy.push(item.id);
60
+ }
61
+ }
62
+ });
63
+ return recomputedBy;
64
+ }
65
+ export function createNewGridItem(grid, id, data, columns) {
46
66
  const newComponent = {
47
- resizable: true,
48
- draggable: true,
67
+ fixed: false,
49
68
  x: 0,
50
69
  y: 0
51
70
  };
@@ -56,17 +75,17 @@ export function createNewGridItem(grid, id, data) {
56
75
  id: id
57
76
  };
58
77
  gridColumns.forEach((column) => {
59
- const rec = getRecommendedDimensionsByComponent(newData.type, column);
60
- newItem[column] = {
61
- ...newComponent,
62
- min: { w: 1, h: 1 },
63
- max: { w: column, h: 100 },
64
- w: rec.w,
65
- h: rec.h,
66
- customDragger: false,
67
- customResizer: false,
68
- fixed: false
69
- };
78
+ if (!columns) {
79
+ const rec = getRecommendedDimensionsByComponent(newData.type, column);
80
+ newItem[column] = {
81
+ ...newComponent,
82
+ w: rec.w,
83
+ h: rec.h
84
+ };
85
+ }
86
+ else {
87
+ newItem[column] = columns[column];
88
+ }
70
89
  const position = gridHelp.findSpace(newItem, grid, column);
71
90
  newItem[column] = { ...newItem[column], ...position };
72
91
  });
@@ -82,8 +101,57 @@ export function getGridItems(app, focusedGrid) {
82
101
  return app?.subgrids?.[key] ?? [];
83
102
  }
84
103
  }
85
- export function insertNewGridItem(app, data, focusedGrid, keepId) {
86
- const id = keepId ? data.id : getNextGridItemId(app);
104
+ function cleanseValue(key, value) {
105
+ if (!value) {
106
+ return [key, undefined];
107
+ }
108
+ if (value.type === 'static') {
109
+ return [key, { type: value.type, value: value.value }];
110
+ }
111
+ else {
112
+ return [key, { type: value.type, expr: value.expr }];
113
+ }
114
+ }
115
+ export function appComponentFromType(type) {
116
+ return (id) => {
117
+ const init = JSON.parse(JSON.stringify(ccomponents[type].initialData));
118
+ return {
119
+ type,
120
+ //TODO remove tooltip and onlyStatic from there
121
+ configuration: Object.fromEntries(Object.entries(init.configuration).map(([key, value]) => {
122
+ if (value.type != 'oneOf') {
123
+ return cleanseValue(key, value);
124
+ }
125
+ else {
126
+ return [
127
+ key,
128
+ {
129
+ type: value.type,
130
+ selected: value.selected,
131
+ configuration: Object.fromEntries(Object.entries(value.configuration).map(([key, val]) => [
132
+ key,
133
+ Object.fromEntries(Object.entries(val).map(([key, val]) => cleanseValue(key, val)))
134
+ ]))
135
+ }
136
+ ];
137
+ }
138
+ })),
139
+ componentInput: init.componentInput,
140
+ panes: init.panes,
141
+ tabs: init.tabs,
142
+ customCss: {},
143
+ recomputeIds: init.recomputeIds ? [] : undefined,
144
+ actionButtons: init.actionButtons ? [] : undefined,
145
+ numberOfSubgrids: init.numberOfSubgrids,
146
+ horizontalAlignment: init.horizontalAlignment,
147
+ verticalAlignment: init.verticalAlignment,
148
+ id
149
+ };
150
+ };
151
+ }
152
+ export function insertNewGridItem(app, builddata, focusedGrid, columns, keepId) {
153
+ const id = keepId ?? getNextGridItemId(app);
154
+ const data = builddata(id);
87
155
  if (!app.subgrids) {
88
156
  app.subgrids = {};
89
157
  }
@@ -97,16 +165,16 @@ export function insertNewGridItem(app, data, focusedGrid, keepId) {
97
165
  ? `${focusedGrid?.parentComponentId}-${focusedGrid?.subGridIndex ?? 0}`
98
166
  : undefined;
99
167
  let grid = focusedGrid ? app.subgrids[key] : app.grid;
100
- const newItem = createNewGridItem(grid, id, data);
168
+ const newItem = createNewGridItem(grid, id, data, columns);
101
169
  grid.push(newItem);
102
- if (focusedGrid) {
103
- app.subgrids[key] = grid;
104
- }
105
170
  return id;
106
171
  }
107
172
  export function getAllSubgridsAndComponentIds(app, component) {
108
173
  const subgrids = [];
109
174
  let components = [component.id];
175
+ if (component.type === 'tablecomponent') {
176
+ components.push(...component.actionButtons?.map((x) => x.id));
177
+ }
110
178
  if (app.subgrids && component.numberOfSubgrids) {
111
179
  for (let i = 0; i < component.numberOfSubgrids; i++) {
112
180
  const key = `${component.id}-${i}`;
@@ -130,18 +198,12 @@ export function deleteGridItem(app, component, parent, shouldKeepSubGrid) {
130
198
  delete app.subgrids[id];
131
199
  });
132
200
  }
133
- if (!parent) {
134
- let index = app.grid.findIndex((x) => x.id == component.id);
135
- if (index > -1) {
136
- app.grid.splice(index, 1);
137
- }
201
+ if (parent) {
202
+ app.subgrids &&
203
+ (app.subgrids[parent] = app.subgrids[parent].filter((item) => item.id !== component?.id));
138
204
  }
139
205
  else {
140
- let grid = app.subgrids[parent];
141
- let index = grid.findIndex((x) => x.id == component.id);
142
- if (index > -1) {
143
- grid.splice(index, 1);
144
- }
206
+ app.grid = app.grid.filter((item) => item.id !== component?.id);
145
207
  }
146
208
  return components;
147
209
  }
@@ -227,12 +289,36 @@ function isOverlapping(item1, item2) {
227
289
  item1.y + item1.h > item2.y);
228
290
  }
229
291
  export function initOutput(world, id, init) {
292
+ world.initializedOutputs += 1;
230
293
  if (!world) {
231
294
  return {};
232
295
  }
233
296
  return Object.fromEntries(Object.entries(init).map(([key, value]) => [key, world.newOutput(id, key, value)]));
234
297
  }
235
- export function expandGriditem(grid, gridComponent, $breakpoint, parentGridItem = undefined) {
298
+ export function initConfig(r, configuration) {
299
+ return JSON.parse(JSON.stringify(Object.fromEntries(Object.entries(r).map(([key, value]) => value.type == 'static'
300
+ ? [
301
+ key,
302
+ configuration?.[key]?.type == 'static' ? configuration?.[key]?.['value'] : undefined
303
+ ]
304
+ : value.type == 'oneOf'
305
+ ? [
306
+ key,
307
+ {
308
+ selected: value.selected,
309
+ type: 'oneOf',
310
+ configuration: Object.fromEntries(Object.entries(value.configuration).map(([choice, config]) => [
311
+ choice,
312
+ initConfig(config, configuration?.[key]?.configuration?.[choice])
313
+ ]))
314
+ }
315
+ ]
316
+ : [key, undefined]))));
317
+ }
318
+ export function expandGriditem(grid, id, $breakpoint, parentGridItem = undefined) {
319
+ const gridComponent = grid.find((item) => item.id === id);
320
+ if (!gridComponent)
321
+ return;
236
322
  const availableSpace = findAvailableSpace(grid, gridComponent, $breakpoint, parentGridItem);
237
323
  if (!availableSpace) {
238
324
  return;
@@ -308,3 +394,25 @@ export function recursivelyFilterKeyInJSON(json, search, extraSearch) {
308
394
  });
309
395
  return filteredJSON;
310
396
  }
397
+ export function clearErrorByComponentId(id, errorByComponent) {
398
+ return Object.entries(errorByComponent).reduce((acc, [key, value]) => {
399
+ if (value.componentId !== id) {
400
+ acc[key] = value;
401
+ }
402
+ return acc;
403
+ }, {});
404
+ }
405
+ export function clearJobsByComponentId(id, jobs) {
406
+ return jobs.filter((job) => job.component !== id);
407
+ }
408
+ // Returns the error message for the latest job for a component if an error occurred, otherwise undefined
409
+ export function getErrorFromLatestResult(id, errorByComponent, jobs) {
410
+ // find last jobId for component id
411
+ const lastJob = jobs.find((job) => job.component === id);
412
+ if (lastJob?.job && errorByComponent[lastJob.job]) {
413
+ return errorByComponent[lastJob.job].error;
414
+ }
415
+ else {
416
+ return undefined;
417
+ }
418
+ }
@@ -2,30 +2,40 @@
2
2
  import { Loader2 } from 'lucide-svelte';
3
3
  import { twMerge } from 'tailwind-merge';
4
4
  import ComponentHeader from '../ComponentHeader.svelte';
5
+ import { ccomponents, components } from './components';
5
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';
6
7
  import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
7
8
  export let component;
8
9
  export let selected;
9
10
  export let locked = false;
10
- export let pointerdown = false;
11
11
  export let render;
12
- const { mode, connectingInput, app, errorByComponent } = getContext('AppViewerContext');
13
- let hover = false;
12
+ const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
13
+ const editorContext = getContext('AppEditorContext');
14
+ const movingcomponent = editorContext?.movingcomponent;
15
+ $: ismoving = movingcomponent != undefined && $mode == 'dnd' && $movingcomponent === component.id;
14
16
  let initializing = undefined;
15
17
  let componentContainerHeight = 0;
16
18
  $: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
17
19
  $: hasError = componentWithErrors.includes(component.id);
18
20
  </script>
19
21
 
22
+ <!-- svelte-ignore a11y-mouse-events-have-key-events -->
20
23
  <div
21
- on:pointerenter={() => (hover = true)}
22
- on:pointerleave={() => (hover = false)}
24
+ on:mouseover|stopPropagation={() => {
25
+ if (component.id !== $hoverStore) {
26
+ $hoverStore = component.id
27
+ }
28
+ }}
29
+ on:mouseout|stopPropagation={() => {
30
+ if ($hoverStore !== undefined) {
31
+ $hoverStore = undefined
32
+ }
33
+ }}
23
34
  class="h-full flex flex-col w-full component {initializing ? 'overflow-hidden h-0' : ''}"
24
35
  >
25
36
  {#if $mode !== 'preview'}
26
37
  <ComponentHeader
27
- {hover}
28
- {pointerdown}
38
+ hover={$hoverStore === component.id}
29
39
  {component}
30
40
  {selected}
31
41
  on:delete
@@ -35,16 +45,26 @@ $: hasError = componentWithErrors.includes(component.id);
35
45
  />
36
46
  {/if}
37
47
 
48
+ {#if ismoving}
49
+ <div class="absolute -top-8 w-40 ">
50
+ <button
51
+ class="border p-0.5 text-xs"
52
+ on:click={() => {
53
+ $movingcomponent = undefined
54
+ }}>Cancel move</button
55
+ >
56
+ </div>
57
+ {/if}
38
58
  <div
39
59
  class={twMerge(
40
- 'h-full bg-white/40',
41
- selected && $mode !== 'preview' ? 'border border-blue-500' : '',
42
- !selected && $mode !== 'preview' ? 'border-gray-100' : '',
43
- $mode !== 'preview' && !$connectingInput.opened ? 'hover:border-blue-500' : '',
44
- component.softWrap || hasError ? '' : 'overflow-auto',
60
+ 'h-full bg-white/40 outline-1',
61
+ $hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
62
+ selected && $mode !== 'preview' ? 'outline outline-indigo-600' : '',
63
+ ccomponents[component.type].softWrap || hasError ? '' : 'overflow-auto',
45
64
  $mode != 'preview' ? 'cursor-pointer' : '',
46
65
  'relative z-auto',
47
- $app.css?.['app']?.['component']?.class
66
+ $app.css?.['app']?.['component']?.class,
67
+ ismoving ? 'animate-pulse' : ''
48
68
  )}
49
69
  style={$app.css?.['app']?.['component']?.style}
50
70
  bind:clientHeight={componentContainerHeight}
@@ -264,6 +284,7 @@ $: hasError = componentWithErrors.includes(component.id);
264
284
  configuration={component.configuration}
265
285
  id={component.id}
266
286
  customCss={component.customCss}
287
+ bind:initializing
267
288
  {render}
268
289
  />
269
290
  {:else if component.type === 'horizontaldividercomponent'}
@@ -293,8 +314,9 @@ $: hasError = componentWithErrors.includes(component.id);
293
314
  id={component.id}
294
315
  customCss={component.customCss}
295
316
  {render}
317
+ bind:initializing
296
318
  />
297
- {:else if component.type === 'tabscomponent'}
319
+ {:else if component.type === 'tabscomponent' && component.tabs}
298
320
  <AppTabs
299
321
  configuration={component.configuration}
300
322
  id={component.id}
@@ -302,11 +324,9 @@ $: hasError = componentWithErrors.includes(component.id);
302
324
  customCss={component.customCss}
303
325
  {componentContainerHeight}
304
326
  {render}
305
- bind:initializing
306
327
  />
307
328
  {:else if component.type === 'containercomponent'}
308
329
  <AppContainer
309
- configuration={component.configuration}
310
330
  id={component.id}
311
331
  customCss={component.customCss}
312
332
  {componentContainerHeight}
@@ -314,7 +334,6 @@ $: hasError = componentWithErrors.includes(component.id);
314
334
  />
315
335
  {:else if component.type === 'verticalsplitpanescomponent'}
316
336
  <AppSplitpanes
317
- configuration={component.configuration}
318
337
  id={component.id}
319
338
  customCss={component.customCss}
320
339
  panes={component.panes}
@@ -323,7 +342,6 @@ $: hasError = componentWithErrors.includes(component.id);
323
342
  />
324
343
  {:else if component.type === 'horizontalsplitpanescomponent'}
325
344
  <AppSplitpanes
326
- configuration={component.configuration}
327
345
  id={component.id}
328
346
  customCss={component.customCss}
329
347
  panes={component.panes}
@@ -381,8 +399,5 @@ $: hasError = componentWithErrors.includes(component.id);
381
399
  </div>
382
400
  </div>
383
401
  {#if initializing}
384
- <div class="absolute inset-0 center-center flex-col bg-white text-gray-600 border">
385
- <Loader2 class="animate-spin" size={16} />
386
- <span class="text-xs mt-1">Loading</span>
387
- </div>
402
+ <div class="absolute inset-0 center-center flex-col bg- border animate-skeleton" />
388
403
  {/if}
@@ -1,11 +1,10 @@
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;
6
6
  selected: boolean;
7
7
  locked?: boolean | undefined;
8
- pointerdown?: boolean | undefined;
9
8
  render: boolean;
10
9
  };
11
10
  events: {
@@ -2,8 +2,9 @@
2
2
  import { findGridItem, findGridItemParentGrid, getAllSubgridsAndComponentIds, insertNewGridItem } from '../appUtils';
3
3
  import { push } from '../../../../history';
4
4
  import { sendUserToast } from '../../../../utils';
5
+ import { gridColumns } from '../../gridUtils';
5
6
  const { app, selectedComponent, worldStore, focusedGrid, componentControl } = getContext('AppViewerContext');
6
- const { history } = getContext('AppEditorContext');
7
+ const { history, movingcomponent } = getContext('AppEditorContext');
7
8
  let tempGridItem = undefined;
8
9
  let copiedGridItem = undefined;
9
10
  function getSortedGridItemsOfChildren() {
@@ -29,13 +30,23 @@ function left(event) {
29
30
  const sortedGridItems = getGridItems();
30
31
  const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
31
32
  if (currentIndex !== -1 && currentIndex > 0) {
32
- $selectedComponent = sortedGridItems[currentIndex - 1].id;
33
+ const left = sortedGridItems[currentIndex - 1];
34
+ if (left.data.type === 'tablecomponent' && left.data.actionButtons.length >= 1) {
35
+ $selectedComponent = left.data.actionButtons[left.data.actionButtons.length - 1].id;
36
+ }
37
+ else {
38
+ $selectedComponent = left.id;
39
+ }
33
40
  }
34
41
  }
35
42
  event.preventDefault();
36
43
  }
37
44
  function right(event) {
38
45
  let r = $componentControl[$selectedComponent]?.right?.();
46
+ if (typeof r === 'string') {
47
+ $selectedComponent = r;
48
+ r = $componentControl[r]?.right?.(true);
49
+ }
39
50
  if (!r) {
40
51
  const sortedGridItems = getGridItems();
41
52
  const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
@@ -90,6 +101,7 @@ function handleCut(event) {
90
101
  if (!$selectedComponent) {
91
102
  return;
92
103
  }
104
+ $movingcomponent = $selectedComponent;
93
105
  push(history, $app);
94
106
  const gridItem = findGridItem($app, $selectedComponent);
95
107
  copiedGridItem = gridItem;
@@ -101,26 +113,30 @@ function handleCut(event) {
101
113
  }
102
114
  function handlePaste(event) {
103
115
  push(history, $app);
104
- if (tempGridItem) {
116
+ $movingcomponent = undefined;
117
+ if (tempGridItem != undefined) {
105
118
  if ($focusedGrid &&
106
119
  getAllSubgridsAndComponentIds($app, tempGridItem.data)[0].includes(`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`)) {
107
120
  sendUserToast('Cannot paste a component into itself', true);
108
121
  return;
109
122
  }
110
- let parentGrid = findGridItemParentGrid($app, tempGridItem.data.id);
111
- const grid = parentGrid ? $app.subgrids[parentGrid] : $app.grid;
112
- let idx = grid.findIndex((item) => {
113
- return item.id == tempGridItem.data.id;
114
- });
115
- if (idx > -1) {
116
- grid.splice(idx, 1);
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));
127
+ }
128
+ else {
129
+ $app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
117
130
  }
118
- insertNewGridItem($app, tempGridItem.data, $focusedGrid, true);
131
+ const gridItem = tempGridItem;
132
+ insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
119
133
  copiedGridItem = tempGridItem;
134
+ $selectedComponent = tempGridItem.id;
120
135
  tempGridItem = undefined;
121
136
  }
122
137
  else if (copiedGridItem) {
123
- insertNewGridItem($app, copiedGridItem.data, $focusedGrid, false);
138
+ const gridItem = copiedGridItem;
139
+ $selectedComponent = insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])));
124
140
  }
125
141
  $worldStore = $worldStore;
126
142
  $app = $app;