windmill-components 1.389.3 → 1.394.3

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 (158) hide show
  1. package/package/assets/app.css +4 -3
  2. package/package/components/AppConnectInner.svelte +18 -10
  3. package/package/components/ArgInfo.svelte +1 -1
  4. package/package/components/ArgInput.svelte +22 -2
  5. package/package/components/AutheliaSetting.svelte +1 -0
  6. package/package/components/AuthentikSetting.svelte +1 -0
  7. package/package/components/BoundedInputNumber +0 -0
  8. package/package/components/CliHelpBox.svelte +2 -2
  9. package/package/components/DateInput.svelte +1 -0
  10. package/package/components/DisplayResult.svelte +39 -31
  11. package/package/components/Editor.svelte +0 -21
  12. package/package/components/ErrorOrRecoveryHandler.svelte +7 -1
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -1
  14. package/package/components/FlowBuilder.svelte +2 -2
  15. package/package/components/FlowGraphViewerStep.svelte +22 -0
  16. package/package/components/FlowJobResult.svelte +1 -0
  17. package/package/components/FlowMetadata.svelte +3 -2
  18. package/package/components/FlowStatusViewer.svelte +2 -0
  19. package/package/components/FlowStatusViewer.svelte.d.ts +2 -0
  20. package/package/components/FlowStatusViewerInner.svelte +10 -5
  21. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  22. package/package/components/FolderEditor.svelte +1 -1
  23. package/package/components/IdEditorInput.svelte +82 -0
  24. package/package/components/IdEditorInput.svelte.d.ts +26 -0
  25. package/package/components/InputTransformForm.svelte +10 -10
  26. package/package/components/InputTransformForm.svelte.d.ts +4 -1
  27. package/package/components/InputTransformSchemaForm.svelte.d.ts +3 -1
  28. package/package/components/InstanceSettings.svelte +73 -12
  29. package/package/components/ItemPicker.svelte +1 -0
  30. package/package/components/KanidmSetting.svelte +1 -0
  31. package/package/components/KeycloakSetting.svelte +1 -0
  32. package/package/components/LightweightArgInput.svelte +2 -0
  33. package/package/components/LogViewer.svelte +206 -0
  34. package/package/components/ModulePreview.svelte.d.ts +3 -1
  35. package/package/components/ModulePreviewForm.svelte +2 -2
  36. package/package/components/ModulePreviewForm.svelte.d.ts +4 -1
  37. package/package/components/OAuthSetting.svelte +11 -10
  38. package/package/components/ObjectStoreConfigSettings.svelte +6 -6
  39. package/package/components/OktaSetting.svelte +1 -0
  40. package/package/components/Password.svelte +30 -35
  41. package/package/components/RunChart.svelte +16 -0
  42. package/package/components/RunChart.svelte.d.ts +2 -0
  43. package/package/components/SavedInputs.svelte +4 -4
  44. package/package/components/ScheduleEditorInner.svelte +145 -2
  45. package/package/components/SchemaForm.svelte +1 -2
  46. package/package/components/ScriptBuilder.svelte +1 -0
  47. package/package/components/TestConnection.svelte +24 -6
  48. package/package/components/TestJobLoader.svelte +2 -0
  49. package/package/components/ZitadelSetting.svelte +1 -0
  50. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +0 -1
  51. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -2
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +0 -2
  53. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +1 -2
  54. package/package/components/apps/components/display/table/AppAggridTable.svelte +6 -2
  55. package/package/components/apps/components/inputs/AppSelect.svelte +18 -17
  56. package/package/components/apps/editor/AppEditor.svelte +1 -1
  57. package/package/components/apps/editor/AppPreview.svelte +3 -6
  58. package/package/components/apps/editor/AppReportsDrawer.svelte +17 -5
  59. package/package/components/apps/editor/DeploymentHistory.svelte +1 -0
  60. package/package/components/apps/editor/component/Component.svelte +0 -2
  61. package/package/components/apps/editor/componentsPanel/themeUtils.js +18 -7
  62. package/package/components/apps/editor/contextPanel/SubGridOutput.svelte +1 -0
  63. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +13 -67
  64. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +1 -2
  65. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +0 -1
  66. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  67. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte.d.ts +0 -1
  68. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +1 -1
  69. package/package/components/apps/editor/settingsPanel/decisionTree/InsertDecisionTreeNode.svelte +2 -2
  70. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +1 -0
  71. package/package/components/apps/svelte-select/lib/Select.svelte +1 -0
  72. package/package/components/build_workers.js +24 -18
  73. package/package/components/common/button/Button.svelte +3 -4
  74. package/package/components/common/button/model.d.ts +1 -1
  75. package/package/components/common/button/model.js +6 -0
  76. package/package/components/common/clearableInput/ClearableInput.svelte +1 -0
  77. package/package/components/common/menu/MenuItem.svelte +1 -0
  78. package/package/components/common/modal/AlwaysMountedModal.svelte +1 -0
  79. package/package/components/common/stepper/Stepper.svelte +1 -0
  80. package/package/components/copilot/StepInputsGen.svelte +2 -2
  81. package/package/components/copilot/StepInputsGen.svelte.d.ts +3 -1
  82. package/package/components/copilot/lib.js +2 -2
  83. package/package/components/details/ClipboardPanel.svelte +1 -0
  84. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -1
  85. package/package/components/flows/content/FlowConstants.svelte +3 -3
  86. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  87. package/package/components/flows/content/FlowModuleComponent.svelte +2 -2
  88. package/package/components/flows/content/FlowModuleHeader.svelte +5 -45
  89. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +47 -0
  90. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte.d.ts +16 -0
  91. package/package/components/flows/content/FlowSettings.svelte +1 -0
  92. package/package/components/flows/flowModuleNextId.js +1 -1
  93. package/package/components/flows/flowState.d.ts +1 -1
  94. package/package/components/flows/flowStateUtils.d.ts +1 -1
  95. package/package/components/flows/flowStateUtils.js +1 -1
  96. package/package/components/flows/flowStore.d.ts +1 -0
  97. package/package/components/flows/flowStore.js +5 -0
  98. package/package/components/flows/map/FlowJobsMenu.svelte +0 -1
  99. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +0 -1
  100. package/package/components/flows/map/FlowModuleSchemaItem.svelte +103 -19
  101. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  102. package/package/components/flows/map/FlowModuleSchemaMap.svelte +31 -1
  103. package/package/components/flows/map/InsertModuleButton.svelte +5 -5
  104. package/package/components/flows/map/InsertTriggerButton.svelte +2 -2
  105. package/package/components/flows/map/MapItem.svelte +4 -0
  106. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  107. package/package/components/flows/map/VirtualItem.svelte +15 -7
  108. package/package/components/flows/map/VirtualItem.svelte.d.ts +2 -1
  109. package/package/components/flows/previousResults.js +1 -1
  110. package/package/components/flows/utils.d.ts +3 -3
  111. package/package/components/flows/utils.js +2 -2
  112. package/package/components/graph/FlowGraphV2.svelte +4 -0
  113. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  114. package/package/components/graph/graphBuilder.d.ts +1 -0
  115. package/package/components/graph/graphBuilder.js +2 -4
  116. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -2
  117. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -1
  118. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +3 -3
  119. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +1 -0
  120. package/package/components/graph/renderers/nodes/InputNode.svelte +2 -2
  121. package/package/components/graph/renderers/nodes/ModuleNode.svelte +6 -2
  122. package/package/components/graph/util.d.ts +1 -1
  123. package/package/components/graph/util.js +7 -2
  124. package/package/components/icons/AzureIcon.svelte +1 -1
  125. package/package/components/icons/FunkwhaleIcon.svelte +1 -19
  126. package/package/components/icons/JumpCloudIcon.svelte +12 -0
  127. package/package/components/icons/JumpCloudIcon.svelte.d.ts +17 -0
  128. package/package/components/icons/KeycloakIcon.svelte +20 -0
  129. package/package/components/icons/KeycloakIcon.svelte.d.ts +17 -0
  130. package/package/components/icons/MailchimpIcon.svelte +1 -1
  131. package/package/components/icons/ZitadelIcon.svelte +76 -0
  132. package/package/components/icons/ZitadelIcon.svelte.d.ts +17 -0
  133. package/package/components/icons/index.d.ts +7 -1
  134. package/package/components/icons/index.js +8 -2
  135. package/package/components/instanceSettings.d.ts +1 -1
  136. package/package/components/instanceSettings.js +24 -15
  137. package/package/components/runs/JobLoader.svelte +17 -6
  138. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  139. package/package/components/runs/RunRow.svelte +7 -7
  140. package/package/components/runs/RunsFilter.svelte +8 -1
  141. package/package/components/runs/RunsTable.svelte +30 -8
  142. package/package/components/runs/RunsTable.svelte.d.ts +2 -0
  143. package/package/components/schema/PropertyEditor.svelte +0 -5
  144. package/package/components/settings/WorkspaceUserSettings.svelte +1 -1
  145. package/package/components/sidebar/MenuLink.svelte +2 -1
  146. package/package/components/sidebar/WorkspaceMenu.svelte +4 -1
  147. package/package/components/sidebar/changelogs.js +30 -0
  148. package/package/components/tutorials/FlowBuilderTutorialsForLoop.svelte +2 -2
  149. package/package/gen/core/OpenAPI.js +1 -1
  150. package/package/gen/schemas.gen.d.ts +21 -0
  151. package/package/gen/schemas.gen.js +21 -0
  152. package/package/gen/services.gen.d.ts +11 -12
  153. package/package/gen/services.gen.js +19 -24
  154. package/package/gen/types.gen.d.ts +62 -37
  155. package/package/hub.d.ts +1 -0
  156. package/package/hubPaths.json +11 -8
  157. package/package.json +4 -4
  158. package/package/windmill_fetch.d.ts.txt +0 -16966
@@ -0,0 +1,82 @@
1
+ <script>import { ArrowRight } from 'lucide-svelte';
2
+ import { Button } from './common';
3
+ import { createEventDispatcher } from 'svelte';
4
+ import { forbiddenIds } from './flows/idUtils';
5
+ import { slide } from 'svelte/transition';
6
+ export let initialId;
7
+ export let reservedIds = [];
8
+ export let label = 'Component ID';
9
+ export let value = initialId;
10
+ export let buttonText = '';
11
+ export let btnClasses = '!p-1 !w-[34px] !ml-1';
12
+ export let acceptUnderScores = false;
13
+ let error = '';
14
+ const dispatch = createEventDispatcher();
15
+ const regex = acceptUnderScores ? /^[a-zA-Z][a-zA-Z0-9_]*$/ : /^[a-zA-Z][a-zA-Z0-9]*$/;
16
+ $: validateId(value, reservedIds);
17
+ function validateId(id, reservedIds) {
18
+ if (id == initialId) {
19
+ error = '';
20
+ return;
21
+ }
22
+ if (!regex.test(value)) {
23
+ error = 'The ID must include only letters and numbers and start with a letter';
24
+ }
25
+ else if (forbiddenIds.includes(value)) {
26
+ error = 'This ID is reserved';
27
+ }
28
+ else if (reservedIds.some((rid) => rid === value)) {
29
+ error = 'This ID is already in use';
30
+ }
31
+ else {
32
+ error = '';
33
+ }
34
+ }
35
+ let inputDiv = undefined;
36
+ $: inputDiv?.focus();
37
+ </script>
38
+
39
+ <label class="block text-primary">
40
+ {#if label != ''}
41
+ <div class="pb-1 text-sm text-secondary">{label}</div>
42
+ {/if}
43
+ <div class="flex w-full">
44
+ <input
45
+ bind:this={inputDiv}
46
+ autofocus
47
+ type="text"
48
+ bind:value
49
+ class="!w-auto grow"
50
+ on:click|stopPropagation={() => {}}
51
+ on:keydown|stopPropagation={({ key }) => {
52
+ if (key === 'Enter' && error === '' && value !== initialId) {
53
+ dispatch('save', value)
54
+ } else if (key == 'Escape') {
55
+ dispatch('close')
56
+ }
57
+ }}
58
+ on:keypress|stopPropagation
59
+ />
60
+ <Button
61
+ size="xs"
62
+ color="blue"
63
+ buttonType="button"
64
+ {btnClasses}
65
+ aria-label="Save ID"
66
+ disabled={error != '' || value === initialId}
67
+ on:click={() => {
68
+ dispatch('save', value)
69
+ }}
70
+ >
71
+ {buttonText}<ArrowRight size={18} />
72
+ </Button>
73
+ </div>
74
+ {#if error != ''}
75
+ <div
76
+ transition:slide|local={{ duration: 100 }}
77
+ class="w-full text-sm text-red-600 whitespace-pre-wrap pt-1"
78
+ >
79
+ {error}
80
+ </div>
81
+ {/if}
82
+ </label>
@@ -0,0 +1,26 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ initialId: string;
5
+ reservedIds?: string[] | undefined;
6
+ label?: string | undefined;
7
+ value?: string | undefined;
8
+ buttonText?: string | undefined;
9
+ btnClasses?: string | undefined;
10
+ acceptUnderScores?: boolean | undefined;
11
+ };
12
+ events: {
13
+ keypress: KeyboardEvent;
14
+ save: CustomEvent<any>;
15
+ close: CustomEvent<any>;
16
+ } & {
17
+ [evt: string]: CustomEvent<any>;
18
+ };
19
+ slots: {};
20
+ };
21
+ export type IdEditorInputProps = typeof __propDef.props;
22
+ export type IdEditorInputEvents = typeof __propDef.events;
23
+ export type IdEditorInputSlots = typeof __propDef.slots;
24
+ export default class IdEditorInput extends SvelteComponent<IdEditorInputProps, IdEditorInputEvents, IdEditorInputSlots> {
25
+ }
26
+ export {};
@@ -29,7 +29,7 @@ let monaco = undefined;
29
29
  let monacoTemplate = undefined;
30
30
  let argInput = undefined;
31
31
  const dispatch = createEventDispatcher();
32
- $: inputCat = computeInputCat(schema.properties[argName].type, schema.properties[argName].format, schema.properties[argName].items?.type, schema.properties[argName].enum, schema.properties[argName].contentEncoding);
32
+ $: inputCat = computeInputCat(schema?.properties?.[argName].type, schema?.properties?.[argName].format, schema?.properties?.[argName].items?.type, schema?.properties?.[argName].enum, schema?.properties?.[argName].contentEncoding);
33
33
  let propertyType = getPropertyType(arg);
34
34
  const { shouldUpdatePropertyType, exprsToSet } = getContext('FlowCopilotContext') || {};
35
35
  function setExpr() {
@@ -127,10 +127,10 @@ const { focusProp, propPickerConfig } = getContext('PropPickerWrapper');
127
127
  $: isStaticTemplate(inputCat) && propertyType == 'static' && setPropertyType(arg?.value);
128
128
  function setDefaultCode() {
129
129
  if (!arg?.value) {
130
- monacoTemplate?.setCode(schema.properties[argName].default);
130
+ monacoTemplate?.setCode(schema.properties?.[argName].default);
131
131
  }
132
132
  }
133
- $: schema.properties[argName].default && setDefaultCode();
133
+ $: schema?.properties?.[argName].default && setDefaultCode();
134
134
  let resourceTypes = undefined;
135
135
  async function loadResourceTypes() {
136
136
  resourceTypes = await getResourceTypes();
@@ -146,10 +146,10 @@ loadResourceTypes();
146
146
  <div class="flex flex-wrap grow">
147
147
  <FieldHeader
148
148
  label={argName}
149
- format={schema.properties[argName].format}
150
- contentEncoding={schema.properties[argName].contentEncoding}
151
- required={schema.required.includes(argName)}
152
- type={schema.properties[argName].type}
149
+ format={schema?.properties?.[argName].format}
150
+ contentEncoding={schema?.properties?.[argName].contentEncoding}
151
+ required={schema.required?.includes(argName)}
152
+ type={schema.properties?.[argName].type}
153
153
  />
154
154
 
155
155
  {#if isStaticTemplate(inputCat)}
@@ -172,7 +172,7 @@ loadResourceTypes();
172
172
  bind:this={stepInputGen}
173
173
  {focused}
174
174
  {arg}
175
- schemaProperty={schema.properties[argName]}
175
+ schemaProperty={schema?.properties?.[argName]}
176
176
  showPopup={(isStaticTemplate(inputCat) && propertyType == 'static') ||
177
177
  propertyType === undefined ||
178
178
  propertyType === 'static' ||
@@ -334,7 +334,7 @@ loadResourceTypes();
334
334
  />
335
335
  {/if}
336
336
  </div>
337
- {:else if propertyType === undefined || propertyType == 'static'}
337
+ {:else if (propertyType === undefined || propertyType == 'static') && schema?.properties?.[argName]}
338
338
  <ArgInput
339
339
  {resourceTypes}
340
340
  noMargin
@@ -354,7 +354,7 @@ loadResourceTypes();
354
354
  bind:value={arg.value}
355
355
  type={schema.properties[argName].type}
356
356
  oneOf={schema.properties[argName].oneOf}
357
- required={schema.required.includes(argName)}
357
+ required={schema.required?.includes(argName)}
358
358
  bind:pattern={schema.properties[argName].pattern}
359
359
  bind:valid={inputCheck}
360
360
  defaultValue={schema.properties[argName].default}
@@ -7,7 +7,10 @@ import type { PickableProperties } from './flows/previousResults';
7
7
  declare const __propDef: {
8
8
  props: {
9
9
  [x: string]: any;
10
- schema: Schema;
10
+ schema: Schema | {
11
+ properties?: Record<string, any>;
12
+ required?: string[];
13
+ };
11
14
  arg: InputTransform | any;
12
15
  argName: string;
13
16
  extraLib?: string | undefined;
@@ -4,7 +4,9 @@ import { type InputTransform } from '../gen';
4
4
  import type { PickableProperties } from './flows/previousResults';
5
5
  declare const __propDef: {
6
6
  props: {
7
- schema: Schema;
7
+ schema: Schema | {
8
+ properties?: Record<string, any>;
9
+ };
8
10
  args?: Record<string, any> | undefined;
9
11
  isValid?: boolean | undefined;
10
12
  extraLib?: string | undefined;
@@ -15,7 +15,7 @@ import { isCloudHosted } from '../cloud';
15
15
  import { capitalize, classNames } from '../utils';
16
16
  import { enterpriseLicense } from '../stores';
17
17
  import CustomOauth from './CustomOauth.svelte';
18
- import { AlertCircle, AlertTriangle, BadgeCheck, Info, Plus, X, BadgeX } from 'lucide-svelte';
18
+ import { AlertCircle, AlertTriangle, BadgeCheck, Info, Plus, X, BadgeX, Slack } from 'lucide-svelte';
19
19
  import CustomSso from './CustomSso.svelte';
20
20
  import AuthentikSetting from './AuthentikSetting.svelte';
21
21
  import AutheliaSetting from './AutheliaSetting.svelte';
@@ -25,6 +25,7 @@ import Password from './Password.svelte';
25
25
  import ObjectStoreConfigSettings from './ObjectStoreConfigSettings.svelte';
26
26
  import { fade } from 'svelte/transition';
27
27
  import Popover from './Popover.svelte';
28
+ import { base } from '../base';
28
29
  export let tab = 'Core';
29
30
  export let hideTabs = false;
30
31
  export let hideSave = false;
@@ -213,6 +214,11 @@ export async function openCustomerPortal() {
213
214
  >Setting SMTP unlocks sending emails upon adding new users to the workspace or the
214
215
  instance.</div
215
216
  >
217
+ {:else if category == 'Slack'}
218
+ <div class="text-secondary pb-4 text-xs">
219
+ Connecting your instance to a Slack workspace enables critical alerts to be sent to a
220
+ Slack channel.
221
+ </div>
216
222
  {:else if category == 'Telemetry'}
217
223
  <div class="text-secondary pb-4 text-xs">
218
224
  Anonymous usage data is collected to help improve Windmill.
@@ -224,6 +230,7 @@ export async function openCustomerPortal() {
224
230
  <li>login type usage</li>
225
231
  <li>workers usage</li>
226
232
  <li>vcpus usage</li>
233
+ <li>memory usage</li>
227
234
  </ul>
228
235
  </div>
229
236
  {#if $enterpriseLicense}
@@ -333,7 +340,7 @@ export async function openCustomerPortal() {
333
340
  <Toggle
334
341
  options={{
335
342
  right:
336
- 'Require users to have been added manually to windmill to sign in through OAuth'
343
+ 'Require users to have been added manually to Windmill to sign in through OAuth'
337
344
  }}
338
345
  bind:checked={requirePreexistingUserForOauth}
339
346
  />
@@ -622,21 +629,46 @@ export async function openCustomerPortal() {
622
629
  {#if $enterpriseLicense && Array.isArray(values[setting.key])}
623
630
  {#each values[setting.key] ?? [] as v, i}
624
631
  <div class="flex max-w-md mt-1 gap-2 w-full items-center">
625
- <select>
626
- <option value="email">Email</option>
627
- </select>
628
- <input
629
- type="email"
630
- placeholder="Email address"
631
- on:input={(e) => {
632
+ <select
633
+ on:change={(e) => {
632
634
  if (e.target?.['value']) {
633
635
  values[setting.key][i] = {
634
- email: e.target['value']
636
+ [e.target['value']]: ''
635
637
  }
636
638
  }
637
639
  }}
638
- value={v?.email ?? ''}
639
- />
640
+ value={v && 'slack_channel' in v ? 'slack_channel' : 'email'}
641
+ >
642
+ <option value="email">Email</option>
643
+ <option value="slack_channel">Slack</option>
644
+ </select>
645
+ {#if v && 'slack_channel' in v}
646
+ <input
647
+ type="text"
648
+ placeholder="Slack channel"
649
+ on:input={(e) => {
650
+ if (e.target?.['value']) {
651
+ values[setting.key][i] = {
652
+ slack_channel: e.target['value']
653
+ }
654
+ }
655
+ }}
656
+ value={v?.slack_channel ?? ''}
657
+ />
658
+ {:else}
659
+ <input
660
+ type="email"
661
+ placeholder="Email address"
662
+ on:input={(e) => {
663
+ if (e.target?.['value']) {
664
+ values[setting.key][i] = {
665
+ email: e.target['value']
666
+ }
667
+ }
668
+ }}
669
+ value={v?.email ?? ''}
670
+ />
671
+ {/if}
640
672
  <button
641
673
  transition:fade|local={{ duration: 100 }}
642
674
  class="rounded-full p-1 bg-surface-secondary duration-200 hover:bg-surface-hover"
@@ -675,6 +707,35 @@ export async function openCustomerPortal() {
675
707
  Add item
676
708
  </Button>
677
709
  </div>
710
+ {:else if setting.fieldType == 'slack_connect'}
711
+ <div class="flex flex-col items-start self-start">
712
+ {#if values[setting.key] && 'team_name' in values[setting.key]}
713
+ <div class="text-sm">
714
+ Connected to <code>{values[setting.key]['team_name']}</code>
715
+ </div>
716
+ <Button
717
+ size="sm"
718
+ endIcon={{ icon: Slack }}
719
+ btnClasses="mt-2"
720
+ variant="border"
721
+ on:click={async () => {
722
+ values[setting.key] = undefined
723
+ }}
724
+ >
725
+ Disconnect Slack
726
+ </Button>
727
+ {:else}
728
+ <Button
729
+ size="xs"
730
+ color="dark"
731
+ href="{base}/api/oauth/connect_slack?instance=true"
732
+ startIcon={{ icon: Slack }}
733
+ disabled={!$enterpriseLicense}
734
+ >
735
+ Connect to Slack
736
+ </Button>
737
+ {/if}
738
+ </div>
678
739
  {:else if setting.fieldType == 'object_store_config'}
679
740
  <ObjectStoreConfigSettings bind:bucket_config={values[setting.key]} />
680
741
  <div class="mb-6" />
@@ -58,6 +58,7 @@ let refreshing = false;
58
58
  >
59
59
  <div class="w-full h-full flex flex-col">
60
60
  <div class="flex flex-row gap-2 pb-4">
61
+ <!-- svelte-ignore a11y-autofocus -->
61
62
  <input
62
63
  type="text"
63
64
  placeholder="Search {itemName}s"
@@ -33,6 +33,7 @@ function changeValues({ baseUrl, id }) {
33
33
  </script>
34
34
 
35
35
  <div class="flex flex-col gap-1">
36
+ <!-- svelte-ignore a11y-label-has-associated-control -->
36
37
  <label class="text-sm font-medium text-primary flex gap-4 items-center"
37
38
  ><div class="w-[120px]"><IconedResourceType name={'kanidm'} after={true} /></div><Toggle
38
39
  checked={enabled}
@@ -25,6 +25,7 @@ function changeOrg(org) {
25
25
  </script>
26
26
 
27
27
  <div class="flex flex-col gap-1">
28
+ <!-- svelte-ignore a11y-label-has-associated-control -->
28
29
  <label class="text-sm font-medium text-primary flex gap-4 items-center"
29
30
  ><div class="w-[120px]"><IconedResourceType name={'keycloak'} after={true} /></div><Toggle
30
31
  checked={enabled}
@@ -573,4 +573,6 @@ function addItemByItemsType() {
573
573
  /* Firefox */
574
574
  input[type='number'] {
575
575
  -moz-appearance: textfield !important;
576
+ -webkit-appearance: textfield !important;
577
+ appearance: textfield !important;
576
578
  }</style>
@@ -28,6 +28,7 @@ export let noMaxH = false;
28
28
  export let noAutoScroll = false;
29
29
  // @ts-ignore
30
30
  const ansi_up = new AnsiUp();
31
+ ansi_up.use_classes = true;
31
32
  let scroll = true;
32
33
  let div = null;
33
34
  // let downloadStartUrl: string | undefined = undefined
@@ -228,3 +229,208 @@ function showMoreTruncate(len) {
228
229
  >
229
230
  </div>
230
231
  </div>
232
+
233
+ <style global>
234
+ /* Foreground colors */
235
+ :global(.ansi-black-fg) {
236
+ color: rgb(0, 0, 0);
237
+ }
238
+ :global(.ansi-red-fg) {
239
+ color: rgb(187, 0, 0);
240
+ }
241
+ :global(.ansi-green-fg) {
242
+ color: rgb(0, 187, 0);
243
+ }
244
+ :global(.ansi-yellow-fg) {
245
+ color: rgb(187, 187, 0);
246
+ }
247
+ :global(.ansi-blue-fg) {
248
+ color: rgb(0, 0, 187);
249
+ }
250
+ :global(.ansi-magenta-fg) {
251
+ color: rgb(187, 0, 187);
252
+ }
253
+ :global(.ansi-cyan-fg) {
254
+ color: rgb(0, 187, 187);
255
+ }
256
+ :global(.ansi-white-fg) {
257
+ color: rgb(255, 255, 255);
258
+ }
259
+
260
+ :global(.ansi-bright-black-fg) {
261
+ color: rgb(85, 85, 85);
262
+ }
263
+ :global(.ansi-bright-red-fg) {
264
+ color: rgb(255, 85, 85);
265
+ }
266
+ :global(.ansi-bright-green-fg) {
267
+ color: rgb(0, 255, 0);
268
+ }
269
+ :global(.ansi-bright-yellow-fg) {
270
+ color: rgb(255, 255, 85);
271
+ }
272
+ :global(.ansi-bright-blue-fg) {
273
+ color: rgb(85, 85, 255);
274
+ }
275
+ :global(.ansi-bright-magenta-fg) {
276
+ color: rgb(255, 85, 255);
277
+ }
278
+ :global(.ansi-bright-cyan-fg) {
279
+ color: rgb(85, 255, 255);
280
+ }
281
+ :global(.ansi-bright-white-fg) {
282
+ color: rgb(255, 255, 255);
283
+ }
284
+
285
+ /* Background colors */
286
+ :global(.ansi-black-bg) {
287
+ background-color: rgb(0, 0, 0);
288
+ }
289
+ :global(.ansi-red-bg) {
290
+ background-color: rgb(187, 0, 0);
291
+ }
292
+ :global(.ansi-green-bg) {
293
+ background-color: rgb(0, 187, 0);
294
+ }
295
+ :global(.ansi-yellow-bg) {
296
+ background-color: rgb(187, 187, 0);
297
+ }
298
+ :global(.ansi-blue-bg) {
299
+ background-color: rgb(0, 0, 187);
300
+ }
301
+ :global(.ansi-magenta-bg) {
302
+ background-color: rgb(187, 0, 187);
303
+ }
304
+ :global(.ansi-cyan-bg) {
305
+ background-color: rgb(0, 187, 187);
306
+ }
307
+ :global(.ansi-white-bg) {
308
+ background-color: rgb(255, 255, 255);
309
+ }
310
+
311
+ :global(.ansi-bright-black-bg) {
312
+ background-color: rgb(85, 85, 85);
313
+ }
314
+ :global(.ansi-bright-red-bg) {
315
+ background-color: rgb(255, 85, 85);
316
+ }
317
+ :global(.ansi-bright-green-bg) {
318
+ background-color: rgb(0, 255, 0);
319
+ }
320
+ :global(.ansi-bright-yellow-bg) {
321
+ background-color: rgb(255, 255, 85);
322
+ }
323
+ :global(.ansi-bright-blue-bg) {
324
+ background-color: rgb(85, 85, 255);
325
+ }
326
+ :global(.ansi-bright-magenta-bg) {
327
+ background-color: rgb(255, 85, 255);
328
+ }
329
+ :global(.ansi-bright-cyan-bg) {
330
+ background-color: rgb(85, 255, 255);
331
+ }
332
+ :global(.ansi-bright-white-bg) {
333
+ background-color: rgb(255, 255, 255);
334
+ }
335
+
336
+ /* Foreground colors for dark mode (Nord theme) */
337
+ :global(.dark) :global(.ansi-black-fg) {
338
+ color: rgb(46, 52, 64);
339
+ }
340
+ :global(.dark) :global(.ansi-red-fg) {
341
+ color: rgb(191, 97, 106);
342
+ }
343
+ :global(.dark) :global(.ansi-green-fg) {
344
+ color: rgb(163, 190, 140);
345
+ }
346
+ :global(.dark) :global(.ansi-yellow-fg) {
347
+ color: rgb(235, 203, 139);
348
+ }
349
+ :global(.dark) :global(.ansi-blue-fg) {
350
+ color: rgb(94, 129, 172);
351
+ }
352
+ :global(.dark) :global(.ansi-magenta-fg) {
353
+ color: rgb(180, 142, 173);
354
+ }
355
+ :global(.dark) :global(.ansi-cyan-fg) {
356
+ color: rgb(136, 192, 208);
357
+ }
358
+ :global(.dark) :global(.ansi-white-fg) {
359
+ color: rgb(216, 222, 233);
360
+ }
361
+
362
+ :global(.dark) :global(.ansi-bright-black-fg) {
363
+ color: rgb(67, 76, 94);
364
+ }
365
+ :global(.dark) :global(.ansi-bright-red-fg) {
366
+ color: rgb(191, 97, 106);
367
+ }
368
+ :global(.dark) :global(.ansi-bright-green-fg) {
369
+ color: rgb(163, 190, 140);
370
+ }
371
+ :global(.dark) :global(.ansi-bright-yellow-fg) {
372
+ color: rgb(235, 203, 139);
373
+ }
374
+ :global(.dark) :global(.ansi-bright-blue-fg) {
375
+ color: rgb(94, 129, 172);
376
+ }
377
+ :global(.dark) :global(.ansi-bright-magenta-fg) {
378
+ color: rgb(180, 142, 173);
379
+ }
380
+ :global(.dark) :global(.ansi-bright-cyan-fg) {
381
+ color: rgb(136, 192, 208);
382
+ }
383
+ :global(.dark) :global(.ansi-bright-white-fg) {
384
+ color: rgb(229, 233, 240);
385
+ }
386
+
387
+ /* Background colors for dark mode (Nord theme) */
388
+ :global(.dark) :global(.ansi-black-bg) {
389
+ background-color: rgb(46, 52, 64);
390
+ }
391
+ :global(.dark) :global(.ansi-red-bg) {
392
+ background-color: rgb(191, 97, 106);
393
+ }
394
+ :global(.dark) :global(.ansi-green-bg) {
395
+ background-color: rgb(163, 190, 140);
396
+ }
397
+ :global(.dark) :global(.ansi-yellow-bg) {
398
+ background-color: rgb(235, 203, 139);
399
+ }
400
+ :global(.dark) :global(.ansi-blue-bg) {
401
+ background-color: rgb(94, 129, 172);
402
+ }
403
+ :global(.dark) :global(.ansi-magenta-bg) {
404
+ background-color: rgb(180, 142, 173);
405
+ }
406
+ :global(.dark) :global(.ansi-cyan-bg) {
407
+ background-color: rgb(136, 192, 208);
408
+ }
409
+ :global(.dark) :global(.ansi-white-bg) {
410
+ background-color: rgb(216, 222, 233);
411
+ }
412
+
413
+ :global(.dark) :global(.ansi-bright-black-bg) {
414
+ background-color: rgb(67, 76, 94);
415
+ }
416
+ :global(.dark) :global(.ansi-bright-red-bg) {
417
+ background-color: rgb(191, 97, 106);
418
+ }
419
+ :global(.dark) :global(.ansi-bright-green-bg) {
420
+ background-color: rgb(163, 190, 140);
421
+ }
422
+ :global(.dark) :global(.ansi-bright-yellow-bg) {
423
+ background-color: rgb(235, 203, 139);
424
+ }
425
+ :global(.dark) :global(.ansi-bright-blue-bg) {
426
+ background-color: rgb(94, 129, 172);
427
+ }
428
+ :global(.dark) :global(.ansi-bright-magenta-bg) {
429
+ background-color: rgb(180, 142, 173);
430
+ }
431
+ :global(.dark) :global(.ansi-bright-cyan-bg) {
432
+ background-color: rgb(136, 192, 208);
433
+ }
434
+ :global(.dark) :global(.ansi-bright-white-bg) {
435
+ background-color: rgb(229, 233, 240);
436
+ }</style>
@@ -7,7 +7,9 @@ import type Editor from './Editor.svelte';
7
7
  declare const __propDef: {
8
8
  props: {
9
9
  mod: FlowModule;
10
- schema: Schema;
10
+ schema: Schema | {
11
+ properties?: Record<string, any>;
12
+ };
11
13
  pickableProperties: PickableProperties | undefined;
12
14
  lang: Script['language'];
13
15
  editor: Editor | undefined;
@@ -56,7 +56,7 @@ loadResourceTypes();
56
56
  {#each keys as argName, i (argName)}
57
57
  {#if Object.keys(schema.properties ?? {}).includes(argName)}
58
58
  <div class="flex gap-2">
59
- {#if typeof args == 'object' && schema?.properties[argName]}
59
+ {#if typeof args == 'object' && schema?.properties?.[argName]}
60
60
  <ArgInput
61
61
  {resourceTypes}
62
62
  minW={false}
@@ -66,7 +66,7 @@ loadResourceTypes();
66
66
  bind:value={args[argName]}
67
67
  type={schema.properties[argName].type}
68
68
  oneOf={schema.properties[argName].oneOf}
69
- required={schema.required.includes(argName)}
69
+ required={schema?.required?.includes(argName)}
70
70
  pattern={schema.properties[argName].pattern}
71
71
  bind:editor={editor[argName]}
72
72
  bind:valid={inputCheck[argName]}
@@ -4,7 +4,10 @@ import type { FlowModule } from '../gen';
4
4
  import type { PickableProperties } from './flows/previousResults';
5
5
  declare const __propDef: {
6
6
  props: {
7
- schema: Schema;
7
+ schema: Schema | {
8
+ properties?: Record<string, any>;
9
+ required?: string[];
10
+ };
8
11
  args?: Record<string, any> | undefined;
9
12
  mod: FlowModule;
10
13
  pickableProperties: PickableProperties | undefined;
@@ -31,6 +31,7 @@ function changeTenantId(tenant) {
31
31
  </script>
32
32
 
33
33
  <div class="flex flex-col gap-1">
34
+ <!-- svelte-ignore a11y-label-has-associated-control -->
34
35
  <label class="text-sm flex gap-4 items-center font-medium text-primary"
35
36
  ><div class="w-[120px]"><IconedResourceType {name} after={true} /></div><Toggle
36
37
  checked={enabled}
@@ -87,16 +88,16 @@ function changeTenantId(tenant) {
87
88
  </div>
88
89
  </CollapseLink>
89
90
  {:else if name == 'slack'}
90
- <CollapseLink text="Instructions">
91
- <div class="text-sm text-secondary border p-2">
92
- Create a new App <a
93
- href="https://api.slack.com/apps?new_app=1"
94
- target="_blank">in Slack API Console</a>.
95
- Pick "From an app manifest", then YAML and paste manifest template found on <a
96
- href="https://www.windmill.dev/docs/misc/setup_oauth#slack"
97
- target="_blank">Windmill Docs</a> and then paste Client ID and Client Secret here.
98
- </div>
99
- </CollapseLink>
91
+ <CollapseLink text="Instructions">
92
+ <div class="text-sm text-secondary border p-2">
93
+ Create a new App <a href="https://api.slack.com/apps?new_app=1" target="_blank"
94
+ >in Slack API Console</a
95
+ >. Pick "From an app manifest", then YAML and paste manifest template found on
96
+ <a href="https://www.windmill.dev/docs/misc/setup_oauth#slack" target="_blank"
97
+ >Windmill Docs</a
98
+ > and then paste Client ID and Client Secret here.
99
+ </div>
100
+ </CollapseLink>
100
101
  {:else if name == 'microsoft'}
101
102
  <CollapseLink text="Instructions">
102
103
  <div class="text-sm text-secondary border p-2">