windmill-components 1.531.0 → 1.532.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 (46) hide show
  1. package/package/components/ArgInput.svelte +44 -1
  2. package/package/components/EditableSchemaForm.svelte +27 -18
  3. package/package/components/EditableSchemaForm.svelte.d.ts +1 -0
  4. package/package/components/Editor.svelte +2 -2
  5. package/package/components/Editor.svelte.d.ts +1 -0
  6. package/package/components/EditorBar.svelte +2 -2
  7. package/package/components/EditorBar.svelte.d.ts +1 -0
  8. package/package/components/FieldHeader.svelte +1 -1
  9. package/package/components/FlowWrapper.svelte +3 -2
  10. package/package/components/ModuleTest.svelte +4 -1
  11. package/package/components/ResourceEditor.svelte +4 -0
  12. package/package/components/ScriptEditor.svelte +1 -0
  13. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  14. package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
  15. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
  16. package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
  17. package/package/components/copilot/chat/AIChat.svelte +2 -4
  18. package/package/components/copilot/chat/AIChatInput.svelte +4 -3
  19. package/package/components/copilot/chat/AIChatManager.svelte.js +21 -9
  20. package/package/components/copilot/chat/AvailableContextList.svelte +115 -24
  21. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +1 -0
  22. package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
  23. package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
  24. package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
  25. package/package/components/copilot/chat/ContextManager.svelte.js +102 -15
  26. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  27. package/package/components/copilot/chat/context.d.ts +14 -1
  28. package/package/components/copilot/chat/context.js +1 -0
  29. package/package/components/copilot/chat/flow/FlowAIChat.svelte +1 -1
  30. package/package/components/copilot/chat/flow/core.d.ts +2 -1
  31. package/package/components/copilot/chat/flow/core.js +52 -18
  32. package/package/components/copilot/chat/script/core.d.ts +2 -2
  33. package/package/components/copilot/chat/script/core.js +51 -122
  34. package/package/components/copilot/chat/shared.d.ts +13 -2
  35. package/package/components/copilot/chat/shared.js +155 -4
  36. package/package/components/flows/FlowEditor.svelte +12 -0
  37. package/package/components/flows/FlowModuleIcon.svelte +39 -0
  38. package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
  39. package/package/components/flows/content/FlowModuleComponent.svelte +2 -0
  40. package/package/components/flows/map/MapItem.svelte +8 -39
  41. package/package/components/schema/FlowPropertyEditor.svelte +75 -17
  42. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  43. package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
  44. package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
  45. package/package/utils.d.ts +1 -1
  46. package/package.json +13 -13
@@ -13,6 +13,8 @@ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
13
13
  import Button from '../common/button/Button.svelte';
14
14
  import { Pen, Plus, Trash2 } from 'lucide-svelte';
15
15
  import Popover from '../meltComponents/Popover.svelte';
16
+ import ResourcePicker from '../ResourcePicker.svelte';
17
+ import Tooltip from '../Tooltip.svelte';
16
18
  let { format = $bindable(undefined), contentEncoding = undefined, type = undefined, oneOf = $bindable(undefined), required = false, pattern = undefined, password = undefined, variableEditor = undefined, itemPicker = undefined, nullable = $bindable(undefined), disabled = $bindable(undefined), defaultValue = $bindable(undefined), propsNames = [], showExpr = $bindable(undefined), extra = {}, customErrorMessage = undefined, itemsType = undefined, properties = $bindable(undefined), order = $bindable(undefined), requiredProperty = $bindable(undefined), displayWebhookWarning = true } = $props();
17
19
  let oneOfSelected = $state(undefined);
18
20
  const dispatch = createEventDispatcher();
@@ -56,8 +58,15 @@ function renameVariant(name, selected) {
56
58
  variantName = '';
57
59
  }
58
60
  }
59
- let initialObjectSelected = $state(Object.keys(properties ?? {}).length == 0 ? 'resource' : 'custom-object');
61
+ let initialObjectSelected = $state(format === 'json-schema'
62
+ ? 'json-schema'
63
+ : format?.startsWith('jsonschema-')
64
+ ? 'custom-object'
65
+ : Object.keys(properties ?? {}).length == 0
66
+ ? 'resource'
67
+ : 'custom-object');
60
68
  let isDynSelect = $derived(format?.startsWith('dynselect-') ?? false);
69
+ let customObjectSelected = $state(format?.startsWith('jsonschema-') ? 'json-schema-resource' : 'editor');
61
70
  </script>
62
71
 
63
72
  <div class="flex flex-col gap-2">
@@ -224,33 +233,82 @@ let isDynSelect = $derived(format?.startsWith('dynselect-') ?? false);
224
233
  <Tabs
225
234
  bind:selected={initialObjectSelected}
226
235
  on:selected={(e) => {
227
- if (e.detail === 'custom-object') {
236
+ if (e.detail === 'json-schema') {
237
+ format = 'json-schema'
238
+ } else {
228
239
  format = ''
229
240
  }
230
241
  }}
231
242
  >
232
243
  <Tab value="resource">Resource</Tab>
233
244
  <Tab value="custom-object">Custom Object</Tab>
245
+ <Tab value="json-schema">
246
+ JSON Schema
247
+ <Tooltip>
248
+ This displays a JSON schema editor, useful when a JSON schema input is expected.
249
+ </Tooltip>
250
+ </Tab>
234
251
  {#snippet content()}
235
252
  <div class="pt-2">
236
253
  <TabContent value="custom-object">
237
- <EditableSchemaDrawer
238
- bind:schema={
239
- () => {
240
- return {
241
- properties: properties,
242
- order: order,
243
- required: requiredProperty
254
+ <ToggleButtonGroup
255
+ bind:selected={customObjectSelected}
256
+ class="mb-2"
257
+ on:selected={(e) => {
258
+ if (e.detail === 'editor') {
259
+ format = undefined
260
+ } else {
261
+ properties = undefined
262
+ order = undefined
263
+ requiredProperty = undefined
264
+ }
265
+ }}
266
+ >
267
+ {#snippet children({ item })}
268
+ <ToggleButton value="editor" label="Editor" {item} />
269
+ <ToggleButton
270
+ value="json-schema-resource"
271
+ label="JSON Schema Resource"
272
+ {item}
273
+ tooltip="Select a JSON schema resource to specify the object's properties"
274
+ showTooltipIcon
275
+ />
276
+ {/snippet}
277
+ </ToggleButtonGroup>
278
+ {#if customObjectSelected === 'editor'}
279
+ <EditableSchemaDrawer
280
+ bind:schema={
281
+ () => {
282
+ return {
283
+ properties: properties,
284
+ order: order,
285
+ required: requiredProperty
286
+ }
287
+ },
288
+ (v) => {
289
+ properties = v.properties
290
+ order = v.order
291
+ requiredProperty = v.required
292
+ dispatch('schemaChange')
244
293
  }
245
- },
246
- (v) => {
247
- properties = v.properties
248
- order = v.order
249
- requiredProperty = v.required
250
- dispatch('schemaChange')
251
294
  }
252
- }
253
- />
295
+ />
296
+ {:else if customObjectSelected === 'json-schema-resource'}
297
+ <ResourcePicker
298
+ resourceType="json_schema"
299
+ bind:value={
300
+ () => {
301
+ if (format?.startsWith('jsonschema-')) {
302
+ return format.substring('jsonschema-'.length)
303
+ }
304
+ return undefined
305
+ },
306
+ (v) => {
307
+ format = 'jsonschema-' + v
308
+ }
309
+ }
310
+ />
311
+ {/if}
254
312
  </TabContent>
255
313
 
256
314
  <TabContent value="resource">
@@ -46,6 +46,6 @@ declare const PropertyEditor: $$__sveltets_2_IsomorphicComponent<Props, {
46
46
  [evt: string]: CustomEvent<any>;
47
47
  }, {}, {
48
48
  focus: () => void;
49
- }, "description" | "title" | "properties" | "placeholder" | "pattern" | "extra" | "oneOf" | "format" | "order" | "enum_" | "contentEncoding" | "itemsType" | "customErrorMessage">;
49
+ }, "description" | "title" | "properties" | "placeholder" | "pattern" | "extra" | "oneOf" | "format" | "order" | "enum_" | "contentEncoding" | "customErrorMessage" | "itemsType">;
50
50
  type PropertyEditor = InstanceType<typeof PropertyEditor>;
51
51
  export default PropertyEditor;
@@ -0,0 +1,2 @@
1
+ export declare function getJsonSchemaFromResource(path: string, workspace: string): Promise<any>;
2
+ export declare function clearJsonSchemaResourceCache(path: string, workspace: string): Promise<void>;
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import { AppService } from '../../gen';
3
+ import { sendUserToast } from '../../utils';
4
+ let loadedJsonSchemaResources = $state({});
5
+ const jsonSchemaResourceSchema = z.object({
6
+ schema: z.record(z.string(), z.any())
7
+ });
8
+ export async function getJsonSchemaFromResource(path, workspace) {
9
+ if (loadedJsonSchemaResources[workspace]?.[path]) {
10
+ return loadedJsonSchemaResources[workspace][path];
11
+ }
12
+ try {
13
+ const resourceValue = await AppService.getPublicResource({
14
+ path,
15
+ workspace
16
+ });
17
+ const parsedResource = jsonSchemaResourceSchema.safeParse(resourceValue);
18
+ if (parsedResource.success) {
19
+ const workspaceResources = loadedJsonSchemaResources[workspace];
20
+ if (!workspaceResources) {
21
+ loadedJsonSchemaResources[workspace] = {};
22
+ }
23
+ loadedJsonSchemaResources[workspace][path] = parsedResource.data.schema;
24
+ return parsedResource.data.schema;
25
+ }
26
+ else {
27
+ console.error('Invalid JSON schema resource:', parsedResource.error);
28
+ sendUserToast('Invalid JSON schema resource: ' + parsedResource.error, true);
29
+ }
30
+ }
31
+ catch (err) {
32
+ console.error(err);
33
+ sendUserToast('Could not load JSON schema resource: ' + err, true);
34
+ }
35
+ }
36
+ export async function clearJsonSchemaResourceCache(path, workspace) {
37
+ if (loadedJsonSchemaResources[workspace]?.[path]) {
38
+ delete loadedJsonSchemaResources[workspace][path];
39
+ }
40
+ }
@@ -97,7 +97,7 @@ export declare function removeMarkdown(text: string): string;
97
97
  export declare function truncate(s: string, n: number, suffix?: string): string;
98
98
  export declare function truncateRev(s: string, n: number, prefix?: string): string;
99
99
  export declare function isString(value: any): value is string | String;
100
- export type InputCat = 'string' | 'email' | 'number' | 'boolean' | 'list' | 'resource-object' | 'enum' | 'date' | 'base64' | 'resource-string' | 'object' | 'sql' | 'yaml' | 'currency' | 'oneOf' | 'dynselect';
100
+ export type InputCat = 'string' | 'email' | 'number' | 'boolean' | 'list' | 'resource-object' | 'enum' | 'date' | 'base64' | 'resource-string' | 'object' | 'sql' | 'yaml' | 'currency' | 'oneOf' | 'dynselect' | 'json-schema';
101
101
  export declare namespace DynamicSelect {
102
102
  type HelperScript = {
103
103
  type: 'inline';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windmill-components",
3
- "version": "1.531.0",
3
+ "version": "1.532.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build",
@@ -78,13 +78,13 @@
78
78
  "type": "module",
79
79
  "dependencies": {
80
80
  "@aws-crypto/sha256-js": "^4.0.0",
81
- "@codingame/monaco-vscode-configuration-service-override": "~19.1.4",
82
- "@codingame/monaco-vscode-editor-api": "~19.1.4",
83
- "@codingame/monaco-vscode-standalone-css-language-features": "~19.1.4",
84
- "@codingame/monaco-vscode-standalone-html-language-features": "~19.1.4",
85
- "@codingame/monaco-vscode-standalone-json-language-features": "~19.1.4",
86
- "@codingame/monaco-vscode-standalone-languages": "~19.1.4",
87
- "@codingame/monaco-vscode-standalone-typescript-language-features": "~19.1.4",
81
+ "@codingame/monaco-vscode-configuration-service-override": "~20.2.1",
82
+ "@codingame/monaco-vscode-editor-api": "~20.2.1",
83
+ "@codingame/monaco-vscode-standalone-css-language-features": "~20.2.1",
84
+ "@codingame/monaco-vscode-standalone-html-language-features": "~20.2.1",
85
+ "@codingame/monaco-vscode-standalone-json-language-features": "~20.2.1",
86
+ "@codingame/monaco-vscode-standalone-languages": "~20.2.1",
87
+ "@codingame/monaco-vscode-standalone-typescript-language-features": "~20.2.1",
88
88
  "@json2csv/plainjs": "^7.0.6",
89
89
  "@leeoniya/ufuzzy": "^1.0.8",
90
90
  "@popperjs/core": "^2.11.6",
@@ -117,10 +117,10 @@
117
117
  "lru-cache": "^11.1.0",
118
118
  "lucide-svelte": "^0.399.0",
119
119
  "minimatch": "^10.0.1",
120
- "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~19.1.4",
121
- "monaco-editor-wrapper": "6.10.0",
120
+ "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~20.2.1",
121
+ "monaco-editor-wrapper": "6.12.0",
122
122
  "monaco-graphql": "=1.6.0",
123
- "monaco-languageclient": "9.9.0",
123
+ "monaco-languageclient": "9.11.0",
124
124
  "monaco-vim": "^0.4.1",
125
125
  "ol": "^7.4.0",
126
126
  "openai": "^4.87.1",
@@ -137,10 +137,10 @@
137
137
  "svelte-infinite-loading": "^1.4.0",
138
138
  "svelte-tiny-virtual-list": "^2.0.5",
139
139
  "tailwind-merge": "^1.13.2",
140
- "vscode": "npm:@codingame/monaco-vscode-extension-api@~19.1.4",
140
+ "vscode": "npm:@codingame/monaco-vscode-extension-api@~20.2.1",
141
141
  "vscode-languageclient": "~9.0.1",
142
142
  "vscode-uri": "~3.1.0",
143
- "vscode-ws-jsonrpc": "~3.4.0",
143
+ "vscode-ws-jsonrpc": "~3.5.0",
144
144
  "windmill-parser-wasm-csharp": "1.510.1",
145
145
  "windmill-parser-wasm-go": "1.510.1",
146
146
  "windmill-parser-wasm-java": "1.510.1",