windmill-components 1.55.0 → 1.55.2

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 (203) hide show
  1. package/common.d.ts +1 -1
  2. package/common.js +3 -0
  3. package/components/AppConnect.svelte +2 -2
  4. package/components/ArgInput.svelte +1 -1
  5. package/components/CronInput.svelte +54 -53
  6. package/components/Dropdown.svelte +21 -9
  7. package/components/Editor.svelte +10 -10
  8. package/components/EditorBar.svelte +2 -2
  9. package/components/FlowBuilder.svelte +41 -25
  10. package/components/FlowGraphViewer.svelte +6 -2
  11. package/components/FlowMetadata.svelte +8 -3
  12. package/components/FlowViewer.svelte +2 -2
  13. package/components/FolderEditor.svelte +299 -0
  14. package/components/FolderEditor.svelte.d.ts +16 -0
  15. package/components/FolderInfo.svelte +13 -0
  16. package/components/FolderInfo.svelte.d.ts +16 -0
  17. package/components/FolderUsageInfo.svelte +17 -0
  18. package/components/FolderUsageInfo.svelte.d.ts +16 -0
  19. package/components/GroupEditor.svelte +287 -0
  20. package/components/GroupEditor.svelte.d.ts +18 -0
  21. package/components/GroupInfo.svelte +22 -0
  22. package/components/GroupInfo.svelte.d.ts +16 -0
  23. package/components/InputTransformForm.svelte +16 -7
  24. package/components/MoveDrawer.svelte +75 -0
  25. package/components/MoveDrawer.svelte.d.ts +19 -0
  26. package/components/Path.svelte +243 -96
  27. package/components/Path.svelte.d.ts +1 -4
  28. package/components/RadioButton.svelte +2 -0
  29. package/components/RadioButton.svelte.d.ts +1 -0
  30. package/components/ResourceEditor.svelte +11 -16
  31. package/components/RunForm.svelte +21 -4
  32. package/components/RunForm.svelte.d.ts +1 -1
  33. package/components/ScheduleEditor.svelte +226 -0
  34. package/components/ScheduleEditor.svelte.d.ts +26 -0
  35. package/components/ScriptBuilder.svelte +109 -114
  36. package/components/ScriptEditor.svelte +17 -14
  37. package/components/ScriptEditor.svelte.d.ts +1 -0
  38. package/components/ScriptPicker.svelte +55 -29
  39. package/components/ScriptPicker.svelte.d.ts +1 -0
  40. package/components/ShareModal.svelte +94 -73
  41. package/components/ShareModal.svelte.d.ts +2 -4
  42. package/components/SimpleEditor.svelte +15 -10
  43. package/components/TemplateEditor.svelte +496 -0
  44. package/components/TemplateEditor.svelte.d.ts +25 -0
  45. package/components/TestJobLoader.svelte +1 -1
  46. package/components/VariableEditor.svelte +2 -1
  47. package/components/apps/CreateApp.svelte +1 -1
  48. package/components/apps/components/buttons/AppButton.svelte +3 -3
  49. package/components/apps/components/dataDisplay/AppBarChart.svelte +5 -4
  50. package/components/apps/components/dataDisplay/AppPieChart.svelte +3 -3
  51. package/components/apps/components/dateInputs/AppDateInput.svelte +34 -0
  52. package/components/apps/components/dateInputs/AppDateInput.svelte.d.ts +22 -0
  53. package/components/apps/components/form/AppForm.svelte +4 -5
  54. package/components/apps/components/form/AppForm.svelte.d.ts +0 -1
  55. package/components/apps/components/helpers/AlignWrapper.svelte +3 -4
  56. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +2 -3
  57. package/components/apps/components/helpers/InputValue.svelte +54 -5
  58. package/components/apps/components/helpers/InputValue.svelte.d.ts +1 -0
  59. package/components/apps/components/helpers/NonRunnableComponent.svelte +2 -1
  60. package/components/apps/components/helpers/RefreshButton.svelte +20 -0
  61. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +16 -0
  62. package/components/apps/components/helpers/RunnableComponent.svelte +38 -42
  63. package/components/apps/components/helpers/RunnableWrapper.svelte +6 -3
  64. package/components/apps/components/numberInputs/AppNumberInput.svelte +8 -11
  65. package/components/apps/components/numberInputs/AppNumberInput.svelte.d.ts +1 -0
  66. package/components/apps/components/selectInputs/AppCheckbox.svelte +1 -1
  67. package/components/apps/components/selectInputs/AppSelect.svelte +26 -0
  68. package/components/apps/components/selectInputs/AppSelect.svelte.d.ts +22 -0
  69. package/components/apps/components/table/AppTable.svelte +159 -0
  70. package/components/apps/components/{dataDisplay → table}/AppTable.svelte.d.ts +0 -0
  71. package/components/apps/components/table/AppTableFooter.svelte +54 -0
  72. package/components/apps/components/table/AppTableFooter.svelte.d.ts +20 -0
  73. package/components/apps/components/table/tableOptions.d.ts +10 -0
  74. package/components/apps/components/table/tableOptions.js +11 -0
  75. package/components/apps/components/textInputs/AppTextInput.svelte +17 -10
  76. package/components/apps/components/textInputs/AppTextInput.svelte.d.ts +2 -0
  77. package/components/apps/editor/AppEditor.svelte +35 -20
  78. package/components/apps/editor/AppEditorHeader.svelte +15 -7
  79. package/components/apps/editor/AppPreview.svelte +5 -3
  80. package/components/apps/editor/AppPreview.svelte.d.ts +4 -1
  81. package/components/apps/editor/ComponentEditor.svelte +21 -3
  82. package/components/apps/editor/ComponentEditor.svelte.d.ts +2 -0
  83. package/components/apps/editor/ComponentHeader.svelte +21 -4
  84. package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  85. package/components/apps/editor/GridEditor.svelte +40 -20
  86. package/components/apps/editor/RecomputeAllComponents.svelte +5 -7
  87. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -82
  88. package/components/apps/editor/componentsPanel/data.js +78 -29
  89. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +5 -1
  90. package/components/apps/editor/contextPanel/ContextPanel.svelte +35 -152
  91. package/components/apps/editor/contextPanel/ContextPanel.svelte.d.ts +1 -3
  92. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +64 -0
  93. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +18 -0
  94. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +95 -0
  95. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +20 -0
  96. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +32 -0
  97. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +19 -0
  98. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +63 -0
  99. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +17 -0
  100. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +44 -0
  101. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte.d.ts +14 -0
  102. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +126 -0
  103. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +16 -0
  104. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +41 -0
  105. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte.d.ts +17 -0
  106. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +44 -0
  107. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte.d.ts +18 -0
  108. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +48 -130
  109. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +3 -0
  110. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -2
  111. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
  112. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -2
  113. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +46 -0
  114. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +17 -0
  115. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +1 -1
  116. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -1
  117. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte → inputEditor/ConnectedInputEditor.svelte} +1 -2
  118. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte.d.ts → inputEditor/ConnectedInputEditor.svelte.d.ts} +1 -1
  119. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +12 -0
  120. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +17 -0
  121. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte → inputEditor/StaticInputEditor.svelte} +5 -5
  122. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte.d.ts → inputEditor/StaticInputEditor.svelte.d.ts} +1 -1
  123. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +6 -3
  124. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +66 -22
  125. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +2 -3
  126. package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +1 -1
  127. package/components/apps/gridUtils.d.ts +3 -1
  128. package/components/apps/gridUtils.js +16 -1
  129. package/components/apps/inputType.d.ts +10 -4
  130. package/components/apps/rx.d.ts +8 -8
  131. package/components/apps/rx.js +17 -9
  132. package/components/apps/types.d.ts +14 -2
  133. package/components/apps/utils.d.ts +4 -3
  134. package/components/apps/utils.js +37 -5
  135. package/components/common/drawer/Drawer.svelte +1 -1
  136. package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  137. package/components/common/popup/Popup.svelte +0 -2
  138. package/components/common/popup/Popup.svelte.d.ts +0 -4
  139. package/components/common/table/FlowRow.svelte +21 -7
  140. package/components/common/table/FlowRow.svelte.d.ts +2 -0
  141. package/components/common/table/ScriptRow.svelte +22 -7
  142. package/components/common/table/ScriptRow.svelte.d.ts +2 -0
  143. package/components/common/toggleButton/ToggleButton.svelte +1 -1
  144. package/components/common/toggleButton/ToggleButtonGroup.svelte +1 -1
  145. package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +1 -0
  146. package/components/flows/content/FlowEditorPanel.svelte +10 -16
  147. package/components/flows/content/FlowInputs.svelte +18 -4
  148. package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  149. package/components/flows/content/FlowModuleComponent.svelte +1 -1
  150. package/components/flows/content/FlowModuleWrapper.svelte +26 -1
  151. package/components/flows/content/FlowSchedules.svelte +5 -0
  152. package/components/flows/content/FlowSettings.svelte +16 -24
  153. package/components/flows/content/FlowSettings.svelte.d.ts +0 -1
  154. package/components/flows/header/FlowPreviewButtons.svelte +13 -10
  155. package/components/flows/map/FlowErrorHandlerItem.svelte +1 -1
  156. package/components/flows/map/FlowModuleSchemaMap.svelte +12 -3
  157. package/components/flows/map/FlowSettingsItem.svelte +8 -15
  158. package/components/flows/map/InsertModuleButton.svelte +29 -2
  159. package/components/flows/map/InsertModuleButton.svelte.d.ts +3 -1
  160. package/components/flows/map/MapItem.svelte +2 -1
  161. package/components/flows/map/MapItem.svelte.d.ts +1 -0
  162. package/components/flows/pickers/WorkspaceScriptPicker.svelte +3 -0
  163. package/components/flows/previousResults.js +1 -1
  164. package/components/graph/FlowGraph.svelte +15 -15
  165. package/components/graph/model.d.ts +35 -1
  166. package/components/home/ItemsList.svelte +20 -12
  167. package/components/jobs/JobDetail.svelte +9 -3
  168. package/components/sidebar/SidebarContent.svelte +4 -3
  169. package/components/sidebar/UserMenu.svelte +1 -1
  170. package/editorUtils.d.ts +7 -1
  171. package/editorUtils.js +98 -3
  172. package/es5.d.ts.txt +4526 -0
  173. package/gen/index.d.ts +2 -0
  174. package/gen/index.js +1 -0
  175. package/gen/models/CompletedJob.d.ts +1 -0
  176. package/gen/models/EditSchedule.d.ts +0 -2
  177. package/gen/models/Folder.d.ts +5 -0
  178. package/gen/models/Folder.js +4 -0
  179. package/gen/models/QueuedJob.d.ts +1 -0
  180. package/gen/models/Script.d.ts +1 -1
  181. package/gen/models/User.d.ts +1 -0
  182. package/gen/services/FolderService.d.ts +128 -0
  183. package/gen/services/FolderService.js +151 -0
  184. package/gen/services/GranularAclService.d.ts +3 -3
  185. package/gen/services/GroupService.d.ts +5 -1
  186. package/gen/services/GroupService.js +4 -1
  187. package/gen/services/JobService.d.ts +25 -5
  188. package/gen/services/JobService.js +10 -5
  189. package/gen/services/ScriptService.d.ts +2 -1
  190. package/gen/services/UserService.d.ts +9 -0
  191. package/gen/services/UserService.js +15 -0
  192. package/package.json +485 -461
  193. package/script_helpers.d.ts +2 -2
  194. package/script_helpers.js +4 -4
  195. package/stores.d.ts +1 -0
  196. package/utils.d.ts +3 -0
  197. package/utils.js +44 -7
  198. package/components/GroupModal.svelte +0 -98
  199. package/components/GroupModal.svelte.d.ts +0 -17
  200. package/components/apps/components/dataDisplay/AppTable.svelte +0 -132
  201. package/components/apps/components/dataDisplay/app.md +0 -49
  202. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte +0 -29
  203. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte.d.ts +0 -16
@@ -8,42 +8,33 @@ import { getNextId } from '../../../flows/flowStateUtils';
8
8
  import { faAngleDown } from '@fortawesome/free-solid-svg-icons';
9
9
  import { isOpenStore } from './store';
10
10
  import { gridColumns } from '../../gridUtils';
11
- const { app } = getContext('AppEditorContext');
11
+ const { app, selectedComponent } = getContext('AppEditorContext');
12
12
  function getMinDimensionsByComponent(componentType, column) {
13
- console.log(componentType, column);
14
- if (componentType === 'buttoncomponent') {
15
- return column === 3 ? { w: 1, h: 1 } : { w: 3, h: 1 };
16
- }
17
- else if (componentType === 'formcomponent') {
18
- return column === 3 ? { w: 2, h: 3 } : { w: 6, h: 4 };
19
- }
20
- else if (componentType === 'textcomponent') {
21
- return column === 3 ? { w: 1, h: 1 } : { w: 3, h: 1 };
22
- }
23
- else if (componentType === 'textinputcomponent') {
24
- return column === 3 ? { w: 1, h: 2 } : { w: 3, h: 2 };
25
- }
26
- else if (componentType === 'numberinputcomponent') {
27
- return column === 3 ? { w: 1, h: 2 } : { w: 3, h: 2 };
28
- }
29
- else if (componentType === 'barchartcomponent') {
30
- return column === 3 ? { w: 2, h: 4 } : { w: 6, h: 4 };
31
- }
32
- else if (componentType === 'piechartcomponent') {
33
- return column === 3 ? { w: 2, h: 4 } : { w: 6, h: 4 };
34
- }
35
- else if (componentType === 'tablecomponent') {
36
- return column === 3 ? { w: 3, h: 4 } : { w: 12, h: 4 };
37
- }
38
- else if (componentType === 'displaycomponent') {
39
- return column === 3 ? { w: 2, h: 2 } : { w: 6, h: 4 };
40
- }
41
- else if (componentType === 'checkboxcomponent') {
42
- return column === 3 ? { w: 1, h: 1 } : { w: 3, h: 1 };
43
- }
44
- else {
45
- return { w: 2, h: 1 };
13
+ // Dimensions key formula: <mobile width>:<mobile height>-<desktop width>:<desktop height>
14
+ const dimensions = {
15
+ '1:1-3:1': ['buttoncomponent', 'textcomponent', 'checkboxcomponent'],
16
+ '1:2-2:1': ['textinputcomponent', 'numberinputcomponent', 'selectcomponent'],
17
+ '2:2-6:4': ['displaycomponent'],
18
+ '2:3-6:4': ['formcomponent'],
19
+ '2:4-6:4': ['barchartcomponent', 'piechartcomponent'],
20
+ '3:4-12:4': ['tablecomponent']
21
+ };
22
+ // Finds the key that is associated with the component type and extracts the dimensions from it
23
+ const [dimension] = Object.entries(dimensions).find(([_, value]) => value.includes(componentType)) || ['2:1-2:1'];
24
+ const size = dimension.split('-')[column === 3 ? 0 : 1].split(':');
25
+ return { w: +size[0], h: +size[1] };
26
+ }
27
+ function getMaxDimensionsByComponent(componentType, column) {
28
+ if ([
29
+ 'textinputcomponent',
30
+ 'numberinputcomponent',
31
+ 'selectcomponent',
32
+ 'dateinputcomponent',
33
+ 'passwordinputcomponent'
34
+ ].includes(componentType)) {
35
+ return { w: column, h: 1 };
46
36
  }
37
+ return { w: column, h: 12 };
47
38
  }
48
39
  function addComponent(appComponent) {
49
40
  const grid = $app.grid ?? [];
@@ -63,58 +54,15 @@ function addComponent(appComponent) {
63
54
  id: id
64
55
  };
65
56
  gridColumns.forEach((column) => {
66
- newItem[column] = newComponent;
67
- const position = gridHelp.findSpace(newItem, grid, column);
68
57
  const min = getMinDimensionsByComponent(appComponent.type, column);
69
- const max = { w: 12, h: 12 };
70
- newItem[column].w = min.w;
71
- newItem[column].h = min.h;
58
+ const max = getMaxDimensionsByComponent(appComponent.type, column);
59
+ newItem[column] = { ...newComponent, min, max, w: min.w, h: min.h };
60
+ const position = gridHelp.findSpace(newItem, grid, column);
72
61
  newItem[column] = { ...newItem[column], ...position, min, max };
73
62
  });
74
63
  $app.grid = [...grid, newItem];
64
+ $selectedComponent = id;
75
65
  }
76
- const products = {
77
- 1: {
78
- name: 'Product 1',
79
- description: 'Product 1 description',
80
- image: 'https://picsum.photos/200'
81
- },
82
- 2: {
83
- name: 'Product 2',
84
- description: 'Product 2 description',
85
- image: 'https://picsum.photos/200'
86
- },
87
- 3: {
88
- name: 'Product 3',
89
- description: 'Product 3 description',
90
- image: 'https://picsum.photos/200'
91
- },
92
- 4: {
93
- name: 'Product 4',
94
- description: 'Product 4 description',
95
- image: 'https://picsum.photos/200'
96
- },
97
- 5: {
98
- name: 'Product 5',
99
- description: 'Product 5 description',
100
- image: 'https://picsum.photos/200'
101
- },
102
- 6: {
103
- name: 'Product 6',
104
- description: 'Product 6 description',
105
- image: 'https://picsum.photos/200'
106
- },
107
- 7: {
108
- name: 'Product 7',
109
- description: 'Product 7 description',
110
- image: 'https://picsum.photos/200'
111
- },
112
- 8: {
113
- name: 'Product 8',
114
- description: 'Product 8 description',
115
- image: 'https://picsum.photos/200'
116
- }
117
- };
118
66
  onMount(() => {
119
67
  isOpenStore.addItems(componentSets.map((set) => ({ [set.title]: true })));
120
68
  });
@@ -140,7 +88,7 @@ onMount(() => {
140
88
  on:click={() => addComponent(item)}
141
89
  title={displayData[item.type].name}
142
90
  class="border shadow-sm h-16 p-2 flex flex-col gap-2 items-center
143
- justify-center bg-white rounded-md scale-100 hover:scale-105 ease-in duration-75"
91
+ justify-center bg-white rounded-md hover:bg-gray-100 duration-200"
144
92
  >
145
93
  <svelte:component this={displayData[item.type].icon} class="text-blue-800" />
146
94
  <div class="text-xs w-full text-center ellipsize">
@@ -3,50 +3,97 @@ const inputs = {
3
3
  title: 'Inputs',
4
4
  components: [
5
5
  {
6
+ verticalAlignment: 'center',
6
7
  id: 'textinputcomponent',
7
8
  type: 'textinputcomponent',
8
9
  componentInput: undefined,
9
- configuration: {
10
- label: {
11
- type: 'static',
12
- visible: false,
13
- value: 'Label',
14
- fieldType: 'textarea',
15
- defaultValue: 'Label'
16
- }
17
- },
10
+ configuration: {},
11
+ card: false
12
+ },
13
+ {
14
+ verticalAlignment: 'center',
15
+ id: 'passwordinputcomponent',
16
+ type: 'passwordinputcomponent',
17
+ componentInput: undefined,
18
+ configuration: {},
18
19
  card: false
19
20
  },
20
21
  {
22
+ verticalAlignment: 'center',
21
23
  id: 'numberinputcomponent',
22
24
  type: 'numberinputcomponent',
23
25
  componentInput: undefined,
26
+ configuration: {},
27
+ card: false
28
+ },
29
+ {
30
+ verticalAlignment: 'center',
31
+ id: 'dateinputcomponent',
32
+ type: 'dateinputcomponent',
33
+ componentInput: undefined,
24
34
  configuration: {
25
- label: {
35
+ minDate: {
26
36
  type: 'static',
27
37
  visible: false,
28
- value: 'Title',
29
- fieldType: 'textarea',
30
- defaultValue: 'Title'
38
+ value: '',
39
+ fieldType: 'date',
40
+ defaultValue: ''
41
+ },
42
+ maxDate: {
43
+ type: 'static',
44
+ visible: false,
45
+ value: '',
46
+ fieldType: 'date',
47
+ defaultValue: ''
31
48
  }
32
49
  },
33
- card: false
50
+ card: false,
51
+ softWrap: true
34
52
  },
35
53
  {
36
54
  ...defaultAlignement,
37
55
  id: 'checkboxcomponent',
38
56
  type: 'checkboxcomponent',
57
+ componentInput: undefined,
39
58
  configuration: {
40
59
  label: {
41
60
  type: 'static',
42
61
  visible: true,
43
- value: 'Lorem ipsum',
62
+ value: 'Label',
44
63
  fieldType: 'textarea',
45
- defaultValue: 'Lorem ipsum'
64
+ defaultValue: 'Label'
46
65
  }
47
66
  },
48
- componentInput: undefined,
49
67
  card: false
68
+ },
69
+ {
70
+ verticalAlignment: 'center',
71
+ id: 'selectcomponent',
72
+ type: 'selectcomponent',
73
+ componentInput: undefined,
74
+ configuration: {
75
+ items: {
76
+ type: 'static',
77
+ fieldType: 'array',
78
+ subFieldType: 'object',
79
+ defaultValue: [
80
+ { value: 'foo', label: 'Foo' },
81
+ { value: 'bar', label: 'Bar' }
82
+ ],
83
+ value: [
84
+ { value: 'foo', label: 'Foo' },
85
+ { value: 'bar', label: 'Bar' }
86
+ ]
87
+ },
88
+ itemKey: {
89
+ type: 'static',
90
+ fieldType: 'text',
91
+ defaultValue: 'value',
92
+ value: 'value'
93
+ }
94
+ },
95
+ card: false,
96
+ softWrap: true
50
97
  }
51
98
  ]
52
99
  };
@@ -58,10 +105,11 @@ const buttons = {
58
105
  id: 'buttoncomponent',
59
106
  type: 'buttoncomponent',
60
107
  componentInput: {
61
- type: 'static',
62
- fieldType: 'textarea',
63
- defaultValue: '',
64
- value: ''
108
+ type: 'runnable',
109
+ fieldType: 'any',
110
+ fields: {},
111
+ runnable: undefined,
112
+ defaultValue: undefined
65
113
  },
66
114
  recomputeIds: undefined,
67
115
  configuration: {
@@ -92,14 +140,15 @@ const buttons = {
92
140
  card: false
93
141
  },
94
142
  {
95
- ...defaultAlignement,
143
+ horizontalAlignment: 'center',
96
144
  id: 'formcomponent',
97
145
  type: 'formcomponent',
98
146
  componentInput: {
99
- type: 'static',
100
- fieldType: 'textarea',
101
- defaultValue: '',
102
- value: ''
147
+ type: 'runnable',
148
+ fieldType: 'any',
149
+ fields: {},
150
+ runnable: undefined,
151
+ defaultValue: undefined
103
152
  },
104
153
  recomputeIds: undefined,
105
154
  configuration: {
@@ -131,8 +180,8 @@ const buttons = {
131
180
  }
132
181
  ]
133
182
  };
134
- const dataDisplay = {
135
- title: 'Data Display',
183
+ const display = {
184
+ title: 'Display',
136
185
  components: [
137
186
  {
138
187
  ...defaultAlignement,
@@ -269,5 +318,5 @@ const dataDisplay = {
269
318
  }
270
319
  ]
271
320
  };
272
- const componentSets = [buttons, inputs, dataDisplay];
321
+ const componentSets = [buttons, inputs, display];
273
322
  export { componentSets };
@@ -19,4 +19,8 @@ $: $worldStore?.outputsById[componentId] &&
19
19
  subscribeToAllOutputs($worldStore.outputsById[componentId]);
20
20
  </script>
21
21
 
22
- <ObjectViewer json={object} on:select topBrackets={true} />
22
+ {#if Object.keys(object).length > 0}
23
+ <ObjectViewer json={object} on:select topBrackets={false} />
24
+ {:else}
25
+ <div class="text-xs text-gray-500 px-4">No outputs</div>
26
+ {/if}
@@ -1,20 +1,9 @@
1
- <script>import { fade } from 'svelte/transition';
2
- import { Drawer } from '../../../common';
3
- import Button from '../../../common/button/Button.svelte';
4
- import DrawerContent from '../../../common/drawer/DrawerContent.svelte';
5
- import ScriptEditor from '../../../ScriptEditor.svelte';
6
- import { Preview } from '../../../../gen';
7
- import { DENO_INIT_CODE_CLEAR } from '../../../../script_helpers';
8
- import { classNames, emptySchema } from '../../../../utils';
9
- import { faEdit, faPlus, faSave, faTrash } from '@fortawesome/free-solid-svg-icons';
1
+ <script>import { classNames } from '../../../../utils';
10
2
  import { getContext } from 'svelte';
3
+ import { displayData } from '../../utils';
11
4
  import PanelSection from '../settingsPanel/common/PanelSection.svelte';
12
5
  import ComponentOutputViewer from './ComponentOutputViewer.svelte';
13
- export let appPath;
14
- const { connectingInput, staticOutputs, app, worldStore, selectedComponent } = getContext('AppEditorContext');
15
- let newScriptPath;
16
- let ignorePathError = false;
17
- $: isTakenPath = Object.keys($app.inlineScripts).includes(newScriptPath);
6
+ const { connectingInput, staticOutputs, worldStore, selectedComponent, app } = getContext('AppEditorContext');
18
7
  function connectInput(componentId, path) {
19
8
  if ($connectingInput) {
20
9
  $connectingInput = {
@@ -29,156 +18,50 @@ function connectInput(componentId, path) {
29
18
  };
30
19
  }
31
20
  }
32
- function createScript() {
33
- // To prevent the error message flashing up just before the drawer is closed
34
- ignorePathError = true;
35
- const path = `${appPath}/inline-script/${newScriptPath}`;
36
- const inlineScript = {
37
- content: DENO_INIT_CODE_CLEAR,
38
- language: Preview.language.DENO,
39
- path,
40
- schema: emptySchema()
41
- };
42
- if ($app.inlineScripts) {
43
- $app.inlineScripts[newScriptPath] = inlineScript;
21
+ function getComponentNameById(componentId) {
22
+ const component = $app.grid.find((c) => c.data.id === componentId);
23
+ if (component?.data.type) {
24
+ return displayData[component?.data.type].name;
44
25
  }
45
- else {
46
- $app.inlineScripts = {
47
- [newScriptPath]: inlineScript
48
- };
49
- }
50
- scriptCreationDrawer?.closeDrawer?.();
51
- selectedScript = inlineScript;
52
- scriptEditorDrawer.openDrawer?.();
53
- }
54
- function afterCreateScript() {
55
- newScriptPath = '';
56
- ignorePathError = false;
57
26
  }
58
- let selectedScript = undefined;
59
- let scriptEditorDrawer;
60
- let scriptCreationDrawer = undefined;
61
27
  </script>
62
28
 
63
- <Drawer bind:this={scriptCreationDrawer} size="600px" on:afterClose={afterCreateScript}>
64
- <DrawerContent title="Script creation" on:close={scriptCreationDrawer.closeDrawer}>
65
- <label for="pathInput" class="text-sm font-semibold"> Script name </label>
66
- <div class="flex justify-between items-center gap-4">
67
- <!-- svelte-ignore a11y-autofocus -->
68
- <input
69
- autofocus
70
- id="pathInput"
71
- class="grow min-w-[150px]"
72
- bind:value={newScriptPath}
73
- on:keypress={(e) => e.key === 'Enter' && createScript()}
74
- />
75
- <Button on:click={createScript} size="sm" disabled={isTakenPath} startIcon={{ icon: faPlus }}>
76
- Create
77
- </Button>
78
- </div>
79
- {#if isTakenPath && !ignorePathError}
80
- <div transition:fade={{ duration: 100 }} class="text-sm text-red-600 h-5 mt-1">
81
- This name is already used.
82
- </div>
83
- {/if}
84
- </DrawerContent>
85
- </Drawer>
86
-
87
- <Drawer bind:this={scriptEditorDrawer} size="1200px">
88
- <DrawerContent
89
- title="Script Editor"
90
- noPadding
91
- forceOverflowVisible
92
- on:close={scriptEditorDrawer.closeDrawer}
93
- >
94
- {#if selectedScript}
95
- <ScriptEditor
96
- lang={selectedScript.language}
97
- bind:code={selectedScript.content}
98
- path={selectedScript.path}
99
- bind:schema={selectedScript.schema}
100
- fixedOverflowWidgets={false}
101
- />
102
- {/if}
103
- <svelte:fragment slot="actions">
104
- <Button startIcon={{ icon: faSave }} disabled>Automatically Saved</Button>
105
- </svelte:fragment>
106
- </DrawerContent>
107
- </Drawer>
108
-
109
- <PanelSection title="Inline scripts">
110
- <svelte:fragment slot="action">
111
- <Button
112
- size="xs"
113
- color="light"
114
- variant="border"
115
- on:click={scriptCreationDrawer?.openDrawer}
116
- startIcon={{ icon: faPlus }}
117
- iconOnly
118
- />
119
- </svelte:fragment>
120
-
121
- {#if $app.inlineScripts && Object.keys($app.inlineScripts).length > 0}
122
- <div class="w-full border rounded-sm">
123
- {#each $app.inlineScripts ? Object.entries($app.inlineScripts) : [] as [key, value], index}
124
- <div
29
+ <PanelSection title="Outputs">
30
+ {#each Object.entries($staticOutputs) as [componentId, outputs] (componentId)}
31
+ {#if outputs.length > 0 && $worldStore?.outputsById[componentId]}
32
+ <div class="flex flex-row justify-between w-full -mb-2 ">
33
+ <button
34
+ on:click={() => ($selectedComponent = componentId)}
125
35
  class={classNames(
126
- 'flex justify-between flex-row w-full items-center p-2',
127
- index % 2 === 0 ? 'bg-gray-100' : 'bg-white'
36
+ 'px-2 text-2xs py-0.5 font-bold rounded-t-sm w-fit',
37
+ $selectedComponent === componentId
38
+ ? ' bg-indigo-500 text-white'
39
+ : 'bg-gray-200 text-gray-500'
128
40
  )}
129
41
  >
130
- <span class="text-xs">{key}</span>
131
- <div class="flex gap-2">
132
- <Button
133
- size="xs"
134
- color="light"
135
- variant="border"
136
- iconOnly
137
- startIcon={{ icon: faEdit }}
138
- on:click={() => {
139
- if (value) {
140
- selectedScript = value
141
- scriptEditorDrawer.openDrawer && scriptEditorDrawer.openDrawer()
142
- }
143
- }}
144
- />
145
- <Button
146
- size="xs"
147
- color="red"
148
- variant="border"
149
- iconOnly
150
- startIcon={{ icon: faTrash }}
151
- on:click={() => {
152
- if ($app.inlineScripts[key]) {
153
- delete $app.inlineScripts[key]
154
- $app = $app
155
- }
156
- }}
157
- />
158
- </div>
159
- </div>
160
- {/each}
161
- </div>
162
- {:else}
163
- <div class="text-sm text-gray-500">No inline scripts</div>
164
- {/if}
165
- </PanelSection>
166
-
167
- <PanelSection title="Outputs">
168
- {#each Object.entries($staticOutputs) as [componentId, outputs], index}
169
- {#if outputs.length > 0 && $worldStore?.outputsById[componentId]}
170
- <Button size="xs" on:click={() => ($selectedComponent = componentId)} color="blue">
171
- Component: {componentId}
172
- </Button>
42
+ {componentId}
43
+ </button>
44
+ <span
45
+ class={classNames(
46
+ 'px-1 text-2xs py-0.5 font-bold rounded-t-sm w-fit',
47
+ 'bg-gray-500 text-white'
48
+ )}
49
+ >
50
+ {getComponentNameById(componentId)}
51
+ </span>
52
+ </div>
173
53
 
54
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
174
55
  <div
56
+ on:click={() => ($selectedComponent = componentId)}
175
57
  class={classNames(
176
- 'w-full p-2 rounded-xs border',
177
- $selectedComponent === componentId
178
- ? 'outline-1 outline outline-offset-2 outline-blue-500'
179
- : ''
58
+ 'w-full py-2 border relative',
59
+ $selectedComponent === componentId ? 'border border-blue-500 ' : 'cursor-pointer'
180
60
  )}
181
61
  >
62
+ {#if $selectedComponent === componentId && $connectingInput?.opened}
63
+ <div class="absolute top-0 left-0 w-full h-full bg-gray-500 bg-opacity-50 z-10" />
64
+ {/if}
182
65
  <ComponentOutputViewer
183
66
  {outputs}
184
67
  {componentId}
@@ -1,8 +1,6 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
- props: {
4
- appPath: string;
5
- };
3
+ props: Record<string, never>;
6
4
  events: {
7
5
  [evt: string]: CustomEvent<any>;
8
6
  };
@@ -0,0 +1,64 @@
1
+ <script>import FlowScriptPicker from '../../../flows/pickers/FlowScriptPicker.svelte';
2
+ import { Script } from '../../../../gen';
3
+ import { inferArgs } from '../../../../infer';
4
+ import { initialCode } from '../../../../script_helpers';
5
+ import { emptySchema } from '../../../../utils';
6
+ import { createEventDispatcher, getContext } from 'svelte';
7
+ import { fly } from 'svelte/transition';
8
+ export let name;
9
+ const { appPath } = getContext('AppEditorContext');
10
+ const dispatch = createEventDispatcher();
11
+ async function inferInlineScriptSchema(language, content, schema) {
12
+ try {
13
+ await inferArgs(language, content, schema);
14
+ }
15
+ catch (e) {
16
+ console.error("Couldn't infer args", e);
17
+ }
18
+ return schema;
19
+ }
20
+ async function createInlineScriptByLanguage(language, path, subkind = undefined) {
21
+ const fullPath = `${appPath}/inline-script/${path}`;
22
+ const content = initialCode(language, Script.kind.SCRIPT, subkind ?? 'flow');
23
+ let schema = emptySchema();
24
+ schema = await inferInlineScriptSchema(language, content, schema);
25
+ const newInlineScript = {
26
+ content,
27
+ language,
28
+ path: fullPath,
29
+ schema
30
+ };
31
+ dispatch('new', newInlineScript);
32
+ }
33
+ const langs = ['deno', 'python3', 'go', 'bash'];
34
+ </script>
35
+
36
+ <div class="flex flex-col p-4 gap-2 text-sm" in:fly={{ duration: 50 }}>
37
+ Please choose a language:
38
+ <div class="flex gap-2 flex-row flex-wrap">
39
+ {#each langs as lang}
40
+ <FlowScriptPicker
41
+ label={lang}
42
+ {lang}
43
+ on:click={() => {
44
+ createInlineScriptByLanguage(lang, name)
45
+ }}
46
+ />
47
+ {/each}
48
+
49
+ <FlowScriptPicker
50
+ label={`PostgreSQL`}
51
+ lang="pgsql"
52
+ on:click={() => {
53
+ createInlineScriptByLanguage(Script.language.DENO, name, 'pgsql')
54
+ }}
55
+ />
56
+ <FlowScriptPicker
57
+ label={`MySQL`}
58
+ lang="mysql"
59
+ on:click={() => {
60
+ createInlineScriptByLanguage(Script.language.DENO, name, 'mysql')
61
+ }}
62
+ />
63
+ </div>
64
+ </div>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ name: string;
5
+ };
6
+ events: {
7
+ new: CustomEvent<any>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export type EmptyInlineScriptProps = typeof __propDef.props;
14
+ export type EmptyInlineScriptEvents = typeof __propDef.events;
15
+ export type EmptyInlineScriptSlots = typeof __propDef.slots;
16
+ export default class EmptyInlineScript extends SvelteComponentTyped<EmptyInlineScriptProps, EmptyInlineScriptEvents, EmptyInlineScriptSlots> {
17
+ }
18
+ export {};