windmill-components 1.555.0 → 1.558.1

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 (150) hide show
  1. package/package/components/AIAgentLogViewer.svelte.d.ts +3 -3
  2. package/package/components/AIProviderPicker.svelte.d.ts +3 -3
  3. package/package/components/ArgInput.svelte +2 -0
  4. package/package/components/DBManager.svelte.d.ts +3 -3
  5. package/package/components/DBManagerDrawer.svelte.d.ts +3 -3
  6. package/package/components/DBSchemaExplorer.svelte.d.ts +3 -3
  7. package/package/components/DBTable.svelte.d.ts +3 -3
  8. package/package/components/DBTableEditor.svelte +9 -12
  9. package/package/components/DBTableEditor.svelte.d.ts +3 -3
  10. package/package/components/DateTimeInput.svelte +19 -13
  11. package/package/components/DateTimeInput.svelte.d.ts +5 -0
  12. package/package/components/DucklakePicker.svelte +32 -0
  13. package/package/components/DucklakePicker.svelte.d.ts +13 -0
  14. package/package/components/Editor.svelte +1 -1
  15. package/package/components/EditorBar.svelte +14 -1
  16. package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
  17. package/package/components/FlowGraphViewerStep.svelte +1 -1
  18. package/package/components/FlowPreviewContent.svelte +1 -1
  19. package/package/components/HighlightCode.svelte +21 -10
  20. package/package/components/HighlightCode.svelte.d.ts +12 -22
  21. package/package/components/InputTransformForm.svelte +9 -41
  22. package/package/components/InstanceSetting.svelte +1 -6
  23. package/package/components/ResourceEditor.svelte +1 -1
  24. package/package/components/ResourcePicker.svelte +0 -5
  25. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +50 -34
  26. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +7 -5
  27. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +2 -2
  28. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +2 -2
  29. package/package/components/apps/components/display/dbtable/DeleteRow.svelte.d.ts +3 -2
  30. package/package/components/apps/components/display/dbtable/InsertRow.svelte +13 -7
  31. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +6 -3
  32. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte.d.ts +2 -1
  33. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +2 -2
  34. package/package/components/apps/components/display/dbtable/UpdateCell.svelte.d.ts +3 -2
  35. package/package/components/apps/components/display/dbtable/queries/count.d.ts +2 -1
  36. package/package/components/apps/components/display/dbtable/queries/count.js +28 -18
  37. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  38. package/package/components/apps/components/display/dbtable/queries/createTable.js +1 -1
  39. package/package/components/apps/components/display/dbtable/queries/delete.d.ts +2 -1
  40. package/package/components/apps/components/display/dbtable/queries/delete.js +19 -10
  41. package/package/components/apps/components/display/dbtable/queries/insert.d.ts +2 -1
  42. package/package/components/apps/components/display/dbtable/queries/insert.js +16 -10
  43. package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -1
  44. package/package/components/apps/components/display/dbtable/queries/select.js +20 -16
  45. package/package/components/apps/components/display/dbtable/queries/update.d.ts +2 -1
  46. package/package/components/apps/components/display/dbtable/queries/update.js +19 -10
  47. package/package/components/apps/components/display/dbtable/utils.d.ts +1 -1
  48. package/package/components/apps/components/display/dbtable/utils.js +12 -3
  49. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +9 -1
  50. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  51. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +2 -1
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  53. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +2 -1
  54. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +1 -0
  55. package/package/components/apps/components/display/table/AppAggridTable.svelte +9 -1
  56. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  57. package/package/components/apps/components/display/table/AppAggridTableEe.svelte +2 -1
  58. package/package/components/apps/components/display/table/AppAggridTableEe.svelte.d.ts +1 -0
  59. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -1
  60. package/package/components/apps/components/inputs/AppDateInput.svelte +1 -0
  61. package/package/components/apps/editor/AppEditor.svelte +6 -1
  62. package/package/components/apps/editor/AppEditorHeader.svelte +12 -8
  63. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  64. package/package/components/apps/editor/component/ComponentInner.svelte +4 -0
  65. package/package/components/apps/editor/component/components.d.ts +16 -0
  66. package/package/components/apps/editor/component/components.js +17 -1
  67. package/package/components/apps/editor/settingsPanel/AGChartRichEditor.svelte.d.ts +3 -3
  68. package/package/components/apps/editor/settingsPanel/CSSMigrationModal.svelte.d.ts +3 -3
  69. package/package/components/apps/editor/settingsPanel/ChartJSRichEditor.svelte.d.ts +3 -3
  70. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +23 -23
  71. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +7 -2
  72. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -0
  73. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +2 -1
  74. package/package/components/apps/editor/settingsPanel/inputEditor/DBTableSelect.svelte.d.ts +3 -3
  75. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +10 -0
  76. package/package/components/apps/inputType.d.ts +2 -2
  77. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  78. package/package/components/common/button/ConnectionButton.svelte +12 -14
  79. package/package/components/common/button/ConnectionButton.svelte.d.ts +5 -18
  80. package/package/components/copilot/AIFormAssistant.svelte.d.ts +3 -3
  81. package/package/components/copilot/AIFormSettings.svelte.d.ts +3 -3
  82. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -3
  83. package/package/components/copilot/StepInputsGen.svelte +1 -1
  84. package/package/components/copilot/TestAIKey.svelte.d.ts +3 -3
  85. package/package/components/copilot/chat/AIChat.svelte.d.ts +3 -3
  86. package/package/components/copilot/chat/AIChatDisplay.svelte.d.ts +3 -3
  87. package/package/components/copilot/chat/AIChatInlineWidget.svelte.d.ts +3 -3
  88. package/package/components/copilot/chat/AIChatInput.svelte.d.ts +3 -3
  89. package/package/components/copilot/chat/AIChatMessage.svelte.d.ts +3 -3
  90. package/package/components/copilot/chat/ContextElementBadge.svelte +2 -2
  91. package/package/components/copilot/chat/flow/AIChangesWarningModal.svelte.d.ts +3 -3
  92. package/package/components/copilot/chat/flow/FlowAIButton.svelte.d.ts +3 -3
  93. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -1
  94. package/package/components/copilot/chat/flow/FlowAIChat.svelte.d.ts +3 -3
  95. package/package/components/copilot/chat/script/CodeDisplay.svelte +30 -9
  96. package/package/components/copilot/chat/script/core.d.ts +2 -1
  97. package/package/components/copilot/chat/script/core.js +6 -1
  98. package/package/components/details/DetailPageLayout.svelte +11 -3
  99. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  100. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -4
  101. package/package/components/flows/content/FlowInput.svelte +1 -1
  102. package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
  103. package/package/components/flows/content/FlowLoop.svelte +143 -10
  104. package/package/components/flows/conversations/FlowChatInterface.svelte +110 -0
  105. package/package/components/flows/{FlowChatInterface.svelte.d.ts → conversations/FlowChatInterface.svelte.d.ts} +1 -1
  106. package/package/components/flows/conversations/FlowChatManager.svelte.d.ts +52 -0
  107. package/package/components/flows/conversations/FlowChatManager.svelte.js +422 -0
  108. package/package/components/flows/conversations/FlowChatMessage.svelte +68 -0
  109. package/package/components/flows/{FlowChatMessage.svelte.d.ts → conversations/FlowChatMessage.svelte.d.ts} +2 -4
  110. package/package/components/flows/{FlowConversationsSidebar.svelte → conversations/FlowConversationsSidebar.svelte} +6 -6
  111. package/package/components/flows/flowInfers.js +1 -1
  112. package/package/components/flows/scheduleUtils.js +2 -1
  113. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +3 -3
  114. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +3 -3
  115. package/package/components/icons/CACertificate.svelte.d.ts +3 -3
  116. package/package/components/icons/MSSqlServerIcon.svelte.d.ts +3 -3
  117. package/package/components/icons/MSTeamsIcon.svelte.d.ts +3 -3
  118. package/package/components/icons/OracleDBIcon.svelte.d.ts +3 -3
  119. package/package/components/icons/PHPIcon.svelte.d.ts +3 -3
  120. package/package/components/icons/QRCodeIcon.svelte.d.ts +3 -3
  121. package/package/components/instanceSettings.js +11 -2
  122. package/package/components/runs/JobsLoader.svelte +3 -3
  123. package/package/components/runs/RunRow.svelte +1 -1
  124. package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -3
  125. package/package/components/settings/AIUserSettings.svelte.d.ts +3 -3
  126. package/package/components/sidebar/SidebarContent.svelte +2 -2
  127. package/package/components/text_input/TextInput.svelte.d.ts +1 -1
  128. package/package/components/triggers/http/OpenAPISpecGenerator.svelte.d.ts +3 -3
  129. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +42 -1
  130. package/package/components/vscode.js +16 -12
  131. package/package/components/wizards/ChartJSWizard.svelte.d.ts +3 -3
  132. package/package/components/wizards/DBExplorerWizard.svelte.d.ts +3 -3
  133. package/package/components/wizards/LoggedWizardResult.svelte +95 -0
  134. package/package/components/wizards/LoggedWizardResult.svelte.d.ts +17 -0
  135. package/package/components/workspaceSettings/AISettings.svelte.d.ts +3 -3
  136. package/package/components/workspaceSettings/DucklakeSettings.svelte +223 -89
  137. package/package/gen/core/OpenAPI.js +1 -1
  138. package/package/gen/schemas.gen.d.ts +73 -5
  139. package/package/gen/schemas.gen.js +73 -5
  140. package/package/gen/services.gen.d.ts +8 -8
  141. package/package/gen/services.gen.js +14 -12
  142. package/package/gen/types.gen.d.ts +69 -18
  143. package/package/svelte5Utils.svelte.d.ts +1 -0
  144. package/package/svelte5Utils.svelte.js +6 -0
  145. package/package/utils.js +2 -5
  146. package/package.json +13 -15
  147. package/package/components/flows/FlowChatInterface.svelte +0 -404
  148. package/package/components/flows/FlowChatMessage.svelte +0 -41
  149. package/package/components/meltComponents/Menubar.svelte.d.ts +0 -503
  150. /package/package/components/flows/{FlowConversationsSidebar.svelte.d.ts → conversations/FlowConversationsSidebar.svelte.d.ts} +0 -0
@@ -8,6 +8,6 @@ interface Props {
8
8
  storedToolCallJobs?: Record<number, Job>;
9
9
  onToolJobLoaded?: (job: Job, idx: number) => void;
10
10
  }
11
- declare const AiAgentLogViewer: import("svelte").Component<Props, {}, "">;
12
- type AiAgentLogViewer = ReturnType<typeof AiAgentLogViewer>;
13
- export default AiAgentLogViewer;
11
+ declare const AIAgentLogViewer: import("svelte").Component<Props, {}, "">;
12
+ type AIAgentLogViewer = ReturnType<typeof AIAgentLogViewer>;
13
+ export default AIAgentLogViewer;
@@ -10,6 +10,6 @@ interface Props {
10
10
  disabled?: boolean;
11
11
  actions?: Snippet;
12
12
  }
13
- declare const AiProviderPicker: import("svelte").Component<Props, {}, "value">;
14
- type AiProviderPicker = ReturnType<typeof AiProviderPicker>;
15
- export default AiProviderPicker;
13
+ declare const AIProviderPicker: import("svelte").Component<Props, {}, "value">;
14
+ type AIProviderPicker = ReturnType<typeof AIProviderPicker>;
15
+ export default AIProviderPicker;
@@ -1125,6 +1125,8 @@ onDestroy(() => {
1125
1125
  {:else if inputCat == 'date'}
1126
1126
  {#if format === 'date'}
1127
1127
  <DateInput {disabled} {autofocus} bind:value dateFormat={extra?.['dateFormat']} />
1128
+ {:else if format === 'naive-date-time'}
1129
+ <DateTimeInput {disabled} useDropdown {autofocus} bind:value timezone="naive" />
1128
1130
  {:else}
1129
1131
  <DateTimeInput {disabled} useDropdown {autofocus} bind:value />
1130
1132
  {/if}
@@ -16,6 +16,6 @@ type Props = {
16
16
  selectedSchemaKey?: string;
17
17
  }) => DBTableEditorProps;
18
18
  };
19
- declare const DbManager: import("svelte").Component<Props, {}, "">;
20
- type DbManager = ReturnType<typeof DbManager>;
21
- export default DbManager;
19
+ declare const DBManager: import("svelte").Component<Props, {}, "">;
20
+ type DBManager = ReturnType<typeof DBManager>;
21
+ export default DBManager;
@@ -1,7 +1,7 @@
1
1
  import { type DbInput } from './dbOps';
2
- declare const DbManagerDrawer: import("svelte").Component<Record<string, never>, {
2
+ declare const DBManagerDrawer: import("svelte").Component<Record<string, never>, {
3
3
  openDrawer: (nInput: DbInput) => void;
4
4
  closeDrawer: () => void;
5
5
  }, "">;
6
- type DbManagerDrawer = ReturnType<typeof DbManagerDrawer>;
7
- export default DbManagerDrawer;
6
+ type DBManagerDrawer = ReturnType<typeof DBManagerDrawer>;
7
+ export default DBManagerDrawer;
@@ -2,6 +2,6 @@ import { type DBSchema } from '../stores';
2
2
  type Props = {
3
3
  dbSchema: DBSchema;
4
4
  };
5
- declare const DbSchemaExplorer: import("svelte").Component<Props, {}, "">;
6
- type DbSchemaExplorer = ReturnType<typeof DbSchemaExplorer>;
7
- export default DbSchemaExplorer;
5
+ declare const DBSchemaExplorer: import("svelte").Component<Props, {}, "">;
6
+ type DBSchemaExplorer = ReturnType<typeof DBSchemaExplorer>;
7
+ export default DBSchemaExplorer;
@@ -5,6 +5,6 @@ import './apps/components/display/table/theme/windmill-theme.css';
5
5
  type Props = {
6
6
  dbTableOps: IDbTableOps;
7
7
  };
8
- declare const DbTable: import("svelte").Component<Props, {}, "">;
9
- type DbTable = ReturnType<typeof DbTable>;
10
- export default DbTable;
8
+ declare const DBTable: import("svelte").Component<Props, {}, "">;
9
+ type DBTable = ReturnType<typeof DBTable>;
10
+ export default DBTable;
@@ -46,10 +46,11 @@ import { twMerge } from 'tailwind-merge';
46
46
  import DarkModeObserver from './DarkModeObserver.svelte';
47
47
  import Select from './select/Select.svelte';
48
48
  import { safeSelectItems } from './select/utils.svelte';
49
+ import TextInput from './text_input/TextInput.svelte';
49
50
  const { onConfirm, dbType, previewSql, dbSchema, currentSchema } = $props();
50
51
  const columnTypes = DB_TYPES[dbType];
51
52
  const defaultColumnType = {
52
- postgresql: 'VARCHAR',
53
+ postgresql: 'BIGSERIAL',
53
54
  snowflake: 'varchar',
54
55
  ms_sql_server: 'varchar',
55
56
  bigquery: 'string',
@@ -83,9 +84,8 @@ let darkMode = $state(false);
83
84
  <div class="flex-1 overflow-y-auto flex flex-col gap-6">
84
85
  <label>
85
86
  Name
86
- <input
87
- type="text"
88
- placeholder="my_table"
87
+ <TextInput
88
+ inputProps={{ type: 'text', placeholder: 'my_table' }}
89
89
  class={errors?.name ? 'border !border-red-600/60' : ''}
90
90
  bind:value={values.name}
91
91
  />
@@ -106,12 +106,9 @@ let darkMode = $state(false);
106
106
  {#each values.columns as column, i}
107
107
  <tr>
108
108
  <Cell first>
109
- <input
110
- type="text"
111
- class={'h-10 ' +
112
- (errors?.columns?.includes(column.name) ? 'border !border-red-600/60' : '')}
113
- style="height: 2rem;"
114
- placeholder="column_name"
109
+ <TextInput
110
+ error={errors?.columns?.includes(column.name)}
111
+ inputProps={{ type: 'text', placeholder: 'column_name' }}
115
112
  bind:value={column.name}
116
113
  />
117
114
  </Cell>
@@ -164,8 +161,8 @@ let darkMode = $state(false);
164
161
  </label>
165
162
  {#if !column.primaryKey}
166
163
  <label class="flex gap-2 items-center text-xs">
167
- <input type="checkbox" class="!w-4 !h-4" bind:checked={column.not_null} />
168
- Not nullable
164
+ <input type="checkbox" class="!w-4 !h-4" bind:checked={column.nullable} />
165
+ Nullable
169
166
  </label>
170
167
  {/if}
171
168
  {/snippet}
@@ -8,6 +8,6 @@ export type DBTableEditorProps = {
8
8
  import { type DbType } from './apps/components/display/dbtable/utils';
9
9
  import { type CreateTableValues } from './apps/components/display/dbtable/queries/createTable';
10
10
  import { type DBSchema } from '../stores';
11
- declare const DbTableEditor: import("svelte").Component<DBTableEditorProps, {}, "">;
12
- type DbTableEditor = ReturnType<typeof DbTableEditor>;
13
- export default DbTableEditor;
11
+ declare const DBTableEditor: import("svelte").Component<DBTableEditorProps, {}, "">;
12
+ type DBTableEditor = ReturnType<typeof DBTableEditor>;
13
+ export default DBTableEditor;
@@ -6,23 +6,26 @@ import { Clock, X } from 'lucide-svelte';
6
6
  import { twMerge } from 'tailwind-merge';
7
7
  import { createDispatcherIfMounted } from '../createDispatcherIfMounted';
8
8
  import { inputBaseClass, inputBorderClass } from './text_input/TextInput.svelte';
9
- let { value = $bindable(undefined), clearable = false, autofocus = false, useDropdown = false, minDate = undefined, maxDate = undefined, disabled = undefined, inputClass = undefined } = $props();
9
+ let { value = $bindable(undefined), clearable = false, autofocus = false, useDropdown = false, minDate = undefined, maxDate = undefined, disabled = undefined, inputClass = undefined, timezone = 'local' } = $props();
10
10
  let date = $state(undefined);
11
11
  let time = $state(undefined);
12
12
  // let format: 'local' | 'utc' = 'local'
13
13
  function parseValue(value = undefined) {
14
14
  let dateFromValue = value ? new Date(value) : undefined;
15
- date = isValidDate(dateFromValue)
16
- ? `${dateFromValue.getFullYear().toString()}-${(dateFromValue.getMonth() + 1)
17
- .toString()
18
- .padStart(2, '0')}-${dateFromValue.getDate().toString().padStart(2, '0')}`
19
- : undefined;
20
- time = isValidDate(dateFromValue)
21
- ? `${dateFromValue.getHours().toString().padStart(2, '0')}:${dateFromValue
22
- .getMinutes()
23
- .toString()
24
- .padStart(2, '0')}`
25
- : '12:00';
15
+ if (!isValidDate(dateFromValue)) {
16
+ date = undefined;
17
+ time = '12:00';
18
+ return;
19
+ }
20
+ let year = timezone === 'local' ? dateFromValue?.getFullYear() : dateFromValue?.getUTCFullYear();
21
+ let month = timezone === 'local' ? dateFromValue?.getMonth() : dateFromValue?.getUTCMonth();
22
+ let day = timezone === 'local' ? dateFromValue?.getDate() : dateFromValue?.getUTCDate();
23
+ let hours = timezone === 'local' ? dateFromValue.getHours() : dateFromValue.getUTCHours();
24
+ let minutes = timezone === 'local' ? dateFromValue.getMinutes() : dateFromValue.getUTCMinutes();
25
+ date = `${year.toString()}-${(month + 1)
26
+ .toString()
27
+ .padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
28
+ time = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
26
29
  }
27
30
  $effect(() => {
28
31
  value;
@@ -34,7 +37,7 @@ let initialDate = untrack(() => date);
34
37
  let initialTime = untrack(() => time);
35
38
  function parseDateAndTime(date, time) {
36
39
  if (date && time && (initialDate != date || initialTime != time)) {
37
- let newDate = new Date(`${date}T${time}`);
40
+ let newDate = new Date(timezone === 'local' ? `${date}T${time}` : `${date}T${time}Z`);
38
41
  if (newDate.toString() === 'Invalid Date')
39
42
  return;
40
43
  if (newDate.getFullYear() < 1900)
@@ -57,6 +60,9 @@ const dispatch = createEventDispatcher();
57
60
  const dispatchIfMounted = createDispatcherIfMounted(dispatch);
58
61
  function setTimeLater(mins) {
59
62
  let newDate = new Date();
63
+ if (timezone === 'naive') {
64
+ newDate.setMinutes(newDate.getMinutes() - newDate.getTimezoneOffset());
65
+ }
60
66
  newDate.setMinutes(newDate.getMinutes() + mins);
61
67
  value = newDate.toISOString();
62
68
  dispatch('change', value);
@@ -7,6 +7,11 @@ interface Props {
7
7
  maxDate?: string | undefined;
8
8
  disabled?: boolean | undefined;
9
9
  inputClass?: string | undefined;
10
+ /**
11
+ * 'naive' will ignore timezone and return a date without timezone
12
+ * 'local' will use the local timezone of the user
13
+ */
14
+ timezone?: 'naive' | 'local';
10
15
  }
11
16
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
12
17
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -0,0 +1,32 @@
1
+ <script lang="ts">import { WorkspaceService } from '../gen';
2
+ import { workspaceStore } from '../stores';
3
+ import Select from './select/Select.svelte';
4
+ import DbManagerDrawer from './DBManagerDrawer.svelte';
5
+ import ExploreAssetButton, { assetCanBeExplored } from './ExploreAssetButton.svelte';
6
+ import { usePromise } from '../svelte5Utils.svelte';
7
+ let { value = $bindable(undefined), disabled = false, disablePortal = false, showSchemaExplorer = false, placeholder = undefined, selectInputClass = '', class: className = '', onClear = undefined } = $props();
8
+ let ducklakes = usePromise(() => WorkspaceService.listDucklakes({ workspace: $workspaceStore ?? '' }));
9
+ let dbManagerDrawer = $state();
10
+ </script>
11
+
12
+ <div class={className}>
13
+ <Select
14
+ items={ducklakes.value?.map((d) => ({ value: d })) ?? []}
15
+ bind:value
16
+ loading={ducklakes.status === 'loading'}
17
+ {disabled}
18
+ {disablePortal}
19
+ {placeholder}
20
+ inputClass={selectInputClass}
21
+ {onClear}
22
+ />
23
+ {#if showSchemaExplorer && value && assetCanBeExplored({ kind: 'ducklake', path: value })}
24
+ <ExploreAssetButton
25
+ class="mt-1 w-fit"
26
+ asset={{ kind: 'ducklake', path: value }}
27
+ {dbManagerDrawer}
28
+ />
29
+ {/if}
30
+
31
+ <DbManagerDrawer bind:this={dbManagerDrawer} />
32
+ </div>
@@ -0,0 +1,13 @@
1
+ interface Props {
2
+ value?: string | undefined;
3
+ disabled?: boolean;
4
+ disablePortal?: boolean;
5
+ showSchemaExplorer?: boolean;
6
+ placeholder?: string | undefined;
7
+ selectInputClass?: string;
8
+ class?: string;
9
+ onClear?: () => void;
10
+ }
11
+ declare const DucklakePicker: import("svelte").Component<Props, {}, "value">;
12
+ type DucklakePicker = ReturnType<typeof DucklakePicker>;
13
+ export default DucklakePicker;
@@ -1381,8 +1381,8 @@ $effect(() => {
1381
1381
  });
1382
1382
  $effect(() => {
1383
1383
  if (yContent && awareness && model && editor) {
1384
- monacoBinding && monacoBinding.destroy();
1385
1384
  untrack(() => {
1385
+ monacoBinding && monacoBinding.destroy();
1386
1386
  monacoBinding = new MonacoBinding(yContent, model, new Set([editor]), awareness);
1387
1387
  });
1388
1388
  }
@@ -55,7 +55,14 @@ let showContextVarPicker = $derived([
55
55
  'csharp',
56
56
  'nu',
57
57
  'java',
58
- 'ruby'
58
+ 'ruby',
59
+ 'postgresql',
60
+ 'mysql',
61
+ 'bigquery',
62
+ 'mssql',
63
+ 'oracledb',
64
+ 'snowflake',
65
+ 'duckdb'
59
66
  // for related places search: ADD_NEW_LANG
60
67
  ].includes(lang ?? ''));
61
68
  let showVarPicker = $derived([
@@ -347,6 +354,12 @@ function windmillPathToCamelCaseName(path) {
347
354
  // for related places search: ADD_NEW_LANG
348
355
  } else if (lang == 'ruby') {
349
356
  editor.insertAtCursor(`ENV['${name}']`)
357
+ } else if (
358
+ ['postgresql', 'mysql', 'bigquery', 'mssql', 'oracledb', 'snowflake', 'duckdb'].includes(
359
+ lang ?? ''
360
+ )
361
+ ) {
362
+ editor.insertAtCursor(`%%${name}%%`)
350
363
  }
351
364
  sendUserToast(`${name} inserted at cursor`)
352
365
  }}
@@ -30,7 +30,7 @@ let [editorWidth, editorHeight] = $derived([
30
30
  <div
31
31
  bind:clientWidth
32
32
  bind:clientHeight
33
- class="h-full w-full relative editor dark:bg-[#272D38] {className}"
33
+ class="h-full w-full relative editor {className}"
34
34
  style="--vscode-editorCodeLens-lineHeight: 18px; --vscode-editorCodeLens-fontSize: 12px; --vscode-editorCodeLens-fontFeatureSettings: 'liga' off, 'calt' off; --code-editorInlayHintsFontFamily: {fontFamily};"
35
35
  >
36
36
  <div
@@ -173,7 +173,7 @@ let codeViewer;
173
173
  <HighlightCode
174
174
  language={stepDetail.value.language}
175
175
  code={stepDetail.value.content}
176
- class="whitespace-pre-wrap"
176
+ className="whitespace-pre-wrap"
177
177
  />
178
178
  </div>
179
179
  <h3 class="mb-2 mt-4">Lockfile</h3>
@@ -20,7 +20,7 @@ import FlowHistoryJobPicker from './FlowHistoryJobPicker.svelte';
20
20
  import { getStepHistoryLoaderContext } from './stepHistoryLoader.svelte';
21
21
  import { aiChatManager } from './copilot/chat/AIChatManager.svelte';
22
22
  import { stateSnapshot } from '../svelte5Utils.svelte';
23
- import FlowChatInterface from './flows/FlowChatInterface.svelte';
23
+ import FlowChatInterface from './flows/conversations/FlowChatInterface.svelte';
24
24
  let { previewMode = $bindable(), open, preventEscape = $bindable(false), jobId = $bindable(undefined), job = $bindable(undefined), initial = $bindable(false), selectedJobStep = $bindable(undefined), selectedJobStepIsTopLevel = $bindable(undefined), selectedJobStepType = $bindable('single'), rightColumnSelect = $bindable('timeline'), branchOrIterationN = $bindable(0), scrollTop = $bindable(0), localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), onRunPreview, render = false, onJobDone, upToId = undefined } = $props();
25
25
  let restartBranchNames = [];
26
26
  let isRunning = $state(false);
@@ -17,10 +17,7 @@ import { Button } from './common';
17
17
  import { copyToClipboard } from '../utils';
18
18
  import { ClipboardCopy } from 'lucide-svelte';
19
19
  import HighlightTheme from './HighlightTheme.svelte';
20
- export let code = '';
21
- export let language;
22
- export let highlightLanguage = undefined;
23
- export let lines = false;
20
+ let { code = '', language, highlightLanguage = undefined, lines = false, className = '', onApplyCode = undefined, showApplyButton = false, applyButtonIcon = undefined } = $props();
24
21
  function getLang(lang) {
25
22
  switch (lang) {
26
23
  case 'python3':
@@ -69,12 +66,12 @@ function getLang(lang) {
69
66
  return java;
70
67
  case 'ruby':
71
68
  return ruby;
72
- // for related places search: ADD_NEW_LANG
69
+ // for related places search: ADD_NEW_LANG
73
70
  default:
74
71
  return typescript;
75
72
  }
76
73
  }
77
- $: lang = highlightLanguage ?? getLang(language);
74
+ const lang = $derived(highlightLanguage ?? getLang(language));
78
75
  </script>
79
76
 
80
77
  <HighlightTheme />
@@ -82,25 +79,39 @@ $: lang = highlightLanguage ?? getLang(language);
82
79
  <div class="relative">
83
80
  <Button
84
81
  wrapperClasses="absolute top-2 right-2 z-20"
85
- on:click={() => copyToClipboard(code)}
82
+ onclick={() => copyToClipboard(code)}
86
83
  color="light"
87
84
  size="xs2"
88
85
  startIcon={{
89
86
  icon: ClipboardCopy
90
87
  }}
91
88
  iconOnly
89
+ title="Copy to clipboard"
92
90
  />
91
+ {#if showApplyButton}
92
+ <Button
93
+ wrapperClasses="absolute top-2 right-10 z-20"
94
+ onclick={onApplyCode}
95
+ color="light"
96
+ size="xs2"
97
+ startIcon={{
98
+ icon: applyButtonIcon
99
+ }}
100
+ iconOnly
101
+ title="Apply code"
102
+ />
103
+ {/if}
93
104
  <div class="overflow-x-auto">
94
105
  {#if code?.length < 10000}
95
106
  {#if !lines}
96
- <Highlight class="nowrap {$$props.class}" language={lang} {code} />
107
+ <Highlight class="nowrap {className}" language={lang} {code} />
97
108
  {:else}
98
- <Highlight class="nowrap {$$props.class}" language={lang} {code} let:highlighted>
109
+ <Highlight class="nowrap {className}" language={lang} {code} let:highlighted>
99
110
  <LineNumbers {highlighted} />
100
111
  </Highlight>
101
112
  {/if}
102
113
  {:else}
103
- <pre class="overflow-auto max-h-screen text-xs {$$props.class}"
114
+ <pre class="overflow-auto max-h-screen text-xs {className}"
104
115
  ><code class="language-{language}">{code}</code></pre
105
116
  >
106
117
  {/if}
@@ -1,26 +1,16 @@
1
1
  import type { Script } from '../gen';
2
+ import { ClipboardCopy } from 'lucide-svelte';
2
3
  import type { LanguageType } from 'svelte-highlight/languages';
3
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
- $$bindings?: Bindings;
6
- } & Exports;
7
- (internal: unknown, props: Props & {
8
- $$events?: Events;
9
- $$slots?: Slots;
10
- }): Exports & {
11
- $set?: any;
12
- $on?: any;
13
- };
14
- z_$$bindings?: Bindings;
15
- }
16
- declare const HighlightCode: $$__sveltets_2_IsomorphicComponent<{
17
- [x: string]: any;
18
- code?: string | undefined;
19
- language: Script["language"] | "bunnative" | "frontend" | undefined;
4
+ interface Props {
5
+ code?: string;
6
+ language: Script['language'] | 'bunnative' | 'frontend' | undefined;
20
7
  highlightLanguage?: LanguageType<string> | undefined;
21
- lines?: boolean | undefined;
22
- }, {
23
- [evt: string]: CustomEvent<any>;
24
- }, {}, {}, string>;
25
- type HighlightCode = InstanceType<typeof HighlightCode>;
8
+ lines?: boolean;
9
+ className?: string;
10
+ onApplyCode?: () => void;
11
+ showApplyButton?: boolean;
12
+ applyButtonIcon?: typeof ClipboardCopy;
13
+ }
14
+ declare const HighlightCode: import("svelte").Component<Props, {}, "">;
15
+ type HighlightCode = ReturnType<typeof HighlightCode>;
26
16
  export default HighlightCode;
@@ -32,7 +32,6 @@ import { inputBorderClass } from './text_input/TextInput.svelte';
32
32
  let { schema = $bindable(), arg = $bindable(), argName = $bindable(), headerTooltip = undefined, headerTooltipIconClass = '', HeaderTooltipIcon = InfoIcon, extraLib = $bindable('missing extraLib'), inputCheck = $bindable(true), previousModuleId, pickForField = $bindable(undefined), variableEditor = undefined, itemPicker = undefined, noDynamicToggle = false, argExtra = {}, pickableProperties = undefined, enableAi = false, hideHelpButton = false, class: className = '', editor = $bindable(undefined), otherArgs = {}, helperScript = undefined } = $props();
33
33
  let monaco = $state(undefined);
34
34
  let monacoTemplate = $state(undefined);
35
- let argInput = $state(undefined);
36
35
  let focusedPrev = false;
37
36
  let hidden = $state(false);
38
37
  const variableMatch = (value) => value.match(/^variable\('([^']+)'\)$/);
@@ -210,6 +209,7 @@ function connectProperty(rawValue) {
210
209
  monaco?.setCode(arg.expr);
211
210
  }
212
211
  }
212
+ // This only works if every fields are static, as we can't eval javascript
213
213
  function handleFieldVisibility(schema, arg, otherArgs) {
214
214
  const schemaProperty = schema?.properties?.[argName];
215
215
  if (schemaProperty?.showExpr) {
@@ -219,14 +219,18 @@ function handleFieldVisibility(schema, arg, otherArgs) {
219
219
  const contextArgs = {
220
220
  [argName]: currentValue
221
221
  };
222
+ let hasJavascript = false;
222
223
  // Extract values from InputTransform objects in otherArgs
223
224
  Object.keys(otherArgs ?? {}).forEach((key) => {
225
+ if (otherArgs[key].type === 'javascript') {
226
+ hasJavascript = true;
227
+ }
224
228
  const otherArg = otherArgs[key];
225
229
  const otherArgValue = otherArg.type === 'static' ? otherArg.value : otherArg.expr;
226
230
  contextArgs[key] = otherArgValue;
227
231
  });
228
232
  const shouldShow = computeShow(argName, schemaProperty.showExpr, contextArgs);
229
- if (shouldShow) {
233
+ if (shouldShow || hasJavascript) {
230
234
  hidden = false;
231
235
  }
232
236
  else if (!hidden) {
@@ -247,33 +251,6 @@ function handleFieldVisibility(schema, arg, otherArgs) {
247
251
  }
248
252
  function onFocus() {
249
253
  focused = true;
250
- if (isStaticTemplate(inputCat)) {
251
- focusProp?.(argName, 'append', (path) => {
252
- // Empty field + variable = use $var:/$res: syntax instead of ${...}
253
- const isEmpty = !arg.value || arg.value.trim() === '';
254
- if (isEmpty && variableMatch(path)) {
255
- connectProperty(path);
256
- return true;
257
- }
258
- else {
259
- const toAppend = `\$\{${path}}`;
260
- arg.value = `${arg.value ?? ''}${toAppend}`;
261
- monacoTemplate?.setCode(arg.value);
262
- setPropertyType(arg.value);
263
- argInput?.focus();
264
- return false;
265
- }
266
- });
267
- }
268
- else {
269
- focusProp?.(argName, 'insert', (path) => {
270
- arg.expr = path;
271
- arg.type = 'javascript';
272
- propertyType = 'javascript';
273
- monaco?.setCode(arg.expr);
274
- return true;
275
- });
276
- }
277
254
  }
278
255
  let prevArg = undefined;
279
256
  function onArgChange() {
@@ -347,7 +324,7 @@ let shouldShowS3ArrayHelper = $derived(inputCat === 'list' &&
347
324
  ['s3object', 's3_object'].includes(schema?.properties?.[argName]?.items?.resourceType));
348
325
  </script>
349
326
 
350
- {#if arg != undefined}
327
+ {#if arg != undefined && !hidden}
351
328
  <div class={twMerge('pt-2 pb-2 relative group', className)}>
352
329
  <div class="flex flex-row justify-between gap-1 pb-1">
353
330
  <div class="flex flex-wrap grow min-h-7 items-end">
@@ -588,7 +565,6 @@ let shouldShowS3ArrayHelper = $derived(inputCat === 'list' &&
588
565
  {resourceTypes}
589
566
  noMargin
590
567
  compact
591
- bind:this={argInput}
592
568
  on:focus={onFocus}
593
569
  on:blur={() => {
594
570
  focused = false
@@ -654,19 +630,11 @@ let shouldShowS3ArrayHelper = $derived(inputCat === 'list' &&
654
630
  renderLineHighlight="none"
655
631
  hideLineNumbers
656
632
  fakeMonacoPlaceholderClass="mt-2"
657
- on:focus={() => {
658
- focused = true
659
- focusProp?.(argName, 'insert', (path) => {
660
- monaco?.insertAtCursor(path)
661
- return false
662
- })
663
- }}
633
+ on:focus={() => (focused = true)}
634
+ on:blur={() => (focused = false)}
664
635
  on:change={() => {
665
636
  dispatch('change', { argName, arg })
666
637
  }}
667
- on:blur={() => {
668
- focused = false
669
- }}
670
638
  autoHeight
671
639
  loadAsync
672
640
  />
@@ -1020,12 +1020,7 @@ function handleChannelChange(channel, i) {
1020
1020
  bind:value={$values[setting.key]}
1021
1021
  />
1022
1022
  {:else if setting.fieldType == 'password'}
1023
- <input
1024
- autocomplete="new-password"
1025
- type="password"
1026
- placeholder={setting.placeholder}
1027
- bind:value={$values[setting.key]}
1028
- />
1023
+ <Password small placeholder={setting.placeholder} bind:password={$values[setting.key]} />
1029
1024
  {:else if setting.fieldType == 'boolean'}
1030
1025
  <div class="mt-0.5">
1031
1026
  <Toggle
@@ -149,7 +149,7 @@ run(() => {
149
149
  }
150
150
  });
151
151
  run(() => {
152
- canSave = can_write && isValid && jsonError == '';
152
+ canSave = (can_write && isValid && jsonError == '') || (viewJsonSchema && jsonError == '');
153
153
  });
154
154
  $effect(() => {
155
155
  onChange && onChange({ path, args, description });
@@ -13,7 +13,6 @@ import { twMerge } from 'tailwind-merge';
13
13
  import DropdownV2 from './DropdownV2.svelte';
14
14
  let { initialValue = $bindable(undefined), value = $bindable(undefined), valueType = $bindable(undefined), resourceType = undefined, disabled = false, disablePortal = false, showSchemaExplorer = false, selectFirst = false, expressOAuthSetup = false, defaultValues = undefined, placeholder = undefined, selectInputClass = '', class: className = '', onClear = undefined, excludedValues = undefined } = $props();
15
15
  if (initialValue && value == undefined) {
16
- console.log('initialValue', initialValue);
17
16
  value = initialValue;
18
17
  }
19
18
  onMount(() => {
@@ -35,17 +34,14 @@ onMount(() => {
35
34
  $effect(() => {
36
35
  if (value === undefined) {
37
36
  if (initialValue) {
38
- console.log('initialValue', initialValue);
39
37
  if (initialValue != value) {
40
38
  value = initialValue;
41
39
  }
42
40
  }
43
41
  else {
44
- console.log('no value');
45
42
  }
46
43
  }
47
44
  else {
48
- console.log('value', value);
49
45
  }
50
46
  });
51
47
  let collection = $state(value ? [{ value, label: value, type: valueType }] : []);
@@ -76,7 +72,6 @@ async function loadResources(resourceType) {
76
72
  }
77
73
  collection = nc;
78
74
  if (collection.length == 1 && selectFirst && (value == undefined || value == '')) {
79
- console.log('selectFirst', collection[0].value);
80
75
  value = collection[0].value;
81
76
  valueType = collection[0].type;
82
77
  }