windmill-components 1.55.1 → 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 (199) 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/FolderEditor.svelte +299 -0
  13. package/components/FolderEditor.svelte.d.ts +16 -0
  14. package/components/FolderInfo.svelte +13 -0
  15. package/components/FolderInfo.svelte.d.ts +16 -0
  16. package/components/FolderUsageInfo.svelte +17 -0
  17. package/components/FolderUsageInfo.svelte.d.ts +16 -0
  18. package/components/GroupEditor.svelte +287 -0
  19. package/components/GroupEditor.svelte.d.ts +18 -0
  20. package/components/GroupInfo.svelte +22 -0
  21. package/components/GroupInfo.svelte.d.ts +16 -0
  22. package/components/InputTransformForm.svelte +16 -7
  23. package/components/MoveDrawer.svelte +75 -0
  24. package/components/MoveDrawer.svelte.d.ts +19 -0
  25. package/components/Path.svelte +243 -96
  26. package/components/Path.svelte.d.ts +1 -4
  27. package/components/RadioButton.svelte +2 -0
  28. package/components/RadioButton.svelte.d.ts +1 -0
  29. package/components/ResourceEditor.svelte +11 -16
  30. package/components/RunForm.svelte +20 -3
  31. package/components/RunForm.svelte.d.ts +1 -1
  32. package/components/ScheduleEditor.svelte +226 -0
  33. package/components/ScheduleEditor.svelte.d.ts +26 -0
  34. package/components/ScriptBuilder.svelte +109 -114
  35. package/components/ScriptEditor.svelte +17 -14
  36. package/components/ScriptEditor.svelte.d.ts +1 -0
  37. package/components/ScriptPicker.svelte +55 -29
  38. package/components/ScriptPicker.svelte.d.ts +1 -0
  39. package/components/ShareModal.svelte +94 -73
  40. package/components/ShareModal.svelte.d.ts +2 -4
  41. package/components/SimpleEditor.svelte +15 -10
  42. package/components/TemplateEditor.svelte +496 -0
  43. package/components/TemplateEditor.svelte.d.ts +25 -0
  44. package/components/TestJobLoader.svelte +1 -1
  45. package/components/VariableEditor.svelte +2 -1
  46. package/components/apps/CreateApp.svelte +1 -1
  47. package/components/apps/components/buttons/AppButton.svelte +3 -3
  48. package/components/apps/components/dataDisplay/AppBarChart.svelte +5 -4
  49. package/components/apps/components/dataDisplay/AppPieChart.svelte +3 -3
  50. package/components/apps/components/dateInputs/AppDateInput.svelte +34 -0
  51. package/components/apps/components/dateInputs/AppDateInput.svelte.d.ts +22 -0
  52. package/components/apps/components/form/AppForm.svelte +4 -5
  53. package/components/apps/components/form/AppForm.svelte.d.ts +0 -1
  54. package/components/apps/components/helpers/AlignWrapper.svelte +3 -4
  55. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +2 -3
  56. package/components/apps/components/helpers/InputValue.svelte +54 -5
  57. package/components/apps/components/helpers/InputValue.svelte.d.ts +1 -0
  58. package/components/apps/components/helpers/NonRunnableComponent.svelte +2 -1
  59. package/components/apps/components/helpers/RefreshButton.svelte +20 -0
  60. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +16 -0
  61. package/components/apps/components/helpers/RunnableComponent.svelte +38 -42
  62. package/components/apps/components/helpers/RunnableWrapper.svelte +6 -3
  63. package/components/apps/components/numberInputs/AppNumberInput.svelte +8 -11
  64. package/components/apps/components/numberInputs/AppNumberInput.svelte.d.ts +1 -0
  65. package/components/apps/components/selectInputs/AppCheckbox.svelte +1 -1
  66. package/components/apps/components/selectInputs/AppSelect.svelte +26 -0
  67. package/components/apps/components/selectInputs/AppSelect.svelte.d.ts +22 -0
  68. package/components/apps/components/table/AppTable.svelte +159 -0
  69. package/components/apps/components/{dataDisplay → table}/AppTable.svelte.d.ts +0 -0
  70. package/components/apps/components/table/AppTableFooter.svelte +54 -0
  71. package/components/apps/components/table/AppTableFooter.svelte.d.ts +20 -0
  72. package/components/apps/components/table/tableOptions.d.ts +10 -0
  73. package/components/apps/components/table/tableOptions.js +11 -0
  74. package/components/apps/components/textInputs/AppTextInput.svelte +17 -10
  75. package/components/apps/components/textInputs/AppTextInput.svelte.d.ts +2 -0
  76. package/components/apps/editor/AppEditor.svelte +35 -20
  77. package/components/apps/editor/AppEditorHeader.svelte +15 -7
  78. package/components/apps/editor/AppPreview.svelte +5 -3
  79. package/components/apps/editor/AppPreview.svelte.d.ts +4 -1
  80. package/components/apps/editor/ComponentEditor.svelte +21 -3
  81. package/components/apps/editor/ComponentEditor.svelte.d.ts +2 -0
  82. package/components/apps/editor/ComponentHeader.svelte +21 -4
  83. package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  84. package/components/apps/editor/GridEditor.svelte +40 -20
  85. package/components/apps/editor/RecomputeAllComponents.svelte +5 -7
  86. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -82
  87. package/components/apps/editor/componentsPanel/data.js +78 -29
  88. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +5 -1
  89. package/components/apps/editor/contextPanel/ContextPanel.svelte +35 -152
  90. package/components/apps/editor/contextPanel/ContextPanel.svelte.d.ts +1 -3
  91. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +64 -0
  92. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +18 -0
  93. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +95 -0
  94. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +20 -0
  95. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +32 -0
  96. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +19 -0
  97. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +63 -0
  98. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +17 -0
  99. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +44 -0
  100. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte.d.ts +14 -0
  101. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +126 -0
  102. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +16 -0
  103. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +41 -0
  104. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte.d.ts +17 -0
  105. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +44 -0
  106. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte.d.ts +18 -0
  107. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +48 -130
  108. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +3 -0
  109. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -2
  110. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
  111. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -2
  112. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +46 -0
  113. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +17 -0
  114. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +1 -1
  115. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -1
  116. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte → inputEditor/ConnectedInputEditor.svelte} +1 -2
  117. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte.d.ts → inputEditor/ConnectedInputEditor.svelte.d.ts} +1 -1
  118. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +12 -0
  119. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +17 -0
  120. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte → inputEditor/StaticInputEditor.svelte} +5 -5
  121. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte.d.ts → inputEditor/StaticInputEditor.svelte.d.ts} +1 -1
  122. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +6 -3
  123. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +66 -22
  124. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +2 -3
  125. package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +1 -1
  126. package/components/apps/gridUtils.d.ts +3 -1
  127. package/components/apps/gridUtils.js +16 -1
  128. package/components/apps/inputType.d.ts +10 -4
  129. package/components/apps/rx.d.ts +8 -8
  130. package/components/apps/rx.js +17 -9
  131. package/components/apps/types.d.ts +14 -2
  132. package/components/apps/utils.d.ts +4 -3
  133. package/components/apps/utils.js +37 -5
  134. package/components/common/drawer/Drawer.svelte +1 -1
  135. package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  136. package/components/common/table/FlowRow.svelte +21 -7
  137. package/components/common/table/FlowRow.svelte.d.ts +2 -0
  138. package/components/common/table/ScriptRow.svelte +22 -7
  139. package/components/common/table/ScriptRow.svelte.d.ts +2 -0
  140. package/components/common/toggleButton/ToggleButton.svelte +1 -1
  141. package/components/common/toggleButton/ToggleButtonGroup.svelte +1 -1
  142. package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +1 -0
  143. package/components/flows/content/FlowEditorPanel.svelte +10 -16
  144. package/components/flows/content/FlowInputs.svelte +18 -4
  145. package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  146. package/components/flows/content/FlowModuleComponent.svelte +1 -1
  147. package/components/flows/content/FlowModuleWrapper.svelte +26 -1
  148. package/components/flows/content/FlowSchedules.svelte +5 -0
  149. package/components/flows/content/FlowSettings.svelte +13 -23
  150. package/components/flows/content/FlowSettings.svelte.d.ts +0 -1
  151. package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  152. package/components/flows/map/FlowErrorHandlerItem.svelte +1 -1
  153. package/components/flows/map/FlowModuleSchemaMap.svelte +12 -3
  154. package/components/flows/map/FlowSettingsItem.svelte +8 -15
  155. package/components/flows/map/InsertModuleButton.svelte +29 -2
  156. package/components/flows/map/InsertModuleButton.svelte.d.ts +3 -1
  157. package/components/flows/map/MapItem.svelte +2 -1
  158. package/components/flows/map/MapItem.svelte.d.ts +1 -0
  159. package/components/flows/pickers/WorkspaceScriptPicker.svelte +3 -0
  160. package/components/flows/previousResults.js +1 -1
  161. package/components/graph/FlowGraph.svelte +13 -13
  162. package/components/home/ItemsList.svelte +20 -12
  163. package/components/jobs/JobDetail.svelte +9 -3
  164. package/components/sidebar/SidebarContent.svelte +4 -3
  165. package/components/sidebar/UserMenu.svelte +1 -1
  166. package/editorUtils.d.ts +7 -1
  167. package/editorUtils.js +98 -3
  168. package/es5.d.ts.txt +4526 -0
  169. package/gen/index.d.ts +2 -0
  170. package/gen/index.js +1 -0
  171. package/gen/models/CompletedJob.d.ts +1 -0
  172. package/gen/models/EditSchedule.d.ts +0 -2
  173. package/gen/models/Folder.d.ts +5 -0
  174. package/gen/models/Folder.js +4 -0
  175. package/gen/models/QueuedJob.d.ts +1 -0
  176. package/gen/models/Script.d.ts +1 -1
  177. package/gen/models/User.d.ts +1 -0
  178. package/gen/services/FolderService.d.ts +128 -0
  179. package/gen/services/FolderService.js +151 -0
  180. package/gen/services/GranularAclService.d.ts +3 -3
  181. package/gen/services/GroupService.d.ts +5 -1
  182. package/gen/services/GroupService.js +4 -1
  183. package/gen/services/JobService.d.ts +25 -5
  184. package/gen/services/JobService.js +10 -5
  185. package/gen/services/ScriptService.d.ts +2 -1
  186. package/gen/services/UserService.d.ts +9 -0
  187. package/gen/services/UserService.js +15 -0
  188. package/package.json +33 -9
  189. package/script_helpers.d.ts +2 -2
  190. package/script_helpers.js +4 -4
  191. package/stores.d.ts +1 -0
  192. package/utils.d.ts +3 -0
  193. package/utils.js +44 -7
  194. package/components/GroupModal.svelte +0 -98
  195. package/components/GroupModal.svelte.d.ts +0 -17
  196. package/components/apps/components/dataDisplay/AppTable.svelte +0 -132
  197. package/components/apps/components/dataDisplay/app.md +0 -49
  198. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte +0 -29
  199. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte.d.ts +0 -16
@@ -1,22 +1,23 @@
1
- <script>import { ToggleButton, ToggleButtonGroup } from '../../../common';
2
- import Button from '../../../common/button/Button.svelte';
3
- import { faArrowRight, faClose, faCode, faMinimize, faPen, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
4
- import { AlignStartHorizontal, AlignStartVertical, AlignCenterHorizontal, AlignCenterVertical, AlignEndHorizontal, AlignEndVertical } from 'lucide-svelte';
1
+ <script>import Button from '../../../common/button/Button.svelte';
2
+ import { faTrashAlt } from '@fortawesome/free-solid-svg-icons';
5
3
  import { getContext } from 'svelte';
6
4
  import PanelSection from './common/PanelSection.svelte';
7
5
  import InputsSpecsEditor from './InputsSpecsEditor.svelte';
8
6
  import TableActions from './TableActions.svelte';
9
- import StaticInputEditor from './StaticInputEditor.svelte';
10
- import ConnectedInputEditor from './ConnectedInputEditor.svelte';
7
+ import StaticInputEditor from './inputEditor/StaticInputEditor.svelte';
8
+ import ConnectedInputEditor from './inputEditor/ConnectedInputEditor.svelte';
11
9
  import Badge from '../../../common/badge/Badge.svelte';
12
10
  import { capitalize } from '../../../../utils';
13
11
  import { fieldTypeToTsType } from '../../utils';
14
12
  import Recompute from './Recompute.svelte';
15
- import Alert from '../../../common/alert/Alert.svelte';
16
- import RunnableSelector from './mainInput/RunnableSelector.svelte';
13
+ import Tooltip from '../../../Tooltip.svelte';
14
+ import ComponentInputTypeEditor from './ComponentInputTypeEditor.svelte';
15
+ import AlignmentEditor from './AlignmentEditor.svelte';
16
+ import RunnableInputEditor from './inputEditor/RunnableInputEditor.svelte';
17
+ import TemplateEditor from '../../../TemplateEditor.svelte';
17
18
  export let component;
18
19
  export let onDelete = undefined;
19
- const { app, staticOutputs, runnableComponents } = getContext('AppEditorContext');
20
+ const { app, staticOutputs, runnableComponents, worldStore } = getContext('AppEditorContext');
20
21
  function removeGridElement() {
21
22
  if (onDelete && component) {
22
23
  delete $staticOutputs[component.id];
@@ -37,92 +38,66 @@ function removeGridElement() {
37
38
  }
38
39
  }
39
40
  }
41
+ export function buildExtraLib(components) {
42
+ return Object.entries(components)
43
+ .filter(([k, v]) => k != component?.id)
44
+ .map(([k, v]) => [k, Object.fromEntries(Object.entries(v).map(([k, v]) => [k, v.peak()]))])
45
+ .map(([k, v]) => `
46
+
47
+ declare const ${k} = ${JSON.stringify(v)};
48
+
49
+ `)
50
+ .join('\n');
51
+ }
52
+ $: extraLib =
53
+ component?.componentInput?.type === 'template' && $worldStore
54
+ ? buildExtraLib($worldStore?.outputsById ?? {})
55
+ : undefined;
40
56
  </script>
41
57
 
42
58
  {#if component}
43
59
  <div class="flex flex-col w-full divide-y">
44
60
  {#if component.componentInput}
45
- <PanelSection title="Main input">
61
+ <PanelSection
62
+ title={component.componentInput.fieldType === 'any' ? 'Runnable' : 'Component input'}
63
+ >
46
64
  <svelte:fragment slot="action">
47
- <Badge color="blue">
48
- {component.componentInput.fieldType === 'array' && component.componentInput.subFieldType
49
- ? `${capitalize(fieldTypeToTsType(component.componentInput.subFieldType))}[]`
50
- : capitalize(fieldTypeToTsType(component.componentInput.fieldType))}
51
- </Badge>
65
+ {#if component.componentInput.fieldType !== 'any'}
66
+ <Badge color="blue">
67
+ {component.componentInput.fieldType === 'array' &&
68
+ component.componentInput.subFieldType
69
+ ? `${capitalize(fieldTypeToTsType(component.componentInput.subFieldType))}[]`
70
+ : capitalize(fieldTypeToTsType(component.componentInput.fieldType))}
71
+ </Badge>
72
+ {/if}
52
73
  </svelte:fragment>
53
- <div class="w-full">
54
- <ToggleButtonGroup bind:selected={component.componentInput.type}>
55
- <ToggleButton
56
- position="left"
57
- value="static"
58
- startIcon={{ icon: faPen }}
59
- size="xs"
60
- disable={component.type === 'buttoncomponent'}
61
- >
62
- Static
63
- </ToggleButton>
64
- <ToggleButton
65
- value="connected"
66
- position="center"
67
- startIcon={{ icon: faArrowRight }}
68
- size="xs"
69
- >
70
- Connected
71
- </ToggleButton>
72
- <ToggleButton position="right" value="runnable" startIcon={{ icon: faCode }} size="xs">
73
- Computed
74
- </ToggleButton>
75
- </ToggleButtonGroup>
76
- </div>
74
+
75
+ <ComponentInputTypeEditor bind:componentInput={component.componentInput} />
77
76
  <div class="flex flex-col w-full gap-2 my-2">
78
77
  {#if component.componentInput.type === 'static'}
79
78
  <StaticInputEditor bind:componentInput={component.componentInput} />
79
+ {:else if component.componentInput.type === 'template' && component.componentInput !== undefined}
80
+ <TemplateEditor bind:code={component.componentInput.eval} {extraLib} />
80
81
  {:else if component.componentInput.type === 'connected' && component.componentInput !== undefined}
81
82
  <ConnectedInputEditor bind:componentInput={component.componentInput} />
82
- {:else if component && component.componentInput?.type === 'runnable' && component.componentInput.runnable}
83
- <div class="flex justify-between w-full items-center">
84
- <span class="text-xs">
85
- {component.componentInput.runnable.type === 'runnableByName'
86
- ? component.componentInput.runnable.inlineScriptName
87
- : component.componentInput.runnable.path}
88
- </span>
89
- <Button
90
- size="xs"
91
- color="red"
92
- variant="border"
93
- startIcon={{ icon: faClose }}
94
- on:click={() => {
95
- if (component?.componentInput?.type === 'runnable') {
96
- component.componentInput.runnable = undefined
97
- component.componentInput.fields = {}
98
- component = component
99
- }
100
- }}
101
- >
102
- Clear
103
- </Button>
104
- </div>
105
- {:else}
106
- <RunnableSelector
107
- inlineScripts={Object.keys($app.inlineScripts)}
108
- bind:componentInput={component.componentInput}
109
- />
83
+ {:else if component.componentInput?.type === 'runnable' && component.componentInput !== undefined}
84
+ <RunnableInputEditor bind:appInput={component.componentInput} />
110
85
  {/if}
111
86
  </div>
112
87
  {#if component.componentInput?.type === 'runnable' && Object.keys(component.componentInput.fields ?? {}).length > 0}
113
88
  <div class="border w-full">
114
89
  <PanelSection
90
+ smallPadding
115
91
  title={`Runnable inputs (${
116
92
  Object.keys(component.componentInput.fields ?? {}).length
117
93
  })`}
118
- smallPadding
119
94
  >
120
- {#if component.type === 'buttoncomponent'}
121
- <Alert title="Button inputs" type="info" size="xs">
95
+ <svelte:fragment slot="action">
96
+ <Tooltip>
122
97
  The runnable inputs of a button component are not settable by the user. They must
123
98
  be defined statically or connected.
124
- </Alert>
125
- {/if}
99
+ </Tooltip>
100
+ </svelte:fragment>
126
101
 
127
102
  <InputsSpecsEditor
128
103
  bind:inputSpecs={component.componentInput.fields}
@@ -131,15 +106,6 @@ function removeGridElement() {
131
106
  </PanelSection>
132
107
  </div>
133
108
  {/if}
134
-
135
- {#if component.type === 'buttoncomponent'}
136
- <div class="w-full">
137
- <Alert size="xs" type="warning" title="Result output">
138
- This input is not directly used by the component. It is piped to the component's
139
- <code>result</code> output.
140
- </Alert>
141
- </div>
142
- {/if}
143
109
  </PanelSection>
144
110
  {/if}
145
111
 
@@ -153,55 +119,7 @@ function removeGridElement() {
153
119
  <TableActions bind:components={component.actionButtons} />
154
120
  {/if}
155
121
 
156
- {#if component.verticalAlignment !== undefined}
157
- <PanelSection title="Alignment">
158
- <svelte:fragment slot="action">
159
- <Button
160
- size="xs"
161
- on:click={() => {
162
- if (component) {
163
- component.verticalAlignment = 'center'
164
- component.horizontalAlignment = 'center'
165
- }
166
- }}
167
- startIcon={{ icon: faMinimize }}
168
- >
169
- Center
170
- </Button>
171
- </svelte:fragment>
172
- <div class="w-full text-xs font-semibold">Horizontal alignment</div>
173
-
174
- <div class="w-full">
175
- <ToggleButtonGroup bind:selected={component.horizontalAlignment}>
176
- <ToggleButton position="left" value="left" size="xs">
177
- <AlignStartVertical size={16} />
178
- </ToggleButton>
179
- <ToggleButton position="center" value="center" size="xs">
180
- <AlignCenterVertical size={16} />
181
- </ToggleButton>
182
- <ToggleButton position="right" value="right" size="xs">
183
- <AlignEndVertical size={16} />
184
- </ToggleButton>
185
- </ToggleButtonGroup>
186
- </div>
187
- {#if component.type !== 'formcomponent'}
188
- <div class="w-full text-xs font-semibold">Vertical alignment</div>
189
- <div class="w-full">
190
- <ToggleButtonGroup bind:selected={component.verticalAlignment}>
191
- <ToggleButton position="left" value="top" size="xs">
192
- <AlignStartHorizontal size={16} />
193
- </ToggleButton>
194
- <ToggleButton position="center" value="center" size="xs">
195
- <AlignCenterHorizontal size={16} />
196
- </ToggleButton>
197
- <ToggleButton position="right" value="bottom" size="xs">
198
- <AlignEndHorizontal size={16} />
199
- </ToggleButton>
200
- </ToggleButtonGroup>
201
- </div>
202
- {/if}
203
- </PanelSection>
204
- {/if}
122
+ <AlignmentEditor bind:component />
205
123
  {#if component.type === 'buttoncomponent' || component.type === 'formcomponent'}
206
124
  <Recompute bind:recomputeIds={component.recomputeIds} ownId={component.id} />
207
125
  {/if}
@@ -1,9 +1,11 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  import type { AppComponent } from '../../types';
3
+ import type { Output } from '../../rx';
3
4
  declare const __propDef: {
4
5
  props: {
5
6
  component: AppComponent | undefined;
6
7
  onDelete?: (() => void) | undefined;
8
+ buildExtraLib?: ((components: Record<string, Record<string, Output<any>>>) => string) | undefined;
7
9
  };
8
10
  events: {
9
11
  [evt: string]: CustomEvent<any>;
@@ -14,5 +16,6 @@ export type ComponentPanelProps = typeof __propDef.props;
14
16
  export type ComponentPanelEvents = typeof __propDef.events;
15
17
  export type ComponentPanelSlots = typeof __propDef.slots;
16
18
  export default class ComponentPanel extends SvelteComponentTyped<ComponentPanelProps, ComponentPanelEvents, ComponentPanelSlots> {
19
+ get buildExtraLib(): (components: Record<string, Record<string, Output<any>>>) => string;
17
20
  }
18
21
  export {};
@@ -1,5 +1,5 @@
1
- <script>import ConnectedInputEditor from './ConnectedInputEditor.svelte';
2
- import StaticInputEditor from './StaticInputEditor.svelte';
1
+ <script>import ConnectedInputEditor from './inputEditor/ConnectedInputEditor.svelte';
2
+ import StaticInputEditor from './inputEditor/StaticInputEditor.svelte';
3
3
  export let componentInput;
4
4
  export let canHide = false;
5
5
  </script>
@@ -14,7 +14,7 @@ export let staticOnly = false;
14
14
  {@const input = inputSpecs[inputSpecKey]}
15
15
  {#if true}
16
16
  <div class="flex flex-col gap-2">
17
- <div class="flex justify-between items-center">
17
+ <div class="flex justify-between items-center gap-1">
18
18
  <span class="text-xs font-semibold">{capitalize(inputSpecKey)}</span>
19
19
 
20
20
  <div class="flex gap-2 items-center">
@@ -15,7 +15,7 @@ function onChange(event, id) {
15
15
  </script>
16
16
 
17
17
  <PanelSection title="Recompute">
18
- {#if Object.keys($runnableComponents ?? {}).length > 0}
18
+ {#if Object.keys($runnableComponents ?? {}).filter((id) => id !== ownId).length > 0}
19
19
  <table class="divide-y divide-gray-300 border w-full">
20
20
  <thead class="bg-gray-50">
21
21
  <tr>
@@ -41,6 +41,6 @@ function onChange(event, id) {
41
41
  </tbody>
42
42
  </table>
43
43
  {:else}
44
- <div class="text-xs">No components to recompute</div>
44
+ <div class="text-xs">No components to recompute. Create one and select it here.</div>
45
45
  {/if}
46
46
  </PanelSection>
@@ -0,0 +1,46 @@
1
+ <script>import Button from '../../../common/button/Button.svelte';
2
+ import { faClose, faEdit } from '@fortawesome/free-solid-svg-icons';
3
+ import { clearResultAppInput } from '../../utils';
4
+ import InlineScriptEditorDrawer from '../inlineScriptsPanel/InlineScriptEditorDrawer.svelte';
5
+ export let appInput;
6
+ let inlineScriptEditorDrawer;
7
+ function edit() {
8
+ if (appInput.runnable?.type === 'runnableByName') {
9
+ inlineScriptEditorDrawer?.openDrawer();
10
+ }
11
+ }
12
+ function clear() {
13
+ appInput = clearResultAppInput(appInput);
14
+ }
15
+ </script>
16
+
17
+ {#if appInput.runnable && appInput.runnable.type === 'runnableByName' && appInput.runnable.inlineScript}
18
+ <InlineScriptEditorDrawer
19
+ bind:this={inlineScriptEditorDrawer}
20
+ bind:inlineScript={appInput.runnable.inlineScript}
21
+ />
22
+ {/if}
23
+ <div class="flex justify-between w-full items-center gap-1">
24
+ <span class="text-xs font-semibold">
25
+ {#if appInput.runnable?.type === 'runnableByName'}
26
+ {appInput.runnable.name}
27
+ {:else if appInput.runnable?.type === 'runnableByPath'}
28
+ {appInput.runnable.path}
29
+ {/if}
30
+ </span>
31
+ <div class="flex flex-wrap gap-1">
32
+ {#if appInput.runnable?.type === 'runnableByName' && appInput.runnable.inlineScript}
33
+ <Button size="xs" color="light" variant="border" startIcon={{ icon: faEdit }} on:click={edit}>
34
+ Edit
35
+ </Button>
36
+ {/if}
37
+ <Button size="xs" color="red" variant="border" startIcon={{ icon: faClose }} on:click={clear}>
38
+ Clear
39
+ </Button>
40
+ </div>
41
+ </div>
42
+ {#if appInput.runnable?.type === 'runnableByName' && !appInput.runnable.inlineScript}
43
+ <span class="text-xs text-gray-500">
44
+ Please configure the language in the inline script panel
45
+ </span>
46
+ {/if}
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { ResultAppInput } from '../../inputType';
3
+ declare const __propDef: {
4
+ props: {
5
+ appInput: ResultAppInput;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type SelectedRunnableProps = typeof __propDef.props;
13
+ export type SelectedRunnableEvents = typeof __propDef.events;
14
+ export type SelectedRunnableSlots = typeof __propDef.slots;
15
+ export default class SelectedRunnable extends SvelteComponentTyped<SelectedRunnableProps, SelectedRunnableEvents, SelectedRunnableSlots> {
16
+ }
17
+ export {};
@@ -1,4 +1,4 @@
1
- <script>import StaticInputEditor from './StaticInputEditor.svelte';
1
+ <script>import StaticInputEditor from './inputEditor/StaticInputEditor.svelte';
2
2
  export let value;
3
3
  export let canHide = false;
4
4
  export let componentInput;
@@ -4,7 +4,7 @@ export let smallPadding = false;
4
4
  </script>
5
5
 
6
6
  <div class={classNames('flex flex-col gap-2 items-start', smallPadding ? 'p-2' : 'p-4')}>
7
- <div class="flex justify-between items-center w-full">
7
+ <div class="flex justify-between items-center w-full gap-1">
8
8
  <div class="text-sm font-extrabold">{title}</div>
9
9
  <slot name="action" />
10
10
  </div>
@@ -1,4 +1,4 @@
1
- <script>import { Badge, Button } from '../../../common';
1
+ <script>import { Badge, Button } from '../../../../common';
2
2
  import { faArrowRight, faClose } from '@fortawesome/free-solid-svg-icons';
3
3
  import { getContext } from 'svelte';
4
4
  export let componentInput;
@@ -8,7 +8,6 @@ function applyConnection() {
8
8
  $connectingInput.input !== undefined &&
9
9
  componentInput.type === 'connected' &&
10
10
  !componentInput.connection) {
11
- debugger;
12
11
  componentInput.connection = $connectingInput.input.connection;
13
12
  $connectingInput = {
14
13
  opened: false,
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { AppInput } from '../../inputType';
2
+ import type { AppInput } from '../../../inputType';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  componentInput: AppInput;
@@ -0,0 +1,12 @@
1
+ <script>import { isScriptByNameDefined, isScriptByPathDefined } from '../../../utils';
2
+ import RunnableSelector from '../mainInput/RunnableSelector.svelte';
3
+ import SelectedRunnable from '../SelectedRunnable.svelte';
4
+ export let appInput;
5
+ $: isRunnableSelected = isScriptByPathDefined(appInput) || isScriptByNameDefined(appInput);
6
+ </script>
7
+
8
+ {#if isRunnableSelected}
9
+ <SelectedRunnable bind:appInput />
10
+ {:else}
11
+ <RunnableSelector bind:appInput />
12
+ {/if}
@@ -0,0 +1,17 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { ResultAppInput } from '../../../inputType';
3
+ declare const __propDef: {
4
+ props: {
5
+ appInput: ResultAppInput;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type RunnableInputEditorProps = typeof __propDef.props;
13
+ export type RunnableInputEditorEvents = typeof __propDef.events;
14
+ export type RunnableInputEditorSlots = typeof __propDef.slots;
15
+ export default class RunnableInputEditor extends SvelteComponentTyped<RunnableInputEditorProps, RunnableInputEditorEvents, RunnableInputEditorSlots> {
16
+ }
17
+ export {};
@@ -1,7 +1,7 @@
1
- <script>import Toggle from '../../../Toggle.svelte';
2
- import { staticValues } from '../componentsPanel/componentStaticValues';
3
- import SimpleEditor from '../../../SimpleEditor.svelte';
4
- import ArrayStaticInputEditor from './ArrayStaticInputEditor.svelte';
1
+ <script>import Toggle from '../../../../Toggle.svelte';
2
+ import { staticValues } from '../../componentsPanel/componentStaticValues';
3
+ import SimpleEditor from '../../../../SimpleEditor.svelte';
4
+ import ArrayStaticInputEditor from '../ArrayStaticInputEditor.svelte';
5
5
  export let componentInput;
6
6
  export let canHide = false;
7
7
  </script>
@@ -14,7 +14,7 @@ export let canHide = false;
14
14
  {#if componentInput.fieldType === 'number'}
15
15
  <input type="number" bind:value={componentInput.value} />
16
16
  {:else if componentInput.fieldType === 'textarea'}
17
- <textarea bind:value={componentInput.value} />
17
+ <textarea type="text" bind:value={componentInput.value} />
18
18
  {:else if componentInput.fieldType === 'boolean'}
19
19
  <Toggle bind:checked={componentInput.value} />
20
20
  {:else if componentInput.fieldType === 'select'}
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { StaticAppInput } from '../../inputType';
2
+ import type { StaticAppInput } from '../../../inputType';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  componentInput: StaticAppInput | undefined;
@@ -21,9 +21,12 @@ const dispatch = createEventDispatcher();
21
21
  />
22
22
  </div>
23
23
 
24
- {#if inlineScripts.length == 0}
25
- Should create
26
- {:else if filteredItems.length == 0}
24
+ {#if inlineScripts.length === 0}
25
+ <div class="flex flex-col w-full h-full">
26
+ <div class="text-md ">No inline scripts</div>
27
+ <div class="text-sm">Add inline scripts to your app</div>
28
+ </div>
29
+ {:else if filteredItems.length === 0}
27
30
  <NoItemFound />
28
31
  {:else}
29
32
  <ul class="divide-y divide-gray-200 border rounded-md">
@@ -1,18 +1,19 @@
1
- <script>import { faMousePointer } from '@fortawesome/free-solid-svg-icons';
1
+ <script>import { faMousePointer, faPlus } from '@fortawesome/free-solid-svg-icons';
2
2
  import { Button, Drawer, DrawerContent, Tab, Tabs } from '../../../../common';
3
3
  import PickHubScript from '../../../../flows/pickers/PickHubScript.svelte';
4
4
  import { Building, Globe2 } from 'lucide-svelte';
5
5
  import InlineScriptList from './InlineScriptList.svelte';
6
6
  import WorkspaceScriptList from './WorkspaceScriptList.svelte';
7
7
  import WorkspaceFlowList from './WorkspaceFlowList.svelte';
8
- export let inlineScripts;
9
- export let componentInput;
10
- let tab = 'workspacescripts';
8
+ import { getContext } from 'svelte';
9
+ export let appInput;
10
+ let tab = 'inlinescripts';
11
11
  let filter = '';
12
12
  let picker;
13
+ const { app } = getContext('AppEditorContext');
13
14
  function pickScript(path) {
14
- if (componentInput.type === 'runnable') {
15
- componentInput.runnable = {
15
+ if (appInput.type === 'runnable') {
16
+ appInput.runnable = {
16
17
  type: 'runnableByPath',
17
18
  path,
18
19
  runType: 'script'
@@ -20,22 +21,50 @@ function pickScript(path) {
20
21
  }
21
22
  }
22
23
  function pickFlow(path) {
23
- if (componentInput.type === 'runnable') {
24
- componentInput.runnable = {
24
+ if (appInput.type === 'runnable') {
25
+ appInput.runnable = {
25
26
  type: 'runnableByPath',
26
27
  path,
27
28
  runType: 'flow'
28
29
  };
29
30
  }
30
31
  }
31
- function pickInlineScript(inlineScriptName) {
32
- if (componentInput.type === 'runnable') {
33
- componentInput.runnable = {
32
+ function pickInlineScript(name) {
33
+ const unusedInlineScriptIndex = $app.unusedInlineScripts?.findIndex((script) => script.name === name);
34
+ const unusedInlineScript = $app.unusedInlineScripts?.[unusedInlineScriptIndex];
35
+ if (appInput.type === 'runnable' && unusedInlineScript?.inlineScript) {
36
+ appInput.runnable = {
34
37
  type: 'runnableByName',
35
- inlineScriptName
38
+ name,
39
+ inlineScript: unusedInlineScript.inlineScript
36
40
  };
41
+ $app.unusedInlineScripts.splice(unusedInlineScriptIndex, 1);
37
42
  }
38
43
  }
44
+ function createScript() {
45
+ let index = 0;
46
+ let newScriptPath = `inline_script_${index}`;
47
+ const names = $app.grid.reduce((acc, gridItem) => {
48
+ const { componentInput } = gridItem.data;
49
+ if (componentInput?.type === 'runnable' &&
50
+ componentInput?.runnable?.type === 'runnableByName') {
51
+ acc.push(componentInput.runnable.name);
52
+ }
53
+ return acc;
54
+ }, []);
55
+ const unusedNames = Object.keys($app.unusedInlineScripts ?? {});
56
+ // Find a name that is not used by any other inline script
57
+ while (names.includes(newScriptPath) || unusedNames.includes(newScriptPath)) {
58
+ newScriptPath = `inline_script_${++index}`;
59
+ }
60
+ appInput.runnable = {
61
+ type: 'runnableByName',
62
+ name: newScriptPath,
63
+ inlineScript: undefined
64
+ };
65
+ appInput = appInput;
66
+ return newScriptPath;
67
+ }
39
68
  </script>
40
69
 
41
70
  <Drawer bind:this={picker} size="1000px">
@@ -72,7 +101,12 @@ function pickInlineScript(inlineScriptName) {
72
101
  <div class="flex flex-col gap-y-16">
73
102
  <div class="flex flex-col">
74
103
  {#if tab == 'inlinescripts'}
75
- <InlineScriptList {inlineScripts} on:pick={(e) => pickInlineScript(e.detail)} />
104
+ <InlineScriptList
105
+ on:pick={(e) => pickInlineScript(e.detail)}
106
+ inlineScripts={$app.unusedInlineScripts
107
+ ? $app.unusedInlineScripts.map((uis) => uis.name)
108
+ : []}
109
+ />
76
110
  {:else if tab == 'workspacescripts'}
77
111
  <WorkspaceScriptList on:pick={(e) => pickScript(e.detail)} />
78
112
  {:else if tab == 'workspaceflows'}
@@ -87,12 +121,22 @@ function pickInlineScript(inlineScriptName) {
87
121
  </DrawerContent>
88
122
  </Drawer>
89
123
 
90
- <Button
91
- on:click={() => picker?.openDrawer()}
92
- size="sm"
93
- spacingSize="md"
94
- color="blue"
95
- startIcon={{ icon: faMousePointer }}
96
- >
97
- Pick
98
- </Button>
124
+ <div class="flex flex-col gap-2">
125
+ <Button
126
+ on:click={createScript}
127
+ size="sm"
128
+ color="light"
129
+ variant="border"
130
+ startIcon={{ icon: faPlus }}
131
+ >
132
+ Create an inline script
133
+ </Button>
134
+ <Button
135
+ on:click={() => picker?.openDrawer()}
136
+ size="sm"
137
+ color="blue"
138
+ startIcon={{ icon: faMousePointer }}
139
+ >
140
+ Select a script
141
+ </Button>
142
+ </div>
@@ -1,9 +1,8 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { AppInput } from '../../../inputType';
2
+ import type { ResultAppInput } from '../../../inputType';
3
3
  declare const __propDef: {
4
4
  props: {
5
- inlineScripts: string[];
6
- componentInput: AppInput;
5
+ appInput: ResultAppInput;
7
6
  };
8
7
  events: {
9
8
  [evt: string]: CustomEvent<any>;
@@ -2,7 +2,7 @@
2
2
  import SearchItems from '../../../../SearchItems.svelte';
3
3
  import NoItemFound from '../../../../home/NoItemFound.svelte';
4
4
  import RowIcon from '../../../../common/table/RowIcon.svelte';
5
- import { FlowService, Script, ScriptService } from '../../../../../gen';
5
+ import { FlowService } from '../../../../../gen';
6
6
  import { workspaceStore } from '../../../../../stores';
7
7
  import { emptyString } from '../../../../../utils';
8
8
  import { Skeleton } from '../../../../common';
@@ -7,5 +7,7 @@ declare const Breakpoints: {
7
7
  declare const columnConfiguration: ColumnConfiguration;
8
8
  declare const gridColumns: number[];
9
9
  declare function disableDrag(component: GridItem): GridItem;
10
+ declare function toggleFixed(component: GridItem): GridItem;
11
+ declare function isFixed(component: GridItem): boolean;
10
12
  declare function enableDrag(component: GridItem): GridItem;
11
- export { gridColumns, columnConfiguration, disableDrag, enableDrag, Breakpoints };
13
+ export { gridColumns, columnConfiguration, disableDrag, enableDrag, Breakpoints, toggleFixed, isFixed };