windmill-components 1.75.0 → 1.78.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 (238) hide show
  1. package/components/ArgInput.svelte +4 -14
  2. package/components/DisplayResult.svelte +1 -1
  3. package/components/Dropdown.svelte +14 -4
  4. package/components/FlowGraphViewer.svelte +1 -1
  5. package/components/FolderUsageInfo.svelte +16 -6
  6. package/components/FolderUsageInfo.svelte.d.ts +2 -0
  7. package/components/LightweightArgInput.svelte +315 -0
  8. package/components/LightweightArgInput.svelte.d.ts +47 -0
  9. package/components/LightweightSchemaForm.svelte +31 -0
  10. package/components/LightweightSchemaForm.svelte.d.ts +18 -0
  11. package/components/ModulePreview.svelte +1 -0
  12. package/components/Multiselect.svelte.d.ts +2 -2
  13. package/components/PageHeader.svelte +1 -1
  14. package/components/Path.svelte +26 -3
  15. package/components/Range.svelte.d.ts +2 -2
  16. package/components/ScriptBuilder.svelte +122 -122
  17. package/components/SettingSection.svelte +44 -0
  18. package/components/SettingSection.svelte.d.ts +21 -0
  19. package/components/SimpleEditor.svelte +1 -1
  20. package/components/SimpleEditor.svelte.d.ts +2 -0
  21. package/components/TemplateEditor.svelte +3 -0
  22. package/components/TemplateEditor.svelte.d.ts +0 -204
  23. package/components/Tooltip.svelte +3 -1
  24. package/components/VariableEditor.svelte +2 -1
  25. package/components/WhitelistIp.svelte +1 -3
  26. package/components/apps/components/buttons/AppButton.svelte +16 -8
  27. package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -2
  28. package/components/apps/components/buttons/AppForm.svelte +3 -7
  29. package/components/apps/components/buttons/AppFormButton.svelte +3 -7
  30. package/components/apps/components/display/AppBarChart.svelte +7 -3
  31. package/components/apps/components/display/AppBarChart.svelte.d.ts +0 -2
  32. package/components/apps/components/display/AppDisplayComponent.svelte +7 -3
  33. package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +0 -2
  34. package/components/apps/components/display/AppHtml.svelte +7 -11
  35. package/components/apps/components/display/AppHtml.svelte.d.ts +0 -2
  36. package/components/apps/components/display/AppIcon.svelte +0 -1
  37. package/components/apps/components/display/AppIcon.svelte.d.ts +0 -2
  38. package/components/apps/components/display/AppImage.svelte +0 -1
  39. package/components/apps/components/display/AppImage.svelte.d.ts +0 -2
  40. package/components/apps/components/display/AppMap.svelte +10 -3
  41. package/components/apps/components/display/AppMap.svelte.d.ts +0 -2
  42. package/components/apps/components/display/AppPdf.svelte +8 -3
  43. package/components/apps/components/display/AppPdf.svelte.d.ts +0 -2
  44. package/components/apps/components/display/AppPieChart.svelte +7 -3
  45. package/components/apps/components/display/AppPieChart.svelte.d.ts +0 -2
  46. package/components/apps/components/display/AppScatterChart.svelte +7 -3
  47. package/components/apps/components/display/AppScatterChart.svelte.d.ts +0 -2
  48. package/components/apps/components/display/AppText.svelte +41 -17
  49. package/components/apps/components/display/AppText.svelte.d.ts +0 -2
  50. package/components/apps/components/display/AppTimeseries.svelte +7 -3
  51. package/components/apps/components/display/AppTimeseries.svelte.d.ts +0 -2
  52. package/components/apps/components/display/PlotlyHtml.svelte +9 -4
  53. package/components/apps/components/display/PlotlyHtml.svelte.d.ts +0 -2
  54. package/components/apps/components/display/VegaLiteHtml.svelte +8 -3
  55. package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +0 -2
  56. package/components/apps/components/display/table/AppAggridTable.svelte +13 -5
  57. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +0 -2
  58. package/components/apps/components/display/table/AppTable.svelte +19 -13
  59. package/components/apps/components/display/table/AppTable.svelte.d.ts +0 -2
  60. package/components/apps/components/helpers/HiddenComponent.svelte +11 -2
  61. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -2
  62. package/components/apps/components/helpers/InputValue.svelte +26 -43
  63. package/components/apps/components/helpers/InputValue.svelte.d.ts +4 -3
  64. package/components/apps/components/helpers/NonRunnableComponent.svelte +2 -2
  65. package/components/apps/components/helpers/RefreshButton.svelte +2 -3
  66. package/components/apps/components/helpers/ResizeWrapper.svelte +3 -4
  67. package/components/apps/components/helpers/RunnableComponent.svelte +63 -51
  68. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  69. package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
  70. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  71. package/components/apps/components/helpers/eval.d.ts +5 -0
  72. package/components/apps/components/helpers/eval.js +57 -0
  73. package/components/apps/components/inputs/AppCheckbox.svelte +4 -2
  74. package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +0 -2
  75. package/components/apps/components/inputs/AppDateInput.svelte +4 -2
  76. package/components/apps/components/inputs/AppDateInput.svelte.d.ts +0 -2
  77. package/components/apps/components/inputs/AppFileInput.svelte +4 -2
  78. package/components/apps/components/inputs/AppFileInput.svelte.d.ts +0 -2
  79. package/components/apps/components/inputs/AppMultiSelect.svelte +4 -2
  80. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +0 -2
  81. package/components/apps/components/inputs/AppNumberInput.svelte +4 -2
  82. package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +0 -2
  83. package/components/apps/components/inputs/AppRangeInput.svelte +5 -2
  84. package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +0 -2
  85. package/components/apps/components/inputs/AppSelect.svelte +4 -2
  86. package/components/apps/components/inputs/AppSelect.svelte.d.ts +0 -2
  87. package/components/apps/components/inputs/AppSliderInputs.svelte +4 -2
  88. package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +0 -2
  89. package/components/apps/components/inputs/AppTextInput.svelte +5 -3
  90. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +0 -2
  91. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +5 -2
  92. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +0 -2
  93. package/components/apps/components/layout/AppContainer.svelte +1 -7
  94. package/components/apps/components/layout/AppContainer.svelte.d.ts +0 -2
  95. package/components/apps/components/layout/AppDrawer.svelte +0 -3
  96. package/components/apps/components/layout/AppSplitpanes.svelte +1 -6
  97. package/components/apps/components/layout/AppTabs.svelte +62 -34
  98. package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -2
  99. package/components/apps/editor/AppComponentInput.svelte +2 -1
  100. package/components/apps/editor/AppEditor.svelte +145 -143
  101. package/components/apps/editor/AppEditorHeader.svelte +43 -35
  102. package/components/apps/editor/AppPreview.svelte +68 -15
  103. package/components/apps/editor/ComponentHeader.svelte +3 -1
  104. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
  105. package/components/apps/editor/GridEditor.svelte +58 -77
  106. package/components/apps/editor/GridPanel.svelte +3 -1
  107. package/components/apps/editor/GridViewer.svelte +91 -0
  108. package/components/apps/editor/GridViewer.svelte.d.ts +32 -0
  109. package/components/apps/editor/RecomputeAllComponents.svelte +7 -1
  110. package/components/apps/editor/SettingsPanel.svelte +23 -10
  111. package/components/apps/editor/SubGridEditor.svelte +95 -68
  112. package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -4
  113. package/components/apps/editor/appUtils.d.ts +13 -3
  114. package/components/apps/editor/appUtils.js +106 -37
  115. package/components/apps/editor/component/Component.svelte +6 -52
  116. package/components/apps/editor/component/ComponentNavigation.svelte +101 -51
  117. package/components/apps/editor/component/components.d.ts +3 -3
  118. package/components/apps/editor/component/components.js +59 -115
  119. package/components/apps/editor/componentsPanel/ComponentList.svelte +5 -4
  120. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -1
  121. package/components/apps/editor/componentsPanel/componentStaticValues.js +1 -0
  122. package/components/apps/editor/contextPanel/ComponentOutput.svelte +67 -0
  123. package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +21 -0
  124. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +15 -10
  125. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte.d.ts +0 -1
  126. package/components/apps/editor/contextPanel/ContextPanel.svelte +73 -136
  127. package/components/apps/editor/contextPanel/SubGridOutput.svelte +66 -0
  128. package/components/apps/editor/contextPanel/SubGridOutput.svelte.d.ts +19 -0
  129. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +41 -0
  130. package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte.d.ts +18 -0
  131. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +9 -0
  132. package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte.d.ts +16 -0
  133. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +25 -0
  134. package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +16 -0
  135. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +99 -0
  136. package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +24 -0
  137. package/components/apps/editor/contextPanel/components/TableActionOutput.svelte +17 -0
  138. package/components/apps/editor/contextPanel/components/TableActionOutput.svelte.d.ts +17 -0
  139. package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +13 -0
  140. package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte.d.ts +17 -0
  141. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +55 -23
  142. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +74 -44
  143. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +1 -1
  144. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +5 -9
  145. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +2 -2
  146. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +43 -37
  147. package/components/apps/editor/settingsPanel/GridPane.svelte +1 -3
  148. package/components/apps/editor/settingsPanel/GridTab.svelte +5 -15
  149. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -16
  150. package/components/apps/editor/settingsPanel/Recompute.svelte +1 -0
  151. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +6 -0
  152. package/components/apps/editor/settingsPanel/TableActions.svelte +4 -6
  153. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -8
  154. package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +2 -2
  155. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +58 -46
  156. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +1 -1
  157. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +2 -0
  158. package/components/apps/gridUtils.d.ts +1 -3
  159. package/components/apps/gridUtils.js +1 -15
  160. package/components/apps/rx.d.ts +7 -5
  161. package/components/apps/rx.js +37 -19
  162. package/components/apps/svelte-grid/Grid.svelte +167 -0
  163. package/components/apps/svelte-grid/Grid.svelte.d.ts +45 -0
  164. package/components/apps/svelte-grid/LICENSE +23 -0
  165. package/components/apps/svelte-grid/MoveResize.svelte +328 -0
  166. package/components/apps/svelte-grid/MoveResize.svelte.d.ts +46 -0
  167. package/components/apps/svelte-grid/types.d.ts +21 -0
  168. package/components/apps/svelte-grid/utils/container.d.ts +1 -0
  169. package/components/apps/svelte-grid/utils/container.js +4 -0
  170. package/components/apps/svelte-grid/utils/helper.d.ts +10 -0
  171. package/components/apps/svelte-grid/utils/helper.js +36 -0
  172. package/components/apps/svelte-grid/utils/item.d.ts +14 -0
  173. package/components/apps/svelte-grid/utils/item.js +192 -0
  174. package/components/apps/svelte-grid/utils/matrix.d.ts +6 -0
  175. package/components/apps/svelte-grid/utils/matrix.js +53 -0
  176. package/components/apps/svelte-grid/utils/other.d.ts +3 -0
  177. package/components/apps/svelte-grid/utils/other.js +30 -0
  178. package/components/apps/types.d.ts +19 -14
  179. package/components/apps/utils.d.ts +1 -1
  180. package/components/apps/utils.js +15 -9
  181. package/components/common/CloseButton.svelte +18 -0
  182. package/components/common/CloseButton.svelte.d.ts +27 -0
  183. package/components/common/badge/Badge.svelte +6 -1
  184. package/components/common/badge/Badge.svelte.d.ts +1 -0
  185. package/components/common/button/Button.svelte.d.ts +1 -1
  186. package/components/common/button/ButtonPopup.svelte.d.ts +1 -1
  187. package/components/common/drawer/DrawerContent.svelte +2 -6
  188. package/components/common/languageIcons/JavaScript.svelte +11 -0
  189. package/components/common/languageIcons/JavaScript.svelte.d.ts +25 -0
  190. package/components/common/languageIcons/LanguageIcon.svelte +3 -1
  191. package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -1
  192. package/components/common/menu/Menu.svelte +1 -1
  193. package/components/common/menu/Menu.svelte.d.ts +1 -1
  194. package/components/common/popup/Popup.svelte +2 -1
  195. package/components/common/popup/Popup.svelte.d.ts +9 -0
  196. package/components/common/table/AppRow.svelte +1 -4
  197. package/components/common/table/FlowRow.svelte +1 -4
  198. package/components/common/table/ScriptRow.svelte +1 -4
  199. package/components/common/tabs/Tab.svelte +1 -0
  200. package/components/common/tabs/Tab.svelte.d.ts +2 -0
  201. package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
  202. package/components/graph/FlowGraph.svelte +1 -1
  203. package/components/propertyPicker/ObjectViewer.svelte +1 -1
  204. package/components/propertyPicker/PropPicker.svelte +4 -1
  205. package/components/sidebar/SidebarContent.svelte +2 -2
  206. package/consts.js +1 -1
  207. package/history.js +8 -1
  208. package/package.json +24 -28
  209. package/utils.js +0 -1
  210. package/components/apps/editor/AppComponentInputs.svelte +0 -13
  211. package/components/apps/editor/AppComponentInputs.svelte.d.ts +0 -20
  212. package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +0 -92
  213. package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte.d.ts +0 -18
  214. package/components/graph/svelvet/d3/controllers/README.md +0 -3
  215. package/components/graph/svelvet/d3/controllers/d3Old.d.ts +0 -1
  216. package/components/graph/svelvet/d3/controllers/d3Old.js +0 -43
  217. package/components/graph/svelvet/docs/CHANGELOG.md +0 -145
  218. package/components/graph/svelvet/docs/DESIGN_PATTERNS.md +0 -44
  219. package/components/graph/svelvet/docs/DOCUMENTATION.md +0 -5
  220. package/components/graph/svelvet/docs/README.md +0 -34
  221. package/components/graph/svelvet/docs/TODO.md +0 -14
  222. package/components/graph/svelvet/docs/Tutorials.md +0 -25
  223. package/components/graph/svelvet/docs/images/css-background-after.png +0 -0
  224. package/components/graph/svelvet/docs/images/css-background-before.png +0 -0
  225. package/components/graph/svelvet/docs/images/custom-edges-after.png +0 -0
  226. package/components/graph/svelvet/docs/images/custom-edges-before.png +0 -0
  227. package/components/graph/svelvet/docs/images/custom-nodes-after.png +0 -0
  228. package/components/graph/svelvet/docs/images/custom-nodes-before.png +0 -0
  229. package/components/graph/svelvet/docs/images/custom-svelte-components-after.png +0 -0
  230. package/components/graph/svelvet/docs/images/custom-svelte-components-before.png +0 -0
  231. package/components/graph/svelvet/docs/images/html-docs-after.png +0 -0
  232. package/components/graph/svelvet/docs/images/html-docs-before.png +0 -0
  233. package/components/graph/svelvet/docs/images/minimap-after.png +0 -0
  234. package/components/graph/svelvet/docs/images/minimap-before.png +0 -0
  235. package/components/graph/svelvet/docs/images/node-classes-after.png +0 -0
  236. package/components/graph/svelvet/docs/images/node-classes-before.png +0 -0
  237. package/components/graph/svelvet/docs/images/node-create-after.png +0 -0
  238. package/components/graph/svelvet/docs/images/node-create-before.png +0 -0
@@ -1,4 +1,5 @@
1
- <script>import { getContext } from 'svelte';
1
+ <script>import Toggle from '../../Toggle.svelte';
2
+ import { getContext } from 'svelte';
2
3
  import GridPanel from './GridPanel.svelte';
3
4
  import PanelSection from './settingsPanel/common/PanelSection.svelte';
4
5
  import InputsSpecsEditor from './settingsPanel/InputsSpecsEditor.svelte';
@@ -17,15 +18,27 @@ const { selectedComponent, app, stateId } = getContext('AppViewerContext');
17
18
 
18
19
  {#each $app?.hiddenInlineScripts ?? [] as script, index (script.name)}
19
20
  {#if $selectedComponent === `bg_${index}`}
20
- <PanelSection title={`Background script inputs`}>
21
- {#key $stateId}
22
- <InputsSpecsEditor
23
- id={`bg_${index}`}
24
- shouldCapitalize={false}
25
- bind:inputSpecs={script.fields}
26
- userInputEnabled={false}
21
+ <div class="min-h-full flex flex-col divide-y">
22
+ <PanelSection title={`Configuration`}>
23
+ <Toggle
24
+ bind:checked={script.autoRefresh}
25
+ options={{ right: 'Run on start and app refresh' }}
27
26
  />
28
- {/key}
29
- </PanelSection>
27
+ </PanelSection>
28
+
29
+ {#if Object.keys(script.fields).length > 0}
30
+ <PanelSection title={`Inputs`}>
31
+ {#key $stateId}
32
+ <InputsSpecsEditor
33
+ id={`bg_${index}`}
34
+ shouldCapitalize={false}
35
+ bind:inputSpecs={script.fields}
36
+ userInputEnabled={false}
37
+ />
38
+ {/key}
39
+ </PanelSection>
40
+ {/if}
41
+ <div class="grow shrink" />
42
+ </div>
30
43
  {/if}
31
44
  {/each}
@@ -1,12 +1,14 @@
1
1
  <script>import { classNames } from '../../../utils';
2
2
  import { createEventDispatcher, getContext } from 'svelte';
3
- import Grid from '@windmill-labs/svelte-grid';
4
3
  import { twMerge } from 'tailwind-merge';
5
4
  import { columnConfiguration, isFixed, toggleFixed } from '../gridUtils';
6
5
  import Component from './component/Component.svelte';
7
- import { expandGriditem, findGridItem } from './appUtils';
6
+ import { expandGriditem, findGridItem, sortGridItemsPosition } from './appUtils';
8
7
  import { push } from '../../../history';
8
+ import Grid from '../svelte-grid/Grid.svelte';
9
+ import GridViewer from './GridViewer.svelte';
9
10
  export let containerHeight;
11
+ export let containerWidth = undefined;
10
12
  let classes = '';
11
13
  export { classes as class };
12
14
  export let style = '';
@@ -37,27 +39,26 @@ const onpointerup = () => {
37
39
  function selectComponent(id) {
38
40
  onComponent = id;
39
41
  if (!$connectingInput.opened) {
40
- $selectedComponent = id;
41
- /*
42
- $focusedGrid = {
43
- parentComponentId: parentId,
44
- subGridIndex: index
42
+ if (id !== $selectedComponent) {
43
+ $selectedComponent = id;
45
44
  }
46
- */
47
45
  }
48
46
  }
49
- function lock(gridComponent) {
50
- let fComponent = findGridItem($app, gridComponent.data.id);
47
+ function lock(dataItem) {
48
+ let fComponent = findGridItem($app, dataItem.data.id);
51
49
  if (fComponent) {
52
50
  fComponent = toggleFixed(fComponent);
53
51
  }
52
+ $app = $app;
54
53
  }
55
54
  // @ts-ignore
56
55
  let container;
57
56
  </script>
58
57
 
59
58
  <div
60
- class="relative w-full subgrid {visible ? 'visible' : 'invisible h-0 overflow-hidden'} "
59
+ class="translate-x-0 translate-y-0 relative w-full subgrid {visible
60
+ ? 'visible'
61
+ : 'invisible h-0 overflow-hidden'} "
61
62
  bind:this={container}
62
63
  >
63
64
  <div
@@ -72,68 +73,94 @@ let container;
72
73
  on:pointerup={onpointerup}
73
74
  style="height: {containerHeight}px; {style ?? ''}"
74
75
  >
75
- <div class={highlight && $mode !== 'preview' ? 'border-gray-400 border border-dashed' : ''}>
76
- <Grid
77
- bind:items={subGrid}
76
+ {#if $mode !== 'preview'}
77
+ <div class={highlight ? 'border-gray-400 border border-dashed' : ''}>
78
+ <Grid
79
+ items={subGrid}
80
+ on:redraw={(e) => {
81
+ push(history, $app)
82
+ subGrid = e.detail
83
+ }}
84
+ let:dataItem
85
+ rowHeight={36}
86
+ cols={columnConfiguration}
87
+ fastStart={true}
88
+ gap={[4, 2]}
89
+ scroller={container}
90
+ parentWidth={$parentWidth - 17}
91
+ {containerWidth}
92
+ >
93
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
94
+ {#if $connectingInput.opened}
95
+ <div
96
+ on:pointerenter={() => ($connectingInput.hoveredComponent = dataItem.data.id)}
97
+ on:pointerleave={() => ($connectingInput.hoveredComponent = undefined)}
98
+ class="absolute w-full h-full bg-black border-2 bg-opacity-25 z-20 flex justify-center items-center"
99
+ />
100
+ <div
101
+ style="transform: translate(-50%, -50%);"
102
+ class="absolute w-fit justify-center bg-indigo-500/90 left-[50%] top-[50%] z-50 px-6 rounded border text-white py-2 text-5xl center-center"
103
+ >
104
+ {dataItem.data.id}
105
+ </div>
106
+ {/if}
107
+
108
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
109
+ <div
110
+ on:pointerdown={() => selectComponent(dataItem.data.id)}
111
+ class={classNames(
112
+ 'h-full w-full center-center',
113
+ $selectedComponent === dataItem.data.id ? 'active-grid-item' : '',
114
+ 'top-0'
115
+ )}
116
+ >
117
+ <Component
118
+ render={visible}
119
+ {pointerdown}
120
+ component={dataItem.data}
121
+ selected={$selectedComponent === dataItem.data.id}
122
+ locked={isFixed(dataItem)}
123
+ on:lock={() => lock(dataItem)}
124
+ on:expand={() => {
125
+ const parentGridItem = findGridItem($app, id)
126
+
127
+ if (!parentGridItem) {
128
+ return
129
+ }
130
+ $selectedComponent = dataItem.data.id
131
+ push(history, $app)
132
+
133
+ expandGriditem(subGrid, dataItem, $breakpoint, parentGridItem)
134
+ $app = $app
135
+ }}
136
+ />
137
+ </div>
138
+ </Grid>
139
+ </div>
140
+ {:else}
141
+ <GridViewer
142
+ items={subGrid}
78
143
  let:dataItem
79
144
  rowHeight={36}
80
145
  cols={columnConfiguration}
81
- fastStart={true}
82
146
  gap={[4, 2]}
83
- scroller={container}
84
147
  parentWidth={$parentWidth - 17}
148
+ {containerWidth}
85
149
  >
86
- {#each subGrid as gridComponent (gridComponent.id)}
87
- {#if gridComponent?.data?.id && gridComponent?.data?.id === dataItem?.data?.id}
88
- <!-- svelte-ignore a11y-click-events-have-key-events -->
89
- {#if $connectingInput.opened}
90
- <div
91
- on:pointerenter={() => ($connectingInput.hoveredComponent = gridComponent.data.id)}
92
- on:pointerleave={() => ($connectingInput.hoveredComponent = undefined)}
93
- class="absolute w-full h-full bg-black border-2 bg-opacity-25 z-20 flex justify-center items-center"
94
- />
95
- <div
96
- style="transform: translate(-50%, -50%);"
97
- class="absolute w-fit justify-center bg-indigo-500/90 left-[50%] top-[50%] z-50 px-6 rounded border text-white py-2 text-5xl center-center"
98
- >
99
- {dataItem.data.id}
100
- </div>
101
- {/if}
102
-
103
- <!-- svelte-ignore a11y-click-events-have-key-events -->
104
- <div
105
- on:pointerdown={() => selectComponent(dataItem.data.id)}
106
- class={classNames(
107
- 'h-full w-full center-center',
108
- $selectedComponent === dataItem.data.id ? 'active-grid-item' : '',
109
- gridComponent.data.card ? 'border border-gray-100' : '',
110
- 'top-0'
111
- )}
112
- >
113
- <Component
114
- render={visible}
115
- {pointerdown}
116
- component={gridComponent.data}
117
- selected={$selectedComponent === dataItem.data.id}
118
- locked={isFixed(gridComponent)}
119
- on:lock={() => lock(gridComponent)}
120
- on:expand={() => {
121
- const parentGridItem = findGridItem($app, id)
122
-
123
- if (!parentGridItem) {
124
- return
125
- }
126
-
127
- push(history, $app)
128
-
129
- expandGriditem(subGrid, gridComponent, $breakpoint, parentGridItem)
130
- $app = { ...$app }
131
- }}
132
- />
133
- </div>
134
- {/if}
135
- {/each}
136
- </Grid>
137
- </div>
150
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
151
+ <div
152
+ on:pointerdown={() => selectComponent(dataItem.data.id)}
153
+ class={classNames('h-full w-full center-center', 'top-0')}
154
+ >
155
+ <Component
156
+ render={visible}
157
+ {pointerdown}
158
+ component={dataItem.data}
159
+ selected={$selectedComponent === dataItem.data.id}
160
+ locked={isFixed(dataItem)}
161
+ />
162
+ </div>
163
+ </GridViewer>
164
+ {/if}
138
165
  </div>
139
166
  </div>
@@ -1,15 +1,14 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import type { GridItem } from '../types';
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  containerHeight: number;
6
+ containerWidth?: number | undefined;
5
7
  class?: string | undefined;
6
8
  style?: string | undefined;
7
9
  noPadding?: boolean | undefined;
8
10
  noYPadding?: boolean | undefined;
9
- subGrid?: FilledItem<{
10
- data: import("./component").AppComponent;
11
- id: string;
12
- }>[] | undefined;
11
+ subGrid?: GridItem[] | undefined;
13
12
  visible?: boolean | undefined;
14
13
  id: string;
15
14
  shouldHighlight?: boolean | undefined;
@@ -1,13 +1,16 @@
1
- import type { App, EditorBreakpoint, FocusedGrid, GridItem } from '../types';
1
+ import type { App, ConnectingInput, EditorBreakpoint, FocusedGrid, GridItem } from '../types';
2
2
  import { type AppComponent } from './component';
3
- export declare function findGridItemParentId(app: App, id: string): string | undefined;
3
+ import type { Output, World } from '../rx';
4
+ import type { FilledItem } from '../svelte-grid/types';
5
+ export declare function findGridItemParentGrid(app: App, id: string): string | undefined;
6
+ export declare function allsubIds(app: App, parentId: string): string[];
4
7
  export declare function findGridItem(app: App, id: string): GridItem | undefined;
5
8
  export declare function getNextGridItemId(app: App): string;
6
9
  export declare function createNewGridItem(grid: GridItem[], id: string, data: AppComponent): GridItem;
10
+ export declare function getGridItems(app: App, focusedGrid: FocusedGrid | undefined): GridItem[];
7
11
  export declare function insertNewGridItem(app: App, data: AppComponent, focusedGrid: FocusedGrid | undefined, keepId?: boolean): string;
8
12
  export declare function getAllSubgridsAndComponentIds(app: App, component: AppComponent): [string[], string[]];
9
13
  export declare function deleteGridItem(app: App, component: AppComponent, parent: string | undefined, shouldKeepSubGrid: boolean): string[];
10
- export declare function duplicateGridItem(app: App, parent: string | undefined, id: string): string | undefined;
11
14
  type AvailableSpace = {
12
15
  left: number;
13
16
  right: number;
@@ -15,5 +18,12 @@ type AvailableSpace = {
15
18
  bottom: number;
16
19
  };
17
20
  export declare function findAvailableSpace(grid: GridItem[], gridItem: GridItem, editorBreakpoint: EditorBreakpoint, parentGridItem?: GridItem | undefined): AvailableSpace | undefined;
21
+ type Outputtable<Type> = {
22
+ -readonly [Property in keyof Type]: Output<Type[Property]>;
23
+ };
24
+ export declare function initOutput<I extends Record<string, any>>(world: World | undefined, id: string, init: I): Outputtable<I>;
18
25
  export declare function expandGriditem(grid: GridItem[], gridComponent: GridItem, $breakpoint: EditorBreakpoint, parentGridItem?: GridItem | undefined): void;
26
+ export declare function sortGridItemsPosition<T>(gridItems: FilledItem<T>[], width: number): FilledItem<T>[];
27
+ export declare function connectInput(connectingInput: ConnectingInput, componentId: string, path: string): ConnectingInput;
28
+ export declare function recursivelyFilterKeyInJSON(json: object, search: string, extraSearch?: string | undefined): object;
19
29
  export {};
@@ -1,8 +1,8 @@
1
1
  import { getNextId } from '../../flows/flowStateUtils';
2
2
  import { getRecommendedDimensionsByComponent } from './component';
3
- import gridHelp from '@windmill-labs/svelte-grid/src/utils/helper';
4
3
  import { gridColumns } from '../gridUtils';
5
4
  import { allItems } from '../utils';
5
+ import gridHelp from '../svelte-grid/utils/helper';
6
6
  function findGridItemById(root, subGrids, id) {
7
7
  for (const gridItem of allItems(root, subGrids)) {
8
8
  if (gridItem.id === id) {
@@ -11,7 +11,7 @@ function findGridItemById(root, subGrids, id) {
11
11
  }
12
12
  return undefined;
13
13
  }
14
- export function findGridItemParentId(app, id) {
14
+ export function findGridItemParentGrid(app, id) {
15
15
  const gridItem = app.grid.find((x) => x.id === id);
16
16
  if (gridItem) {
17
17
  return undefined;
@@ -21,11 +21,18 @@ export function findGridItemParentId(app, id) {
21
21
  const subGrid = app.subgrids[key];
22
22
  const gridItem = subGrid.find((x) => x.id === id);
23
23
  if (gridItem) {
24
- return key.split('-')[0];
24
+ return key;
25
25
  }
26
26
  }
27
27
  }
28
28
  }
29
+ export function allsubIds(app, parentId) {
30
+ let item = findGridItem(app, parentId);
31
+ if (!item?.data.numberOfSubgrids) {
32
+ return [parentId];
33
+ }
34
+ return getAllSubgridsAndComponentIds(app, item?.data)[1];
35
+ }
29
36
  export function findGridItem(app, id) {
30
37
  return findGridItemById(app.grid, app.subgrids, id);
31
38
  }
@@ -36,21 +43,20 @@ export function getNextGridItemId(app) {
36
43
  return id;
37
44
  }
38
45
  export function createNewGridItem(grid, id, data) {
39
- const appComponent = data;
40
- appComponent.id = id;
41
46
  const newComponent = {
42
47
  resizable: true,
43
48
  draggable: true,
44
49
  x: 0,
45
50
  y: 0
46
51
  };
47
- let newData = JSON.parse(JSON.stringify(appComponent));
52
+ let newData = JSON.parse(JSON.stringify(data));
53
+ newData.id = id;
48
54
  const newItem = {
49
55
  data: newData,
50
56
  id: id
51
57
  };
52
58
  gridColumns.forEach((column) => {
53
- const rec = getRecommendedDimensionsByComponent(appComponent.type, column);
59
+ const rec = getRecommendedDimensionsByComponent(newData.type, column);
54
60
  newItem[column] = {
55
61
  ...newComponent,
56
62
  min: { w: 1, h: 1 },
@@ -66,21 +72,20 @@ export function createNewGridItem(grid, id, data) {
66
72
  });
67
73
  return newItem;
68
74
  }
69
- export function insertNewGridItem(app, data, focusedGrid, keepId) {
70
- const id = keepId ? data.id : getNextGridItemId(app);
71
- if (!app.subgrids) {
72
- app.subgrids = {};
73
- }
75
+ export function getGridItems(app, focusedGrid) {
74
76
  if (!focusedGrid) {
75
- const newItem = createNewGridItem(app.grid, id, data);
76
- app.grid.push(newItem);
77
+ return app.grid;
77
78
  }
78
79
  else {
79
80
  const { parentComponentId, subGridIndex } = focusedGrid;
80
81
  const key = `${parentComponentId}-${subGridIndex ?? 0}`;
81
- const subGrid = app.subgrids[key] ?? [];
82
- subGrid.push(createNewGridItem(subGrid, id, data));
83
- app.subgrids[key] = subGrid;
82
+ return app?.subgrids?.[key] ?? [];
83
+ }
84
+ }
85
+ export function insertNewGridItem(app, data, focusedGrid, keepId) {
86
+ const id = keepId ? data.id : getNextGridItemId(app);
87
+ if (!app.subgrids) {
88
+ app.subgrids = {};
84
89
  }
85
90
  // We only want to set subgrids when we are not moving
86
91
  if (!keepId) {
@@ -88,6 +93,15 @@ export function insertNewGridItem(app, data, focusedGrid, keepId) {
88
93
  app.subgrids[`${id}-${i}`] = [];
89
94
  }
90
95
  }
96
+ const key = focusedGrid
97
+ ? `${focusedGrid?.parentComponentId}-${focusedGrid?.subGridIndex ?? 0}`
98
+ : undefined;
99
+ let grid = focusedGrid ? app.subgrids[key] : app.grid;
100
+ const newItem = createNewGridItem(grid, id, data);
101
+ grid.push(newItem);
102
+ if (focusedGrid) {
103
+ app.subgrids[key] = grid;
104
+ }
91
105
  return id;
92
106
  }
93
107
  export function getAllSubgridsAndComponentIds(app, component) {
@@ -131,24 +145,10 @@ export function deleteGridItem(app, component, parent, shouldKeepSubGrid) {
131
145
  }
132
146
  return components;
133
147
  }
134
- export function duplicateGridItem(app, parent, id) {
135
- const gridItem = findGridItem(app, id);
136
- if (gridItem) {
137
- const newId = getNextGridItemId(app);
138
- const newItem = JSON.parse(JSON.stringify(gridItem));
139
- newItem.id = newId;
140
- newItem.data.id = newId;
141
- let focusedGrid = parent
142
- ? { parentComponentId: parent.split('-')[0], subGridIndex: Number(parent.split('-')[1]) }
143
- : undefined;
144
- return insertNewGridItem(app, newItem.data, focusedGrid);
145
- }
146
- return undefined;
147
- }
148
148
  export function findAvailableSpace(grid, gridItem, editorBreakpoint, parentGridItem = undefined) {
149
149
  if (gridItem) {
150
150
  const breakpoint = editorBreakpoint === 'sm' ? 3 : 12;
151
- const maxHeight = parentGridItem ? parentGridItem[breakpoint].h - 1 : 12;
151
+ const maxHeight = parentGridItem ? parentGridItem[breakpoint].h - 1 : 16;
152
152
  const maxWidth = 12;
153
153
  const availableSpace = {
154
154
  left: 0,
@@ -226,6 +226,12 @@ function isOverlapping(item1, item2) {
226
226
  item1.y < item2.y + item2.h &&
227
227
  item1.y + item1.h > item2.y);
228
228
  }
229
+ export function initOutput(world, id, init) {
230
+ if (!world) {
231
+ return {};
232
+ }
233
+ return Object.fromEntries(Object.entries(init).map(([key, value]) => [key, world.newOutput(id, key, value)]));
234
+ }
229
235
  export function expandGriditem(grid, gridComponent, $breakpoint, parentGridItem = undefined) {
230
236
  const availableSpace = findAvailableSpace(grid, gridComponent, $breakpoint, parentGridItem);
231
237
  if (!availableSpace) {
@@ -233,9 +239,72 @@ export function expandGriditem(grid, gridComponent, $breakpoint, parentGridItem
233
239
  }
234
240
  const { left, right, top, bottom } = availableSpace;
235
241
  const width = $breakpoint === 'sm' ? 3 : 12;
236
- const previousGridItem = JSON.parse(JSON.stringify(gridComponent[width]));
237
- gridComponent[width].x = previousGridItem.x - left;
238
- gridComponent[width].y = previousGridItem.y - top;
239
- gridComponent[width].w = previousGridItem.w + left + right;
240
- gridComponent[width].h = previousGridItem.h + top + bottom;
242
+ const item = gridComponent[width];
243
+ item.x = item.x - left;
244
+ item.y = item.y - top;
245
+ item.w = item.w + left + right;
246
+ item.h = item.h + top + bottom;
247
+ }
248
+ export function sortGridItemsPosition(gridItems, width) {
249
+ return gridItems.sort((a, b) => {
250
+ const aX = a[width].x;
251
+ const aY = a[width].y;
252
+ const bX = b[width].x;
253
+ const bY = b[width].y;
254
+ if (aY < bY) {
255
+ return -1;
256
+ }
257
+ else if (aY > bY) {
258
+ return 1;
259
+ }
260
+ else {
261
+ if (aX < bX) {
262
+ return -1;
263
+ }
264
+ else if (aX > bX) {
265
+ return 1;
266
+ }
267
+ else {
268
+ return 0;
269
+ }
270
+ }
271
+ });
272
+ }
273
+ export function connectInput(connectingInput, componentId, path) {
274
+ if (connectingInput) {
275
+ connectingInput = {
276
+ opened: false,
277
+ input: {
278
+ connection: {
279
+ componentId,
280
+ path
281
+ },
282
+ type: 'connected'
283
+ },
284
+ hoveredComponent: undefined
285
+ };
286
+ }
287
+ return connectingInput;
288
+ }
289
+ export function recursivelyFilterKeyInJSON(json, search, extraSearch) {
290
+ if (!search || search == '') {
291
+ return json;
292
+ }
293
+ let filteredJSON = {};
294
+ Object.keys(json).forEach((key) => {
295
+ if (key.toLowerCase().includes(search.toLowerCase()) ||
296
+ extraSearch?.toLowerCase().includes(search.toLowerCase()) ||
297
+ (typeof json[key] === 'string' && json[key].toLowerCase().includes(search.toLowerCase())) ||
298
+ (typeof json[key] === 'number' &&
299
+ json[key].toString().toLowerCase().includes(search.toLowerCase()))) {
300
+ filteredJSON[key] = json[key];
301
+ }
302
+ else if (typeof json[key] === 'object') {
303
+ const res = recursivelyFilterKeyInJSON(json[key], search, extraSearch);
304
+ if (Object.keys(res).length !== 0) {
305
+ filteredJSON[key] = res;
306
+ }
307
+ }
308
+ });
309
+ return filteredJSON;
241
310
  }