windmill-components 1.700.2 → 1.700.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 (75) hide show
  1. package/dist/appPolicy/myFunction.es.js +1337 -0
  2. package/dist/sharedUtils/common.d.ts +2 -5
  3. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -2
  4. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +3 -14
  5. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +1 -1
  6. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +1 -12
  7. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +2 -68
  8. package/dist/sharedUtils/components/apps/inputType.d.ts +2 -4
  9. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -2
  10. package/dist/sharedUtils/components/dbTypes.d.ts +0 -3
  11. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +1 -1
  12. package/dist/sharedUtils/components/raw_apps/utils.d.ts +1 -1
  13. package/dist/sharedUtils/components/triggers/utils.d.ts +3 -2
  14. package/dist/sharedUtils/gen/schemas.gen.d.ts +71 -915
  15. package/dist/sharedUtils/gen/services.gen.d.ts +23 -329
  16. package/dist/sharedUtils/gen/types.gen.d.ts +141 -1870
  17. package/dist/sharedUtils/hub.d.ts +0 -1
  18. package/dist/sharedUtils/jsr.json +5 -5
  19. package/dist/sharedUtils/lib.d.ts +1 -1
  20. package/dist/sharedUtils/lib.es.js +79 -241
  21. package/dist/sharedUtils/package.json +11 -11
  22. package/dist/sharedUtils/stores.d.ts +0 -1
  23. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +1 -32
  24. package/dist/sharedUtils/utils.d.ts +4 -19
  25. package/package/components/DisplayResultControlBar.svelte +26 -11
  26. package/package/components/JobArgs.svelte +43 -24
  27. package/package/components/ShareModal.svelte.d.ts +1 -1
  28. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +0 -3
  29. package/package/components/copilot/CustomAIPrompts.svelte +3 -2
  30. package/package/components/copilot/chat/AIChatInput.svelte +2 -0
  31. package/package/components/copilot/chat/AIChatManager.svelte.js +52 -14
  32. package/package/components/copilot/chat/CreatedResourceActionDrawers.svelte +15 -0
  33. package/package/components/copilot/chat/ToolMessageActions.svelte +4 -2
  34. package/package/components/copilot/chat/app/core.js +2 -30
  35. package/package/components/copilot/chat/flow/core.js +13 -351
  36. package/package/components/copilot/chat/flow/editableFlowJson.d.ts +52 -0
  37. package/package/components/copilot/chat/flow/editableFlowJson.js +328 -0
  38. package/package/components/copilot/chat/flow/inlineScriptsUtils.js +2 -2
  39. package/package/components/copilot/chat/global/core.d.ts +5 -0
  40. package/package/components/copilot/chat/global/core.js +1739 -0
  41. package/package/components/copilot/chat/global/core.test.d.ts +1 -0
  42. package/package/components/copilot/chat/global/core.test.js +123 -0
  43. package/package/components/copilot/chat/global/deployRequests.d.ts +7 -0
  44. package/package/components/copilot/chat/global/deployRequests.js +76 -0
  45. package/package/components/copilot/chat/global/deployRequests.test.d.ts +1 -0
  46. package/package/components/copilot/chat/global/deployRequests.test.js +142 -0
  47. package/package/components/copilot/chat/global/draftStore.svelte.d.ts +55 -0
  48. package/package/components/copilot/chat/global/draftStore.svelte.js +78 -0
  49. package/package/components/copilot/chat/global/draftStore.test.d.ts +1 -0
  50. package/package/components/copilot/chat/global/draftStore.test.js +44 -0
  51. package/package/components/copilot/chat/global/gate.d.ts +1 -0
  52. package/package/components/copilot/chat/global/gate.js +27 -0
  53. package/package/components/copilot/chat/shared.d.ts +16 -2
  54. package/package/components/copilot/chat/shared.js +40 -0
  55. package/package/components/copilot/chat/workspaceToolsZod.gen.d.ts +28 -9
  56. package/package/components/copilot/chat/workspaceToolsZod.gen.js +19 -0
  57. package/package/components/raw_apps/templates.d.ts +77 -0
  58. package/package/components/raw_apps/templates.js +618 -0
  59. package/package/components/runs/runsFilter.d.ts +1 -1
  60. package/package/components/settings/AIPromptsModal.svelte +5 -2
  61. package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte.d.ts +1 -1
  62. package/package/gen/core/OpenAPI.js +1 -1
  63. package/package/gen/schemas.gen.d.ts +37 -355
  64. package/package/gen/schemas.gen.js +39 -359
  65. package/package/gen/services.gen.d.ts +4 -280
  66. package/package/gen/services.gen.js +7 -565
  67. package/package/gen/types.gen.d.ts +77 -1135
  68. package/package/system_prompts/index.d.ts +2 -0
  69. package/package/system_prompts/index.js +8 -0
  70. package/package/system_prompts/prompts.d.ts +2 -0
  71. package/package/system_prompts/prompts.js +381 -0
  72. package/package/utils_deployable.d.ts +5 -318
  73. package/package.json +1 -1
  74. package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
  75. package/dist/sharedUtils/components/icons/index.d.ts +0 -101
@@ -0,0 +1,618 @@
1
+ const reactIndex = `
2
+ import React from 'react'
3
+
4
+ import { createRoot } from 'react-dom/client'
5
+ import App from './App'
6
+
7
+ const root = createRoot(document.getElementById('root')!);
8
+ root.render(<App/>);
9
+ `;
10
+ const appTsx = `import React, { useState } from 'react'
11
+ import { backend } from './wmill'
12
+ import './index.css'
13
+
14
+ const App = () => {
15
+ const [value, setValue] = useState(undefined as string | undefined)
16
+ const [loading, setLoading] = useState(false)
17
+
18
+ async function runA() {
19
+ setLoading(true)
20
+ try {
21
+ setValue(await backend.a({ x: 42 }))
22
+ } catch (e) {
23
+ console.error()
24
+ }
25
+ setLoading(false)
26
+ }
27
+
28
+ return <div style={{ width: "100%" }}>
29
+ <h1>hello world</h1>
30
+
31
+ <button style={{ marginTop: "2px" }} onClick={runA}>Run 'a'</button>
32
+
33
+ <div style={{ marginTop: "20px", width: '250px' }} className='myclass'>
34
+ {loading ? 'Loading ...' : value ?? 'Click button to see value here'}
35
+ </div>
36
+ </div>;
37
+ };
38
+
39
+ export default App;
40
+ `;
41
+ const appSvelte = `<script lang="ts">
42
+ import { backend } from "./wmill";
43
+
44
+ let name = "world";
45
+ let result = "";
46
+
47
+ async function callScript() {
48
+ result = await backend.a({ x: name });
49
+ }
50
+ </script>
51
+
52
+ <main>
53
+ <h1>Hello {name}</h1>
54
+
55
+ <input type="text" bind:value={name} placeholder="Enter a name" />
56
+ <button on:click={callScript}>Call runnable 'a'</button>
57
+
58
+ {#if result}
59
+ <p>Result: {result}</p>
60
+ {/if}
61
+ </main>
62
+
63
+ <style>
64
+ h1 {
65
+ font-size: 1.5rem;
66
+ }
67
+ </style>`;
68
+ const indexSvelte = `
69
+ import { mount } from 'svelte';
70
+ import App from './App.svelte'
71
+ import './index.css'
72
+
73
+ const app = mount(App, { target: document.getElementById("root")! });
74
+
75
+ export default app;
76
+ `;
77
+ const appVue = `<template>
78
+ <h1>Hello {{ msg }}</h1>
79
+ </template>
80
+
81
+ <script setup>
82
+ import { ref } from 'vue';
83
+ const msg = ref('world');
84
+ </script>`;
85
+ const indexVue = `import { createApp } from 'vue'
86
+ import App from './App.vue'
87
+ import "./index.css";
88
+
89
+ createApp(App).mount('#root')`;
90
+ const indexCss = `.myclass {
91
+ border: 1px solid gray;
92
+ padding: 2px;
93
+ }`;
94
+ export const react19Template = {
95
+ '/index.tsx': reactIndex,
96
+ '/App.tsx': appTsx,
97
+ '/index.css': indexCss,
98
+ '/package.json': `{
99
+ "dependencies": {
100
+ "react": "19.0.0",
101
+ "react-dom": "19.0.0",
102
+ "windmill-client": "^1"
103
+ },
104
+ "devDependencies": {
105
+ "@types/react-dom": "^19.0.0",
106
+ "@types/react": "^19.0.0"
107
+ }
108
+ }`
109
+ };
110
+ export const react18Template = {
111
+ '/index.tsx': reactIndex,
112
+ '/App.tsx': appTsx,
113
+ '/index.css': indexCss,
114
+ '/package.json': `{
115
+ "dependencies": {
116
+ "react": "18.3.1",
117
+ "react-dom": "18.3.1"
118
+ },
119
+ "devDependencies": {
120
+ "@types/react-dom": "^19.0.0",
121
+ "@types/react": "^19.0.0"
122
+ }
123
+ }`
124
+ };
125
+ export const svelte5Template = {
126
+ '/index.ts': indexSvelte,
127
+ '/App.svelte': appSvelte,
128
+ '/index.css': indexCss,
129
+ '/package.json': `{
130
+ "dependencies": {
131
+ "svelte": "^5.55.5",
132
+ "windmill-client": "^1"
133
+ }
134
+ }`
135
+ };
136
+ export const vueTemplate = {
137
+ '/index.ts': indexVue,
138
+ '/App.vue': appVue,
139
+ '/index.css': indexCss,
140
+ '/package.json': `{
141
+ "dependencies": {
142
+ "core-js": "3.26.1",
143
+ "vue": "3.5.13"
144
+ }
145
+ }`
146
+ };
147
+ export const FRAMEWORK_TEMPLATES = {
148
+ react19: react19Template,
149
+ react18: react18Template,
150
+ svelte5: svelte5Template,
151
+ vue: vueTemplate
152
+ };
153
+ export const STARTER_RUNNABLE_KEY = 'a';
154
+ // Matches the starter runnable that the apps_raw/add page seeds, so the
155
+ // React/Svelte demo button (`backend.a({ x: 42 })`) works on first render.
156
+ export const STARTER_RUNNABLE = {
157
+ name: 'a',
158
+ fields: {},
159
+ type: 'inline',
160
+ inlineScript: {
161
+ content: '// import * as wmill from "windmill-client"\n\nexport async function main(x: string) {\n return x\n}\n',
162
+ language: 'bun',
163
+ schema: {
164
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
165
+ properties: {
166
+ x: {
167
+ default: null,
168
+ description: '',
169
+ originalType: 'string',
170
+ type: 'string'
171
+ }
172
+ },
173
+ required: ['x'],
174
+ type: 'object'
175
+ }
176
+ }
177
+ };
178
+ export const appVueRouter = `
179
+ <template>
180
+ <div class="container">
181
+ <!-- Navigation tabs -->
182
+ <nav class="tabs">
183
+ <button
184
+ v-for="tab in tabs"
185
+ :key="tab.id"
186
+ :class="{ active: currentTab === tab.id }"
187
+ @click="changeTab(tab.id)"
188
+ >
189
+ {{ tab.name }}
190
+ </button>
191
+ </nav>
192
+
193
+ <!-- Content sections -->
194
+ <div class="content">
195
+ <div v-if="currentTab === 'home'" class="tab-content">
196
+ <h2>Home</h2>
197
+ <p>Welcome to the home tab!</p>
198
+ <!-- Nested navigation example -->
199
+ <div class="sub-nav">
200
+ <button
201
+ v-for="subItem in ['latest', 'popular']"
202
+ :key="subItem"
203
+ :class="{ active: currentSort === subItem }"
204
+ @click="changeSort(subItem)"
205
+ >
206
+ {{ subItem }}
207
+ </button>
208
+ </div>
209
+ </div>
210
+
211
+ <div v-else-if="currentTab === 'about'" class="tab-content">
212
+ <h2>About</h2>
213
+ <p>This is the about section</p>
214
+ </div>
215
+
216
+ <div v-else-if="currentTab === 'contact'" class="tab-content">
217
+ <h2>Contact</h2>
218
+ <p>Contact information here</p>
219
+ </div>
220
+ </div>
221
+
222
+ <!-- Debug info -->
223
+ <div class="debug">
224
+ <p>Current Tab: {{ currentTab }}</p>
225
+ <p>Current Sort: {{ currentSort }}</p>
226
+ <p>Current Hash: {{ currentHash }}</p>
227
+ </div>
228
+ </div>
229
+ </template>
230
+
231
+ <script setup>
232
+ import { ref, onMounted, onUnmounted } from 'vue';
233
+
234
+ // Available tabs
235
+ const tabs = [
236
+ { id: 'home', name: 'Home' },
237
+ { id: 'about', name: 'About' },
238
+ { id: 'contact', name: 'Contact' }
239
+ ];
240
+
241
+ const currentTab = ref('home');
242
+ const currentSort = ref('latest');
243
+ const currentHash = ref('');
244
+
245
+ // Navigation functions
246
+ function changeTab(tabId) {
247
+ currentTab.value = tabId;
248
+ updateHash();
249
+ }
250
+
251
+ function changeSort(sort) {
252
+ currentSort.value = sort;
253
+ updateHash();
254
+ }
255
+
256
+ function updateHash() {
257
+ const params = new URLSearchParams();
258
+ params.set('tab', currentTab.value);
259
+ if (currentSort.value !== 'latest') {
260
+ params.set('sort', currentSort.value);
261
+ }
262
+ window.location.hash = params.toString();
263
+ currentHash.value = window.location.hash;
264
+ }
265
+
266
+ function parseHash() {
267
+ const params = new URLSearchParams(window.location.hash.slice(1));
268
+ currentTab.value = params.get('tab') || 'home';
269
+ currentSort.value = params.get('sort') || 'latest';
270
+ currentHash.value = window.location.hash;
271
+ }
272
+
273
+ // Hash change handler
274
+ function handleHashChange() {
275
+ parseHash();
276
+ }
277
+
278
+ onMounted(() => {
279
+ if (window.location.hash) {
280
+ parseHash();
281
+ } else {
282
+ updateHash();
283
+ }
284
+ window.addEventListener('hashchange', handleHashChange);
285
+ });
286
+
287
+ onUnmounted(() => {
288
+ window.removeEventListener('hashchange', handleHashChange);
289
+ });
290
+ </script>
291
+
292
+ <style scoped>
293
+ .container {
294
+ max-width: 800px;
295
+ margin: 0 auto;
296
+ padding: 20px;
297
+ }
298
+
299
+ .tabs {
300
+ display: flex;
301
+ gap: 10px;
302
+ margin-bottom: 20px;
303
+ }
304
+
305
+ button {
306
+ padding: 8px 16px;
307
+ border: 1px solid #ddd;
308
+ background: #fff;
309
+ border-radius: 4px;
310
+ cursor: pointer;
311
+ }
312
+
313
+ button.active {
314
+ background: #4CAF50;
315
+ color: white;
316
+ border-color: #4CAF50;
317
+ }
318
+
319
+ .content {
320
+ padding: 20px;
321
+ border: 1px solid #ddd;
322
+ border-radius: 4px;
323
+ }
324
+
325
+ .tab-content {
326
+ margin-bottom: 20px;
327
+ }
328
+
329
+ .sub-nav {
330
+ margin-top: 10px;
331
+ }
332
+
333
+ .debug {
334
+ margin-top: 20px;
335
+ padding: 10px;
336
+ background: #f5f5f5;
337
+ border-radius: 4px;
338
+ font-size: 0.9em;
339
+ color: #666;
340
+ }
341
+ </style>`;
342
+ export const appSvelteRouter = `
343
+ <script>
344
+ import { onMount, onDestroy } from 'svelte';
345
+
346
+ // Available tabs
347
+ const tabs = [
348
+ { id: 'home', name: 'Home' },
349
+ { id: 'about', name: 'About' },
350
+ { id: 'contact', name: 'Contact' }
351
+ ];
352
+
353
+ let currentTab = 'home';
354
+ let currentSort = 'latest';
355
+ let currentHash = '';
356
+
357
+ // Navigation functions
358
+ function changeTab(tabId) {
359
+ currentTab = tabId;
360
+ updateHash();
361
+ }
362
+
363
+ function changeSort(sort) {
364
+ currentSort = sort;
365
+ updateHash();
366
+ }
367
+
368
+ function updateHash() {
369
+ const params = new URLSearchParams();
370
+ params.set('tab', currentTab);
371
+ if (currentSort !== 'latest') {
372
+ params.set('sort', currentSort);
373
+ }
374
+ window.location.hash = params.toString();
375
+ currentHash = window.location.hash;
376
+ }
377
+
378
+ function parseHash() {
379
+ const params = new URLSearchParams(window.location.hash.slice(1));
380
+ currentTab = params.get('tab') || 'home';
381
+ currentSort = params.get('sort') || 'latest';
382
+ currentHash = window.location.hash;
383
+ }
384
+
385
+ // Hash change handler
386
+ function handleHashChange() {
387
+ parseHash();
388
+ }
389
+
390
+ onMount(() => {
391
+ if (window.location.hash) {
392
+ parseHash();
393
+ } else {
394
+ updateHash();
395
+ }
396
+ window.addEventListener('hashchange', handleHashChange);
397
+ });
398
+
399
+ onDestroy(() => {
400
+ window.removeEventListener('hashchange', handleHashChange);
401
+ });
402
+ </script>
403
+
404
+ <div class="container">
405
+ <!-- Navigation tabs -->
406
+ <nav class="tabs">
407
+ {#each tabs as tab}
408
+ <button
409
+ class:active={currentTab === tab.id}
410
+ on:click={() => changeTab(tab.id)}
411
+ >
412
+ {tab.name}
413
+ </button>
414
+ {/each}
415
+ </nav>
416
+
417
+ <!-- Content sections -->
418
+ <div class="content">
419
+ {#if currentTab === 'home'}
420
+ <div class="tab-content">
421
+ <h2>Home</h2>
422
+ <p>Welcome to the home tab!</p>
423
+ <!-- Nested navigation example -->
424
+ <div class="sub-nav">
425
+ {#each ['latest', 'popular'] as subItem}
426
+ <button
427
+ class:active={currentSort === subItem}
428
+ on:click={() => changeSort(subItem)}
429
+ >
430
+ {subItem}
431
+ </button>
432
+ {/each}
433
+ </div>
434
+ </div>
435
+ {:else if currentTab === 'about'}
436
+ <div class="tab-content">
437
+ <h2>About</h2>
438
+ <p>This is the about section</p>
439
+ </div>
440
+ {:else if currentTab === 'contact'}
441
+ <div class="tab-content">
442
+ <h2>Contact</h2>
443
+ <p>Contact information here</p>
444
+ </div>
445
+ {/if}
446
+ </div>
447
+
448
+ <!-- Debug info -->
449
+ <div class="debug">
450
+ <p>Current Tab: {currentTab}</p>
451
+ <p>Current Sort: {currentSort}</p>
452
+ <p>Current Hash: {currentHash}</p>
453
+ </div>
454
+ </div>
455
+
456
+ <style>
457
+ .container {
458
+ max-width: 800px;
459
+ margin: 0 auto;
460
+ padding: 20px;
461
+ }
462
+
463
+ .tabs {
464
+ display: flex;
465
+ gap: 10px;
466
+ margin-bottom: 20px;
467
+ }
468
+
469
+ button {
470
+ padding: 8px 16px;
471
+ border: 1px solid #ddd;
472
+ background: #fff;
473
+ border-radius: 4px;
474
+ cursor: pointer;
475
+ }
476
+
477
+ button.active {
478
+ background: #4CAF50;
479
+ color: white;
480
+ border-color: #4CAF50;
481
+ }
482
+
483
+ .content {
484
+ padding: 20px;
485
+ border: 1px solid #ddd;
486
+ border-radius: 4px;
487
+ }
488
+
489
+ .tab-content {
490
+ margin-bottom: 20px;
491
+ }
492
+
493
+ .sub-nav {
494
+ margin-top: 10px;
495
+ }
496
+
497
+ .debug {
498
+ margin-top: 20px;
499
+ padding: 10px;
500
+ background: #f5f5f5;
501
+ border-radius: 4px;
502
+ font-size: 0.9em;
503
+ color: #666;
504
+ }
505
+ </style>`;
506
+ export const appReactRouter = `
507
+ import React, { useState, useEffect } from 'react';
508
+
509
+ const tabs = [
510
+ { id: 'home', name: 'Home' },
511
+ { id: 'about', name: 'About' },
512
+ { id: 'contact', name: 'Contact' }
513
+ ];
514
+
515
+ const App = () => {
516
+ const [currentTab, setCurrentTab] = useState('home');
517
+ const [currentSort, setCurrentSort] = useState('latest');
518
+ const [currentHash, setCurrentHash] = useState('');
519
+
520
+ const updateHash = (newTab?: string, newSort?: string) => {
521
+ const params = new URLSearchParams();
522
+ params.set('tab', newTab ?? currentTab);
523
+ if ((newSort ?? currentSort) !== 'latest') {
524
+ params.set('sort', newSort ?? currentSort);
525
+ }
526
+ window.location.hash = params.toString();
527
+ setCurrentHash(window.location.hash);
528
+ if (newTab) setCurrentTab(newTab);
529
+ if (newSort) setCurrentSort(newSort);
530
+ };
531
+
532
+ const parseHash = () => {
533
+ const params = new URLSearchParams(window.location.hash.slice(1));
534
+ setCurrentTab(params.get('tab') || 'home');
535
+ setCurrentSort(params.get('sort') || 'latest');
536
+ setCurrentHash(window.location.hash);
537
+ };
538
+
539
+ useEffect(() => {
540
+ if (!window.location.hash) {
541
+ updateHash(currentTab, currentSort);
542
+ } else {
543
+ parseHash();
544
+ }
545
+
546
+ const handleHashChange = () => parseHash();
547
+ window.addEventListener('hashchange', handleHashChange);
548
+ return () => window.removeEventListener('hashchange', handleHashChange);
549
+ }, []);
550
+
551
+ return (
552
+ <div className="max-w-3xl mx-auto p-5">
553
+ <nav className="flex gap-3 mb-5">
554
+ {tabs.map(tab => (
555
+ <button
556
+ key={tab.id}
557
+ onClick={() => updateHash(tab.id)}
558
+ className={\`px-4 py-2 border rounded-md cursor-pointer
559
+ $\{currentTab === tab.id
560
+ ? 'bg-green-500 text-white border-green-500'
561
+ : 'bg-white border-gray-300 hover:bg-gray-50'}\`}
562
+ >
563
+ {tab.name}
564
+ </button>
565
+ ))}
566
+ </nav>
567
+
568
+ <div className="p-5 border rounded-md">
569
+ {currentTab === 'home' && (
570
+ <div className="mb-5">
571
+ <h2 className="text-xl font-bold">Home</h2>
572
+ <p>Welcome to the home tab!</p>
573
+
574
+ <div className="mt-3 flex gap-3">
575
+ {['latest', 'popular'].map(sort => (
576
+ <button
577
+ key={sort}
578
+ onClick={() => updateHash(currentTab, sort)}
579
+ className={\`px-4 py-2 border rounded-md cursor-pointer
580
+ $\{
581
+ currentSort === sort
582
+ ? 'bg-green-500 text-white border-green-500'
583
+ : 'bg-white border-gray-300 hover:bg-gray-50'
584
+ }\`}
585
+ >
586
+ {sort}
587
+ </button>
588
+ ))}
589
+ </div>
590
+ </div>
591
+ )}
592
+
593
+ {currentTab === 'about' && (
594
+ <div>
595
+ <h2 className="text-xl font-bold">About</h2>
596
+ <p>This is the about section</p>
597
+ </div>
598
+ )}
599
+
600
+ {currentTab === 'contact' && (
601
+ <div>
602
+ <h2 className="text-xl font-bold">Contact</h2>
603
+ <p>Contact information here</p>
604
+ </div>
605
+ )}
606
+ </div>
607
+
608
+ <div className="mt-5 p-3 bg-gray-100 rounded-md text-sm text-gray-600">
609
+ <p>Current Tab: {currentTab}</p>
610
+ <p>Current Sort: {currentSort}</p>
611
+ <p>Current Hash: {currentHash}</p>
612
+ </div>
613
+ </div>
614
+ );
615
+ };
616
+
617
+ export default App
618
+ `;
@@ -178,7 +178,7 @@ export declare function buildRunsFilterSearchbarSchema({ paths, usernames, folde
178
178
  label: string;
179
179
  icon: typeof Zap;
180
180
  options: {
181
- label: any;
181
+ label: "Google" | "Schedule" | "HTTP" | "WebSocket" | "Postgres" | "Kafka" | "NATS" | "MQTT" | "SQS" | "GCP Pub/Sub" | "Email" | "Webhook" | "Default Email";
182
182
  value: JobTriggerKind;
183
183
  }[];
184
184
  allowNegative: true;
@@ -2,7 +2,7 @@
2
2
  import Button from '../common/button/Button.svelte';
3
3
  import Label from '../Label.svelte';
4
4
  import TextInput from '../text_input/TextInput.svelte';
5
- import { AIMode } from '../copilot/chat/AIChatManager.svelte';
5
+ import { AIMode, getVisibleAIModes } from '../copilot/chat/AIChatManager.svelte';
6
6
  const MAX_CUSTOM_PROMPT_LENGTH = 5000;
7
7
  let { open = $bindable(false), customPrompts = $bindable(), onSave, onReset, hasChanges, scope = 'user' } = $props();
8
8
  const placeholders = {
@@ -11,6 +11,7 @@ const placeholders = {
11
11
  [AIMode.APP]: 'Enter custom instructions for UI and app development',
12
12
  [AIMode.NAVIGATOR]: 'Enter custom instructions for navigation and guidance',
13
13
  [AIMode.API]: 'Enter custom instructions for API interactions and integrations',
14
+ [AIMode.GLOBAL]: 'Enter custom instructions for workspace-wide draft assistance',
14
15
  [AIMode.ASK]: 'Enter custom instructions for general questions and assistance'
15
16
  };
16
17
  const modeLabels = {
@@ -19,8 +20,10 @@ const modeLabels = {
19
20
  [AIMode.APP]: 'App Mode',
20
21
  [AIMode.NAVIGATOR]: 'Navigator Mode',
21
22
  [AIMode.API]: 'API Mode',
23
+ [AIMode.GLOBAL]: 'Global Mode',
22
24
  [AIMode.ASK]: 'Ask Mode'
23
25
  };
26
+ let visibleModes = $derived(getVisibleAIModes());
24
27
  function handleSave() {
25
28
  onSave?.();
26
29
  open = false;
@@ -52,7 +55,7 @@ function handleReset() {
52
55
  {/if}
53
56
  </div>
54
57
 
55
- {#each Object.values(AIMode) as mode}
58
+ {#each visibleModes as mode (mode)}
56
59
  <div class="flex flex-col gap-2 pb-4 last:border-b-0">
57
60
  <Label label={modeLabels[mode]} for={`custom-prompt-${mode}`}>
58
61
  <TextInput
@@ -11,6 +11,6 @@ interface Props {
11
11
  event_type_filters?: string[];
12
12
  path?: string;
13
13
  }
14
- declare const AzureTriggerEditorConfigSection: import("svelte").Component<Props, {}, "azure_mode" | "scope_resource_id" | "subscription_name" | "azure_resource_path" | "topic_name" | "event_type_filters" | "isValid">;
14
+ declare const AzureTriggerEditorConfigSection: import("svelte").Component<Props, {}, "azure_resource_path" | "azure_mode" | "scope_resource_id" | "topic_name" | "subscription_name" | "event_type_filters" | "isValid">;
15
15
  type AzureTriggerEditorConfigSection = ReturnType<typeof AzureTriggerEditorConfigSection>;
16
16
  export default AzureTriggerEditorConfigSection;
@@ -21,7 +21,7 @@ export const OpenAPI = {
21
21
  PASSWORD: undefined,
22
22
  TOKEN: undefined,
23
23
  USERNAME: undefined,
24
- VERSION: '1.699.0',
24
+ VERSION: '1.683.0',
25
25
  WITH_CREDENTIALS: false,
26
26
  interceptors: {
27
27
  request: new Interceptors(),