windmill-components 1.13.27 → 1.22.42

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 (140) hide show
  1. package/components/AppConnect.svelte +281 -0
  2. package/components/AppConnect.svelte.d.ts +22 -0
  3. package/components/ArgInput.svelte +32 -24
  4. package/components/ArgInput.svelte.d.ts +6 -1
  5. package/components/Button.svelte +16 -7
  6. package/components/CenteredModal.svelte +30 -0
  7. package/components/CenteredModal.svelte.d.ts +19 -0
  8. package/components/DisplayResult.svelte +52 -46
  9. package/components/Editor.svelte +69 -64
  10. package/components/Editor.svelte.d.ts +3 -1
  11. package/components/EditorBar.svelte +204 -0
  12. package/components/EditorBar.svelte.d.ts +23 -0
  13. package/components/FlowBuilder.svelte +57 -110
  14. package/components/FlowBuilder.svelte.d.ts +0 -2
  15. package/components/FlowEditor.svelte +183 -65
  16. package/components/FlowEditor.svelte.d.ts +4 -4
  17. package/components/FlowJobResult.svelte +23 -0
  18. package/components/FlowJobResult.svelte.d.ts +17 -0
  19. package/components/FlowPreview.svelte +17 -28
  20. package/components/FlowPreview.svelte.d.ts +7 -1
  21. package/components/FlowStatusViewer.svelte +55 -25
  22. package/components/FlowStatusViewer.svelte.d.ts +1 -1
  23. package/components/FlowViewer.svelte +136 -0
  24. package/components/FlowViewer.svelte.d.ts +24 -0
  25. package/components/IconedResourceType.svelte +6 -4
  26. package/components/JobStatus.svelte +1 -1
  27. package/components/Modal.svelte +5 -3
  28. package/components/ModuleStep.svelte +129 -56
  29. package/components/ModuleStep.svelte.d.ts +4 -8
  30. package/components/ObjectResourceInput.svelte +0 -1
  31. package/components/Path.svelte +55 -9
  32. package/components/Path.svelte.d.ts +2 -0
  33. package/components/RadioButton.svelte +1 -1
  34. package/components/RadioButtonV2.svelte +33 -0
  35. package/components/RadioButtonV2.svelte.d.ts +20 -0
  36. package/components/ResourceEditor.svelte +19 -15
  37. package/components/ResourcePicker.svelte +2 -2
  38. package/components/ResourcePicker.svelte.d.ts +2 -2
  39. package/components/RunForm.svelte +2 -3
  40. package/components/SchemaForm.svelte +119 -121
  41. package/components/SchemaForm.svelte.d.ts +6 -4
  42. package/components/SchemaModal.svelte +1 -1
  43. package/components/SchemaModal.svelte.d.ts +1 -1
  44. package/components/SchemaViewer.svelte +1 -1
  45. package/components/ScriptBuilder.svelte +43 -62
  46. package/components/ScriptEditor.svelte +12 -189
  47. package/components/ScriptPicker.svelte +7 -18
  48. package/components/ScriptPicker.svelte.d.ts +1 -0
  49. package/components/Switch.svelte.d.ts +2 -2
  50. package/components/Toggle.svelte +34 -0
  51. package/components/Toggle.svelte.d.ts +28 -0
  52. package/components/Tooltip.svelte +53 -80
  53. package/components/Tooltip.svelte.d.ts +1 -5
  54. package/components/VariableEditor.svelte +11 -2
  55. package/components/flows/CopyFirstStepSchema.svelte +10 -0
  56. package/components/flows/CopyFirstStepSchema.svelte.d.ts +14 -0
  57. package/components/flows/DynamicInputHelpBox.svelte +72 -0
  58. package/components/flows/DynamicInputHelpBox.svelte.d.ts +14 -0
  59. package/components/flows/FlowInputs.svelte +27 -0
  60. package/components/flows/FlowInputs.svelte.d.ts +19 -0
  61. package/components/flows/FlowModuleHeader.svelte +92 -0
  62. package/components/flows/FlowModuleHeader.svelte.d.ts +22 -0
  63. package/components/flows/flowStore.d.ts +17 -0
  64. package/components/flows/flowStore.js +161 -0
  65. package/components/flows/pickers/FlowScriptPicker.svelte +11 -0
  66. package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +22 -0
  67. package/components/flows/pickers/PickHubScript.svelte +30 -0
  68. package/components/flows/pickers/PickHubScript.svelte.d.ts +18 -0
  69. package/components/flows/pickers/PickScript.svelte +38 -0
  70. package/components/flows/pickers/PickScript.svelte.d.ts +18 -0
  71. package/components/flows/utils.d.ts +17 -0
  72. package/components/flows/utils.js +143 -0
  73. package/components/propertyPicker/ObjectViewer.svelte +113 -0
  74. package/components/propertyPicker/ObjectViewer.svelte.d.ts +21 -0
  75. package/components/propertyPicker/OverlayPropertyPicker.svelte +69 -0
  76. package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +21 -0
  77. package/components/propertyPicker/PropPicker.svelte +24 -0
  78. package/components/propertyPicker/PropPicker.svelte.d.ts +18 -0
  79. package/components/propertyPicker/WarningMessage.svelte +43 -0
  80. package/components/propertyPicker/WarningMessage.svelte.d.ts +16 -0
  81. package/components/propertyPicker/utils.d.ts +2 -0
  82. package/components/propertyPicker/utils.js +40 -0
  83. package/gen/core/ApiError.d.ts +3 -1
  84. package/gen/core/ApiError.js +3 -1
  85. package/gen/core/OpenAPI.js +1 -1
  86. package/gen/core/request.js +2 -2
  87. package/gen/index.d.ts +4 -0
  88. package/gen/index.js +1 -0
  89. package/gen/models/CompletedJob.d.ts +3 -1
  90. package/gen/models/CompletedJob.js +1 -0
  91. package/gen/models/CreateResource.d.ts +1 -0
  92. package/gen/models/CreateVariable.d.ts +2 -0
  93. package/gen/models/FlowModule.d.ts +2 -0
  94. package/gen/models/FlowModuleValue.d.ts +14 -2
  95. package/gen/models/FlowModuleValue.js +7 -0
  96. package/gen/models/FlowStatusModule.d.ts +6 -0
  97. package/gen/models/ListableVariable.d.ts +2 -0
  98. package/gen/models/OpenFlow.d.ts +7 -0
  99. package/gen/models/OpenFlow.js +4 -0
  100. package/gen/models/QueuedJob.d.ts +2 -1
  101. package/gen/models/QueuedJob.js +1 -0
  102. package/gen/models/Resource.d.ts +1 -0
  103. package/gen/models/Script.d.ts +1 -0
  104. package/gen/models/SlackToken.d.ts +8 -0
  105. package/gen/models/SlackToken.js +4 -0
  106. package/gen/models/TokenResponse.d.ts +6 -0
  107. package/gen/models/TokenResponse.js +4 -0
  108. package/gen/services/AdminService.d.ts +6 -2
  109. package/gen/services/AuditService.d.ts +24 -8
  110. package/gen/services/FlowService.d.ts +50 -10
  111. package/gen/services/FlowService.js +26 -0
  112. package/gen/services/GranularAclService.d.ts +6 -2
  113. package/gen/services/GroupService.d.ts +18 -6
  114. package/gen/services/JobService.d.ts +167 -46
  115. package/gen/services/JobService.js +26 -2
  116. package/gen/services/OauthService.d.ts +104 -0
  117. package/gen/services/OauthService.js +133 -0
  118. package/gen/services/ResourceService.d.ts +39 -7
  119. package/gen/services/ResourceService.js +30 -0
  120. package/gen/services/ScheduleService.d.ts +36 -6
  121. package/gen/services/ScheduleService.js +30 -0
  122. package/gen/services/ScriptService.d.ts +77 -19
  123. package/gen/services/ScriptService.js +31 -1
  124. package/gen/services/UserService.d.ts +49 -11
  125. package/gen/services/UserService.js +17 -0
  126. package/gen/services/VariableService.d.ts +19 -4
  127. package/gen/services/VariableService.js +15 -0
  128. package/gen/services/WorkerService.d.ts +6 -2
  129. package/gen/services/WorkspaceService.d.ts +29 -24
  130. package/gen/services/WorkspaceService.js +8 -23
  131. package/logout.js +10 -3
  132. package/package.json +52 -23
  133. package/script_helpers.d.ts +4 -0
  134. package/script_helpers.js +70 -0
  135. package/scripts.d.ts +2 -1
  136. package/scripts.js +5 -5
  137. package/stores.d.ts +7 -0
  138. package/stores.js +12 -0
  139. package/utils.d.ts +28 -1
  140. package/utils.js +206 -0
@@ -0,0 +1,22 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { IconDefinition } from '@fortawesome/free-brands-svg-icons';
3
+ declare const __propDef: {
4
+ props: {
5
+ disabled?: boolean | undefined;
6
+ icon: IconDefinition;
7
+ label: string;
8
+ iconColor: string;
9
+ };
10
+ events: {
11
+ click: MouseEvent;
12
+ } & {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {};
16
+ };
17
+ export declare type FlowScriptPickerProps = typeof __propDef.props;
18
+ export declare type FlowScriptPickerEvents = typeof __propDef.events;
19
+ export declare type FlowScriptPickerSlots = typeof __propDef.slots;
20
+ export default class FlowScriptPicker extends SvelteComponentTyped<FlowScriptPickerProps, FlowScriptPickerEvents, FlowScriptPickerSlots> {
21
+ }
22
+ export {};
@@ -0,0 +1,30 @@
1
+ <script>import { faUserGroup } from '@fortawesome/free-solid-svg-icons';
2
+ import FlowScriptPicker from './FlowScriptPicker.svelte';
3
+ import ItemPicker from '../../ItemPicker.svelte';
4
+ import { hubScripts } from '../../../stores';
5
+ import { createEventDispatcher } from 'svelte';
6
+ export let isTrigger;
7
+ let items;
8
+ $: items = $hubScripts?.filter((x) => x.is_trigger == isTrigger) ?? [];
9
+ let itemPicker;
10
+ const dispatch = createEventDispatcher();
11
+ </script>
12
+
13
+ <ItemPicker
14
+ bind:this={itemPicker}
15
+ pickCallback={(path) => {
16
+ dispatch('pick', { path })
17
+ }}
18
+ itemName={'Script'}
19
+ extraField="summary"
20
+ loadItems={async () => {
21
+ return items
22
+ }}
23
+ />
24
+
25
+ <FlowScriptPicker
26
+ label={`Pick a ${isTrigger ? 'trigger ' : ''} script from the Hub`}
27
+ icon={faUserGroup}
28
+ iconColor="text-blue-500"
29
+ on:click={() => itemPicker.openModal()}
30
+ />
@@ -0,0 +1,18 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ isTrigger: boolean;
5
+ };
6
+ events: {
7
+ pick: CustomEvent<any>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export declare type PickHubScriptProps = typeof __propDef.props;
14
+ export declare type PickHubScriptEvents = typeof __propDef.events;
15
+ export declare type PickHubScriptSlots = typeof __propDef.slots;
16
+ export default class PickHubScript extends SvelteComponentTyped<PickHubScriptProps, PickHubScriptEvents, PickHubScriptSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,38 @@
1
+ <script>import ItemPicker from '../../ItemPicker.svelte';
2
+ import { faUserGroup } from '@fortawesome/free-solid-svg-icons';
3
+ import { ScriptService } from '../../../gen';
4
+ import { workspaceStore } from '../../../stores';
5
+ import { createEventDispatcher } from 'svelte';
6
+ import FlowScriptPicker from './FlowScriptPicker.svelte';
7
+ export let isTrigger;
8
+ let items = [];
9
+ let itemPicker;
10
+ const dispatch = createEventDispatcher();
11
+ async function loadItems() {
12
+ items = await ScriptService.listScripts({ workspace: $workspaceStore, isTrigger });
13
+ }
14
+ $: {
15
+ if ($workspaceStore) {
16
+ loadItems();
17
+ }
18
+ }
19
+ </script>
20
+
21
+ <ItemPicker
22
+ bind:this={itemPicker}
23
+ pickCallback={(path) => {
24
+ dispatch('pick', { path })
25
+ }}
26
+ itemName={'Script'}
27
+ extraField="summary"
28
+ loadItems={async () => {
29
+ return items
30
+ }}
31
+ />
32
+
33
+ <FlowScriptPicker
34
+ label={`Pick a ${isTrigger ? 'trigger ' : ''}script from your workspace`}
35
+ icon={faUserGroup}
36
+ iconColor="text-blue-500"
37
+ on:click={() => itemPicker.openModal()}
38
+ />
@@ -0,0 +1,18 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ isTrigger: boolean;
5
+ };
6
+ events: {
7
+ pick: CustomEvent<any>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export declare type PickScriptProps = typeof __propDef.props;
14
+ export declare type PickScriptEvents = typeof __propDef.events;
15
+ export declare type PickScriptSlots = typeof __propDef.slots;
16
+ export default class PickScript extends SvelteComponentTyped<PickScriptProps, PickScriptEvents, PickScriptSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { Schema } from '../../common';
2
+ import { FlowModuleValue, InputTransform, type Flow, type FlowModule } from '../../gen';
3
+ import type { FlowMode } from './flowStore';
4
+ export declare function flowToMode(flow: Flow, mode: FlowMode): Flow;
5
+ export declare function flattenForloopFlows(flow: Flow): Flow;
6
+ export declare function getTypeAsString(arg: any): string;
7
+ export declare function formatValue(arg: any): any;
8
+ export declare function getFirstStepSchema(flow: Flow): Promise<Schema>;
9
+ export declare function createInlineScriptModuleFromPath(path: string): Promise<FlowModuleValue>;
10
+ export declare function scrollIntoView(el: any): void;
11
+ export declare function loadSchemaFromModule(module: FlowModule): Promise<{
12
+ input_transform: Record<string, InputTransform>;
13
+ schema: Schema;
14
+ }>;
15
+ export declare function isCodeInjection(expr: string | undefined): boolean;
16
+ export declare function getCodeInjectionExpr(code: string, isRaw: boolean): string;
17
+ export declare function getDefaultExpr(i: number, key?: string): string;
@@ -0,0 +1,143 @@
1
+ import { FlowModuleValue, InputTransform, ScriptService } from '../../gen';
2
+ import { inferArgs } from '../../infer';
3
+ import { loadSchema } from '../../scripts';
4
+ import { emptySchema, getScriptByPath } from '../../utils';
5
+ export function flowToMode(flow, mode) {
6
+ if (mode == 'pull') {
7
+ const newFlow = JSON.parse(JSON.stringify(flow));
8
+ const triggerModule = newFlow.value.modules[0];
9
+ const oldModules = newFlow.value.modules.slice(1);
10
+ if (triggerModule) {
11
+ triggerModule.stop_after_if_expr = 'result.res1.length == 0';
12
+ triggerModule.skip_if_stopped = true;
13
+ }
14
+ newFlow.value.modules = newFlow.value.modules.slice(0, 1);
15
+ if (oldModules.length > 0) {
16
+ newFlow.value.modules.push({
17
+ input_transform: oldModules[0].input_transform,
18
+ value: {
19
+ type: FlowModuleValue.type.FORLOOPFLOW,
20
+ iterator: { type: InputTransform.type.JAVASCRIPT, expr: 'result.res1' },
21
+ value: {
22
+ modules: oldModules
23
+ }
24
+ }
25
+ });
26
+ }
27
+ return newFlow;
28
+ }
29
+ return flow;
30
+ }
31
+ export function flattenForloopFlows(flow) {
32
+ let newFlow = JSON.parse(JSON.stringify(flow));
33
+ if (newFlow.value.modules[1]?.value.type == FlowModuleValue.type.FORLOOPFLOW) {
34
+ const oldModules = newFlow.value.modules[1].value.value?.modules ?? [];
35
+ newFlow.value.modules = newFlow.value.modules.slice(0, 1);
36
+ newFlow.value.modules.push(...oldModules);
37
+ }
38
+ return newFlow;
39
+ }
40
+ export function getTypeAsString(arg) {
41
+ if (arg === null) {
42
+ return 'null';
43
+ }
44
+ return typeof arg;
45
+ }
46
+ export function formatValue(arg) {
47
+ if (getTypeAsString(arg) === 'string') {
48
+ return `"${arg}"`;
49
+ }
50
+ return arg;
51
+ }
52
+ export async function getFirstStepSchema(flow) {
53
+ const [firstModule] = flow.value.modules;
54
+ if (firstModule.value.type === FlowModuleValue.type.RAWSCRIPT) {
55
+ const { language, content } = firstModule.value;
56
+ if (language && content) {
57
+ const schema = emptySchema();
58
+ await inferArgs(language, content, schema);
59
+ return schema;
60
+ }
61
+ }
62
+ else if (firstModule.value.path) {
63
+ return await loadSchema(firstModule.value.path);
64
+ }
65
+ return emptySchema();
66
+ }
67
+ export async function createInlineScriptModuleFromPath(path) {
68
+ const { content, language } = await getScriptByPath(path);
69
+ return {
70
+ type: FlowModuleValue.type.RAWSCRIPT,
71
+ language: language,
72
+ content: content,
73
+ path
74
+ };
75
+ }
76
+ export function scrollIntoView(el) {
77
+ if (!el)
78
+ return;
79
+ el.scrollIntoView({
80
+ behavior: 'smooth',
81
+ block: 'start',
82
+ inline: 'nearest'
83
+ });
84
+ }
85
+ export async function loadSchemaFromModule(module) {
86
+ const isRaw = module?.value.type === FlowModuleValue.type.RAWSCRIPT;
87
+ if (isRaw || Boolean(module.value.path)) {
88
+ let schema;
89
+ if (isRaw) {
90
+ schema = emptySchema();
91
+ await inferArgs(module.value.language, module.value.content, schema);
92
+ }
93
+ else {
94
+ schema = await loadSchema(module.value.path);
95
+ }
96
+ const keys = Object.keys(schema?.properties ?? {});
97
+ let input_transform = module.input_transform;
98
+ if (JSON.stringify(Object.keys(schema?.properties ?? {}).sort()) !==
99
+ JSON.stringify(Object.keys(module.input_transform).sort())) {
100
+ input_transform = keys.reduce((accu, key) => {
101
+ accu[key] = {
102
+ type: 'static',
103
+ value: undefined
104
+ };
105
+ return accu;
106
+ }, {});
107
+ }
108
+ return {
109
+ input_transform: input_transform,
110
+ schema: schema ?? emptySchema()
111
+ };
112
+ }
113
+ return {
114
+ input_transform: {},
115
+ schema: emptySchema()
116
+ };
117
+ }
118
+ export function isCodeInjection(expr) {
119
+ if (!expr) {
120
+ return false;
121
+ }
122
+ const lines = expr.split('\n');
123
+ const [returnStatement] = lines.reverse();
124
+ const returnStatementRegex = new RegExp(/\$\{(.*)\}/);
125
+ if (returnStatementRegex.test(returnStatement)) {
126
+ const [_, argName] = returnStatement.split(returnStatementRegex);
127
+ return Boolean(argName);
128
+ }
129
+ return false;
130
+ }
131
+ export function getCodeInjectionExpr(code, isRaw) {
132
+ let expr = `\`${code}\``;
133
+ if (isRaw) {
134
+ expr = `JSON.parse(${expr})`;
135
+ }
136
+ return `import { previous_result, flow_input, step, variable, resource, params } from 'windmill'
137
+ ${expr}`;
138
+ }
139
+ export function getDefaultExpr(i, key = 'myfield') {
140
+ return `import { previous_result, flow_input, step, variable, resource, params } from 'windmill@${i}'
141
+
142
+ previous_result.${key}`;
143
+ }
@@ -0,0 +1,113 @@
1
+ <script>import { createEventDispatcher } from 'svelte';
2
+ import { formatValue, getTypeAsString } from '../flows/utils';
3
+ export let json;
4
+ export let level = 0;
5
+ export let isLast = true;
6
+ export let currentPath = '';
7
+ const collapsedSymbol = '...';
8
+ let keys;
9
+ let isArray;
10
+ let openBracket;
11
+ let closeBracket;
12
+ $: {
13
+ keys = getTypeAsString(json) === 'object' ? Object.keys(json) : [];
14
+ isArray = Array.isArray(json);
15
+ openBracket = isArray ? '[' : '{';
16
+ closeBracket = isArray ? ']' : '}';
17
+ }
18
+ $: collapsed = false;
19
+ function collapse() {
20
+ collapsed = !collapsed;
21
+ }
22
+ const dispatch = createEventDispatcher();
23
+ function computeKey(key) {
24
+ if (isArray) {
25
+ return `${currentPath}[${key}]`;
26
+ }
27
+ else {
28
+ if (currentPath) {
29
+ return `${currentPath}.${key}`;
30
+ }
31
+ else {
32
+ return key;
33
+ }
34
+ }
35
+ }
36
+ function selectProp(key) {
37
+ dispatch('select', computeKey(key));
38
+ }
39
+ </script>
40
+
41
+ {#if keys.length > 0}
42
+ <span class:hidden={collapsed}>
43
+ <span class="cursor-pointer hover:bg-slate-200" on:click={collapse}>{openBracket}</span>
44
+ <ul>
45
+ {#each keys as key, index}
46
+ <li class={getTypeAsString(json[key]) !== 'object' ? 'hover:bg-sky-100 py-2' : 'py-2'}>
47
+ {#if !isArray}
48
+ <span class="key">{key}:</span>
49
+ {/if}
50
+
51
+ {#if getTypeAsString(json[key]) === 'object'}
52
+ <svelte:self
53
+ json={json[key]}
54
+ level={level + 1}
55
+ isLast={index === keys.length - 1}
56
+ currentPath={computeKey(key)}
57
+ on:select
58
+ />
59
+ {:else}
60
+ <span class="val {getTypeAsString(json[key])}">
61
+ {formatValue(json[key])}
62
+ {#if index < keys.length - 1}
63
+ <span class="text-black">,</span>
64
+ {/if}
65
+ <button class="default-button-secondary" on:click={() => selectProp(key)}>
66
+ Select
67
+ </button>
68
+ </span>
69
+ {/if}
70
+ </li>
71
+ {/each}
72
+ </ul>
73
+ <span class="cursor-pointer hover:bg-slate-200" on:click={collapse}>{closeBracket}</span>
74
+ {#if !isLast}
75
+ <span class="text-black">,</span>
76
+ {/if}
77
+ </span>
78
+ <span class="cursor-pointer hover:bg-slate-200" class:hidden={!collapsed} on:click={collapse}>
79
+ {openBracket}{collapsedSymbol}{closeBracket}
80
+ </span>
81
+ {#if !isLast && collapsed}
82
+ <span class="text-black">,</span>
83
+ {/if}
84
+ {/if}
85
+
86
+ <style>
87
+ ul {
88
+ list-style: none;
89
+ padding-left: 1rem;
90
+ border-left: 1px dotted lightgray;
91
+ --tw-text-opacity: 1;
92
+ color: rgb(0 0 0 / var(--tw-text-opacity));
93
+ }
94
+
95
+ .hidden {
96
+ display: none;
97
+ }
98
+ .val {
99
+ --tw-text-opacity: 1;
100
+ color: rgb(0 0 0 / var(--tw-text-opacity));
101
+ }
102
+ .val.string {
103
+ --tw-text-opacity: 1;
104
+ color: rgb(101 163 13 / var(--tw-text-opacity));
105
+ }
106
+ .val.number {
107
+ --tw-text-opacity: 1;
108
+ color: rgb(234 88 12 / var(--tw-text-opacity));
109
+ }
110
+ .val.boolean {
111
+ --tw-text-opacity: 1;
112
+ color: rgb(8 145 178 / var(--tw-text-opacity));
113
+ }</style>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ json: Object;
5
+ level?: number | undefined;
6
+ isLast?: boolean | undefined;
7
+ currentPath?: string | undefined;
8
+ };
9
+ events: {
10
+ select: CustomEvent<any>;
11
+ } & {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {};
15
+ };
16
+ export declare type ObjectViewerProps = typeof __propDef.props;
17
+ export declare type ObjectViewerEvents = typeof __propDef.events;
18
+ export declare type ObjectViewerSlots = typeof __propDef.slots;
19
+ export default class ObjectViewer extends SvelteComponentTyped<ObjectViewerProps, ObjectViewerEvents, ObjectViewerSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,69 @@
1
+ <script>import { createEventDispatcher } from 'svelte';
2
+ import Overlay from 'svelte-overlay';
3
+ import PropPicker from './PropPicker.svelte';
4
+ import WarningMessage from './WarningMessage.svelte';
5
+ export let previousSchema;
6
+ export let disabled = false;
7
+ let isOpen = false;
8
+ const dispatch = createEventDispatcher();
9
+ function handleWindowKeyDown(event) {
10
+ if (event.key === 'Escape') {
11
+ isOpen = false;
12
+ }
13
+ }
14
+ function onMouseLeave(mouseEvent) {
15
+ const { offsetY } = mouseEvent;
16
+ const target = mouseEvent.target;
17
+ const down = offsetY >= target.clientHeight;
18
+ const up = offsetY <= 0;
19
+ const content = document.getElementsByClassName('content');
20
+ const overlayBottom = content.item(0)?.classList.contains('bottom-right');
21
+ if ((down && overlayBottom) || (up && !overlayBottom)) {
22
+ return;
23
+ }
24
+ isOpen = !isOpen;
25
+ }
26
+ </script>
27
+
28
+ {#if !disabled}
29
+ <Overlay
30
+ onWindowKeyDown={handleWindowKeyDown}
31
+ closeOnClickOutside
32
+ closeOnScroll
33
+ bind:isOpen
34
+ class="w-full"
35
+ style="z-index:unset"
36
+ >
37
+ <div
38
+ slot="parent"
39
+ let:toggle
40
+ on:mousemove={() => !isOpen && toggle()}
41
+ on:mouseleave={onMouseLeave}
42
+ >
43
+ <slot />
44
+ </div>
45
+
46
+ <div slot="content" class="content" let:toggle on:mouseleave={toggle} let:close>
47
+ {#if Boolean(previousSchema)}
48
+ <PropPicker
49
+ props={previousSchema}
50
+ on:select={(event) => {
51
+ isOpen = false
52
+ dispatch('select', event.detail)
53
+ }}
54
+ />
55
+ {:else}
56
+ <WarningMessage {close} />
57
+ {/if}
58
+ </div>
59
+ </Overlay>
60
+ {:else}
61
+ <slot />
62
+ {/if}
63
+
64
+ <style>
65
+ .content {
66
+ width: 100%;
67
+ --tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
68
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
69
+ }</style>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ previousSchema: Object | undefined;
5
+ disabled?: boolean | undefined;
6
+ };
7
+ events: {
8
+ select: CustomEvent<any>;
9
+ } & {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {
13
+ default: {};
14
+ };
15
+ };
16
+ export declare type OverlayPropertyPickerProps = typeof __propDef.props;
17
+ export declare type OverlayPropertyPickerEvents = typeof __propDef.events;
18
+ export declare type OverlayPropertyPickerSlots = typeof __propDef.slots;
19
+ export default class OverlayPropertyPicker extends SvelteComponentTyped<OverlayPropertyPickerProps, OverlayPropertyPickerEvents, OverlayPropertyPickerSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,24 @@
1
+ <script>import { derived, writable } from 'svelte/store';
2
+ import ObjectViewer from './ObjectViewer.svelte';
3
+ import { keepByKey } from './utils';
4
+ export let props = {};
5
+ const EMPTY_STRING = '';
6
+ const search = writable(EMPTY_STRING);
7
+ $: propsFiltered = derived(search, ($search) => {
8
+ if ($search === EMPTY_STRING) {
9
+ return props;
10
+ }
11
+ return keepByKey(props, $search);
12
+ });
13
+ </script>
14
+
15
+ <div class="relative">
16
+ <div class="p-3 bg-white rounded-lg border border-gray-200 shadow-md">
17
+ <input
18
+ bind:value={$search}
19
+ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg block w-full p-2 mb-2"
20
+ placeholder="Search prop..."
21
+ />
22
+ <ObjectViewer json={$propsFiltered} on:select />
23
+ </div>
24
+ </div>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ props?: Object | undefined;
5
+ };
6
+ events: {
7
+ select: CustomEvent<any>;
8
+ } & {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export declare type PropPickerProps = typeof __propDef.props;
14
+ export declare type PropPickerEvents = typeof __propDef.events;
15
+ export declare type PropPickerSlots = typeof __propDef.slots;
16
+ export default class PropPicker extends SvelteComponentTyped<PropPickerProps, PropPickerEvents, PropPickerSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,43 @@
1
+ <script>export let close;
2
+ </script>
3
+
4
+ <div class="relative">
5
+ <div class="p-3 bg-white rounded-lg border border-gray-200 shadow-md">
6
+ <div id="alert-4" class="flex p-4 bg-yellow-100 rounded-lg dark:bg-yellow-200" role="alert">
7
+ <svg
8
+ class="flex-shrink-0 w-5 h-5 text-yellow-700 dark:text-yellow-800"
9
+ fill="currentColor"
10
+ viewBox="0 0 20 20"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ ><path
13
+ fill-rule="evenodd"
14
+ d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"
15
+ clip-rule="evenodd"
16
+ /></svg
17
+ >
18
+ <div class="ml-3 text-sm font-medium text-yellow-700 dark:text-yellow-800">
19
+ The property picker is not available unless a preview is run on the previous step.
20
+ </div>
21
+ <button
22
+ type="button"
23
+ class="ml-auto -mx-1.5 -my-1.5 bg-yellow-100 text-yellow-500 rounded-lg focus:ring-2 focus:ring-yellow-400 p-1.5 hover:bg-yellow-200 inline-flex h-8 w-8 dark:bg-yellow-200 dark:text-yellow-600 dark:hover:bg-yellow-300"
24
+ data-dismiss-target="#alert-4"
25
+ aria-label="Close"
26
+ on:click={close}
27
+ >
28
+ <span class="sr-only">Close</span>
29
+ <svg
30
+ class="w-5 h-5"
31
+ fill="currentColor"
32
+ viewBox="0 0 20 20"
33
+ xmlns="http://www.w3.org/2000/svg"
34
+ ><path
35
+ fill-rule="evenodd"
36
+ d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
37
+ clip-rule="evenodd"
38
+ /></svg
39
+ >
40
+ </button>
41
+ </div>
42
+ </div>
43
+ </div>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ close: () => void;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export declare type WarningMessageProps = typeof __propDef.props;
12
+ export declare type WarningMessageEvents = typeof __propDef.events;
13
+ export declare type WarningMessageSlots = typeof __propDef.slots;
14
+ export default class WarningMessage extends SvelteComponentTyped<WarningMessageProps, WarningMessageEvents, WarningMessageSlots> {
15
+ }
16
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare function keepByKey(json: Object, key: string): Object;
2
+ export declare function getTypeAsString(arg: any): string;
@@ -0,0 +1,40 @@
1
+ function filterByKey(obj, key) {
2
+ if (Object(obj) !== obj) {
3
+ return obj;
4
+ }
5
+ else if (Array.isArray(obj)) {
6
+ return obj.map((o) => filterByKey(o, key));
7
+ }
8
+ else {
9
+ return Object.fromEntries(Object.entries(obj)
10
+ .filter(([k, v]) => !k.includes(key))
11
+ .map(([k, v]) => [k, filterByKey(v, key)]));
12
+ }
13
+ }
14
+ function diff(target, source) {
15
+ if (Array.isArray(target)) {
16
+ return target;
17
+ }
18
+ const result = {};
19
+ Object.keys(target).forEach((key) => {
20
+ if (typeof source[key] === 'object') {
21
+ const difference = diff(target[key], source[key]);
22
+ if (Object.keys(difference).length > 0) {
23
+ result[key] = difference;
24
+ }
25
+ }
26
+ else if (source[key] !== target[key]) {
27
+ result[key] = target[key];
28
+ }
29
+ });
30
+ return result;
31
+ }
32
+ export function keepByKey(json, key) {
33
+ return diff(json, filterByKey(json, key));
34
+ }
35
+ export function getTypeAsString(arg) {
36
+ if (arg === null) {
37
+ return 'null';
38
+ }
39
+ return typeof arg;
40
+ }
@@ -1,8 +1,10 @@
1
+ import type { ApiRequestOptions } from './ApiRequestOptions';
1
2
  import type { ApiResult } from './ApiResult';
2
3
  export declare class ApiError extends Error {
3
4
  readonly url: string;
4
5
  readonly status: number;
5
6
  readonly statusText: string;
6
7
  readonly body: any;
7
- constructor(response: ApiResult, message: string);
8
+ readonly request: ApiRequestOptions;
9
+ constructor(request: ApiRequestOptions, response: ApiResult, message: string);
8
10
  }