windmill-components 1.84.6 → 1.86.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 (271) hide show
  1. package/components/AppConnect.svelte +2 -2
  2. package/components/ArgInfo.svelte +4 -6
  3. package/components/ArgInput.svelte +12 -12
  4. package/components/ArgInput.svelte.d.ts +1 -2
  5. package/components/CenteredModal.svelte +9 -7
  6. package/components/CronInput.svelte +301 -64
  7. package/components/CronInput.svelte.d.ts +3 -3
  8. package/components/DisplayResult.svelte +5 -7
  9. package/components/Dropdown.svelte +5 -4
  10. package/components/Editor.svelte +138 -83
  11. package/components/Editor.svelte.d.ts +10 -4
  12. package/components/EditorBar.svelte +72 -36
  13. package/components/EditorBar.svelte.d.ts +1 -1
  14. package/components/FlowBuilder.svelte +136 -110
  15. package/components/FlowGraphViewer.svelte +5 -8
  16. package/components/FlowGraphViewer.svelte.d.ts +1 -0
  17. package/components/FlowPreviewContent.svelte +14 -11
  18. package/components/FlowStatusViewer.svelte +54 -44
  19. package/components/FlowViewer.svelte +1 -1
  20. package/components/FolderEditor.svelte +2 -10
  21. package/components/FolderUsageInfo.svelte +1 -1
  22. package/components/GroupEditor.svelte +6 -15
  23. package/components/HighlightCode.svelte +1 -1
  24. package/components/InlineCodeCopy.svelte +2 -1
  25. package/components/InputTransformForm.svelte +75 -73
  26. package/components/InputTransformSchemaForm.svelte +1 -1
  27. package/components/InputTransformsViewer.svelte +1 -1
  28. package/components/LightweightArgInput.svelte +12 -0
  29. package/components/LightweightArgInput.svelte.d.ts +1 -0
  30. package/components/LightweightSchemaForm.svelte +2 -1
  31. package/components/LightweightSchemaForm.svelte.d.ts +2 -0
  32. package/components/Modal.svelte +2 -2
  33. package/components/ModulePreview.svelte +11 -11
  34. package/components/ModuleStatus.svelte +0 -1
  35. package/components/Multiselect.svelte +1 -0
  36. package/components/ObjectResourceInput.svelte +1 -23
  37. package/components/Path.svelte +56 -94
  38. package/components/Popover.svelte +7 -19
  39. package/components/Range.svelte +1 -4
  40. package/components/ResourceEditor.svelte +6 -6
  41. package/components/ResourcePicker.svelte +2 -2
  42. package/components/RunForm.svelte +5 -6
  43. package/components/ScheduleEditor.svelte +23 -13
  44. package/components/SchemaModal.svelte +1 -0
  45. package/components/SchemaModal.svelte.d.ts +1 -1
  46. package/components/ScriptBuilder.svelte +201 -206
  47. package/components/ScriptBuilder.svelte.d.ts +2 -0
  48. package/components/ScriptEditor.svelte +38 -38
  49. package/components/ScriptEditor.svelte.d.ts +5 -1
  50. package/components/ScriptSchema.svelte +1 -20
  51. package/components/ScriptSchema.svelte.d.ts +0 -1
  52. package/components/SearchItems.svelte +1 -1
  53. package/components/SharedBadge.svelte +0 -1
  54. package/components/SimpleEditor.svelte +17 -37
  55. package/components/SimpleEditor.svelte.d.ts +6 -0
  56. package/components/Star.svelte +2 -1
  57. package/components/TemplateEditor.svelte +21 -29
  58. package/components/TemplateEditor.svelte.d.ts +3 -0
  59. package/components/Toast.svelte +50 -0
  60. package/components/Toast.svelte.d.ts +18 -0
  61. package/components/apps/components/buttons/AppButton.svelte +2 -1
  62. package/components/apps/components/display/AppBarChart.svelte +5 -5
  63. package/components/apps/components/display/AppHtml.svelte +9 -6
  64. package/components/apps/components/display/AppIcon.svelte +3 -0
  65. package/components/apps/components/display/AppImage.svelte +4 -1
  66. package/components/apps/components/display/AppMap.svelte +3 -0
  67. package/components/apps/components/display/AppPdf.svelte +14 -11
  68. package/components/apps/components/display/AppText.svelte +152 -60
  69. package/components/apps/components/display/AppText.svelte.d.ts +4 -0
  70. package/components/apps/components/display/table/AppAggridTable.svelte +25 -12
  71. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -1
  72. package/components/apps/components/display/table/AppTable.svelte +1 -2
  73. package/components/apps/components/display/table/AppTableFooter.svelte +0 -1
  74. package/components/apps/components/helpers/AlignWrapper.svelte +1 -20
  75. package/components/apps/components/helpers/HiddenComponent.svelte +12 -6
  76. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
  77. package/components/apps/components/helpers/InitializeComponent.svelte +12 -0
  78. package/components/apps/components/helpers/InitializeComponent.svelte.d.ts +16 -0
  79. package/components/apps/components/helpers/InputValue.svelte +6 -0
  80. package/components/apps/components/helpers/NonRunnableComponent.svelte +4 -3
  81. package/components/apps/components/helpers/RunnableComponent.svelte +24 -6
  82. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  83. package/components/apps/components/helpers/RunnableWrapper.svelte +8 -2
  84. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  85. package/components/apps/components/helpers/eval.d.ts +4 -0
  86. package/components/apps/components/helpers/eval.js +3 -1
  87. package/components/apps/components/inputs/AppCheckbox.svelte +3 -0
  88. package/components/apps/components/inputs/AppDateInput.svelte +3 -0
  89. package/components/apps/components/inputs/AppFileInput.svelte +4 -0
  90. package/components/apps/components/inputs/AppMultiSelect.svelte +5 -2
  91. package/components/apps/components/inputs/AppNumberInput.svelte +3 -0
  92. package/components/apps/components/inputs/AppRangeInput.svelte +8 -5
  93. package/components/apps/components/inputs/AppSelect.svelte +3 -9
  94. package/components/apps/components/inputs/AppSliderInputs.svelte +2 -0
  95. package/components/apps/components/inputs/AppTextInput.svelte +12 -5
  96. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +3 -0
  97. package/components/apps/components/layout/AppContainer.svelte +3 -0
  98. package/components/apps/components/layout/AppDivider.svelte +3 -0
  99. package/components/apps/components/layout/AppDrawer.svelte +3 -0
  100. package/components/apps/components/layout/AppSplitpanes.svelte +3 -0
  101. package/components/apps/components/layout/AppTabs.svelte +4 -1
  102. package/components/apps/editor/AppEditor.svelte +42 -35
  103. package/components/apps/editor/AppEditorHeader.svelte +23 -15
  104. package/components/apps/editor/AppPreview.svelte +5 -3
  105. package/components/apps/editor/ComponentHeader.svelte +20 -1
  106. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -0
  107. package/components/apps/editor/GridEditor.svelte +2 -2
  108. package/components/apps/editor/RecomputeAllComponents.svelte +7 -4
  109. package/components/apps/editor/SettingsPanel.svelte +1 -0
  110. package/components/apps/editor/SubGridEditor.svelte +5 -5
  111. package/components/apps/editor/appUtils.js +13 -3
  112. package/components/apps/editor/component/Component.svelte +24 -2
  113. package/components/apps/editor/component/ComponentWrapper.svelte +5 -0
  114. package/components/apps/editor/component/components.d.ts +39 -39
  115. package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -26
  116. package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -3
  117. package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  118. package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +2 -2
  119. package/components/apps/editor/contextPanel/ContextPanel.svelte +1 -2
  120. package/components/apps/editor/contextPanel/components/IdEditor.svelte +90 -0
  121. package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +18 -0
  122. package/components/apps/editor/contextPanel/components/OutputHeader.svelte +92 -21
  123. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +4 -3
  124. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +3 -3
  125. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +50 -37
  126. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -3
  127. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +14 -6
  128. package/components/apps/editor/settingsPanel/TableActions.svelte +1 -1
  129. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
  130. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +8 -3
  131. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +0 -2
  132. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
  133. package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +2 -5
  134. package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte +2 -5
  135. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +15 -7
  136. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +2 -1
  137. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +2 -2
  138. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +1 -1
  139. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +6 -5
  140. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +1 -1
  141. package/components/apps/inputType.d.ts +1 -0
  142. package/components/apps/rx.d.ts +0 -2
  143. package/components/apps/rx.js +1 -3
  144. package/components/apps/svelte-grid/utils/helper.js +1 -1
  145. package/components/apps/types.d.ts +12 -0
  146. package/components/apps/utils.d.ts +3 -1
  147. package/components/apps/utils.js +26 -2
  148. package/components/build_workers.d.ts +14 -0
  149. package/components/build_workers.js +45 -0
  150. package/components/common/badge/Badge.svelte +0 -1
  151. package/components/common/button/Button.svelte +46 -24
  152. package/components/common/button/Button.svelte.d.ts +7 -1
  153. package/components/common/button/ButtonDropdown.svelte +25 -0
  154. package/components/common/button/ButtonDropdown.svelte.d.ts +27 -0
  155. package/components/common/button/model.d.ts +2 -3
  156. package/components/common/button/model.js +7 -3
  157. package/components/common/drawer/Drawer.svelte +2 -3
  158. package/components/common/drawer/DrawerContent.svelte +2 -6
  159. package/components/common/fileInput/FileInput.svelte +5 -1
  160. package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  161. package/components/common/index.d.ts +0 -2
  162. package/components/common/index.js +0 -2
  163. package/components/common/menu/Menu.svelte.d.ts +1 -1
  164. package/components/common/popup/Popup.svelte +16 -8
  165. package/components/common/popup/Popup.svelte.d.ts +6 -0
  166. package/components/common/table/AppRow.svelte +0 -1
  167. package/components/common/table/FlowRow.svelte +0 -1
  168. package/components/common/table/ScriptRow.svelte +2 -3
  169. package/components/common/tabs/Tab.svelte +10 -5
  170. package/components/common/tabs/Tabs.svelte +20 -1
  171. package/components/common/tabs/Tabs.svelte.d.ts +3 -0
  172. package/components/flows/CreateActionsApp.svelte +14 -9
  173. package/components/flows/CreateActionsFlow.svelte +11 -10
  174. package/components/flows/FlowEditor.svelte +2 -2
  175. package/components/flows/content/CapturePayload.svelte +2 -4
  176. package/components/flows/content/DynamicInputHelpBox.svelte +1 -0
  177. package/components/flows/content/FlowBranchesAllWrapper.svelte +2 -2
  178. package/components/flows/content/FlowBranchesOneWrapper.svelte +2 -2
  179. package/components/flows/content/FlowInputsFlow.svelte +1 -1
  180. package/components/flows/content/FlowInputsFlow.svelte.d.ts +1 -3
  181. package/components/flows/content/FlowModuleComponent.svelte +27 -28
  182. package/components/flows/content/FlowModuleWrapper.svelte +0 -1
  183. package/components/flows/content/FlowRetries.svelte +1 -2
  184. package/components/flows/content/FlowSchedules.svelte +3 -1
  185. package/components/flows/content/ScriptEditorDrawer.svelte +1 -1
  186. package/components/flows/flowStateUtils.d.ts +0 -3
  187. package/components/flows/flowStateUtils.js +3 -23
  188. package/components/flows/header/FlowImportExportMenu.svelte +10 -12
  189. package/components/flows/header/FlowPreviewButtons.svelte +21 -24
  190. package/components/flows/idUtils.d.ts +4 -0
  191. package/components/flows/idUtils.js +47 -0
  192. package/components/flows/map/FlowModuleSchemaItem.svelte +6 -6
  193. package/components/flows/map/MapItem.svelte +9 -9
  194. package/components/flows/map/MapItem.svelte.d.ts +0 -1
  195. package/components/flows/scheduleUtils.d.ts +1 -0
  196. package/components/flows/scheduleUtils.js +2 -1
  197. package/components/flows/utils.d.ts +0 -2
  198. package/components/flows/utils.js +3 -35
  199. package/components/graph/FlowGraph.svelte +22 -8
  200. package/components/graph/FlowGraph.svelte.d.ts +2 -0
  201. package/components/graph/svelvet/collapsible/controllers/util.js +3 -14
  202. package/components/graph/svelvet/container/views/GraphView.svelte +25 -42
  203. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  204. package/components/graph/svelvet/container/views/Svelvet.svelte +5 -3
  205. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +3 -0
  206. package/components/graph/svelvet/edges/controllers/anchorCbDev.js +5 -5
  207. package/components/graph/svelvet/edges/controllers/util.js +1 -1
  208. package/components/graph/svelvet/edges/models/Edge.js +2 -2
  209. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +1 -1
  210. package/components/graph/svelvet/nodes/models/Node.js +0 -1
  211. package/components/graph/svelvet/nodes/views/Node.svelte +0 -1
  212. package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -1
  213. package/components/graph/svelvet/store/controllers/util.d.ts +1 -1
  214. package/components/graph/svelvet/store/controllers/util.js +3 -3
  215. package/components/home/ItemsList.svelte +11 -11
  216. package/components/icons/WindmillIcon.svelte +4 -0
  217. package/components/icons/WindmillIcon.svelte.d.ts +1 -0
  218. package/components/propertyPicker/ObjectViewer.svelte +0 -5
  219. package/components/propertyPicker/ObjectViewer.svelte.d.ts +0 -1
  220. package/components/propertyPicker/PropPicker.svelte +2 -2
  221. package/components/scripts/CreateActionsScript.svelte +4 -22
  222. package/components/sidebar/WorkspaceMenu.svelte +8 -4
  223. package/editorUtils.d.ts +3 -0
  224. package/editorUtils.js +7 -2
  225. package/gen/core/OpenAPI.js +1 -1
  226. package/gen/index.d.ts +7 -1
  227. package/gen/index.js +3 -0
  228. package/gen/models/CreateInput.d.ts +5 -0
  229. package/gen/models/CreateInput.js +4 -0
  230. package/gen/models/EditSchedule.d.ts +1 -0
  231. package/gen/models/Input.d.ts +6 -0
  232. package/gen/models/Input.js +4 -0
  233. package/gen/models/MainArgSignature.d.ts +8 -0
  234. package/gen/models/MainArgSignature.js +8 -1
  235. package/gen/models/NewSchedule.d.ts +1 -1
  236. package/gen/models/NewTokenImpersonate.d.ts +5 -0
  237. package/gen/models/NewTokenImpersonate.js +4 -0
  238. package/gen/models/RunnableType.d.ts +5 -0
  239. package/gen/models/RunnableType.js +9 -0
  240. package/gen/models/Schedule.d.ts +1 -1
  241. package/gen/models/UpdateInput.d.ts +4 -0
  242. package/gen/models/UpdateInput.js +4 -0
  243. package/gen/services/FlowService.d.ts +18 -0
  244. package/gen/services/FlowService.js +19 -0
  245. package/gen/services/InputService.d.ts +78 -0
  246. package/gen/services/InputService.js +95 -0
  247. package/gen/services/JobService.d.ts +35 -15
  248. package/gen/services/JobService.js +25 -7
  249. package/gen/services/ScheduleService.d.ts +2 -2
  250. package/gen/services/ScheduleService.js +1 -1
  251. package/gen/services/ScriptService.d.ts +10 -0
  252. package/gen/services/ScriptService.js +16 -0
  253. package/gen/services/UserService.d.ts +12 -0
  254. package/gen/services/UserService.js +13 -0
  255. package/infer.js +3 -0
  256. package/init_scripts/python_init_code.d.ts +1 -1
  257. package/init_scripts/python_init_code.js +2 -2
  258. package/package.json +684 -673
  259. package/script_helpers.d.ts +1 -1
  260. package/script_helpers.js +7 -5
  261. package/stores.js +14 -1
  262. package/user.d.ts +1 -1
  263. package/user.js +6 -6
  264. package/utils.d.ts +2 -2
  265. package/utils.js +21 -11
  266. package/components/common/button/ButtonPopup.svelte +0 -75
  267. package/components/common/button/ButtonPopup.svelte.d.ts +0 -39
  268. package/components/common/button/ButtonPopupItem.svelte +0 -48
  269. package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -28
  270. package/components/graph/svelvet/editEdges/views/EditEdge.svelte +0 -151
  271. package/components/graph/svelvet/editEdges/views/EditEdge.svelte.d.ts +0 -20
@@ -339,7 +339,7 @@ let filteredConnectsManual = [];
339
339
  <h2 class="mt-8 mb-4">Non OAuth APIs & Resources</h2>
340
340
  <div class="grid sm:grid-cols-2 md:grid-cols-3 gap-x-2 gap-y-1 items-center mb-2">
341
341
  {#if filteredConnectsManual}
342
- {#each filteredConnectsManual as [key, instructions]}
342
+ {#each filteredConnectsManual as [key, _]}
343
343
  <Button
344
344
  size="sm"
345
345
  variant="border"
@@ -383,7 +383,7 @@ let filteredConnectsManual = [];
383
383
  </div>
384
384
  {#if apiTokenApps[resource_type].img}
385
385
  <div class="mt-4 w-full overflow-hidden">
386
- <img class="m-auto max-h-60" alt="connect" src={apiTokenApps[resource_type].img} />
386
+ <img class="m-auto max-h-60" alt="connect" src={apiTokenApps[resource_type].img} />
387
387
  </div>
388
388
  {/if}
389
389
  {/if}
@@ -1,12 +1,10 @@
1
- <script>import { truncate } from '../utils';
2
- import Tooltip from './Tooltip.svelte';
3
- import json from 'svelte-highlight/languages/json';
4
- import { Highlight } from 'svelte-highlight';
5
- import { ResourceService } from '../gen';
1
+ <script>import { ResourceService } from '../gen';
6
2
  import { workspaceStore } from '../stores';
7
- import Drawer from './common/drawer/Drawer.svelte';
3
+ import { truncate } from '../utils';
8
4
  import { DrawerContent } from './common';
5
+ import Drawer from './common/drawer/Drawer.svelte';
9
6
  import ObjectViewer from './propertyPicker/ObjectViewer.svelte';
7
+ import Tooltip from './Tooltip.svelte';
10
8
  export let value;
11
9
  let jsonViewer;
12
10
  let jsonViewerContent;
@@ -1,23 +1,23 @@
1
- <script>import { faChevronDown, faChevronUp, faDollarSign, faMinus, faPlus } from '@fortawesome/free-solid-svg-icons';
1
+ <script>import { faChevronDown, faChevronUp, faDollarSign, faPlus } from '@fortawesome/free-solid-svg-icons';
2
2
  import { setInputCat as computeInputCat } from '../utils';
3
- import { Badge, Button } from './common';
3
+ import { X } from 'lucide-svelte';
4
4
  import { createEventDispatcher } from 'svelte';
5
+ import autosize from 'svelte-autosize';
5
6
  import Icon from 'svelte-awesome';
7
+ import { fade } from 'svelte/transition';
8
+ import JsonEditor from './apps/editor/settingsPanel/inputEditor/JsonEditor.svelte';
9
+ import { Badge, Button } from './common';
6
10
  import FieldHeader from './FieldHeader.svelte';
11
+ import NumberTypeNarrowing from './NumberTypeNarrowing.svelte';
7
12
  import ObjectResourceInput from './ObjectResourceInput.svelte';
8
13
  import ObjectTypeNarrowing from './ObjectTypeNarrowing.svelte';
14
+ import Password from './Password.svelte';
15
+ import Range from './Range.svelte';
9
16
  import ResourcePicker from './ResourcePicker.svelte';
10
- import StringTypeNarrowing from './StringTypeNarrowing.svelte';
11
17
  import SchemaForm from './SchemaForm.svelte';
12
18
  import SimpleEditor from './SimpleEditor.svelte';
13
- import autosize from 'svelte-autosize';
19
+ import StringTypeNarrowing from './StringTypeNarrowing.svelte';
14
20
  import Toggle from './Toggle.svelte';
15
- import Password from './Password.svelte';
16
- import NumberTypeNarrowing from './NumberTypeNarrowing.svelte';
17
- import Range from './Range.svelte';
18
- import JsonEditor from './apps/editor/settingsPanel/inputEditor/JsonEditor.svelte';
19
- import { fade } from 'svelte/transition';
20
- import { X } from 'lucide-svelte';
21
21
  export let label = '';
22
22
  export let value;
23
23
  export let defaultValue = undefined;
@@ -28,7 +28,6 @@ export let type = undefined;
28
28
  export let required = false;
29
29
  export let pattern = undefined;
30
30
  export let valid = required ? false : true;
31
- export let maxRows = 10;
32
31
  export let enum_ = undefined;
33
32
  export let disabled = false;
34
33
  export let editableSchema = false;
@@ -45,7 +44,6 @@ export let noMargin = false;
45
44
  export let extra = {};
46
45
  let seeEditable = enum_ != undefined || pattern != undefined;
47
46
  const dispatch = createEventDispatcher();
48
- $: maxHeight = maxRows ? `${1 + maxRows * 1.2}em` : `auto`;
49
47
  $: validateInput(pattern, value);
50
48
  let error = '';
51
49
  let el = undefined;
@@ -143,6 +141,7 @@ let redraw = 0;
143
141
  let itemsLimit = 50;
144
142
  </script>
145
143
 
144
+ <!-- svelte-ignore a11y-autofocus -->
146
145
  <div class="flex flex-col w-full min-w-[250px]">
147
146
  <div>
148
147
  {#if displayHeader}
@@ -150,6 +149,7 @@ let itemsLimit = 50;
150
149
  {/if}
151
150
  {#if editableSchema}
152
151
  <div class="p-2 my-1 text-xs border-solid border border-gray-400">
152
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
153
153
  <span
154
154
  class="underline"
155
155
  on:click={() => {
@@ -1,8 +1,8 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  import type { SchemaProperty } from '../common';
3
+ import type ItemPicker from './ItemPicker.svelte';
3
4
  import SimpleEditor from './SimpleEditor.svelte';
4
5
  import type VariableEditor from './VariableEditor.svelte';
5
- import type ItemPicker from './ItemPicker.svelte';
6
6
  declare const __propDef: {
7
7
  props: {
8
8
  label?: string | undefined;
@@ -15,7 +15,6 @@ declare const __propDef: {
15
15
  required?: boolean | undefined;
16
16
  pattern?: undefined | string;
17
17
  valid?: boolean | undefined;
18
- maxRows?: number | undefined;
19
18
  enum_?: string[] | undefined;
20
19
  disabled?: boolean | undefined;
21
20
  editableSchema?: boolean | undefined;
@@ -10,9 +10,11 @@ onMount(async () => {
10
10
  });
11
11
  </script>
12
12
 
13
- <div class="center-center min-h-screen p-4 relative bg-[#3b4252]">
14
- <div class="border rounded-md shadow-md bg-white w-full max-w-[640px]
15
- p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10">
13
+ <div class="center-center min-h-screen p-4 relative bg-gray-50">
14
+ <div
15
+ class="border rounded-md shadow-md bg-white w-full max-w-[640px]
16
+ p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10"
17
+ >
16
18
  <div class="mb-10">
17
19
  <h1 class="text-center">
18
20
  {title}
@@ -27,13 +29,13 @@ onMount(async () => {
27
29
  </div>
28
30
  {#if !disableLogo}
29
31
  <div class="hidden lg:block absolute top-10 right-50">
30
- <div class="animate-[spin_100s_linear_infinite] ">
31
- <WindmillIcon white height="100px" width="100px" />
32
+ <div>
33
+ <WindmillIcon height="100px" width="100px" spin="slow" />
32
34
  </div>
33
- <h2 class="text-center pt-2 text-gray-100">Windmill</h2>
35
+ <h2 class="text-center pt-2 text-gray-800">Windmill</h2>
34
36
  </div>
35
37
  {/if}
36
- <div class="absolute top-0 right-0 text-2xs text-gray-300 italic px-3 py-1">
38
+ <div class="absolute top-0 right-0 text-2xs text-gray-800 italic px-3 py-1">
37
39
  <span class="font-mono">{version}</span>
38
40
  </div>
39
41
  </div>
@@ -1,28 +1,61 @@
1
- <script context="module">
2
- export const OFFSET = new Date().getTimezoneOffset()
3
- </script>
4
-
5
1
  <script>import { ScheduleService } from '../gen';
6
- import { displayDate, emptyString, formatCron, sendUserToast } from '../utils';
2
+ import { emptyString, formatCron } from '../utils';
3
+ import Badge from './Badge.svelte';
4
+ // @ts-ignore
5
+ import Multiselect from 'svelte-multiselect';
6
+ import TimezonePicker from 'svelte-timezone-picker';
7
7
  import CollapseLink from './CollapseLink.svelte';
8
+ import { Button } from './common';
9
+ export let schedule;
10
+ // export let offset: number = -60 * Math.floor(new Date().getTimezoneOffset() / 60)
11
+ export let timezone; // = Intl.DateTimeFormat().resolvedOptions().timeZone
12
+ export let disabled = false;
8
13
  export let validCRON = true;
9
14
  let preview = [];
10
- let cronError = '';
11
- export let schedule = '0 0 12 * *';
12
- export let disabled = false;
13
- let limit = 3;
14
- $: !emptyString(schedule) && handleScheduleInput(schedule);
15
- async function handleScheduleInput(input) {
15
+ // If the user has already entered a cron string, switching to the basic tab will override it.
16
+ let executeEvery = 'minute';
17
+ let seconds = 30;
18
+ let minutes = 30;
19
+ let hours = 1;
20
+ const daysOfMonthOptions = Array.from(Array(31).keys()).map((i) => i + 1);
21
+ let daysOfMonth = [];
22
+ // let lastDayOfMonth = false
23
+ const monthsOfYearOptions = [
24
+ 'January',
25
+ 'February',
26
+ 'March',
27
+ 'April',
28
+ 'May',
29
+ 'June',
30
+ 'July',
31
+ 'August',
32
+ 'September',
33
+ 'October',
34
+ 'November',
35
+ 'December'
36
+ ];
37
+ let monthsOfYear = [];
38
+ const daysOfWeekOptions = [
39
+ 'Sunday',
40
+ 'Monday',
41
+ 'Tuesday',
42
+ 'Wednesday',
43
+ 'Thursday',
44
+ 'Friday',
45
+ 'Saturday'
46
+ ];
47
+ let daysOfWeek = [];
48
+ let UTCTime = '';
49
+ $: !emptyString(schedule) && handleScheduleInput(schedule, timezone);
50
+ async function handleScheduleInput(input, timezone) {
16
51
  try {
17
52
  preview = await ScheduleService.previewSchedule({
18
- requestBody: { schedule: formatCron(input), offset: OFFSET }
53
+ requestBody: { schedule: formatCron(input), timezone }
19
54
  });
20
- cronError = '';
21
55
  validCRON = true;
22
56
  }
23
57
  catch (err) {
24
58
  if (err.status == 400 && err.body.includes('cron')) {
25
- cronError = `Invalid cron expression`;
26
59
  validCRON = false;
27
60
  }
28
61
  else {
@@ -30,60 +63,264 @@ async function handleScheduleInput(input) {
30
63
  }
31
64
  }
32
65
  }
66
+ let nschedule = '';
67
+ $: {
68
+ // CRON string format
69
+ // sec min hour day of month month day of week year
70
+ // 0 30 9,12,15 1,15 May-Aug Mon,Wed,Fri 2018/2
71
+ let s_daysOfMonth = '';
72
+ // if (lastDayOfMonth) {
73
+ // s_daysOfMonth = 'L'
74
+ // } else
75
+ if (daysOfMonth.length > 0) {
76
+ s_daysOfMonth = daysOfMonth.join(',');
77
+ }
78
+ else {
79
+ s_daysOfMonth = '*';
80
+ }
81
+ let s_months = '';
82
+ if (monthsOfYear.length > 0) {
83
+ s_months = monthsOfYear.map((m) => m.slice(0, 3).toLowerCase()).join(',');
84
+ }
85
+ else {
86
+ s_months = '*';
87
+ }
88
+ let s_daysOfWeek = '';
89
+ if (daysOfWeek.length > 0) {
90
+ s_daysOfWeek = daysOfWeek.map((d) => d.slice(0, 3).toLowerCase()).join(',');
91
+ }
92
+ else {
93
+ s_daysOfWeek = '*';
94
+ }
95
+ const s_AtUTCHours = parseInt(UTCTime.split(':')[0]) || '0';
96
+ const s_AtUTCMinutes = parseInt(UTCTime.split(':')[1]) || '0';
97
+ // If using the basic editor, set the cron string based on the selected options
98
+ if (executeEvery === 'second') {
99
+ if (seconds > 0) {
100
+ nschedule = `*/${seconds} * * * *`;
101
+ }
102
+ else {
103
+ nschedule = `* * * * *`;
104
+ }
105
+ }
106
+ else if (executeEvery === 'minute') {
107
+ if (minutes > 0) {
108
+ nschedule = `0 */${minutes} * * *`;
109
+ }
110
+ else {
111
+ nschedule = `* * * * *`;
112
+ }
113
+ }
114
+ else if (executeEvery === 'hour') {
115
+ if (hours > 0) {
116
+ nschedule = `0 0 */${hours} * *`;
117
+ }
118
+ else {
119
+ nschedule = `* * * * *`;
120
+ }
121
+ }
122
+ else if (executeEvery === 'day-month') {
123
+ nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} ${s_daysOfMonth} *`;
124
+ }
125
+ else if (executeEvery === 'month') {
126
+ nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} ${s_daysOfMonth} ${s_months}`;
127
+ }
128
+ else if (executeEvery === 'day-week') {
129
+ nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} * * ${s_daysOfWeek}`;
130
+ }
131
+ }
132
+ $: dateFormatter = new Intl.DateTimeFormat('en-GB', {
133
+ weekday: 'short',
134
+ day: '2-digit',
135
+ month: 'short',
136
+ year: 'numeric',
137
+ hour: 'numeric',
138
+ minute: 'numeric',
139
+ second: 'numeric',
140
+ timeZone: timezone,
141
+ timeZoneName: 'short'
142
+ }).format;
33
143
  </script>
34
144
 
35
- <div class="max-w-xl">
36
- <div class="w-full text-right text-red-600 text-2xs grow">{cronError}</div>
37
- <div class="flex flex-row items-end max-w-5xl">
38
- <label class="text-xs min-w-max mr-2 self-center" for="cron-schedule">CRON expression</label>
39
- <input
40
- class="inline-block"
41
- type="text"
42
- id="cron-schedule"
43
- name="cron-schedule"
44
- bind:value={schedule}
45
- {disabled}
46
- />
47
- </div>
48
- {#if !disabled}
49
- <div class="flex flex-row text-xs text-blue-500 gap-3 pl-28 mb-2">
50
- <button
51
- on:click={() => {
52
- schedule = '0 */15 * * *'
53
- cronError = ''
54
- }}>every 15 min</button
55
- >
56
- <button
57
- on:click={() => {
58
- schedule = '0 0 * * * *'
59
- cronError = ''
60
- }}>every hour</button
61
- >
62
- <button
63
- on:click={() => {
64
- schedule = '0 0 8 * * *'
65
- cronError = ''
66
- }}>once a day at 8AM</button
67
- >
145
+ <div class="w-full flex space-x-16 p-4">
146
+ <div class="w-full flex flex-col space-y-2">
147
+ <div class="w-full flex flex-col gap-1">
148
+ <small class="font-bold">Cron</small>
149
+ <input
150
+ class="inline-block"
151
+ type="text"
152
+ id="cron-schedule"
153
+ name="cron-schedule"
154
+ placeholder="*/30 * * * *"
155
+ bind:value={schedule}
156
+ {disabled}
157
+ />
158
+ {#if !validCRON}
159
+ <small class="text-red-600"> Invalid cron syntax </small>
160
+ {/if}
68
161
  </div>
69
- {/if}
70
162
 
71
- <CollapseLink text="preview next runs" open={true}>
72
- {#if preview && preview.length > 0}
73
- <div class="text-sm text-gray-700 border p-2 rounded-md">
74
- <div class="flex flex-row justify-between">The next runs will be scheduled at:</div>
75
- <ul class="list-disc mx-12">
76
- {#each preview.slice(0, limit) as p}
77
- <li class="mx-2 text-gray-700 text-sm">{displayDate(p, true)}</li>
78
- {/each}
79
- <li class="text-sm mx-2">...</li>
80
- {#if limit != 10}
81
- <button class="underline text-gray-400" on:click={() => (limit = 10)}>Load more</button>
82
- {:else}
83
- <button class="underline text-gray-400" on:click={() => (limit = 3)}>Load less</button>
84
- {/if}
85
- </ul>
163
+ <div class="w-full flex flex-col gap-1">
164
+ <small class="font-bold">Timezone</small>
165
+
166
+ {#if disabled}
167
+ <div>
168
+ <Badge>{timezone}</Badge>
169
+ </div>
170
+ {:else}
171
+ <TimezonePicker {timezone} on:update={(e) => (timezone = e.detail.timezone)} />
172
+ {/if}
173
+ </div>
174
+
175
+ {#if !disabled}
176
+ <div class="w-full">
177
+ <CollapseLink text="Use simplified builder">
178
+ <div class="w-full flex flex-col gap-4 mt-4">
179
+ <div class="w-full flex flex-col gap-1">
180
+ <small class="font-bold">Execute schedule every</small>
181
+
182
+ <div class="w-full flex gap-4">
183
+ <div class="w-full flex flex-col gap-1">
184
+ <select
185
+ {disabled}
186
+ name="execute_every"
187
+ id="execute_every"
188
+ bind:value={executeEvery}
189
+ >
190
+ <option value="second">Second(s)</option>
191
+ <option value="minute">Minute(s)</option>
192
+ <option value="hour">Hour(s)</option>
193
+ <option value="day-month">Day of the month</option>
194
+ <option value="month">Month(s)</option>
195
+ <option value="day-week">Day of the week</option>
196
+ </select>
197
+ </div>
198
+
199
+ <div class="w-full flex flex-col gap-1 justify-center">
200
+ {#if executeEvery == 'second'}
201
+ <input {disabled} type="number" min="0" max="59" bind:value={seconds} />
202
+ <small>Valid range 0-59</small>
203
+ {:else if executeEvery == 'minute'}
204
+ <input {disabled} type="number" min="0" max="59" bind:value={minutes} />
205
+ <small>Valid range 0-59</small>
206
+ {:else if executeEvery == 'hour'}
207
+ <input {disabled} type="number" min="0" max="23" bind:value={hours} />
208
+ <small>Valid range 0-23</small>
209
+ {:else if executeEvery == 'day-month'}
210
+ <!-- <div class="w-full flex">
211
+ <label for="lastDayOfMonth" class="w-full flex items-center gap-2">
212
+ <div class="flex">
213
+ <input type="checkbox" id="lastDayOfMonth" bind:checked={lastDayOfMonth} />
214
+ </div>
215
+ <small> Last day of the month </small>
216
+ </label>
217
+ </div> -->
218
+ {/if}
219
+ </div>
220
+ </div>
221
+ </div>
222
+
223
+ <div class="w-full flex flex-col gap-4">
224
+ {#if executeEvery == 'month'}
225
+ <div class="w-full flex flex-col">
226
+ <Multiselect
227
+ {disabled}
228
+ bind:selected={monthsOfYear}
229
+ options={monthsOfYearOptions}
230
+ selectedOptionsDraggable={false}
231
+ placeholder="Every month"
232
+ />
233
+ </div>
234
+ {/if}
235
+
236
+ {#if executeEvery == 'day-week'}
237
+ <div class="w-full flex flex-col">
238
+ <Multiselect
239
+ {disabled}
240
+ bind:selected={daysOfWeek}
241
+ options={daysOfWeekOptions}
242
+ selectedOptionsDraggable={false}
243
+ placeholder="Every day"
244
+ />
245
+ </div>
246
+ {/if}
247
+
248
+ {#if executeEvery == 'day-month' || executeEvery == 'month'}
249
+ <div class="w-full flex flex-col gap-1">
250
+ {#if executeEvery == 'month'}
251
+ <small class="font-bold">On day of the month</small>
252
+ {/if}
253
+ <div class="w-full flex gap-4">
254
+ <div class="w-full flex">
255
+ <Multiselect
256
+ {disabled}
257
+ bind:selected={daysOfMonth}
258
+ options={daysOfMonthOptions}
259
+ selectedOptionsDraggable={false}
260
+ placeholder="Every day"
261
+ />
262
+ </div>
263
+
264
+ <!-- {#if executeEvery == 'month'}
265
+ <div class="w-full flex">
266
+ <label for="lastDayOfMonth" class="w-full flex items-center gap-2">
267
+ <div class="flex">
268
+ <input type="checkbox" id="lastDayOfMonth" bind:checked={lastDayOfMonth} />
269
+ </div>
270
+ <small> Last day of the month </small>
271
+ </label>
272
+ </div>
273
+ {/if} -->
274
+ </div>
275
+ <small>Schedule will only execute on valid calendar days</small>
276
+ </div>
277
+ {/if}
278
+
279
+ {#if executeEvery == 'day-month' || executeEvery == 'month' || executeEvery == 'day-week'}
280
+ <div class="w-full flex flex-col gap-1">
281
+ <small class="font-bold">At UTC Time</small>
282
+ <input
283
+ {disabled}
284
+ type="time"
285
+ name="atUTCTime"
286
+ id="atUTCTime"
287
+ bind:value={UTCTime}
288
+ />
289
+ </div>
290
+ {/if}
291
+ </div>
292
+
293
+ <div class="w-full flex flex-col gap-1">
294
+ <small class="font-bold">Preview New Cron</small>
295
+
296
+ <div class="flex p-2 px-4 rounded-md bg-gray-100">
297
+ <span>{nschedule}</span>
298
+ </div>
299
+ </div>
300
+ </div>
301
+
302
+ <div class="mt-4">
303
+ <Button variant="border" color="dark" size="xs" on:click={() => (schedule = nschedule)}
304
+ >Set Schedule</Button
305
+ >
306
+ </div>
307
+ </CollapseLink>
86
308
  </div>
87
309
  {/if}
88
- </CollapseLink>
310
+ </div>
311
+
312
+ <div class="w-full flex flex-col space-y-2">
313
+ <h3>Execution summary</h3>
314
+ <hr />
315
+ <div class="flex flex-col space-y-2">
316
+ <small>Estimated upcoming events ({timezone})</small>
317
+ <div class="flex flex-col rounded-md p-4 border text-gray-600">
318
+ {#each preview as date}
319
+ <div class="flex items-center space-x-2">
320
+ <span>{dateFormatter(new Date(date))}</span>
321
+ </div>
322
+ {/each}
323
+ </div>
324
+ </div>
325
+ </div>
89
326
  </div>
@@ -1,10 +1,10 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- export declare const OFFSET: number;
3
2
  declare const __propDef: {
4
3
  props: {
5
- validCRON?: boolean | undefined;
6
- schedule?: string | undefined;
4
+ schedule: string;
5
+ timezone: string;
7
6
  disabled?: boolean | undefined;
7
+ validCRON?: boolean | undefined;
8
8
  };
9
9
  events: {
10
10
  [evt: string]: CustomEvent<any>;
@@ -82,19 +82,17 @@ let jsonViewer;
82
82
  <div class="mb-2 text-gray-500 text-sm bg-gray-50/20">
83
83
  as JSON&nbsp;<input class="windmillapp" type="checkbox" bind:checked={forceJson} /></div
84
84
  >{/if}{#if typeof result == 'object' && Object.keys(result).length > 0}<div
85
- class="mb-2 min-w-[360px] text-sm text-gray-700 relative"
85
+ class="mb-2 w-full text-sm text-gray-700 relative"
86
86
  >The result keys are: <b>{truncate(Object.keys(result).join(', '), 50)}</b>
87
- <div class="text-gray-500 text-sm absolute top-0 right-2">
87
+ <div class="text-gray-500 text-sm absolute top-6 right-0">
88
88
  <button on:click={jsonViewer.openDrawer}>Expand JSON</button>
89
89
  </div></div
90
90
  >{/if}{#if !forceJson && resultKind == 'table-col'}<div
91
- class="grid grid-flow-col-dense border border-gray-200 rounded-md "
91
+ class="grid grid-flow-col-dense border border-gray-200 rounded-md"
92
92
  >
93
93
  {#each Object.keys(result) as col}
94
94
  <div class="flex flex-col max-h-40 min-w-full">
95
- <div
96
- class="px-12 text-left uppercase border-b bg-gray-50 overflow-hidden rounded-t-md "
97
- >
95
+ <div class="px-12 text-left uppercase border-b bg-gray-50 overflow-hidden rounded-t-md">
98
96
  {col}
99
97
  </div>
100
98
  {#if Array.isArray(result[col])}
@@ -108,7 +106,7 @@ let jsonViewer;
108
106
  {/each}
109
107
  </div>
110
108
  {:else if !forceJson && resultKind == 'table-row'}<div
111
- class="grid grid-flow-col-dense border border-gray-200 "
109
+ class="grid grid-flow-col-dense border border-gray-200"
112
110
  >
113
111
  <TableCustom>
114
112
  <tbody slot="body">
@@ -39,8 +39,8 @@ const dispatch = createEventDispatcher();
39
39
  dispatch('click', { item: item?.eventName })
40
40
  }
41
41
  }}
42
- class="block w-full whitespace-nowrap hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30
43
- px-4 py-2 text-sm text-gray-700 text-left
42
+ class="block w-full whitespace-nowrap hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30
43
+ px-4 py-2 text-sm text-gray-700 text-left
44
44
  {item.disabled ? 'bg-gray-200' : ''}
45
45
  {item.separatorTop ? 'border-t' : ''} {item.separatorBottom ? 'border-b' : ''} {item.type ==
46
46
  'delete'
@@ -64,7 +64,7 @@ const dispatch = createEventDispatcher();
64
64
  <a
65
65
  href={item.href}
66
66
  on:click|stopPropagation|preventDefault={() => goto(item.href ?? '')}
67
- class="block w-full px-4 font-semibold text-left py-2 text-sm text-gray-700 hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30
67
+ class="block w-full px-4 font-semibold text-left py-2 text-sm text-gray-700 hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30
68
68
  {item.disabled ? 'bg-gray-200' : ''}"
69
69
  role="menuitem"
70
70
  tabindex="-1"
@@ -81,9 +81,10 @@ const dispatch = createEventDispatcher();
81
81
  {item.displayName}
82
82
  </a>
83
83
  {:else}
84
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
84
85
  <span
85
86
  class:bg-gray-50={item.disabled}
86
- class="block text-left px-4 py-2 text-sm text-gray-700 cursor-auto"
87
+ class="block text-left px-4 py-2 text-sm text-gray-700 cursor-auto"
87
88
  role="menuitem"
88
89
  tabindex="-1"
89
90
  id="user-menu-item-{name}-{i}}"