windmill-components 1.394.8 → 1.405.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 (219) hide show
  1. package/package/ata/edgeCases.d.ts +0 -1
  2. package/package/ata/edgeCases.js +2 -8
  3. package/package/ata/index.js +4 -3
  4. package/package/common.d.ts +1 -1
  5. package/package/common.js +2 -2
  6. package/package/components/ApiConnectForm.svelte +33 -7
  7. package/package/components/ArgInput.svelte +4 -2
  8. package/package/components/CenteredModal.svelte +4 -1
  9. package/package/components/CenteredModal.svelte.d.ts +1 -0
  10. package/package/components/DateInput.svelte +2 -0
  11. package/package/components/DateInput.svelte.d.ts +1 -0
  12. package/package/components/DefaultScripts.svelte +8 -3
  13. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  14. package/package/components/DefaultScriptsInner.svelte +16 -7
  15. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  16. package/package/components/Dev.svelte +68 -11
  17. package/package/components/DropdownV2.svelte.d.ts +3 -3
  18. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  19. package/package/components/EditableSchemaForm.svelte +1 -0
  20. package/package/components/Editor.svelte +3 -2
  21. package/package/components/Editor.svelte.d.ts +1 -1
  22. package/package/components/ExecutionDuration.svelte +44 -0
  23. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  24. package/package/components/FlowBuilder.svelte +20 -12
  25. package/package/components/FlowGraphViewer.svelte +9 -2
  26. package/package/components/FlowGraphViewerStep.svelte +23 -10
  27. package/package/components/FlowJobResult.svelte +0 -1
  28. package/package/components/FlowStatusViewerInner.svelte +17 -4
  29. package/package/components/FlowTimeline.svelte +3 -3
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/IconedResourceType.svelte +17 -10
  32. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  33. package/package/components/IdEditorInput.svelte +0 -1
  34. package/package/components/InstanceSettings.svelte +247 -129
  35. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  36. package/package/components/JobArgs.svelte +3 -1
  37. package/package/components/LightweightArgInput.svelte +35 -10
  38. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  39. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  40. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  41. package/package/components/LightweightSchemaForm.svelte +2 -0
  42. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  43. package/package/components/Login.svelte +10 -5
  44. package/package/components/Login.svelte.d.ts +1 -0
  45. package/package/components/ModulePreview.svelte +21 -2
  46. package/package/components/ModuleStatus.svelte +3 -0
  47. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  48. package/package/components/OAuthSetting.svelte +40 -15
  49. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  50. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  51. package/package/components/Password.svelte.d.ts +1 -1
  52. package/package/components/Path.svelte +74 -54
  53. package/package/components/Path.svelte.d.ts +2 -1
  54. package/package/components/ResourceEditor.svelte +38 -9
  55. package/package/components/ResultJobLoader.svelte +6 -3
  56. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  57. package/package/components/ScheduleEditorInner.svelte +2 -2
  58. package/package/components/SchemaForm.svelte +6 -1
  59. package/package/components/ScriptBuilder.svelte +12 -5
  60. package/package/components/ScriptEditor.svelte +33 -3
  61. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  62. package/package/components/Scrollable.svelte +47 -0
  63. package/package/components/Scrollable.svelte.d.ts +21 -0
  64. package/package/components/ShareModal.svelte.d.ts +2 -2
  65. package/package/components/SuperadminSettings.svelte +5 -7
  66. package/package/components/TestJobLoader.svelte +46 -5
  67. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  68. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  69. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  70. package/package/components/WorkspaceGroup.svelte +3 -2
  71. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  72. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  73. package/package/components/apps/editor/component/components.d.ts +79 -79
  74. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  75. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  76. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  77. package/package/components/common/menu/Menu.svelte +2 -1
  78. package/package/components/common/menu/MenuV2.svelte +3 -1
  79. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  80. package/package/components/common/popup/Popup.svelte +22 -12
  81. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  82. package/package/components/common/popup/PopupV2.svelte +58 -0
  83. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  84. package/package/components/copilot/CronGen.svelte +1 -1
  85. package/package/components/copilot/RegexGen.svelte +4 -4
  86. package/package/components/copilot/StepGen.svelte +6 -6
  87. package/package/components/copilot/StepGenQuick.svelte +57 -0
  88. package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
  89. package/package/components/copilot/flow.d.ts +2 -0
  90. package/package/components/copilot/flow.js +55 -0
  91. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  92. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  93. package/package/components/details/DetailPageLayout.svelte +2 -0
  94. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  95. package/package/components/details/utils.d.ts +0 -1
  96. package/package/components/details/utils.js +1 -12
  97. package/package/components/flows/FlowEditor.svelte +2 -1
  98. package/package/components/flows/FlowProgressBar.svelte +16 -1
  99. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  100. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  101. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  102. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  103. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  104. package/package/components/flows/content/FlowConstants.svelte +1 -1
  105. package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
  106. package/package/components/flows/content/FlowInputs.svelte +7 -6
  107. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  108. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  109. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  110. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  111. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  112. package/package/components/flows/content/FlowLoop.svelte +7 -1
  113. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  114. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  115. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  116. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  117. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  118. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  119. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  120. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  121. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  122. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  123. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  124. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  125. package/package/components/flows/flowInfers.js +1 -1
  126. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  127. package/package/components/flows/idUtils.js +3 -1
  128. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  129. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  130. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  131. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  132. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
  135. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  136. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  137. package/package/components/flows/map/MapItem.svelte +11 -0
  138. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  139. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  140. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  141. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  142. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  143. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  144. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  145. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  146. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  147. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  148. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  149. package/package/components/flows/types.d.ts +1 -0
  150. package/package/components/graph/FlowGraphV2.svelte +93 -58
  151. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  152. package/package/components/graph/graphBuilder.d.ts +2 -1
  153. package/package/components/graph/graphBuilder.js +345 -280
  154. package/package/components/graph/model.d.ts +1 -0
  155. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  156. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  157. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  158. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  159. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  160. package/package/components/graph/util.d.ts +1 -1
  161. package/package/components/graph/util.js +7 -2
  162. package/package/components/home/ListFiltersQuick.svelte +51 -0
  163. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  164. package/package/components/icons/AnsibleIcon.svelte +42 -0
  165. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  166. package/package/components/icons/WindmillIcon2.svelte +141 -0
  167. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  168. package/package/components/icons/index.d.ts +2 -1
  169. package/package/components/icons/index.js +2 -1
  170. package/package/components/instanceSettings.d.ts +2 -2
  171. package/package/components/instanceSettings.js +25 -58
  172. package/package/components/jobs/JobProgressBar.svelte +52 -0
  173. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  174. package/package/components/progressBar/ProgressBar.svelte +18 -1
  175. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  176. package/package/components/runs/JobPreview.svelte +1 -0
  177. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  178. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  179. package/package/components/schema/AddProperty.svelte +1 -0
  180. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  181. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  182. package/package/components/schema/FlowPropertyEditor.svelte +12 -0
  183. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  184. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  185. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  186. package/package/components/search/GlobalSearchModal.svelte +2 -1
  187. package/package/components/sidebar/SidebarContent.svelte +69 -8
  188. package/package/components/sidebar/changelogs.js +10 -0
  189. package/package/components/triggers/RouteEditor.svelte +19 -0
  190. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  191. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  192. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  193. package/package/components/triggers/RoutesPanel.svelte +74 -0
  194. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  195. package/package/editorUtils.js +2 -0
  196. package/package/gen/core/OpenAPI.js +1 -1
  197. package/package/gen/schemas.gen.d.ts +159 -8
  198. package/package/gen/schemas.gen.js +161 -8
  199. package/package/gen/services.gen.d.ts +139 -1
  200. package/package/gen/services.gen.js +282 -1
  201. package/package/gen/types.gen.d.ts +455 -12
  202. package/package/hubPaths.json +6 -8
  203. package/package/infer.d.ts +4 -2
  204. package/package/infer.js +25 -23
  205. package/package/inferArgSig.js +8 -2
  206. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  207. package/package/relative_imports.d.ts +3 -0
  208. package/package/relative_imports.js +25 -0
  209. package/package/script_helpers.d.ts +7 -2
  210. package/package/script_helpers.js +151 -3
  211. package/package/scripts.d.ts +1 -1
  212. package/package/scripts.js +5 -1
  213. package/package/stores.d.ts +1 -0
  214. package/package/stores.js +1 -0
  215. package/package/utils.d.ts +1 -0
  216. package/package/utils.js +4 -0
  217. package/package.json +16 -7
  218. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  219. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
@@ -2,7 +2,7 @@ export const settings = {
2
2
  Core: [
3
3
  {
4
4
  label: 'Base url',
5
- description: 'Public base url of the instance',
5
+ description: 'Public base url of the instance. <a href="https://www.windmill.dev/docs/advanced/instance_settings#global-users">Learn more</a>',
6
6
  key: 'base_url',
7
7
  fieldType: 'text',
8
8
  placeholder: 'https://windmill.com',
@@ -17,7 +17,7 @@ export const settings = {
17
17
  },
18
18
  {
19
19
  label: 'Email domain',
20
- description: 'Domain to display in webhooks for email triggers (should match the MX record)',
20
+ description: 'Domain to display in webhooks for <a href="https://www.windmill.dev/docs/advanced/email_triggers">email triggers</a> (should match the MX record)',
21
21
  key: 'email_domain',
22
22
  fieldType: 'text',
23
23
  storage: 'setting',
@@ -35,22 +35,23 @@ export const settings = {
35
35
  {
36
36
  label: 'Default timeout',
37
37
  key: 'job_default_timeout',
38
- description: 'Default timeout for individual jobs',
38
+ description: 'Default timeout for individual jobs. <a href="https://www.windmill.dev/docs/core_concepts/jobs#retention-policy">Learn more</a>',
39
39
  fieldType: 'seconds',
40
40
  storage: 'setting',
41
41
  cloudonly: false
42
42
  },
43
43
  {
44
44
  label: 'Max timeout for sync endpoints',
45
+ description: 'Maximum amount of time (measured in seconds) that a <a href="https://www.windmill.dev/docs/core_concepts/webhooks">sync endpoint</a> is allowed to run before it is forcibly stopped or timed out.',
45
46
  key: 'timeout_wait_result',
46
47
  cloudonly: true,
47
48
  fieldType: 'seconds',
48
49
  placeholder: '60',
49
- storage: 'config'
50
+ storage: 'setting'
50
51
  },
51
52
  {
52
53
  label: 'License key',
53
- description: 'License key required to use the EE (switch image for windmill-ee)',
54
+ description: 'License key required to use the EE (switch image for windmill-ee). <a href="https://www.windmill.dev/docs/advanced/instance_settings#license-key">Learn more</a>',
54
55
  key: 'license_key',
55
56
  fieldType: 'license_key',
56
57
  placeholder: 'only needed to prepare upgrade to EE',
@@ -58,16 +59,15 @@ export const settings = {
58
59
  },
59
60
  {
60
61
  label: 'Non-prod instance',
61
- description: 'Whether we should consider the reported usage of this instance as non-prod',
62
+ description: 'Whether we should consider the reported usage of this instance as non-prod. <a href="https://www.windmill.dev/docs/advanced/instance_settings#non-prod-instance">Learn more</a>',
62
63
  key: 'dev_instance',
63
64
  fieldType: 'boolean',
64
- storage: 'setting',
65
- ee_only: 'This is only relevant for EE'
65
+ storage: 'setting'
66
66
  },
67
67
  {
68
68
  label: 'Retention period in secs',
69
69
  key: 'retention_period_secs',
70
- description: 'How long to keep the jobs data in the database (max 30 days on CE)',
70
+ description: 'How long to keep the jobs data in the database (max 30 days on CE). <a href="https://www.windmill.dev/docs/advanced/instance_settings#retention-period-in-secs">Learn more</a>',
71
71
  fieldType: 'seconds',
72
72
  placeholder: '30',
73
73
  storage: 'setting',
@@ -76,15 +76,15 @@ export const settings = {
76
76
  },
77
77
  {
78
78
  label: 'Expose metrics',
79
- description: 'Expose Prometheus metrics for workers and servers on port 8001 at /metrics',
79
+ description: 'Expose Prometheus metrics for workers and servers on port 8001 at /metrics. <a href="https://www.windmill.dev/docs/advanced/instance_settings#expose-metrics">Learn more</a>',
80
80
  key: 'expose_metrics',
81
81
  fieldType: 'boolean',
82
82
  storage: 'setting',
83
83
  ee_only: ''
84
84
  },
85
85
  {
86
- label: 'S3/Azure for Python/Go cache & large logs',
87
- description: 'Bucket to store large logs and global cache for Python and Go.',
86
+ label: 'Instance object storage',
87
+ description: ' S3/Azure bucket to store large logs and global cache for Python and Go. <a href="https://www.windmill.dev/docs/core_concepts/object_storage_in_windmill#instance-object-storage">Learn more</a>',
88
88
  key: 'object_store_cache_config',
89
89
  fieldType: 'object_store_config',
90
90
  storage: 'setting',
@@ -92,7 +92,7 @@ export const settings = {
92
92
  },
93
93
  {
94
94
  label: 'Critical alert channels',
95
- description: 'Channels to send critical alerts to. SMTP must be configured for the email channel. A Slack workspace must be connected to the instance for the Slack channel.',
95
+ description: 'Channels to send critical alerts to. SMTP must be configured for the email channel. A Slack workspace must be connected to the instance for the Slack channel. <a href="https://www.windmill.dev/docs/core_concepts/critical_alert_channels">Learn more</a>',
96
96
  key: 'critical_error_channels',
97
97
  fieldType: 'critical_error_channels',
98
98
  storage: 'setting',
@@ -100,7 +100,7 @@ export const settings = {
100
100
  },
101
101
  {
102
102
  label: 'Azure OpenAI base path',
103
- description: 'All Windmill AI features will run on the specified deployed model. Format: https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}',
103
+ description: 'All Windmill AI features will run on the specified deployed model. Format: https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}. <a href="https://www.windmill.dev/docs/core_concepts/ai_generation#azure-openai-advanced-models">Learn more</a>',
104
104
  key: 'openai_azure_base_path',
105
105
  fieldType: 'text',
106
106
  storage: 'setting',
@@ -108,7 +108,7 @@ export const settings = {
108
108
  },
109
109
  {
110
110
  label: 'Private Hub base url',
111
- description: 'Base url of your private Hub instance, without trailing slash',
111
+ description: 'Base url of your private Hub instance, without trailing slash. <a href="https://www.windmill.dev/docs/core_concepts/private_hub">Learn more</a>',
112
112
  placeholder: 'https://hub.company.com',
113
113
  key: 'hub_base_url',
114
114
  fieldType: 'text',
@@ -120,7 +120,7 @@ export const settings = {
120
120
  Registries: [
121
121
  {
122
122
  label: 'Pip Index Url',
123
- description: 'Add private PIP registry',
123
+ description: 'Add private Pip registry',
124
124
  key: 'pip_index_url',
125
125
  fieldType: 'text',
126
126
  placeholder: 'https://username:password@pypi.company.com/simple',
@@ -129,7 +129,7 @@ export const settings = {
129
129
  },
130
130
  {
131
131
  label: 'Pip Extra Index Url',
132
- description: 'Add private extra PIP registry',
132
+ description: 'Add private extra Pip registry',
133
133
  key: 'pip_extra_index_url',
134
134
  fieldType: 'text',
135
135
  placeholder: 'https://username:password@pypi.company.com/simple',
@@ -138,7 +138,7 @@ export const settings = {
138
138
  },
139
139
  {
140
140
  label: 'Npm Config Registry',
141
- description: 'Add private NPM registry',
141
+ description: 'Add private npm registry',
142
142
  key: 'npm_config_registry',
143
143
  fieldType: 'text',
144
144
  placeholder: 'https://registry.npmjs.org/:_authToken=npm_FOOBAR',
@@ -157,44 +157,11 @@ export const settings = {
157
157
  ],
158
158
  SMTP: [
159
159
  {
160
- label: 'Host',
161
- key: 'smtp_host',
162
- fieldType: 'text',
163
- placeholder: 'smtp.gmail.com',
164
- storage: 'config'
165
- },
166
- {
167
- label: 'Port',
168
- key: 'smtp_port',
169
- fieldType: 'number',
170
- placeholder: '587',
171
- storage: 'config'
172
- },
173
- {
174
- label: 'Username',
175
- key: 'smtp_username',
176
- fieldType: 'text',
177
- placeholder: 'ruben@windmill.dev',
178
- storage: 'config'
179
- },
180
- {
181
- label: 'Password',
182
- key: 'smtp_password',
183
- fieldType: 'password',
184
- storage: 'config'
185
- },
186
- {
187
- label: 'From Address',
188
- key: 'smtp_from',
189
- placeholder: 'noreply@windmill.dev',
190
- fieldType: 'email',
191
- storage: 'config'
192
- },
193
- {
194
- label: 'Implicit TLS',
195
- key: 'smtp_tls_implicit',
196
- fieldType: 'boolean',
197
- storage: 'config'
160
+ label: 'SMTP',
161
+ key: 'smtp_settings',
162
+ fieldType: 'smtp_connect',
163
+ storage: 'setting',
164
+ ee_only: '',
198
165
  }
199
166
  ],
200
167
  Slack: [
@@ -231,14 +198,14 @@ export const settings = {
231
198
  label: 'Keep job directories',
232
199
  key: 'keep_job_dir',
233
200
  fieldType: 'boolean',
234
- tooltip: 'Keep Job directories after execution at /tmp/windmill/<worker>/<job_id>',
201
+ description: 'Keep Job directories after execution at /tmp/windmill/<worker>/<job_id>',
235
202
  storage: 'setting'
236
203
  },
237
204
  {
238
205
  label: 'Expose debug metrics',
239
206
  key: 'expose_debug_metrics',
240
207
  fieldType: 'boolean',
241
- tooltip: 'Expose additional metrics (require metrics to be enabled)',
208
+ description: 'Expose additional metrics (require metrics to be enabled)',
242
209
  storage: 'setting'
243
210
  }
244
211
  ],
@@ -0,0 +1,52 @@
1
+ <script>import {} from '../../gen';
2
+ import ProgressBar from '../progressBar/ProgressBar.svelte';
3
+ export let job = undefined;
4
+ export let compact = false;
5
+ /// Progress of currently running job
6
+ export let scriptProgress = undefined;
7
+ // Removes `Step 1` and replaces it with `Running`
8
+ export let hideStepTitle = false;
9
+ let error = undefined;
10
+ let index = 0;
11
+ let subIndex = 0;
12
+ let subLength = 100;
13
+ let length = 1;
14
+ let nextInProgress = false;
15
+ $: if (job)
16
+ updateJobProgress(job);
17
+ $: subIndex = scriptProgress ?? 0;
18
+ function updateJobProgress(job) {
19
+ if (!job['running'] && !job['success']) {
20
+ error = 0;
21
+ }
22
+ else {
23
+ error = undefined;
24
+ }
25
+ // Anything that is success automatically gets 100% progress
26
+ if (job['success'] && scriptProgress)
27
+ index = 1, subLength = 0, subIndex = 0, scriptProgress = 100;
28
+ }
29
+ let resetP;
30
+ export function reset() {
31
+ resetP?.();
32
+ error = undefined;
33
+ subIndex = 0;
34
+ subLength = 100;
35
+ length = 1;
36
+ index = 0;
37
+ scriptProgress = undefined;
38
+ }
39
+ </script>
40
+
41
+ <ProgressBar
42
+ bind:resetP
43
+ {length}
44
+ {index}
45
+ {nextInProgress}
46
+ {subLength}
47
+ {subIndex}
48
+ {error}
49
+ class={$$props.class}
50
+ bind:compact
51
+ bind:hideStepTitle
52
+ />
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type Job } from '../../gen';
3
+ declare const __propDef: {
4
+ props: {
5
+ [x: string]: any;
6
+ job?: Job | undefined;
7
+ compact?: boolean | undefined;
8
+ scriptProgress?: number | undefined;
9
+ hideStepTitle?: boolean | undefined;
10
+ reset?: (() => void) | undefined;
11
+ };
12
+ events: {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {};
16
+ };
17
+ export type JobProgressBarProps = typeof __propDef.props;
18
+ export type JobProgressBarEvents = typeof __propDef.events;
19
+ export type JobProgressBarSlots = typeof __propDef.slots;
20
+ export default class JobProgressBar extends SvelteComponent<JobProgressBarProps, JobProgressBarEvents, JobProgressBarSlots> {
21
+ get reset(): () => void;
22
+ }
23
+ export {};
@@ -1,5 +1,6 @@
1
1
  <script>import { tweened } from 'svelte/motion';
2
2
  import { linear } from 'svelte/easing';
3
+ import { twMerge } from 'tailwind-merge';
3
4
  function getTween(initialValue = 0, duration = 200) {
4
5
  return tweened(initialValue, {
5
6
  duration,
@@ -11,6 +12,13 @@ export let index;
11
12
  export let subIndex;
12
13
  export let subLength;
13
14
  export let nextInProgress = false;
15
+ // Used for displaying progress of subjob of flow
16
+ export let subIndexIsPercent = false;
17
+ // Remove padding/margin, border radius and titles
18
+ // Used in individual job test runs
19
+ export let compact = false;
20
+ // Removes `Step 1` and replaces it with `Running`
21
+ export let hideStepTitle = false;
14
22
  export let length;
15
23
  let duration = 200;
16
24
  let percent = getTween(0, duration);
@@ -31,6 +39,7 @@ $: finished = index == length;
31
39
  </script>
32
40
 
33
41
  <div class={$$props.class}>
42
+ {#if !compact}
34
43
  <div
35
44
  class="flex justify-between items-end font-medium mb-1 {error != undefined
36
45
  ? 'text-red-700 dark:text-red-200'
@@ -41,12 +50,17 @@ $: finished = index == length;
41
50
  ? 'Error occured'
42
51
  : finished
43
52
  ? 'Done'
53
+ : hideStepTitle
54
+ ? `Running`
55
+ : subIndexIsPercent
56
+ ? `Step ${index + 1} (${subIndex !== undefined ? `${subIndex}%)` : ''}`
44
57
  : `Step ${index + 1}${subIndex !== undefined ? `.${subIndex + 1}` : ''}`}
45
58
  </span>
46
59
  <span class="text-sm">
47
60
  {$percent.toFixed(0)}%
48
61
  </span>
49
62
  </div>
63
+ {/if}
50
64
  <!-- {#each state as step, index}
51
65
  {index} {JSON.stringify(step)}
52
66
  {/each} -->
@@ -56,7 +70,10 @@ $: finished = index == length;
56
70
  {getPercent(index)}
57
71
  |
58
72
  {/each} -->
59
- <div class="flex w-full bg-gray-200 rounded-full h-4 overflow-hidden">
73
+ <div class={twMerge(
74
+ "flex w-full bg-gray-200 overflow-hidden",
75
+ (compact) ? "rounded-none h-3" : "rounded-full h-4",
76
+ )}>
60
77
  {#each new Array(length) as _, partIndex (partIndex)}
61
78
  <div class="h-full relative border-white {partIndex === 0 ? '' : 'border-l'} w-full">
62
79
  {#if partIndex == index && nextInProgress}
@@ -7,6 +7,9 @@ declare const __propDef: {
7
7
  subIndex: number | undefined;
8
8
  subLength: number | undefined;
9
9
  nextInProgress?: boolean | undefined;
10
+ subIndexIsPercent?: boolean | undefined;
11
+ compact?: boolean | undefined;
12
+ hideStepTitle?: boolean | undefined;
10
13
  length: number;
11
14
  resetP?: (() => void) | undefined;
12
15
  };
@@ -55,6 +55,7 @@ const dispatch = createEventDispatcher();
55
55
  bind:watchJob
56
56
  on:done={onDone}
57
57
  />
58
+
58
59
  <div class="p-4 flex flex-col gap-2 items-start h-full">
59
60
  {#if job}
60
61
  <div class="flex gap-2 flex-wrap">
@@ -0,0 +1,71 @@
1
+ <script>import Badge from '../common/badge/Badge.svelte';
2
+ // import { ClipboardCopy, Download } from 'lucide-svelte'
3
+ // import Drawer from '../common/drawer/Drawer.svelte'
4
+ // import DrawerContent from '../common/drawer/DrawerContent.svelte'
5
+ // import { Highlight } from 'svelte-highlight'
6
+ // import Button from '../common/button/Button.svelte'
7
+ // import { json } from 'svelte-highlight/languages'
8
+ // import { copyToClipboard } from '../../utils'
9
+ // import { deepEqual } from 'fast-equals'
10
+ export let flowStatus;
11
+ // $: args =
12
+ // '_metadata' in flowStatus && 'original_args' in flowStatus['_metadata']
13
+ // ? flowStatus['_metadata']['original_args']
14
+ // : undefined
15
+ $: hasPreprocessedArgs =
16
+ '_metadata' in flowStatus && !!flowStatus['_metadata']['preprocessed_args'];
17
+ // $: argsStr = args !== undefined ? JSON.stringify(args, null, 4) : undefined
18
+ // let jsonViewer: Drawer | undefined = undefined
19
+ </script>
20
+
21
+ {#if hasPreprocessedArgs}
22
+ <div>
23
+ <Badge color="yellow">preprocessed args</Badge>
24
+ </div>
25
+ {/if}
26
+
27
+ <!--
28
+ {#if args !== undefined && argsStr !== undefined}
29
+ <Drawer bind:this={jsonViewer} size="900px">
30
+ <DrawerContent title="Original args" on:close={jsonViewer.closeDrawer}>
31
+ <svelte:fragment slot="actions">
32
+ <Button
33
+ download="windmill-args.json"
34
+ href={`data:text/json;charset=utf-8,${encodeURIComponent(argsStr)}`}
35
+ startIcon={{ icon: Download }}
36
+ size="xs"
37
+ color="light"
38
+ >
39
+ Download
40
+ </Button>
41
+ <Button
42
+ on:click={() => copyToClipboard(argsStr)}
43
+ color="light"
44
+ size="xs"
45
+ startIcon={{ icon: ClipboardCopy }}
46
+ >
47
+ Copy to clipboard
48
+ </Button>
49
+ </svelte:fragment>
50
+ {#if args.length > 100000 || (args && typeof args === 'object' && deepEqual( Object.keys(args), ['reason'] ) && args['reason'] == 'WINDMILL_TOO_BIG')}
51
+ <div class="text-sm mb-2 text-tertiary">
52
+ <a
53
+ download="windmill-args.json"
54
+ href={`data:text/json;charset=utf-8,${encodeURIComponent(args)}`}
55
+ >
56
+ JSON is too large to be displayed in full.
57
+ </a></div
58
+ >
59
+ {:else}
60
+ <Highlight language={json} code={argsStr.replace(/\\n/g, '\n')} />
61
+ {/if}
62
+ </DrawerContent>
63
+ </Drawer>
64
+ <button
65
+ on:click={() => {
66
+ jsonViewer?.openDrawer()
67
+ }}
68
+ >
69
+ <Badge color="yellow">preprocessed args</Badge>
70
+ </button>
71
+ {/if} -->
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ flowStatus: any;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type PreprocessedArgsDisplayProps = typeof __propDef.props;
12
+ export type PreprocessedArgsDisplayEvents = typeof __propDef.events;
13
+ export type PreprocessedArgsDisplaySlots = typeof __propDef.slots;
14
+ export default class PreprocessedArgsDisplay extends SvelteComponent<PreprocessedArgsDisplayProps, PreprocessedArgsDisplayEvents, PreprocessedArgsDisplaySlots> {
15
+ }
16
+ export {};
@@ -94,6 +94,7 @@ function handleAddOrEditArgument(modalProperty) {
94
94
  if (argError !== '') {
95
95
  sendUserToast(argError, true);
96
96
  }
97
+ console.log(schema);
97
98
  dispatch('change', schema);
98
99
  }
99
100
  export function handleDeleteArgument(argPath) {
@@ -2,33 +2,156 @@
2
2
  import EditableSchemaForm from '../EditableSchemaForm.svelte';
3
3
  import AddProperty from './AddProperty.svelte';
4
4
  import { createEventDispatcher } from 'svelte';
5
+ import Toggle from '../Toggle.svelte';
6
+ import { emptySchema, validateFileExtension } from '../../utils';
7
+ import AutoComplete from 'simple-svelte-autocomplete';
8
+ import { Alert } from '../common';
5
9
  export let schema;
6
10
  export let offset = 0;
7
11
  export let uiOnly = false;
8
12
  export let noPreview = false;
9
13
  export let fullHeight = true;
10
14
  export let lightweightMode = false;
15
+ export let formatExtension = undefined;
16
+ let resourceIsTextFile = false;
11
17
  let addProperty = undefined;
12
18
  const dispatch = createEventDispatcher();
19
+ $: !resourceIsTextFile && (formatExtension = undefined);
20
+ $: invalidExtension =
21
+ formatExtension && formatExtension != ''
22
+ ? !validateFileExtension(formatExtension ?? 'txt')
23
+ : false;
24
+ function switchResourceIsFile() {
25
+ if (!resourceIsTextFile) {
26
+ schema = emptySchema();
27
+ formatExtension = undefined;
28
+ }
29
+ else {
30
+ formatExtension = "";
31
+ schema = emptySchema();
32
+ schema.order = ['content'];
33
+ schema.properties = {
34
+ content: {
35
+ type: 'string',
36
+ description: 'Text contents of the file'
37
+ }
38
+ };
39
+ }
40
+ dispatch('change', schema);
41
+ }
42
+ function numberOfMatches(listItem, searchWords) {
43
+ if (!listItem) {
44
+ return 0;
45
+ }
46
+ let matches = 0;
47
+ searchWords.forEach((searchWord) => {
48
+ const searchLetters = searchWord.split('');
49
+ if (searchLetters.every((l) => listItem.includes(l))) {
50
+ matches++;
51
+ }
52
+ });
53
+ return matches;
54
+ }
55
+ let suggestedFileExtensions = ['json', 'yaml', 'jinja', 'j2', 'ini', 'cfg', 'toml', 'html', 'xml', 'yml'];
56
+ let autocompleteExtension = true;
13
57
  </script>
14
58
 
15
- <div class={twMerge(fullHeight ? 'h-full' : 'h-80', 'border overflow-y-auto rounded-md')}>
16
- <div class="p-4 border-b">
17
- <AddProperty on:change={() => dispatch('change', schema)} bind:schema bind:this={addProperty} />
59
+ {#if !resourceIsTextFile}
60
+ <div class={twMerge(fullHeight ? 'h-full' : 'h-80', 'border overflow-y-auto rounded-md')}>
61
+ <div class="p-4 border-b">
62
+ <AddProperty
63
+ on:change={() => dispatch('change', schema)}
64
+ bind:schema
65
+ bind:this={addProperty}
66
+ />
67
+ </div>
68
+ <EditableSchemaForm
69
+ bind:schema
70
+ on:change={() => dispatch('change', schema)}
71
+ isFlowInput
72
+ on:edit={(e) => {
73
+ addProperty?.openDrawer(e.detail)
74
+ }}
75
+ on:delete={(e) => {
76
+ addProperty?.handleDeleteArgument([e.detail])
77
+ }}
78
+ {offset}
79
+ {uiOnly}
80
+ {noPreview}
81
+ {lightweightMode}
82
+ />
18
83
  </div>
19
- <EditableSchemaForm
20
- bind:schema
21
- on:change={() => dispatch('change', schema)}
22
- isFlowInput
23
- on:edit={(e) => {
24
- addProperty?.openDrawer(e.detail)
25
- }}
26
- on:delete={(e) => {
27
- addProperty?.handleDeleteArgument([e.detail])
28
- }}
29
- {offset}
30
- {uiOnly}
31
- {noPreview}
32
- {lightweightMode}
33
- />
34
- </div>
84
+ {/if}
85
+ {#if resourceIsTextFile}
86
+ <div class="flex items-center space-x-2 w-5/12">
87
+ <label for="format-extension" class="text-base font-medium whitespace-nowrap">
88
+ File extension{autocompleteExtension ? "" : " (free text)"}:
89
+ </label>
90
+ {#if autocompleteExtension}
91
+ <AutoComplete
92
+ inputId="format-extension"
93
+ autofocus={true}
94
+ items={[...suggestedFileExtensions, 'Choose another extension']}
95
+ onChange={(a) => {
96
+ if (a == 'Choose another extension') {
97
+ formatExtension = ''
98
+ autocompleteExtension = false
99
+ }
100
+ }}
101
+ itemFilterFunction={(listItem, searchWords) => {
102
+ if (searchWords.length == 0 || listItem === 'Choose another extension') {
103
+ return true
104
+ }
105
+ return numberOfMatches(listItem, searchWords) > 0
106
+ }}
107
+ noResultsText="No matches, try the 'Choose another extension' option"
108
+ bind:selectedItem={formatExtension}
109
+ inputClassName="!h-[32px] py-1 !text-xs !w-64"
110
+ hideArrow
111
+ className={'!font-bold'}
112
+ dropdownClassName="!font-normal !w-64 !max-w-64"
113
+ maxItemsToShowInList={8}
114
+ moreItemsText={null}
115
+ lock={true}
116
+ />
117
+ {:else}
118
+ <input
119
+ autofocus={true}
120
+ bind:value={formatExtension}
121
+ class="!h-[32px] py-1 !text-xs !w-64"
122
+ placeholder="Enter your extension"
123
+ on:keydown={(event) => {
124
+ if (event.key === 'Enter') {
125
+ if (formatExtension && !suggestedFileExtensions.includes(formatExtension))
126
+ suggestedFileExtensions.push(formatExtension)
127
+
128
+ autocompleteExtension = true
129
+ }
130
+ }}
131
+ />
132
+ {/if}
133
+ </div>
134
+
135
+ {#if invalidExtension}
136
+ <Alert title="Invalid file extension" type="error">
137
+ The provided extension (<span class="font-bold font-mono">.{formatExtension}</span>) contains
138
+ invalid characters. Note that you shouldn't add the leading dot, (i.e. enter `json` instead of `.json`)
139
+ </Alert>
140
+ {:else if formatExtension && formatExtension !== ''}
141
+ <Alert title={`Example: my_file.${formatExtension}`} type="info">
142
+ The <span class="font-bold font-mono"> .{formatExtension} </span> extension will be used to infer
143
+ the format when displaying the content and this is also how the resource will appear when pulling
144
+ via the CLI.
145
+ </Alert>
146
+ <div />
147
+ {/if}
148
+ {/if}
149
+ <Toggle
150
+ bind:checked={resourceIsTextFile}
151
+ options={{
152
+ right: 'This resource type represents a plain text file (clears current schema)',
153
+ rightTooltip:
154
+ 'A text file such as a config file, template, or any other file format that contains plain text'
155
+ }}
156
+ on:change={() => switchResourceIsFile()}
157
+ />
@@ -8,6 +8,7 @@ declare const __propDef: {
8
8
  noPreview?: boolean | undefined;
9
9
  fullHeight?: boolean | undefined;
10
10
  lightweightMode?: boolean | undefined;
11
+ formatExtension?: string | undefined;
11
12
  };
12
13
  events: {
13
14
  change: CustomEvent<any>;