windmill-components 1.85.0 → 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 (182) hide show
  1. package/components/CenteredModal.svelte +9 -7
  2. package/components/CronInput.svelte +301 -64
  3. package/components/CronInput.svelte.d.ts +3 -3
  4. package/components/DisplayResult.svelte +2 -2
  5. package/components/Editor.svelte +97 -42
  6. package/components/Editor.svelte.d.ts +10 -4
  7. package/components/EditorBar.svelte +14 -9
  8. package/components/EditorBar.svelte.d.ts +1 -1
  9. package/components/FlowBuilder.svelte +73 -53
  10. package/components/FlowGraphViewer.svelte +2 -0
  11. package/components/FlowGraphViewer.svelte.d.ts +1 -0
  12. package/components/FlowPreviewContent.svelte +3 -2
  13. package/components/FlowViewer.svelte +1 -1
  14. package/components/InputTransformForm.svelte +75 -72
  15. package/components/LightweightArgInput.svelte +3 -0
  16. package/components/LightweightArgInput.svelte.d.ts +1 -0
  17. package/components/LightweightSchemaForm.svelte +1 -0
  18. package/components/LightweightSchemaForm.svelte.d.ts +2 -0
  19. package/components/ModulePreview.svelte +2 -2
  20. package/components/Path.svelte +15 -3
  21. package/components/Popover.svelte +7 -19
  22. package/components/ScheduleEditor.svelte +18 -8
  23. package/components/ScriptBuilder.svelte +201 -206
  24. package/components/ScriptBuilder.svelte.d.ts +2 -0
  25. package/components/ScriptEditor.svelte +38 -37
  26. package/components/ScriptEditor.svelte.d.ts +5 -1
  27. package/components/ScriptSchema.svelte +1 -20
  28. package/components/ScriptSchema.svelte.d.ts +0 -1
  29. package/components/SimpleEditor.svelte +8 -2
  30. package/components/SimpleEditor.svelte.d.ts +6 -0
  31. package/components/Star.svelte +2 -1
  32. package/components/TemplateEditor.svelte +16 -3
  33. package/components/TemplateEditor.svelte.d.ts +3 -0
  34. package/components/Toast.svelte +50 -0
  35. package/components/Toast.svelte.d.ts +18 -0
  36. package/components/apps/components/buttons/AppButton.svelte +2 -1
  37. package/components/apps/components/display/AppHtml.svelte +9 -6
  38. package/components/apps/components/display/AppIcon.svelte +3 -0
  39. package/components/apps/components/display/AppImage.svelte +3 -0
  40. package/components/apps/components/display/AppMap.svelte +3 -0
  41. package/components/apps/components/display/AppPdf.svelte +3 -0
  42. package/components/apps/components/display/AppText.svelte +143 -51
  43. package/components/apps/components/display/AppText.svelte.d.ts +4 -0
  44. package/components/apps/components/helpers/AlignWrapper.svelte +1 -20
  45. package/components/apps/components/helpers/HiddenComponent.svelte +12 -6
  46. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
  47. package/components/apps/components/helpers/InitializeComponent.svelte +12 -0
  48. package/components/apps/components/helpers/InitializeComponent.svelte.d.ts +16 -0
  49. package/components/apps/components/helpers/InputValue.svelte +6 -0
  50. package/components/apps/components/helpers/NonRunnableComponent.svelte +3 -0
  51. package/components/apps/components/helpers/RunnableComponent.svelte +24 -6
  52. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  53. package/components/apps/components/helpers/RunnableWrapper.svelte +8 -2
  54. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  55. package/components/apps/components/inputs/AppCheckbox.svelte +3 -0
  56. package/components/apps/components/inputs/AppDateInput.svelte +3 -0
  57. package/components/apps/components/inputs/AppFileInput.svelte +4 -0
  58. package/components/apps/components/inputs/AppMultiSelect.svelte +3 -0
  59. package/components/apps/components/inputs/AppNumberInput.svelte +3 -0
  60. package/components/apps/components/inputs/AppRangeInput.svelte +3 -0
  61. package/components/apps/components/inputs/AppSelect.svelte +3 -9
  62. package/components/apps/components/inputs/AppSliderInputs.svelte +2 -0
  63. package/components/apps/components/inputs/AppTextInput.svelte +3 -0
  64. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +3 -0
  65. package/components/apps/components/layout/AppContainer.svelte +3 -0
  66. package/components/apps/components/layout/AppDivider.svelte +3 -0
  67. package/components/apps/components/layout/AppDrawer.svelte +3 -0
  68. package/components/apps/components/layout/AppSplitpanes.svelte +3 -0
  69. package/components/apps/components/layout/AppTabs.svelte +3 -0
  70. package/components/apps/editor/AppEditor.svelte +29 -18
  71. package/components/apps/editor/AppEditorHeader.svelte +23 -15
  72. package/components/apps/editor/AppPreview.svelte +5 -3
  73. package/components/apps/editor/ComponentHeader.svelte +20 -1
  74. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -0
  75. package/components/apps/editor/GridEditor.svelte +2 -2
  76. package/components/apps/editor/RecomputeAllComponents.svelte +7 -4
  77. package/components/apps/editor/SettingsPanel.svelte +1 -0
  78. package/components/apps/editor/appUtils.js +12 -2
  79. package/components/apps/editor/component/Component.svelte +24 -2
  80. package/components/apps/editor/component/components.d.ts +39 -39
  81. package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -26
  82. package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -1
  83. package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  84. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +4 -3
  85. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +50 -37
  86. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -3
  87. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +14 -6
  88. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
  89. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +8 -3
  90. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +0 -2
  91. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
  92. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +15 -7
  93. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +2 -1
  94. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +2 -2
  95. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +1 -1
  96. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +6 -5
  97. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +1 -1
  98. package/components/apps/inputType.d.ts +1 -0
  99. package/components/apps/rx.d.ts +0 -2
  100. package/components/apps/rx.js +1 -3
  101. package/components/apps/types.d.ts +8 -0
  102. package/components/apps/utils.d.ts +3 -1
  103. package/components/apps/utils.js +24 -1
  104. package/components/build_workers.d.ts +14 -0
  105. package/components/build_workers.js +45 -0
  106. package/components/common/button/Button.svelte +46 -24
  107. package/components/common/button/Button.svelte.d.ts +7 -1
  108. package/components/common/button/ButtonDropdown.svelte +25 -0
  109. package/components/common/button/ButtonDropdown.svelte.d.ts +27 -0
  110. package/components/common/button/model.d.ts +2 -3
  111. package/components/common/button/model.js +7 -3
  112. package/components/common/drawer/Drawer.svelte +0 -1
  113. package/components/common/drawer/DrawerContent.svelte +1 -1
  114. package/components/common/fileInput/FileInput.svelte +5 -1
  115. package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/components/common/index.d.ts +0 -2
  117. package/components/common/index.js +0 -2
  118. package/components/common/menu/Menu.svelte.d.ts +1 -1
  119. package/components/common/popup/Popup.svelte +9 -5
  120. package/components/common/table/ScriptRow.svelte +2 -2
  121. package/components/common/tabs/Tab.svelte +10 -5
  122. package/components/common/tabs/Tabs.svelte +20 -1
  123. package/components/common/tabs/Tabs.svelte.d.ts +3 -0
  124. package/components/flows/CreateActionsApp.svelte +12 -7
  125. package/components/flows/CreateActionsFlow.svelte +11 -10
  126. package/components/flows/FlowEditor.svelte +2 -2
  127. package/components/flows/content/CapturePayload.svelte +2 -4
  128. package/components/flows/content/FlowModuleComponent.svelte +1 -0
  129. package/components/flows/content/FlowSchedules.svelte +3 -1
  130. package/components/flows/header/FlowImportExportMenu.svelte +10 -12
  131. package/components/flows/header/FlowPreviewButtons.svelte +21 -23
  132. package/components/flows/scheduleUtils.d.ts +1 -0
  133. package/components/flows/scheduleUtils.js +2 -1
  134. package/components/graph/FlowGraph.svelte +21 -7
  135. package/components/graph/FlowGraph.svelte.d.ts +2 -0
  136. package/components/graph/svelvet/container/views/GraphView.svelte +17 -29
  137. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  138. package/components/graph/svelvet/container/views/Svelvet.svelte +4 -3
  139. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +3 -0
  140. package/components/home/ItemsList.svelte +1 -1
  141. package/components/icons/WindmillIcon.svelte +4 -0
  142. package/components/icons/WindmillIcon.svelte.d.ts +1 -0
  143. package/components/propertyPicker/PropPicker.svelte +2 -2
  144. package/components/scripts/CreateActionsScript.svelte +4 -22
  145. package/editorUtils.js +3 -1
  146. package/gen/core/OpenAPI.js +1 -1
  147. package/gen/index.d.ts +6 -0
  148. package/gen/index.js +2 -0
  149. package/gen/models/CreateInput.d.ts +5 -0
  150. package/gen/models/CreateInput.js +4 -0
  151. package/gen/models/EditSchedule.d.ts +1 -0
  152. package/gen/models/Input.d.ts +6 -0
  153. package/gen/models/Input.js +4 -0
  154. package/gen/models/NewSchedule.d.ts +1 -1
  155. package/gen/models/NewTokenImpersonate.d.ts +5 -0
  156. package/gen/models/NewTokenImpersonate.js +4 -0
  157. package/gen/models/RunnableType.d.ts +5 -0
  158. package/gen/models/RunnableType.js +9 -0
  159. package/gen/models/Schedule.d.ts +1 -1
  160. package/gen/models/UpdateInput.d.ts +4 -0
  161. package/gen/models/UpdateInput.js +4 -0
  162. package/gen/services/FlowService.d.ts +18 -0
  163. package/gen/services/FlowService.js +19 -0
  164. package/gen/services/InputService.d.ts +78 -0
  165. package/gen/services/InputService.js +95 -0
  166. package/gen/services/JobService.d.ts +35 -15
  167. package/gen/services/JobService.js +25 -7
  168. package/gen/services/ScheduleService.d.ts +2 -2
  169. package/gen/services/ScheduleService.js +1 -1
  170. package/gen/services/ScriptService.d.ts +10 -0
  171. package/gen/services/ScriptService.js +16 -0
  172. package/gen/services/UserService.d.ts +12 -0
  173. package/gen/services/UserService.js +13 -0
  174. package/package.json +24 -13
  175. package/script_helpers.d.ts +1 -1
  176. package/script_helpers.js +7 -5
  177. package/utils.d.ts +2 -2
  178. package/utils.js +21 -11
  179. package/components/common/button/ButtonPopup.svelte +0 -78
  180. package/components/common/button/ButtonPopup.svelte.d.ts +0 -39
  181. package/components/common/button/ButtonPopupItem.svelte +0 -48
  182. package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -28
@@ -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 } 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,9 +82,9 @@ 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-[300px] 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