windmill-components 1.352.9 → 1.362.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 (208) hide show
  1. package/package/assets/app.css +8 -45
  2. package/package/components/ApiConnectForm.svelte +1 -0
  3. package/package/components/ArgInput.svelte +5 -1
  4. package/package/components/ChangeInstanceUsername.svelte +20 -12
  5. package/package/components/ContentSearchInner.svelte +359 -0
  6. package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
  7. package/package/components/CustomPopover.svelte +73 -0
  8. package/package/components/CustomPopover.svelte.d.ts +29 -0
  9. package/package/components/DateTimeInput.svelte +29 -3
  10. package/package/components/DateTimeInput.svelte.d.ts +4 -0
  11. package/package/components/Dev.svelte +8 -3
  12. package/package/components/DurationMs.svelte +2 -2
  13. package/package/components/FlowBuilder.svelte +122 -24
  14. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  15. package/package/components/FlowGraphViewerStep.svelte +2 -2
  16. package/package/components/FlowJobResult.svelte +5 -3
  17. package/package/components/FlowStatusViewer.svelte +4 -3
  18. package/package/components/FlowStatusViewerInner.svelte +265 -160
  19. package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
  20. package/package/components/HighlightTheme.svelte +75 -77
  21. package/package/components/InputTransformForm.svelte +2 -0
  22. package/package/components/JobArgs.svelte +59 -44
  23. package/package/components/JobArgs.svelte.d.ts +2 -0
  24. package/package/components/LightweightArgInput.svelte +27 -2
  25. package/package/components/Path.svelte +3 -8
  26. package/package/components/Popover.svelte +1 -1
  27. package/package/components/ResourceEditor.svelte +3 -2
  28. package/package/components/ResourceEditorDrawer.svelte +4 -1
  29. package/package/components/ResourcePicker.svelte +1 -0
  30. package/package/components/RunChart.svelte +6 -3
  31. package/package/components/RunChart.svelte.d.ts +1 -0
  32. package/package/components/RunForm.svelte +24 -23
  33. package/package/components/RunForm.svelte.d.ts +0 -2
  34. package/package/components/SavedInputs.svelte +50 -39
  35. package/package/components/ScheduleEditorInner.svelte +26 -4
  36. package/package/components/ScriptBuilder.svelte +47 -22
  37. package/package/components/ScriptBuilder.svelte.d.ts +1 -0
  38. package/package/components/SearchItems.svelte +5 -4
  39. package/package/components/Summary.svelte +74 -0
  40. package/package/components/Summary.svelte.d.ts +16 -0
  41. package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
  42. package/package/components/apps/components/display/AppMenu.svelte +2 -2
  43. package/package/components/apps/components/display/AppNavbar.svelte +94 -0
  44. package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
  45. package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
  46. package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
  47. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
  48. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
  49. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
  50. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
  51. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
  53. package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
  54. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
  55. package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
  56. package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
  57. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
  58. package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
  59. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  60. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  61. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
  62. package/package/components/apps/components/layout/AppModal.svelte +17 -6
  63. package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
  64. package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
  65. package/package/components/apps/editor/AppEditor.svelte +9 -2
  66. package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
  67. package/package/components/apps/editor/AppPreview.svelte +12 -3
  68. package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
  69. package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
  70. package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
  71. package/package/components/apps/editor/appUtils.d.ts +1 -0
  72. package/package/components/apps/editor/appUtils.js +17 -0
  73. package/package/components/apps/editor/component/Component.svelte +23 -0
  74. package/package/components/apps/editor/component/components.d.ts +205 -3
  75. package/package/components/apps/editor/component/components.js +160 -1
  76. package/package/components/apps/editor/component/default-codes.js +13 -13
  77. package/package/components/apps/editor/component/sets.js +4 -2
  78. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
  79. package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
  80. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  81. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  82. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
  83. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
  84. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
  85. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
  86. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
  87. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
  88. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
  90. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
  93. package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
  94. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
  95. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
  96. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  97. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
  98. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
  99. package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
  100. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
  101. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
  102. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
  103. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
  104. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
  105. package/package/components/apps/inputType.d.ts +2 -2
  106. package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
  107. package/package/components/apps/types.d.ts +3 -0
  108. package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
  109. package/package/components/common/CloseButton.svelte +10 -10
  110. package/package/components/common/CloseButton.svelte.d.ts +6 -14
  111. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
  112. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  113. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
  114. package/package/components/common/fileInput/FileInput.svelte +2 -0
  115. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/package/components/common/popup/Popup.svelte +4 -3
  117. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  118. package/package/components/common/table/AppRow.svelte +3 -10
  119. package/package/components/common/table/FlowRow.svelte +12 -1
  120. package/package/components/copilot/IteratorGen.svelte +1 -1
  121. package/package/components/copilot/PredicateGen.svelte +1 -1
  122. package/package/components/copilot/StepInputGen.svelte +8 -3
  123. package/package/components/copilot/StepInputsGen.svelte +5 -2
  124. package/package/components/details/WebhooksPanel.svelte +32 -1
  125. package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
  126. package/package/components/flows/FlowHistory.svelte +208 -0
  127. package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
  128. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  129. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
  130. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  131. package/package/components/flows/content/FlowLoop.svelte +23 -26
  132. package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
  133. package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
  134. package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
  135. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  136. package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  138. package/package/components/flows/content/SuspendDrawer.svelte +7 -7
  139. package/package/components/flows/flowStateUtils.js +2 -1
  140. package/package/components/flows/flowStore.js +1 -1
  141. package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
  142. package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
  143. package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
  144. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
  145. package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
  146. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  147. package/package/components/flows/map/MapItem.svelte +20 -0
  148. package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
  149. package/package/components/flows/map/VirtualItem.svelte +4 -2
  150. package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
  151. package/package/components/flows/previousResults.d.ts +9 -0
  152. package/package/components/flows/previousResults.js +42 -8
  153. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  154. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  155. package/package/components/flows/types.d.ts +1 -1
  156. package/package/components/graph/FlowGraph.svelte +80 -42
  157. package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
  158. package/package/components/graph/model.d.ts +6 -1
  159. package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
  160. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  161. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
  162. package/package/components/graph/util.d.ts +1 -1
  163. package/package/components/graph/util.js +1 -2
  164. package/package/components/home/ItemsList.svelte +22 -19
  165. package/package/components/jobs/JobPreview.svelte +11 -2
  166. package/package/components/propertyPicker/PropPicker.svelte +30 -0
  167. package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
  168. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  169. package/package/components/runs/JobLoader.svelte +21 -8
  170. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  171. package/package/components/runs/JobPreview.svelte +5 -1
  172. package/package/components/runs/RunRow.svelte +12 -8
  173. package/package/components/runs/RunsFilter.svelte +2 -4
  174. package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
  175. package/package/components/runs/RunsTable.svelte +63 -29
  176. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  177. package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
  178. package/package/components/schema/PropertyEditor.svelte +1 -1
  179. package/package/components/search/GlobalSearchModal.svelte +559 -0
  180. package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
  181. package/package/components/search/QuickMenuItem.svelte +76 -0
  182. package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
  183. package/package/components/sidebar/MenuButton.svelte +11 -0
  184. package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
  185. package/package/components/sidebar/changelogs.js +35 -0
  186. package/package/components/wizards/AppPicker.svelte +68 -0
  187. package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
  188. package/package/components/wizards/NavbarWizard.svelte +131 -0
  189. package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
  190. package/package/defaults.d.ts +1 -1
  191. package/package/defaults.js +1 -1
  192. package/package/es6.d.ts.txt +370 -1
  193. package/package/gen/core/OpenAPI.js +1 -1
  194. package/package/gen/schemas.gen.d.ts +42 -3
  195. package/package/gen/schemas.gen.js +42 -3
  196. package/package/gen/services.gen.d.ts +80 -5
  197. package/package/gen/services.gen.js +149 -8
  198. package/package/gen/types.gen.d.ts +265 -11
  199. package/package/inferArgSig.js +4 -0
  200. package/package/script_helpers.d.ts +3 -3
  201. package/package/script_helpers.js +46 -22
  202. package/package/stores.d.ts +1 -1
  203. package/package/stores.js +1 -1
  204. package/package/utils.d.ts +7 -23
  205. package/package/utils.js +54 -33
  206. package/package/windmill_fetch.d.ts.txt +6 -6
  207. package/package.json +3 -11
  208. package/package/components/ContentSearch.svelte +0 -355
@@ -1,4 +1,4 @@
1
- <script>import { createEventDispatcher, getContext } from 'svelte';
1
+ <script>import { createEventDispatcher, getContext, onMount } from 'svelte';
2
2
  import 'ag-grid-community/styles/ag-grid.css';
3
3
  import 'ag-grid-community/styles/ag-theme-alpine.css';
4
4
  import AppButton from '../../buttons/AppButton.svelte';
@@ -21,6 +21,16 @@ export let wrapActions = undefined;
21
21
  export let selectRow;
22
22
  const dispatch = createEventDispatcher();
23
23
  const { selectedComponent, hoverStore, mode, connectingInput } = getContext('AppViewerContext');
24
+ let rowDiv = undefined;
25
+ onMount(() => {
26
+ // apply w-full to the the parent of the parent of the rowDiv
27
+ if (rowDiv) {
28
+ const parent = rowDiv.parentElement?.parentElement?.parentElement;
29
+ if (parent) {
30
+ parent.classList.add('w-full');
31
+ }
32
+ }
33
+ });
24
34
  </script>
25
35
 
26
36
  <RowWrapper value={row} index={rowIndex} {onSet} {onRemove}>
@@ -29,6 +39,7 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
29
39
  'flex flex-row justify-center items-center gap-4 h-full px-4 py-1 w-full',
30
40
  wrapActions ? 'flex-wrap' : ''
31
41
  )}
42
+ bind:this={rowDiv}
32
43
  >
33
44
  {#each actions as action, actionIndex}
34
45
  <!-- svelte-ignore a11y-mouse-events-have-key-events -->
@@ -47,13 +58,20 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
47
58
  }}
48
59
  on:pointerdown|stopPropagation={(e) => {
49
60
  selectRow()
50
- $selectedComponent = [action.id]
61
+
62
+ if (!$connectingInput.opened) {
63
+ $selectedComponent = [action.id]
64
+ }
51
65
  }}
52
66
  class={twMerge(
53
67
  ($selectedComponent?.includes(action.id) || $hoverStore === action.id) &&
54
68
  $mode !== 'preview'
55
- ? 'outline outline-indigo-500 outline-1 outline-offset-1 relative z-50'
56
- : 'relative'
69
+ ? 'outline outline-indigo-500 outline-1 outline-offset-1 relative '
70
+ : 'relative',
71
+ $hoverStore === action.id && $selectedComponent?.[0] !== action.id
72
+ ? 'outline-blue-500'
73
+ : '',
74
+ 'w-full cursor-pointer'
57
75
  )}
58
76
  >
59
77
  {#if $mode !== 'preview'}
@@ -64,6 +82,9 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
64
82
  class={twMerge(
65
83
  'px-2 text-2xs font-bold absolute shadow -top-2 -left-4 border z-50 rounded-sm w-8 !h-5 flex justify-center items-center',
66
84
  'bg-indigo-500/90 border-indigo-600 text-white',
85
+ $hoverStore === action.id && $selectedComponent?.[0] !== action.id
86
+ ? 'bg-blue-500/90 border-blue-600'
87
+ : '',
67
88
  $selectedComponent?.includes(action.id) || $hoverStore === action.id
68
89
  ? 'opacity-100'
69
90
  : 'opacity-0'
@@ -92,8 +113,16 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
92
113
  </svelte:fragment>
93
114
  <ComponentOutputViewer
94
115
  suffix="table"
95
- on:select={({ detail }) =>
96
- connectOutput(connectingInput, 'buttoncomponent', action.id, detail)}
116
+ on:select={({ detail }) => {
117
+ const tableId = action.id.split('_')[0]
118
+
119
+ connectOutput(
120
+ connectingInput,
121
+ action.type,
122
+ tableId,
123
+ `inputs.${action.id}[${rowIndex}].${detail}`
124
+ )
125
+ }}
97
126
  componentId={action.id}
98
127
  />
99
128
  </Popup>
@@ -162,25 +191,23 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
162
191
  {controls}
163
192
  />
164
193
  {:else if action.type == 'selectcomponent'}
165
- <div class="w-40">
166
- <AppSelect
167
- noDefault
168
- noInitialize
169
- extraKey={'idx' + rowIndex}
170
- {render}
171
- --font-size="10px"
172
- id={action.id}
173
- customCss={action.customCss}
174
- configuration={action.configuration}
175
- recomputeIds={action.recomputeIds}
176
- onSelect={action.onSelect}
177
- preclickAction={async () => {
178
- dispatch('toggleRow')
179
- selectRow()
180
- }}
181
- {controls}
182
- />
183
- </div>
194
+ <AppSelect
195
+ noDefault
196
+ noInitialize
197
+ extraKey={'idx' + rowIndex}
198
+ {render}
199
+ --font-size="10px"
200
+ id={action.id}
201
+ customCss={action.customCss}
202
+ configuration={action.configuration}
203
+ recomputeIds={action.recomputeIds}
204
+ onSelect={action.onSelect}
205
+ preclickAction={async () => {
206
+ dispatch('toggleRow')
207
+ selectRow()
208
+ }}
209
+ {controls}
210
+ />
184
211
  {/if}
185
212
  {:else if action.type == 'buttoncomponent'}
186
213
  <AppButton
@@ -218,24 +245,22 @@ const { selectedComponent, hoverStore, mode, connectingInput } = getContext('App
218
245
  }}
219
246
  />
220
247
  {:else if action.type == 'selectcomponent'}
221
- <div class="w-40">
222
- <AppSelect
223
- noDefault
224
- noInitialize
225
- extraKey={'idx' + rowIndex}
226
- {render}
227
- --font-size="10px"
228
- id={action.id}
229
- customCss={action.customCss}
230
- configuration={action.configuration}
231
- recomputeIds={action.recomputeIds}
232
- onSelect={action.onSelect}
233
- preclickAction={async () => {
234
- dispatch('toggleRow')
235
- selectRow()
236
- }}
237
- />
238
- </div>
248
+ <AppSelect
249
+ noDefault
250
+ noInitialize
251
+ extraKey={'idx' + rowIndex}
252
+ {render}
253
+ --font-size="10px"
254
+ id={action.id}
255
+ customCss={action.customCss}
256
+ configuration={action.configuration}
257
+ recomputeIds={action.recomputeIds}
258
+ onSelect={action.onSelect}
259
+ preclickAction={async () => {
260
+ dispatch('toggleRow')
261
+ selectRow()
262
+ }}
263
+ />
239
264
  {/if}
240
265
  </div>
241
266
  {/each}
@@ -0,0 +1,284 @@
1
+ <script>import { getContext } from 'svelte';
2
+ import { initConfig, initOutput } from '../../editor/appUtils';
3
+ import { initCss } from '../../utils';
4
+ import AlignWrapper from '../helpers/AlignWrapper.svelte';
5
+ import InitializeComponent from '../helpers/InitializeComponent.svelte';
6
+ import { parseISO, format as formatDateFns } from 'date-fns';
7
+ import { components } from '../../editor/component';
8
+ import ResolveConfig from '../helpers/ResolveConfig.svelte';
9
+ import ResolveStyle from '../helpers/ResolveStyle.svelte';
10
+ import Select from '../../svelte-select/lib/Select.svelte';
11
+ import { SELECT_INPUT_DEFAULT_STYLE } from '../../../../defaults';
12
+ import DarkModeObserver from '../../../DarkModeObserver.svelte';
13
+ import { twMerge } from 'tailwind-merge';
14
+ import { enUS, fr, de, pt, ja } from 'date-fns/locale';
15
+ export let id;
16
+ export let configuration;
17
+ export let verticalAlignment = undefined;
18
+ export let customCss = undefined;
19
+ export let render;
20
+ const { app, worldStore, componentControl } = getContext('AppViewerContext');
21
+ let resolvedConfig = initConfig(components['dateselectcomponent'].initialData.configuration, configuration);
22
+ let value = undefined;
23
+ $componentControl[id] = {
24
+ setValue(nvalue) {
25
+ value = nvalue;
26
+ }
27
+ };
28
+ let outputs = initOutput($worldStore, id, {
29
+ day: undefined,
30
+ month: undefined,
31
+ year: undefined
32
+ });
33
+ $: !value && handleDefault(resolvedConfig.defaultValue);
34
+ function getLocale(locale = 'en-US') {
35
+ const localeMapping = {
36
+ 'en-US': enUS,
37
+ 'en-GB': enUS,
38
+ 'en-IE': enUS,
39
+ 'de-DE': de,
40
+ 'fr-FR': fr,
41
+ 'br-FR': fr,
42
+ 'ja-JP': ja,
43
+ 'pt-TL': pt,
44
+ 'fr-CA': fr,
45
+ 'en-CA': enUS
46
+ };
47
+ return localeMapping[resolvedConfig?.locale] || enUS;
48
+ }
49
+ function handleDefault(defaultValue) {
50
+ value = defaultValue;
51
+ if (value) {
52
+ const date = parseISO(value);
53
+ const locale = getLocale(resolvedConfig.locale);
54
+ selectedDay = String(date.getDate());
55
+ selectedMonth = formatDateFns(date, 'MMMM', { locale });
56
+ selectedYear = String(date.getFullYear());
57
+ if (resolvedConfig?.enableDay) {
58
+ outputs.day.set(Number(selectedDay));
59
+ }
60
+ if (resolvedConfig?.enableMonth) {
61
+ outputs.month.set(date.getMonth() + 1);
62
+ }
63
+ if (resolvedConfig?.enableYear) {
64
+ outputs.year.set(Number(selectedYear));
65
+ }
66
+ }
67
+ }
68
+ let css = initCss($app.css?.dateinputcomponent, customCss);
69
+ let darkMode = false;
70
+ let selectedDay = undefined;
71
+ let selectedMonth = undefined;
72
+ let selectedYear = undefined;
73
+ $: monthItems = computeMonthItems(resolvedConfig?.locale);
74
+ function updateOutputs(enableDay, enableMonth, enableYear) {
75
+ if (enableDay) {
76
+ outputs.day.set(Number(selectedDay));
77
+ }
78
+ else {
79
+ outputs.day.set(undefined);
80
+ }
81
+ if (enableMonth) {
82
+ const monthIndex = monthItems.findIndex((item) => item.label === selectedMonth);
83
+ outputs.month.set(monthIndex + 1);
84
+ }
85
+ else {
86
+ outputs.month.set(undefined);
87
+ }
88
+ if (enableYear) {
89
+ outputs.year.set(Number(selectedYear));
90
+ }
91
+ else {
92
+ outputs.year.set(undefined);
93
+ }
94
+ }
95
+ $: updateOutputs(resolvedConfig.enableDay, resolvedConfig.enableMonth, resolvedConfig.enableYear);
96
+ function computeMonthItems(locale = 'en-US') {
97
+ return [
98
+ {
99
+ label: formatDateFns(new Date(2000, 0, 1), 'MMMM', { locale: getLocale(locale) }),
100
+ value: 'January'
101
+ },
102
+ {
103
+ label: formatDateFns(new Date(2000, 1, 1), 'MMMM', { locale: getLocale(locale) }),
104
+ value: 'February'
105
+ },
106
+ {
107
+ label: formatDateFns(new Date(2000, 2, 1), 'MMMM', { locale: getLocale(locale) }),
108
+ value: 'March'
109
+ },
110
+ {
111
+ label: formatDateFns(new Date(2000, 3, 1), 'MMMM', { locale: getLocale(locale) }),
112
+ value: 'April'
113
+ },
114
+ {
115
+ label: formatDateFns(new Date(2000, 4, 1), 'MMMM', { locale: getLocale(locale) }),
116
+ value: 'May'
117
+ },
118
+ {
119
+ label: formatDateFns(new Date(2000, 5, 1), 'MMMM', { locale: getLocale(locale) }),
120
+ value: 'June'
121
+ },
122
+ {
123
+ label: formatDateFns(new Date(2000, 6, 1), 'MMMM', { locale: getLocale(locale) }),
124
+ value: 'July'
125
+ },
126
+ {
127
+ label: formatDateFns(new Date(2000, 7, 1), 'MMMM', { locale: getLocale(locale) }),
128
+ value: 'August'
129
+ },
130
+ {
131
+ label: formatDateFns(new Date(2000, 8, 1), 'MMMM', { locale: getLocale(locale) }),
132
+ value: 'September'
133
+ },
134
+ {
135
+ label: formatDateFns(new Date(2000, 9, 1), 'MMMM', { locale: getLocale(locale) }),
136
+ value: 'October'
137
+ },
138
+ {
139
+ label: formatDateFns(new Date(2000, 10, 1), 'MMMM', { locale: getLocale(locale) }),
140
+ value: 'November'
141
+ },
142
+ {
143
+ label: formatDateFns(new Date(2000, 11, 1), 'MMMM', { locale: getLocale(locale) }),
144
+ value: 'December'
145
+ }
146
+ ];
147
+ }
148
+ function computeDayPerMonth(selectedMonth, selectedYear) {
149
+ if (!selectedMonth || !selectedYear) {
150
+ return 31;
151
+ }
152
+ const monthIndex = [
153
+ 'January',
154
+ 'February',
155
+ 'March',
156
+ 'April',
157
+ 'May',
158
+ 'June',
159
+ 'July',
160
+ 'August',
161
+ 'September',
162
+ 'October',
163
+ 'November',
164
+ 'December'
165
+ ].indexOf(selectedMonth) + 1;
166
+ const daysInMonth = new Date(Number(selectedYear), monthIndex, 0).getDate();
167
+ return daysInMonth;
168
+ }
169
+ </script>
170
+
171
+ {#each Object.keys(components['dateselectcomponent'].initialData.configuration) as key (key)}
172
+ <ResolveConfig
173
+ {id}
174
+ {key}
175
+ bind:resolvedConfig={resolvedConfig[key]}
176
+ configuration={configuration[key]}
177
+ />
178
+ {/each}
179
+
180
+ {#each Object.keys(css ?? {}) as key (key)}
181
+ <ResolveStyle
182
+ {id}
183
+ {customCss}
184
+ {key}
185
+ bind:css={css[key]}
186
+ componentStyle={$app.css?.dateselectcomponent}
187
+ />
188
+ {/each}
189
+
190
+ <DarkModeObserver bind:darkMode />
191
+
192
+ <InitializeComponent {id} />
193
+
194
+ <AlignWrapper {render} {verticalAlignment}>
195
+ <div
196
+ class={twMerge(
197
+ 'w-full',
198
+ resolvedConfig?.orientation === 'horizontal'
199
+ ? 'flex flex-row gap-2 '
200
+ : 'flex gap-2 flex-col',
201
+ css?.container?.class
202
+ )}
203
+ style={css?.container?.style}
204
+ >
205
+ {#if resolvedConfig?.enableDay}
206
+ <div
207
+ class={twMerge('grow', resolvedConfig?.orientation === 'horizontal' ? 'w-1/4' : 'w-full')}
208
+ >
209
+ <Select
210
+ portal={false}
211
+ value={selectedDay}
212
+ on:change={(e) => {
213
+ selectedDay = e.detail.value
214
+ outputs.day.set(Number(selectedDay))
215
+ }}
216
+ on:clear={() => {
217
+ selectedDay = ''
218
+ outputs.day.set(undefined)
219
+ }}
220
+ items={Array.from({ length: computeDayPerMonth(selectedMonth, selectedYear) }, (_, i) => {
221
+ return { label: String(i + 1), value: String(i + 1) }
222
+ })}
223
+ class={twMerge('text-clip min-w-0', css?.input?.class, 'wm-date-select')}
224
+ containerStyles={(darkMode
225
+ ? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
226
+ : SELECT_INPUT_DEFAULT_STYLE.containerStyles) + css?.input?.style}
227
+ inputStyles={SELECT_INPUT_DEFAULT_STYLE.inputStyles}
228
+ placeholder="Pick a day"
229
+ />
230
+ </div>
231
+ {/if}
232
+ {#if resolvedConfig?.enableMonth}
233
+ <div
234
+ class={twMerge('grow', resolvedConfig?.orientation === 'horizontal' ? 'w-1/2' : 'w-full')}
235
+ >
236
+ <Select
237
+ portal={false}
238
+ value={selectedMonth}
239
+ on:change={(e) => {
240
+ selectedMonth = e.detail.value
241
+ outputs.month.set(monthItems.findIndex((item) => item.value === selectedMonth) + 1)
242
+ }}
243
+ on:clear={() => {
244
+ selectedMonth = ''
245
+ outputs.month.set(undefined)
246
+ }}
247
+ items={monthItems}
248
+ placeholder="Pick a month"
249
+ class={twMerge('text-clip min-w-0', css?.input?.class, 'wm-date-select')}
250
+ containerStyles={(darkMode
251
+ ? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
252
+ : SELECT_INPUT_DEFAULT_STYLE.containerStyles) + css?.input?.style}
253
+ clearable
254
+ />
255
+ </div>
256
+ {/if}
257
+ {#if resolvedConfig?.enableYear}
258
+ <div
259
+ class={twMerge('grow', resolvedConfig?.orientation === 'horizontal' ? 'w-1/4' : 'w-full')}
260
+ >
261
+ <Select
262
+ portal={false}
263
+ value={selectedYear}
264
+ on:change={(e) => {
265
+ selectedYear = e.detail.value
266
+ outputs.year.set(Number(selectedYear))
267
+ }}
268
+ on:clear={() => {
269
+ selectedYear = ''
270
+ outputs.year.set(undefined)
271
+ }}
272
+ items={Array.from({ length: 201 }, (_, i) => `${1900 + i}`)}
273
+ placeholder="Pick a year"
274
+ inputStyles={SELECT_INPUT_DEFAULT_STYLE.inputStyles}
275
+ class={twMerge('text-clip min-w-0', css?.input?.class, 'wm-date-select')}
276
+ containerStyles={(darkMode
277
+ ? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
278
+ : SELECT_INPUT_DEFAULT_STYLE.containerStyles) + css?.input?.style}
279
+ clearable
280
+ />
281
+ </div>
282
+ {/if}
283
+ </div>
284
+ </AlignWrapper>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { ComponentCustomCSS, RichConfigurations } from '../../types';
3
+ declare const __propDef: {
4
+ props: {
5
+ id: string;
6
+ configuration: RichConfigurations;
7
+ verticalAlignment?: 'top' | 'center' | 'bottom' | undefined;
8
+ customCss?: ComponentCustomCSS<'dateselectcomponent'> | undefined;
9
+ render: boolean;
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export type AppDateSelectProps = typeof __propDef.props;
17
+ export type AppDateSelectEvents = typeof __propDef.events;
18
+ export type AppDateSelectSlots = typeof __propDef.slots;
19
+ export default class AppDateSelect extends SvelteComponent<AppDateSelectProps, AppDateSelectEvents, AppDateSelectSlots> {
20
+ }
21
+ export {};
@@ -108,6 +108,7 @@ let css = initCss($app.css?.datetimeinputcomponent, customCss);
108
108
  e.stopPropagation()
109
109
  $selectedComponent = [id]
110
110
  }}
111
+ inputClass={twMerge('windmillapp w-full py-1.5 px-2 text-sm', 'app-editor-input')}
111
112
  minDate={resolvedConfig.minDateTime
112
113
  ? formatDate(resolvedConfig.minDateTime, 'yyyy-MM-dd')
113
114
  : undefined}
@@ -115,6 +116,7 @@ let css = initCss($app.css?.datetimeinputcomponent, customCss);
115
116
  ? formatDate(resolvedConfig.maxDateTime, 'yyyy-MM-dd')
116
117
  : undefined}
117
118
  on:focus={() => ($selectedComponent = [id])}
119
+ disabled={resolvedConfig.disabled}
118
120
  />
119
121
  {/if}
120
122
  </div>
@@ -1,28 +1,26 @@
1
1
  <script>import { getContext } from 'svelte';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { FileInput } from '../../../common';
4
- import { initOutput } from '../../editor/appUtils';
4
+ import { initConfig, initOutput } from '../../editor/appUtils';
5
5
  import { initCss } from '../../utils';
6
- import InputValue from '../helpers/InputValue.svelte';
7
6
  import InitializeComponent from '../helpers/InitializeComponent.svelte';
8
7
  import ResolveStyle from '../helpers/ResolveStyle.svelte';
8
+ import { components } from '../../editor/component';
9
+ import ResolveConfig from '../helpers/ResolveConfig.svelte';
9
10
  export let id;
10
11
  export let configuration;
11
12
  export let customCss = undefined;
12
13
  export let render;
13
14
  export let onFileChange = undefined;
15
+ export let extraKey = undefined;
14
16
  const { app, worldStore, componentControl, mode, runnableComponents } = getContext('AppViewerContext');
15
- let acceptedFileTypes = undefined;
16
- let allowMultiple = undefined;
17
- let text = undefined;
18
- let includeMimeType = undefined;
19
- let submittedFileText = undefined;
20
17
  let outputs = initOutput($worldStore, id, {
21
18
  result: []
22
19
  });
20
+ let resolvedConfig = initConfig(components['fileinputcomponent'].initialData.configuration, configuration);
23
21
  // Receives Base64 encoded strings from the input component
24
22
  async function handleChange(files) {
25
- if (includeMimeType === false) {
23
+ if (resolvedConfig?.includeMimeType === false) {
26
24
  files = files?.map((file) => {
27
25
  const [_, data] = file.data.split('base64,');
28
26
  return { name: file.name, data };
@@ -58,21 +56,15 @@ $: outputs.result && files === undefined && $mode === 'dnd' && preFillFiles();
58
56
  />
59
57
  {/each}
60
58
 
61
- <InputValue
62
- key="accepted"
63
- {id}
64
- input={configuration.acceptedFileTypes}
65
- bind:value={acceptedFileTypes}
66
- />
67
- <InputValue key="multiple" {id} input={configuration.allowMultiple} bind:value={allowMultiple} />
68
- <InputValue key="text" {id} input={configuration.text} bind:value={text} />
69
- <InputValue key="mime" {id} input={configuration.includeMimeType} bind:value={includeMimeType} />
70
- <InputValue
71
- key="submittedFileText"
72
- {id}
73
- input={configuration.submittedFileText}
74
- bind:value={submittedFileText}
75
- />
59
+ {#each Object.keys(components['fileinputcomponent'].initialData.configuration) as key (key)}
60
+ <ResolveConfig
61
+ {id}
62
+ {extraKey}
63
+ {key}
64
+ bind:resolvedConfig={resolvedConfig[key]}
65
+ configuration={configuration[key]}
66
+ />
67
+ {/each}
76
68
 
77
69
  <InitializeComponent {id} />
78
70
 
@@ -80,8 +72,10 @@ $: outputs.result && files === undefined && $mode === 'dnd' && preFillFiles();
80
72
  <div class="w-full h-full">
81
73
  <FileInput
82
74
  bind:this={fileInput}
83
- accept={acceptedFileTypes?.length ? acceptedFileTypes?.join(', ') : undefined}
84
- multiple={allowMultiple}
75
+ accept={resolvedConfig?.acceptedFileTypes?.length
76
+ ? resolvedConfig?.acceptedFileTypes?.join(', ')
77
+ : undefined}
78
+ multiple={resolvedConfig?.allowMultiple}
85
79
  convertTo="base64"
86
80
  returnFileNames
87
81
  on:change={({ detail }) => {
@@ -89,10 +83,11 @@ $: outputs.result && files === undefined && $mode === 'dnd' && preFillFiles();
89
83
  }}
90
84
  class={twMerge('w-full h-full', css?.container?.class, 'wm-file-input')}
91
85
  style={css?.container?.style}
92
- submittedText={submittedFileText}
86
+ submittedText={resolvedConfig?.submittedFileText}
87
+ disabled={resolvedConfig.disabled}
93
88
  bind:files
94
89
  >
95
- {text}
90
+ {resolvedConfig?.text}
96
91
  </FileInput>
97
92
  </div>
98
93
  {/if}
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  customCss?: ComponentCustomCSS<'fileinputcomponent'> | undefined;
8
8
  render: boolean;
9
9
  onFileChange?: string[] | undefined;
10
+ extraKey?: string | undefined;
10
11
  };
11
12
  events: {
12
13
  [evt: string]: CustomEvent<any>;
@@ -43,7 +43,7 @@ function handleDefault(defaultValue) {
43
43
  value = defaultValue;
44
44
  }
45
45
  let css = initCss($app.css?.[appCssKey], customCss);
46
- $: classInput = twMerge('windmillapp w-full py-1.5 px-2 text-sm', 'app-editor-input', css?.input?.class ?? '', resolvedConfig.disabled ? 'placeholder:text-gray-400 dark:placeholder:text-gray-600' : '', 'wm-input', 'wm-text-input');
46
+ $: classInput = twMerge('windmillapp w-full py-1.5 px-2 text-sm', 'app-editor-input', css?.input?.class ?? '', 'wm-input', 'wm-text-input');
47
47
  let beforeIconComponent;
48
48
  let afterIconComponent;
49
49
  $: resolvedConfig.beforeIcon && beforeIconComponent && handleBeforeIcon();
@@ -40,45 +40,47 @@ $: if (!nodes.map((n) => n.id).includes(currentNodeId)) {
40
40
  $: lastNodeId = nodes?.find((node) => node.next.length === 0)?.id;
41
41
  $: isNextDisabled = resolvedNext?.[currentNodeId] === false;
42
42
  const history = [];
43
+ function updateCurrentNode(node, index) {
44
+ currentNodeId = node.next[index].id;
45
+ history.push(node.id);
46
+ selectedConditionIndex = index + 1;
47
+ $focusedGrid = {
48
+ parentComponentId: id,
49
+ subGridIndex: nodes.findIndex((node) => node.id == currentNodeId)
50
+ };
51
+ }
43
52
  function next() {
44
53
  const resolvedNodeConditions = resolvedConditions[currentNodeId];
45
- let found = false;
46
- resolvedNodeConditions.forEach((condition, index) => {
47
- if (found)
54
+ const node = nodes.find((node) => node.id == currentNodeId);
55
+ if (!node) {
56
+ return;
57
+ }
58
+ for (let index = 0; index < resolvedNodeConditions.length; index++) {
59
+ const condition = resolvedNodeConditions[index];
60
+ if (condition && resolvedNext[node.id] !== false) {
61
+ updateCurrentNode(node, index);
48
62
  return;
49
- const node = nodes.find((node) => node.id == currentNodeId);
50
- if (condition && node && resolvedNext[node.id] !== false) {
51
- found = true;
52
- currentNodeId = node.next[index].id;
53
- history.push(node.id);
54
- selectedConditionIndex = index + 1;
55
- $focusedGrid = {
56
- parentComponentId: id,
57
- subGridIndex: nodes.findIndex((node) => node.id == currentNodeId)
58
- };
59
63
  }
60
- });
64
+ }
65
+ }
66
+ function updateFocusedGrid(nodeId) {
67
+ currentNodeId = nodeId;
68
+ selectedConditionIndex = nodes.findIndex((node) => node.id == currentNodeId);
69
+ $focusedGrid = {
70
+ parentComponentId: id,
71
+ subGridIndex: selectedConditionIndex
72
+ };
61
73
  }
62
74
  function prev() {
63
- const previsouNodeId = history.pop();
64
- if (previsouNodeId) {
65
- currentNodeId = previsouNodeId;
66
- selectedConditionIndex = nodes.findIndex((next) => next.id == currentNodeId);
67
- $focusedGrid = {
68
- parentComponentId: id,
69
- subGridIndex: selectedConditionIndex
70
- };
75
+ const previousNodeId = history.pop();
76
+ if (previousNodeId) {
77
+ updateFocusedGrid(previousNodeId);
71
78
  }
72
79
  else {
73
- // if no history, go to first node
80
+ // if no history, go to the first node
74
81
  const node = getFirstNode(nodes);
75
82
  if (node) {
76
- currentNodeId = node.id;
77
- selectedConditionIndex = nodes.findIndex((next) => next.id == currentNodeId);
78
- $focusedGrid = {
79
- parentComponentId: id,
80
- subGridIndex: selectedConditionIndex
81
- };
83
+ updateFocusedGrid(node.id);
82
84
  }
83
85
  }
84
86
  }
@@ -167,7 +169,7 @@ $: nodes && $debuggingComponents && updateDebuggingComponents();
167
169
  <SubGridEditor
168
170
  visible={render && node.id === currentNodeId}
169
171
  {id}
170
- class={twMerge(css?.container?.class, 'wm-conditional-tabs')}
172
+ class={twMerge(css?.container?.class, 'wm-decision-tree')}
171
173
  style={css?.container?.style}
172
174
  subGridId={`${id}-${i}`}
173
175
  containerHeight={componentContainerHeight - 40}