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
@@ -39,6 +39,29 @@ const iconOnlyThreshold = 300;
39
39
  {#if componentInput.fieldType !== 'any'}
40
40
  <div class="w-full">
41
41
  <div class="flex gap-2 justify-end" bind:clientWidth>
42
+ <div class="flex">
43
+ <ConnectionButton
44
+ closeConnection={() => {
45
+ $connectingInput = {
46
+ opened: false,
47
+ hoveredComponent: undefined,
48
+ input: undefined,
49
+ onConnect: () => {}
50
+ }
51
+ dispatch('select', true)
52
+ }}
53
+ openConnection={() => {
54
+ $connectingInput = {
55
+ opened: true,
56
+ input: undefined,
57
+ hoveredComponent: undefined,
58
+ onConnect: applyConnection
59
+ }
60
+ }}
61
+ isOpen={!!$connectingInput.opened}
62
+ />
63
+ </div>
64
+
42
65
  <ToggleButtonGroup
43
66
  on:selected={() => {
44
67
  onchange?.()
@@ -104,29 +127,6 @@ const iconOnlyThreshold = 300;
104
127
  />
105
128
  {/snippet}
106
129
  </ToggleButtonGroup>
107
-
108
- <div class="flex">
109
- <ConnectionButton
110
- closeConnection={() => {
111
- $connectingInput = {
112
- opened: false,
113
- hoveredComponent: undefined,
114
- input: undefined,
115
- onConnect: () => {}
116
- }
117
- dispatch('select', true)
118
- }}
119
- openConnection={() => {
120
- $connectingInput = {
121
- opened: true,
122
- input: undefined,
123
- hoveredComponent: undefined,
124
- onConnect: applyConnection
125
- }
126
- }}
127
- isOpen={!!$connectingInput.opened}
128
- />
129
- </div>
130
130
  </div>
131
131
  </div>
132
132
  {/if}
@@ -25,7 +25,12 @@ const componentsWithEventHandler = [
25
25
  'textinputcomponent',
26
26
  'textareainputcomponent',
27
27
  'passwordinputcomponent',
28
- 'emailinputcomponent'
28
+ 'emailinputcomponent',
29
+ 'aggridcomponent',
30
+ 'aggridcomponentee',
31
+ 'aggridinfinitecomponent',
32
+ 'aggridinfinitecomponentee',
33
+ 'dbexplorercomponent'
29
34
  ];
30
35
  </script>
31
36
 
@@ -76,7 +81,7 @@ const componentsWithEventHandler = [
76
81
  bind:value={item.data.onToggle}
77
82
  />
78
83
  {/if}
79
- {#if item.data.type === 'dateinputcomponent' || item.data.type === 'datetimeinputcomponent' || item.data.type === 'timeinputcomponent' || item.data.type === 'numberinputcomponent' || item.data.type === 'textinputcomponent' || item.data.type === 'textareainputcomponent' || item.data.type === 'passwordinputcomponent' || item.data.type === 'emailinputcomponent'}
84
+ {#if item.data.type === 'dateinputcomponent' || item.data.type === 'datetimeinputcomponent' || item.data.type === 'timeinputcomponent' || item.data.type === 'numberinputcomponent' || item.data.type === 'textinputcomponent' || item.data.type === 'textareainputcomponent' || item.data.type === 'passwordinputcomponent' || item.data.type === 'emailinputcomponent' || item.data.type === 'aggridcomponent' || item.data.type === 'aggridcomponentee' || item.data.type === 'aggridinfinitecomponent' || item.data.type === 'aggridinfinitecomponentee' || item.data.type === 'dbexplorercomponent'}
80
85
  <EventHandlerItem
81
86
  title="on change"
82
87
  tooltip="When a human change the value of the input"
@@ -109,6 +109,7 @@ function openConnection() {
109
109
  <div class={classNames('flex gap-x-2 gap-y-1 justify-end items-center')}>
110
110
  {#if componentInput?.type && allowTypeChange !== false}
111
111
  <ConnectionButton
112
+ small
112
113
  {closeConnection}
113
114
  {openConnection}
114
115
  isOpen={!!$connectingInput.opened}
@@ -67,7 +67,8 @@ const mapping = {
67
67
  {#if deletable}
68
68
  <div class="flex flex-row-reverse -mt-4">
69
69
  <CloseButton noBg on:close={() => dispatch('delete', k)} />
70
- </div>{/if}
70
+ </div>
71
+ {/if}
71
72
  {/if}
72
73
  {/each}
73
74
  {#if overridenByComponent.length > 0}
@@ -4,6 +4,6 @@ interface Props {
4
4
  selectOptions?: StaticOptions['selectOptions'] | undefined;
5
5
  id: string | undefined;
6
6
  }
7
- declare const DbTableSelect: import("svelte").Component<Props, {}, "componentInput">;
8
- type DbTableSelect = ReturnType<typeof DbTableSelect>;
9
- export default DbTableSelect;
7
+ declare const DBTableSelect: import("svelte").Component<Props, {}, "componentInput">;
8
+ type DBTableSelect = ReturnType<typeof DBTableSelect>;
9
+ export default DBTableSelect;
@@ -24,6 +24,7 @@ import AppPicker from '../../../../wizards/AppPicker.svelte';
24
24
  import JsonEditor from '../../../../JsonEditor.svelte';
25
25
  import S3FilePicker from '../../../../S3FilePicker.svelte';
26
26
  import FileUpload from '../../../../common/fileUpload/FileUpload.svelte';
27
+ import DucklakePicker from '../../../../DucklakePicker.svelte';
27
28
  let { componentInput = $bindable(), fieldType = undefined, subFieldType = undefined, selectOptions = undefined, placeholder = undefined, format = undefined, id } = $props();
28
29
  const appContext = getContext('AppViewerContext');
29
30
  $effect(() => {
@@ -119,6 +120,15 @@ let s3FilePicker = $state(undefined);
119
120
  }
120
121
  resourceType="s3"
121
122
  />
123
+ {:else if fieldType === 'ducklake'}
124
+ <DucklakePicker
125
+ class="w-full"
126
+ bind:value={
127
+ () => componentInput?.value?.split('ducklake://')?.[1],
128
+ (v) => componentInput && (componentInput.value = v ? `ducklake://${v}` : undefined)
129
+ }
130
+ showSchemaExplorer
131
+ />
122
132
  {:else if fieldType === 'labeledresource'}
123
133
  {#if componentInput?.value && typeof componentInput?.value == 'object' && 'label' in componentInput?.value && (componentInput.value?.['value'] == undefined || typeof componentInput.value?.['value'] == 'string')}
124
134
  <div class="flex flex-col gap-1 w-full">
@@ -1,7 +1,7 @@
1
1
  import type { ReadFileAs } from '../common/fileInput/model';
2
2
  import type { DecisionTreeNode, TypedComponent } from './editor/component';
3
3
  import type { InlineScript } from './types';
4
- export type InputType = 'integer' | 'text' | 'textarea' | 'template' | 'number' | 'boolean' | 'select' | 'icon-select' | 'color' | 'date' | 'time' | 'datetime' | 'object' | 'array' | 'any' | 'labeledresource' | 'labeledselect' | 'tab-select' | 'schema' | 'ag-grid' | 'table-column' | 'plotly' | 'chartjs' | 'DecisionTreeNode' | 'ag-chart' | 'resource' | 'db-explorer' | 'db-table' | 's3' | 'number-tuple' | 'postgres' | 'mysql' | 'ms_sql_server' | 'snowflake' | 'snowflake_oauth' | 'bigquery' | 'oracledb' | 'app-path';
4
+ export type InputType = 'integer' | 'text' | 'textarea' | 'template' | 'number' | 'boolean' | 'select' | 'icon-select' | 'color' | 'date' | 'time' | 'datetime' | 'object' | 'array' | 'any' | 'labeledresource' | 'labeledselect' | 'tab-select' | 'schema' | 'ag-grid' | 'table-column' | 'plotly' | 'chartjs' | 'DecisionTreeNode' | 'ag-chart' | 'resource' | 'db-explorer' | 'db-table' | 's3' | 'number-tuple' | 'postgres' | 'mysql' | 'ms_sql_server' | 'snowflake' | 'snowflake_oauth' | 'bigquery' | 'oracledb' | 'ducklake' | 'app-path';
5
5
  export type InputConnection = {
6
6
  componentType?: TypedComponent['type'];
7
7
  componentId: string;
@@ -129,7 +129,7 @@ export type StaticOptions = {
129
129
  label: string;
130
130
  }[];
131
131
  };
132
- export type AppInput = AppInputSpec<'text', string> | AppInputSpec<'textarea', string> | AppInputSpec<'template', string> | AppInputSpec<'number', number> | AppInputSpec<'boolean', boolean> | AppInputSpec<'date', string> | AppInputSpec<'time', string> | AppInputSpec<'datetime', string> | AppInputSpec<'any', any> | AppInputSpec<'object', Record<string | number, any>> | AppInputSpec<'object', string> | (AppInputSpec<'select', string, 'db-table'> & StaticOptions) | AppInputSpec<'icon-select', string> | AppInputSpec<'color', string> | AppInputSpec<'array', string[], 'text'> | AppInputSpec<'array', string[], 'textarea'> | AppInputSpec<'array', number[], 'number'> | AppInputSpec<'array', boolean[], 'boolean'> | AppInputSpec<'array', string[], 'date'> | AppInputSpec<'array', string[], 'time'> | AppInputSpec<'array', string[], 'datetime'> | AppInputSpec<'array', object[], 'object'> | (AppInputSpec<'array', string[], 'select'> & StaticOptions) | AppInputSpec<'array', object[], 'labeledresource'> | AppInputSpec<'array', (object | string)[], 'labeledselect'> | AppInputSpec<'labeledselect', object> | AppInputSpec<'labeledresource', object> | AppInputSpec<'array', object[], 'tab-select'> | AppInputSpec<'schema', object> | AppInputSpec<'array', object[], 'ag-grid'> | AppInputSpec<'array', object[], 'db-explorer'> | AppInputSpec<'array', object[], 'table-column'> | AppInputSpec<'array', object[], 'plotly'> | AppInputSpec<'array', object[], 'chartjs'> | AppInputSpec<'array', DecisionTreeNode, 'DecisionTreeNode'> | AppInputSpec<'array', object[], 'ag-chart'> | AppInputSpec<'resource', string> | AppInputSpec<'resource', string, 's3'> | AppInputSpec<'resource', string, 'postgres'> | AppInputSpec<'resource', string, 'mysql'> | AppInputSpec<'resource', string, 'ms_sql_server'> | AppInputSpec<'resource', string, 'snowflake'> | AppInputSpec<'resource', string, 'snowflake_oauth'> | AppInputSpec<'resource', string, 'bigquery'> | AppInputSpec<'resource', string, 'oracledb'> | AppInputSpec<'array', object[], 'number-tuple'> | AppInputSpec<'app-path', string>;
132
+ export type AppInput = AppInputSpec<'text', string> | AppInputSpec<'textarea', string> | AppInputSpec<'template', string> | AppInputSpec<'number', number> | AppInputSpec<'boolean', boolean> | AppInputSpec<'date', string> | AppInputSpec<'time', string> | AppInputSpec<'datetime', string> | AppInputSpec<'any', any> | AppInputSpec<'object', Record<string | number, any>> | AppInputSpec<'object', string> | (AppInputSpec<'select', string, 'db-table'> & StaticOptions) | AppInputSpec<'icon-select', string> | AppInputSpec<'color', string> | AppInputSpec<'array', string[], 'text'> | AppInputSpec<'array', string[], 'textarea'> | AppInputSpec<'array', number[], 'number'> | AppInputSpec<'array', boolean[], 'boolean'> | AppInputSpec<'array', string[], 'date'> | AppInputSpec<'array', string[], 'time'> | AppInputSpec<'array', string[], 'datetime'> | AppInputSpec<'array', object[], 'object'> | (AppInputSpec<'array', string[], 'select'> & StaticOptions) | AppInputSpec<'array', object[], 'labeledresource'> | AppInputSpec<'array', (object | string)[], 'labeledselect'> | AppInputSpec<'labeledselect', object> | AppInputSpec<'labeledresource', object> | AppInputSpec<'array', object[], 'tab-select'> | AppInputSpec<'schema', object> | AppInputSpec<'array', object[], 'ag-grid'> | AppInputSpec<'array', object[], 'db-explorer'> | AppInputSpec<'array', object[], 'table-column'> | AppInputSpec<'array', object[], 'plotly'> | AppInputSpec<'array', object[], 'chartjs'> | AppInputSpec<'array', DecisionTreeNode, 'DecisionTreeNode'> | AppInputSpec<'array', object[], 'ag-chart'> | AppInputSpec<'resource', string> | AppInputSpec<'resource', string, 's3'> | AppInputSpec<'resource', string, 'postgres'> | AppInputSpec<'resource', string, 'mysql'> | AppInputSpec<'resource', string, 'ms_sql_server'> | AppInputSpec<'resource', string, 'snowflake'> | AppInputSpec<'resource', string, 'snowflake_oauth'> | AppInputSpec<'resource', string, 'bigquery'> | AppInputSpec<'resource', string, 'oracledb'> | AppInputSpec<'ducklake', string, 'ducklake'> | AppInputSpec<'array', object[], 'number-tuple'> | AppInputSpec<'app-path', string>;
133
133
  export type RowAppInput = Extract<AppInput, {
134
134
  type: 'row';
135
135
  }>;
@@ -13,6 +13,6 @@ interface Props {
13
13
  actionKind?: ActionKind | 'all';
14
14
  scope?: undefined | 'all_workspaces' | 'instance';
15
15
  }
16
- declare const AuditLogsFilters: import("svelte").Component<Props, {}, "resource" | "username" | "operation" | "before" | "after" | "logs" | "perPage" | "hasMore" | "pageIndex" | "actionKind" | "scope">;
16
+ declare const AuditLogsFilters: import("svelte").Component<Props, {}, "resource" | "username" | "operation" | "logs" | "before" | "after" | "perPage" | "hasMore" | "pageIndex" | "actionKind" | "scope">;
17
17
  type AuditLogsFilters = ReturnType<typeof AuditLogsFilters>;
18
18
  export default AuditLogsFilters;
@@ -4,12 +4,8 @@ import AnimatedButton from './AnimatedButton.svelte';
4
4
  import Button from './Button.svelte';
5
5
  import { getContext } from 'svelte';
6
6
  import { twMerge } from 'tailwind-merge';
7
- export let isOpen = false;
8
- export let openConnection;
9
- export let closeConnection;
10
- export let btnWrapperClasses = '';
11
- export let id = undefined;
12
- let selected = false;
7
+ let { isOpen = false, openConnection, closeConnection, btnWrapperClasses = '', id = undefined, small } = $props();
8
+ let selected = $state(false);
13
9
  const { panzoomActive } = getContext('AppViewerContext');
14
10
  async function getConnectionButtonElements() {
15
11
  return Array.from(document.querySelectorAll('[data-connection-button], [data-connection-button] *'));
@@ -38,24 +34,26 @@ function handleKeyDown(e) {
38
34
  handleConnect();
39
35
  }
40
36
  }
41
- function handlePointerDownOutside(e) {
37
+ function handlePointerDownOutside() {
42
38
  if (!$panzoomActive) {
43
39
  deactivateConnection();
44
40
  }
45
41
  }
46
- $: !isOpen && (selected = false);
42
+ $effect(() => {
43
+ !isOpen && (selected = false);
44
+ });
47
45
  </script>
48
46
 
49
- <!-- svelte-ignore a11y-no-static-element-interactions -->
47
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
50
48
  <div
51
49
  use:pointerDownOutside={{
52
50
  capture: true,
53
51
  stopPropagation: isOpen,
54
52
  exclude: getConnectionButtonElements,
55
- customEventName: 'pointerdown_connecting'
53
+ customEventName: 'pointerdown_connecting',
54
+ onClickOutside: () => handlePointerDownOutside()
56
55
  }}
57
- on:keydown={handleKeyDown}
58
- on:pointerdown_outside={handlePointerDownOutside}
56
+ onkeydown={handleKeyDown}
59
57
  data-connection-button
60
58
  >
61
59
  <AnimatedButton
@@ -65,14 +63,14 @@ $: !isOpen && (selected = false);
65
63
  marginWidth="2px"
66
64
  >
67
65
  <Button
68
- size="xs"
66
+ size={small ? 'xs' : 'md'}
69
67
  variant="border"
70
68
  color="light"
71
69
  title="Connect"
72
70
  on:click={() => handleConnect(true)}
73
71
  {id}
74
72
  wrapperClasses={twMerge(btnWrapperClasses, selected ? 'opacity-100' : '')}
75
- btnClasses="p-0"
73
+ btnClasses={small ? 'p-0' : ''}
76
74
  >
77
75
  <Plug size={14} />
78
76
  </Button>
@@ -1,24 +1,11 @@
1
- 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> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const ConnectionButton: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  isOpen?: boolean;
16
3
  openConnection: () => void;
17
4
  closeConnection: () => void;
18
5
  btnWrapperClasses?: string;
19
6
  id?: string | undefined;
20
- }, {
21
- [evt: string]: CustomEvent<any>;
22
- }, {}, {}, string>;
23
- type ConnectionButton = InstanceType<typeof ConnectionButton>;
7
+ small?: boolean;
8
+ }
9
+ declare const ConnectionButton: import("svelte").Component<Props, {}, "">;
10
+ type ConnectionButton = ReturnType<typeof ConnectionButton>;
24
11
  export default ConnectionButton;
@@ -3,6 +3,6 @@ interface Props {
3
3
  instructions: string;
4
4
  runnableType: 'script' | 'flow';
5
5
  }
6
- declare const AiFormAssistant: import("svelte").Component<Props, {}, "">;
7
- type AiFormAssistant = ReturnType<typeof AiFormAssistant>;
8
- export default AiFormAssistant;
6
+ declare const AIFormAssistant: import("svelte").Component<Props, {}, "">;
7
+ type AIFormAssistant = ReturnType<typeof AIFormAssistant>;
8
+ export default AIFormAssistant;
@@ -2,6 +2,6 @@ interface Props {
2
2
  prompt?: string | undefined;
3
3
  type?: 'flow' | 'script';
4
4
  }
5
- declare const AiFormSettings: import("svelte").Component<Props, {}, "prompt">;
6
- type AiFormSettings = ReturnType<typeof AiFormSettings>;
7
- export default AiFormSettings;
5
+ declare const AIFormSettings: import("svelte").Component<Props, {}, "prompt">;
6
+ type AIFormSettings = ReturnType<typeof AIFormSettings>;
7
+ export default AIFormSettings;
@@ -1,6 +1,6 @@
1
1
  interface Props {
2
2
  moduleId?: string;
3
3
  }
4
- declare const FlowInlineScriptAiButton: import("svelte").Component<Props, {}, "">;
5
- type FlowInlineScriptAiButton = ReturnType<typeof FlowInlineScriptAiButton>;
6
- export default FlowInlineScriptAiButton;
4
+ declare const FlowInlineScriptAIButton: import("svelte").Component<Props, {}, "">;
5
+ type FlowInlineScriptAIButton = ReturnType<typeof FlowInlineScriptAIButton>;
6
+ export default FlowInlineScriptAIButton;
@@ -196,7 +196,7 @@ let openInputsModal = $state(false);
196
196
  <Button
197
197
  size="xs"
198
198
  color="light"
199
- btnClasses="text-violet-800 dark:text-violet-400 border border-violet-200 hover:bg-violet-50"
199
+ btnClasses={stepInputGenButtonClasses(false)}
200
200
  nonCaptureEvent
201
201
  startIcon={{
202
202
  icon: Wand2
@@ -12,7 +12,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
12
12
  };
13
13
  z_$$bindings?: Bindings;
14
14
  }
15
- declare const TestAiKey: $$__sveltets_2_IsomorphicComponent<{
15
+ declare const TestAIKey: $$__sveltets_2_IsomorphicComponent<{
16
16
  disabled?: boolean;
17
17
  apiKey?: string | undefined;
18
18
  resourcePath?: string | undefined;
@@ -21,5 +21,5 @@ declare const TestAiKey: $$__sveltets_2_IsomorphicComponent<{
21
21
  }, {
22
22
  [evt: string]: CustomEvent<any>;
23
23
  }, {}, {}, string>;
24
- type TestAiKey = InstanceType<typeof TestAiKey>;
25
- export default TestAiKey;
24
+ type TestAIKey = InstanceType<typeof TestAIKey>;
25
+ export default TestAIKey;
@@ -1,6 +1,6 @@
1
1
  import { type ScriptLang } from '../../../gen';
2
2
  import { AIMode } from './AIChatManager.svelte';
3
- declare const AiChat: import("svelte").Component<Record<string, never>, {
3
+ declare const AIChat: import("svelte").Component<Record<string, never>, {
4
4
  generateStep: (moduleId: string, lang: ScriptLang, instructions: string) => Promise<void>;
5
5
  sendRequest: (options?: {
6
6
  removeDiff?: boolean;
@@ -11,5 +11,5 @@ declare const AiChat: import("svelte").Component<Record<string, never>, {
11
11
  isPreprocessor?: boolean;
12
12
  }) => Promise<void>;
13
13
  }, "">;
14
- type AiChat = ReturnType<typeof AiChat>;
15
- export default AiChat;
14
+ type AIChat = ReturnType<typeof AIChat>;
15
+ export default AIChat;
@@ -25,8 +25,8 @@ type $$ComponentProps = {
25
25
  disabledMessage?: string;
26
26
  suggestions?: string[];
27
27
  };
28
- declare const AiChatDisplay: import("svelte").Component<$$ComponentProps, {
28
+ declare const AIChatDisplay: import("svelte").Component<$$ComponentProps, {
29
29
  focusInput: () => void;
30
30
  }, "selectedContext">;
31
- type AiChatDisplay = ReturnType<typeof AiChatDisplay>;
32
- export default AiChatDisplay;
31
+ type AIChatDisplay = ReturnType<typeof AIChatDisplay>;
32
+ export default AIChatDisplay;
@@ -8,8 +8,8 @@ interface Props {
8
8
  show: boolean;
9
9
  editorHandler: AIChatEditorHandler;
10
10
  }
11
- declare const AiChatInlineWidget: import("svelte").Component<Props, {
11
+ declare const AIChatInlineWidget: import("svelte").Component<Props, {
12
12
  focusInput: () => void;
13
13
  }, "show">;
14
- type AiChatInlineWidget = ReturnType<typeof AiChatInlineWidget>;
15
- export default AiChatInlineWidget;
14
+ type AIChatInlineWidget = ReturnType<typeof AIChatInlineWidget>;
15
+ export default AIChatInlineWidget;
@@ -16,8 +16,8 @@ interface Props {
16
16
  bottomRightSnippet?: Snippet;
17
17
  onKeyDown?: (e: KeyboardEvent) => void;
18
18
  }
19
- declare const AiChatInput: import("svelte").Component<Props, {
19
+ declare const AIChatInput: import("svelte").Component<Props, {
20
20
  focusInput: () => void;
21
21
  }, "selectedContext">;
22
- type AiChatInput = ReturnType<typeof AiChatInput>;
23
- export default AiChatInput;
22
+ type AIChatInput = ReturnType<typeof AIChatInput>;
23
+ export default AIChatInput;
@@ -7,6 +7,6 @@ interface Props {
7
7
  messageIndex: number;
8
8
  editingMessageIndex: number | null;
9
9
  }
10
- declare const AiChatMessage: import("svelte").Component<Props, {}, "selectedContext" | "editingMessageIndex">;
11
- type AiChatMessage = ReturnType<typeof AiChatMessage>;
12
- export default AiChatMessage;
10
+ declare const AIChatMessage: import("svelte").Component<Props, {}, "selectedContext" | "editingMessageIndex">;
11
+ type AIChatMessage = ReturnType<typeof AIChatMessage>;
12
+ export default AIChatMessage;
@@ -70,7 +70,7 @@ const isDeletable = $derived(deletable && contextElement.deletable !== false);
70
70
  <HighlightCode
71
71
  language={contextElement.lang}
72
72
  code={contextElement.content}
73
- class="w-full p-2 "
73
+ className="w-full p-2 "
74
74
  />
75
75
  </div>
76
76
  {:else if contextElement.type === 'flow_module'}
@@ -79,7 +79,7 @@ const isDeletable = $derived(deletable && contextElement.deletable !== false);
79
79
  <HighlightCode
80
80
  language={contextElement.value.language}
81
81
  code={contextElement.value.content}
82
- class="w-full p-2 "
82
+ className="w-full p-2 "
83
83
  />
84
84
  </div>
85
85
  {:else}
@@ -2,6 +2,6 @@ type $$ComponentProps = {
2
2
  open: boolean;
3
3
  onConfirm: () => void;
4
4
  };
5
- declare const AiChangesWarningModal: import("svelte").Component<$$ComponentProps, {}, "open">;
6
- type AiChangesWarningModal = ReturnType<typeof AiChangesWarningModal>;
7
- export default AiChangesWarningModal;
5
+ declare const AIChangesWarningModal: import("svelte").Component<$$ComponentProps, {}, "open">;
6
+ type AIChangesWarningModal = ReturnType<typeof AIChangesWarningModal>;
7
+ export default AIChangesWarningModal;
@@ -3,6 +3,6 @@ type $$ComponentProps = {
3
3
  opened?: boolean;
4
4
  class?: string;
5
5
  };
6
- declare const FlowAiButton: import("svelte").Component<$$ComponentProps, {}, "">;
7
- type FlowAiButton = ReturnType<typeof FlowAiButton>;
8
- export default FlowAiButton;
6
+ declare const FlowAIButton: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type FlowAIButton = ReturnType<typeof FlowAIButton>;
8
+ export default FlowAIButton;
@@ -465,7 +465,10 @@ const flowHelpers = {
465
465
  else if (module.value.parallel || opts.parallel === true) {
466
466
  // Only set parallelism if parallel is enabled
467
467
  const n = Math.max(1, Math.floor(Math.abs(opts.parallelism)));
468
- module.value.parallelism = n;
468
+ module.value.parallelism = {
469
+ type: 'static',
470
+ value: n
471
+ };
469
472
  }
470
473
  }
471
474
  refreshStateStore(flowStore);
@@ -2,6 +2,6 @@ import FlowModuleSchemaMap from '../../../flows/map/FlowModuleSchemaMap.svelte';
2
2
  type $$ComponentProps = {
3
3
  flowModuleSchemaMap: FlowModuleSchemaMap | undefined;
4
4
  };
5
- declare const FlowAiChat: import("svelte").Component<$$ComponentProps, {}, "">;
6
- type FlowAiChat = ReturnType<typeof FlowAiChat>;
7
- export default FlowAiChat;
5
+ declare const FlowAIChat: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type FlowAIChat = ReturnType<typeof FlowAIChat>;
7
+ export default FlowAIChat;
@@ -1,6 +1,8 @@
1
1
  <script lang="ts">import { getAstNode } from 'svelte-exmarkdown';
2
2
  import HighlightCode from '../../../HighlightCode.svelte';
3
3
  import { csharp, go, graphql, javascript, php, python, rust, shell, sql, typescript, yaml } from 'svelte-highlight/languages';
4
+ import { aiChatManager, AIMode } from '../AIChatManager.svelte';
5
+ import { Check, Play } from 'lucide-svelte';
4
6
  const astNode = getAstNode();
5
7
  function getSmartLang(lang) {
6
8
  switch (lang) {
@@ -59,15 +61,34 @@ const SMART_LANG_TO_HIGHLIGHT_LANG = {
59
61
  };
60
62
  let code = $derived(astNode.current.children?.[0]?.children?.[0]?.value);
61
63
  let language = $derived(astNode.current.children?.[0]?.properties?.class?.split('-')[1]);
64
+ // Check if the apply button should be shown
65
+ let showApplyButton = $derived.by(() => {
66
+ if (aiChatManager.mode !== AIMode.SCRIPT ||
67
+ !aiChatManager.scriptEditorApplyCode ||
68
+ code === aiChatManager.scriptEditorOptions?.code) {
69
+ return false;
70
+ }
71
+ return true;
72
+ });
73
+ function handleApplyCode() {
74
+ if (code && aiChatManager.scriptEditorApplyCode) {
75
+ aiChatManager.scriptEditorApplyCode(code, { mode: 'apply' });
76
+ }
77
+ }
62
78
  </script>
63
79
 
64
- <div
65
- class="flex flex-col not-prose relative w-full border border-gray-300 dark:border-gray-600 rounded-lg overflow-hidden"
66
- >
67
- <HighlightCode
68
- class="p-1"
69
- code={code ?? ''}
70
- highlightLanguage={SMART_LANG_TO_HIGHLIGHT_LANG[getSmartLang(language as string)]}
71
- language={undefined}
72
- />
80
+ <div class="flex flex-col gap-0.5 rounded-lg relative not-prose">
81
+ <div
82
+ class="relative w-full border border-gray-300 dark:border-gray-600 rounded-lg overflow-hidden"
83
+ >
84
+ <HighlightCode
85
+ className="p-1"
86
+ code={code ?? ''}
87
+ highlightLanguage={SMART_LANG_TO_HIGHLIGHT_LANG[getSmartLang(language as string)]}
88
+ language={undefined}
89
+ onApplyCode={handleApplyCode}
90
+ {showApplyButton}
91
+ applyButtonIcon={aiChatManager.pendingNewCode ? Check : Play}
92
+ />
93
+ </div>
73
94
  </div>
@@ -1,8 +1,9 @@
1
- import type { AIProviderModel, ResourceType, ScriptLang } from '../../../../gen/types.gen';
1
+ import type { AIProvider, AIProviderModel, ResourceType, ScriptLang } from '../../../../gen/types.gen';
2
2
  import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam } from 'openai/resources/index.mjs';
3
3
  import type { ContextElement } from '../context';
4
4
  import { type Tool } from '../shared';
5
5
  import type { ReviewChangesOpts } from '../monaco-adapter';
6
+ export declare const DIFF_BASED_EDIT_PROVIDERS: AIProvider[];
6
7
  export declare function formatResourceTypes(allResourceTypes: ResourceType[], lang: 'python3' | 'php' | 'bun' | 'deno' | 'nativets' | 'bunnative'): string;
7
8
  export declare const SUPPORTED_CHAT_SCRIPT_LANGUAGES: string[];
8
9
  export declare function getLangContext(lang: ScriptLang | 'bunnative' | 'jsx' | 'tsx' | 'json', { allowResourcesFetch, isPreprocessor }?: {
@@ -16,7 +16,12 @@ const DOCS_CONTEXT_PERCENTAGE = 1;
16
16
  // percentage of the context window for types of npm packages
17
17
  const TYPES_CONTEXT_PERCENTAGE = 1;
18
18
  // good providers for diff-based edit
19
- const DIFF_BASED_EDIT_PROVIDERS = ['openai', 'anthropic', 'googleai', 'azure_openai'];
19
+ export const DIFF_BASED_EDIT_PROVIDERS = [
20
+ 'openai',
21
+ 'anthropic',
22
+ 'googleai',
23
+ 'azure_openai'
24
+ ];
20
25
  export function formatResourceTypes(allResourceTypes, lang) {
21
26
  const resourceTypes = allResourceTypes.filter((rt) => isObject(rt.schema) && 'properties' in rt.schema && isObject(rt.schema.properties));
22
27
  if (lang === 'python3') {
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">import { Tabs, Tab, TabContent } from '../common';
2
2
  import { Pane, Splitpanes } from 'svelte-splitpanes';
3
3
  import DetailPageDetailPanel from './DetailPageDetailPanel.svelte';
4
- let { isOperator = false, flow_json = undefined, selected = $bindable(), forceSmallScreen = false, header, form, scriptRender: script, save_inputs, flow_step, triggers } = $props();
4
+ import FlowViewerInner from '../FlowViewerInner.svelte';
5
+ let { isOperator = false, flow_json = undefined, selected = $bindable(), forceSmallScreen = false, isChatMode = false, header, form, scriptRender: script, save_inputs, flow_step, triggers } = $props();
5
6
  let mobileTab = $state('form');
6
7
  let clientWidth = $state(window.innerWidth);
7
8
  const script_render = $derived(script);
@@ -44,8 +45,10 @@ const useDesktopLayout = $derived(clientWidth >= 768 && !forceSmallScreen);
44
45
  {@render header?.()}
45
46
  <div class="grow min-h-0 w-full flex flex-col">
46
47
  <Tabs bind:selected={mobileTab} wrapperClass="flex-none">
47
- <Tab value="form">Run form</Tab>
48
- <Tab value="saved_inputs">Inputs</Tab>
48
+ <Tab value="form">{isChatMode ? 'Chat' : 'Run form'}</Tab>
49
+ {#if !isChatMode}
50
+ <Tab value="saved_inputs">Inputs</Tab>
51
+ {/if}
49
52
  {#if !isOperator}
50
53
  <Tab value="triggers">Triggers</Tab>
51
54
  {/if}
@@ -67,6 +70,11 @@ const useDesktopLayout = $derived(clientWidth >= 768 && !forceSmallScreen);
67
70
  <TabContent value="triggers" class="flex flex-col flex-1 h-full mt-[-2px]">
68
71
  {@render triggers?.()}
69
72
  </TabContent>
73
+ {#if flow_json}
74
+ <TabContent value="raw" class="flex flex-col flex-1 h-full overflow-auto p-2">
75
+ <FlowViewerInner flow={flow_json} />
76
+ </TabContent>
77
+ {/if}
70
78
  <TabContent value="script" class="flex flex-col flex-1 h-full">
71
79
  {@render script?.()}
72
80
  </TabContent>
@@ -3,6 +3,7 @@ interface Props {
3
3
  flow_json?: any | undefined;
4
4
  selected: string;
5
5
  forceSmallScreen?: boolean;
6
+ isChatMode?: boolean;
6
7
  header?: import('svelte').Snippet;
7
8
  form?: import('svelte').Snippet;
8
9
  scriptRender?: import('svelte').Snippet;
@@ -20,15 +20,15 @@ $: opened = false;
20
20
 
21
21
  {#if opened}
22
22
  <div
23
- class="bg-surface-secondary border-l-4 text-sm text-secondary p-4 mt-2"
23
+ class="bg-surface-secondary border-x border-r-0 border-l-4 text-sm text-secondary p-4 mt-2"
24
24
  role="alert"
25
25
  id="dynamic-input-help-box"
26
26
  >
27
27
  Single JavaScript expression. The following functions and objects are available:
28
- <ul class="ml-4">
28
+ <ul class="ml-4 list-disc">
29
29
  <li
30
- ><b>{'results.<id>'}</b>: the result of step at id 'id' (use <b>{'results?.<id>'}</b> if id may
31
- not exist because branch was not chosen)</li
30
+ ><b>{'results.<id>'}</b>: the result of step at id 'id' (use optional chaining if id may not
31
+ exist because branch was not chosen, for example: <code>{'results.<id>?.[0]'}</code>)</li
32
32
  >
33
33
  <li><b>flow_input</b>: the object containing the flow input arguments</li>
34
34
  <li><b>previous_result</b>: the result of previous step</li>
@@ -22,7 +22,7 @@ import CaptureTable from '../../triggers/CaptureTable.svelte';
22
22
  import { isObjectTooBig, readFieldsRecursively } from '../../../utils';
23
23
  import { refreshStateStore } from '../../../svelte5Utils.svelte';
24
24
  import { deepEqual } from 'fast-equals';
25
- import FlowChatInterface from '../FlowChatInterface.svelte';
25
+ import FlowChatInterface from '../conversations/FlowChatInterface.svelte';
26
26
  import Toggle from '../../Toggle.svelte';
27
27
  import { AI_AGENT_SCHEMA } from '../flowInfers';
28
28
  import { nextId } from '../flowModuleNextId';