windmill-components 1.291.4 → 1.305.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/package/autosize.d.ts +4 -0
  2. package/package/autosize.js +76 -0
  3. package/package/components/AppConnect.svelte +26 -7
  4. package/package/components/ArgInput.svelte +129 -103
  5. package/package/components/ContentSearch.svelte +8 -2
  6. package/package/components/ContextualVariableEditor.svelte +69 -0
  7. package/package/components/ContextualVariableEditor.svelte.d.ts +21 -0
  8. package/package/components/CronInput.svelte +3 -0
  9. package/package/components/DBSchemaExplorer.svelte +2 -2
  10. package/package/components/DarkModeObserver.svelte +2 -2
  11. package/package/components/DateTimeInput.svelte +9 -3
  12. package/package/components/DefaultScripts.svelte +1 -0
  13. package/package/components/DisplayResult.svelte +83 -41
  14. package/package/components/DisplayResult.svelte.d.ts +1 -0
  15. package/package/components/DurationMs.svelte +1 -10
  16. package/package/components/DurationMs.svelte.d.ts +0 -1
  17. package/package/components/Editor.svelte +40 -10
  18. package/package/components/ErrorOrRecoveryHandler.svelte +5 -2
  19. package/package/components/FlowBuilder.svelte +9 -5
  20. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  21. package/package/components/FlowGraphViewerStep.svelte +5 -4
  22. package/package/components/FlowJobResult.svelte +36 -1
  23. package/package/components/FlowJobResult.svelte.d.ts +2 -1
  24. package/package/components/FlowLoopIterationPreview.svelte +18 -2
  25. package/package/components/FlowLoopIterationPreview.svelte.d.ts +6 -0
  26. package/package/components/FlowStatusViewer.svelte +1 -1
  27. package/package/components/FlowStatusViewerInner.svelte +117 -44
  28. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  29. package/package/components/FlowStatusWaitingForEvents.svelte +97 -54
  30. package/package/components/GfmMarkdown.svelte +14 -0
  31. package/package/components/GfmMarkdown.svelte.d.ts +16 -0
  32. package/package/components/GroupEditor.svelte +1 -2
  33. package/package/components/HighlightCode.svelte +1 -1
  34. package/package/components/InputTransformForm.svelte +24 -2
  35. package/package/components/InstanceGroupEditor.svelte +1 -2
  36. package/package/components/InstanceSettings.svelte +4 -0
  37. package/package/components/JobArgs.svelte +5 -4
  38. package/package/components/JobArgs.svelte.d.ts +1 -0
  39. package/package/components/JobStatus.svelte +2 -8
  40. package/package/components/LightweightArgInput.svelte +3 -6
  41. package/package/components/LightweightArgInput.svelte.d.ts +0 -1
  42. package/package/components/LogId.svelte +3 -0
  43. package/package/components/LogId.svelte.d.ts +16 -0
  44. package/package/components/LogViewer.svelte +14 -5
  45. package/package/components/MapResult.svelte +151 -0
  46. package/package/components/MapResult.svelte.d.ts +27 -0
  47. package/package/components/MoveDrawer.svelte +2 -1
  48. package/package/components/ObjectStoreConfigSettings.svelte +169 -0
  49. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +32 -0
  50. package/package/components/ParqetTableRenderer.svelte +3 -2
  51. package/package/components/ResourceEditor.svelte +33 -11
  52. package/package/components/RunChart.svelte +0 -1
  53. package/package/components/RunForm.svelte.d.ts +1 -1
  54. package/package/components/RunFormAdvancedPopup.svelte.d.ts +1 -1
  55. package/package/components/SavedInputs.svelte +1 -1
  56. package/package/components/ScriptBuilder.svelte +38 -8
  57. package/package/components/SimpleEditor.svelte +1 -3
  58. package/package/components/SimpleEditor.svelte.d.ts +0 -3
  59. package/package/components/SupabaseConnect.svelte +2 -2
  60. package/package/components/TableSimple.svelte +12 -1
  61. package/package/components/TableSimple.svelte.d.ts +1 -0
  62. package/package/components/TestConnection.svelte +29 -4
  63. package/package/components/TestConnection.svelte.d.ts +2 -0
  64. package/package/components/TestJobLoader.svelte +19 -2
  65. package/package/components/TestJobLoader.svelte.d.ts +3 -0
  66. package/package/components/UserSettings.svelte +5 -2
  67. package/package/components/UserSettings.svelte.d.ts +4 -0
  68. package/package/components/VariableEditor.svelte +2 -3
  69. package/package/components/WorkspaceGroup.svelte +10 -1
  70. package/package/components/apps/components/display/AppCustomComponent.svelte +3 -0
  71. package/package/components/apps/components/display/AppText.svelte +14 -19
  72. package/package/components/apps/components/display/PlotlyHtml.svelte +5 -1
  73. package/package/components/apps/components/display/PlotlyHtmlV2.svelte +4 -1
  74. package/package/components/apps/components/display/VegaLiteHtml.svelte +3 -3
  75. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +18 -2
  76. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +8 -5
  77. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +2 -0
  78. package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -18
  79. package/package/components/apps/components/display/dbtable/queries/count.js +2 -2
  80. package/package/components/apps/components/display/dbtable/queries/select.js +8 -6
  81. package/package/components/apps/components/display/dbtable/utils.d.ts +10 -5
  82. package/package/components/apps/components/display/dbtable/utils.js +83 -29
  83. package/package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
  84. package/package/components/apps/components/display/table/AppTable.svelte +5 -1
  85. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -0
  86. package/package/components/apps/components/helpers/eval.d.ts +1 -0
  87. package/package/components/apps/components/inputs/AppFileInput.svelte +8 -1
  88. package/package/components/apps/editor/AppEditorHeader.svelte +1 -1
  89. package/package/components/apps/editor/GridEditorMenu.svelte +11 -1
  90. package/package/components/apps/editor/RunnableJobPanel.svelte +5 -30
  91. package/package/components/apps/editor/appUtils.js +2 -1
  92. package/package/components/apps/editor/component/components.d.ts +78 -78
  93. package/package/components/apps/editor/component/components.js +12 -12
  94. package/package/components/apps/editor/component/default-codes.js +5 -1
  95. package/package/components/apps/editor/componentsPanel/CssEval.svelte +0 -1
  96. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +113 -109
  97. package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +14 -7
  98. package/package/components/apps/editor/componentsPanel/componentControlUtils.js +2 -0
  99. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +2 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +6 -0
  102. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -0
  103. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
  104. package/package/components/apps/editor/settingsPanel/GridPane.svelte +11 -15
  105. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  106. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -39
  107. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +2 -0
  108. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +1 -0
  109. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +0 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -6
  111. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
  112. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +6 -2
  113. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +1 -6
  114. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  115. package/package/components/apps/types.d.ts +1 -0
  116. package/package/components/apps/utils.js +3 -3
  117. package/package/components/build_workers.js +2 -1
  118. package/package/components/common/FileProgressBar.svelte +1 -1
  119. package/package/components/common/clearableInput/ClearableInput.svelte.d.ts +1 -1
  120. package/package/components/common/fileInput/FileInput.svelte +4 -0
  121. package/package/components/common/fileInput/FileInput.svelte.d.ts +2 -0
  122. package/package/components/common/modal/Modal.svelte +2 -0
  123. package/package/components/copilot/MetadataGen.svelte +17 -12
  124. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  125. package/package/components/copilot/ScriptGen.svelte +61 -27
  126. package/package/components/copilot/lib.d.ts +4 -1
  127. package/package/components/copilot/lib.js +46 -31
  128. package/package/components/copilot/prompts/edit.yaml +1 -0
  129. package/package/components/copilot/prompts/editPrompt.js +1 -1
  130. package/package/components/copilot/prompts/fix.yaml +1 -0
  131. package/package/components/copilot/prompts/fixPrompt.js +1 -1
  132. package/package/components/copilot/prompts/gen.yaml +1 -0
  133. package/package/components/copilot/prompts/genPrompt.js +1 -1
  134. package/package/components/details/WebhooksPanel.svelte +10 -3
  135. package/package/components/flows/content/FlowInputs.svelte +35 -36
  136. package/package/components/flows/content/FlowLoop.svelte +0 -1
  137. package/package/components/flows/content/FlowModuleComponent.svelte +18 -1
  138. package/package/components/flows/content/FlowModuleSuspend.svelte +7 -0
  139. package/package/components/flows/content/FlowModuleWrapper.svelte +4 -1
  140. package/package/components/flows/content/FlowSettings.svelte +32 -4
  141. package/package/components/flows/content/FlowWhileLoop.svelte +137 -0
  142. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +19 -0
  143. package/package/components/flows/content/SuspendDrawer.svelte +4 -4
  144. package/package/components/flows/dfs.js +1 -1
  145. package/package/components/flows/flowExplorer.js +1 -1
  146. package/package/components/flows/flowStateUtils.d.ts +1 -0
  147. package/package/components/flows/flowStateUtils.js +12 -0
  148. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -2
  149. package/package/components/flows/map/InsertModuleButton.svelte +12 -0
  150. package/package/components/flows/map/MapItem.svelte +5 -5
  151. package/package/components/flows/map/MapItem.svelte.d.ts +1 -1
  152. package/package/components/flows/types.d.ts +1 -0
  153. package/package/components/flows/utils.d.ts +1 -0
  154. package/package/components/flows/utils.js +3 -0
  155. package/package/components/graph/FlowGraph.svelte +1 -1
  156. package/package/components/graph/model.d.ts +5 -2
  157. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  158. package/package/components/home/Item.svelte +7 -2
  159. package/package/components/home/TreeView.svelte +4 -2
  160. package/package/components/home/TreeViewRoot.svelte +1 -1
  161. package/package/components/instanceSettings.d.ts +1 -1
  162. package/package/components/instanceSettings.js +12 -4
  163. package/package/components/jobs/JobPreview.svelte +1 -4
  164. package/package/components/propertyPicker/ObjectViewer.svelte +3 -0
  165. package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
  166. package/package/components/runs/JobLoader.svelte +3 -2
  167. package/package/components/runs/JobPreview.svelte +13 -7
  168. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  169. package/package/components/scriptEditor/LogPanel.svelte +6 -8
  170. package/package/components/settings/ChangeWorkspaceId.svelte +98 -0
  171. package/package/components/settings/ChangeWorkspaceId.svelte.d.ts +16 -0
  172. package/package/components/settings/ChangeWorkspaceName.svelte +71 -0
  173. package/package/components/settings/ChangeWorkspaceName.svelte.d.ts +16 -0
  174. package/package/components/settings/PremiumInfo.svelte +2 -1
  175. package/package/components/sidebar/OperatorMenu.svelte +3 -2
  176. package/package/components/sidebar/UserMenu.svelte +13 -2
  177. package/package/components/sidebar/WorkspaceMenu.svelte +30 -1
  178. package/package/components/sidebar/changelogs.js +51 -1
  179. package/package/components/table/AutoDataTable.svelte +62 -41
  180. package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +2 -2
  181. package/package/es6.d.ts.txt +1 -12395
  182. package/package/gen/core/OpenAPI.js +1 -1
  183. package/package/gen/index.d.ts +2 -0
  184. package/package/gen/models/CacheTtl.d.ts +4 -0
  185. package/package/gen/models/CacheTtl.js +5 -0
  186. package/package/gen/models/ContextualVariable.d.ts +1 -0
  187. package/package/gen/models/CreateWorkspace.d.ts +1 -1
  188. package/package/gen/models/FlowMetadata.d.ts +1 -0
  189. package/package/gen/models/FlowModule.d.ts +2 -0
  190. package/package/gen/models/FlowModuleValue.d.ts +2 -1
  191. package/package/gen/models/FlowStatus.d.ts +1 -0
  192. package/package/gen/models/FlowValue.d.ts +1 -0
  193. package/package/gen/models/GitRepositorySettings.d.ts +2 -1
  194. package/package/gen/models/GlobalUserInfo.d.ts +1 -0
  195. package/package/gen/models/NewScript.d.ts +1 -0
  196. package/package/gen/models/OpenFlowWPath.d.ts +1 -0
  197. package/package/gen/models/Script.d.ts +1 -0
  198. package/package/gen/models/WhileloopFlow.d.ts +8 -0
  199. package/package/gen/models/WhileloopFlow.js +5 -0
  200. package/package/gen/models/WorkspaceGitSyncSettings.d.ts +1 -1
  201. package/package/gen/services/JobService.d.ts +74 -8
  202. package/package/gen/services/JobService.js +55 -8
  203. package/package/gen/services/ScheduleService.d.ts +5 -1
  204. package/package/gen/services/ScheduleService.js +2 -1
  205. package/package/gen/services/SettingService.d.ts +11 -0
  206. package/package/gen/services/SettingService.js +13 -0
  207. package/package/gen/services/UserService.d.ts +29 -1
  208. package/package/gen/services/UserService.js +30 -0
  209. package/package/gen/services/WorkspaceService.d.ts +57 -2
  210. package/package/gen/services/WorkspaceService.js +76 -0
  211. package/package/hub.d.ts +3 -3
  212. package/package/hub.js +6 -6
  213. package/package/infer.d.ts +1 -20
  214. package/package/infer.js +1 -95
  215. package/package/inferArgSig.d.ts +20 -0
  216. package/package/inferArgSig.js +95 -0
  217. package/package/script_helpers.d.ts +3 -3
  218. package/package/script_helpers.js +47 -7
  219. package/package/scripts.d.ts +2 -2
  220. package/package/scripts.js +4 -4
  221. package/package/stores.d.ts +4 -0
  222. package/package/stores.js +2 -0
  223. package/package/utils.js +1 -0
  224. package/package.json +3 -2
@@ -103,10 +103,10 @@ onMount(() => {
103
103
 
104
104
  {#if component}
105
105
  {#key component?.id}
106
- <div class="px-2 flex items-center gap-2 flex-row justify-between">
107
- {#if !cssEditorOpen}
106
+ <div class="px-2 flex gap-1 flex-col w-full pb-4">
107
+ {#if !$cssEditorOpen}
108
108
  <Button
109
- color="blue"
109
+ color="light"
110
110
  size="xs2"
111
111
  variant="border"
112
112
  on:click={() => {
@@ -114,7 +114,7 @@ onMount(() => {
114
114
  }}
115
115
  >
116
116
  <div class="flex flex-row gap-1 text-xs items-center">
117
- Open CSS editor{$enterpriseLicense === undefined ? ' (EE only)' : ''}
117
+ Open theme editor{$enterpriseLicense === undefined ? ' (EE only)' : ''}
118
118
  <Tooltip light>
119
119
  You can also use the App CSS Editor to customise the CSS of all components.
120
120
  </Tooltip>
@@ -124,19 +124,18 @@ onMount(() => {
124
124
  <div />
125
125
  {/if}
126
126
 
127
- <div class="flex flex-row gap-2 items-center justify-between">
128
- {#if $enterpriseLicense !== undefined}
129
- <Button
130
- color="dark"
131
- size="xs2"
132
- on:click={() => {
133
- migrationModal?.open()
134
- }}
135
- >
136
- Convert to global CSS
137
- </Button>
138
- {/if}
139
- </div>
127
+ {#if $enterpriseLicense !== undefined}
128
+ <Button
129
+ color="light"
130
+ size="xs2"
131
+ variant="border"
132
+ on:click={() => {
133
+ migrationModal?.open()
134
+ }}
135
+ >
136
+ Convert to global CSS
137
+ </Button>
138
+ {/if}
140
139
  </div>
141
140
 
142
141
  <Tabs bind:selected={tab}>
@@ -166,28 +165,30 @@ onMount(() => {
166
165
  <svelte:fragment slot="content">
167
166
  <TabContent value="local">
168
167
  {#if component && component.customCss !== undefined}
169
- {#each Object.keys(ccomponents[component.type].customCss ?? {}) as name}
170
- <div class="w-full">
171
- <CssProperty
172
- quickStyleProperties={quickStyleProperties?.[component.type]?.[name]}
173
- forceStyle={ccomponents[component.type].customCss[name].style !== undefined}
174
- forceClass={ccomponents[component.type].customCss[name].class !== undefined}
175
- tooltip={ccomponents[component.type].customCss[name].tooltip}
176
- {name}
177
- wmClass={getSelector(name)}
178
- componentType={component.type}
179
- bind:value={component.customCss[name]}
180
- on:change={() => app.set($app)}
181
- shouldDisplayRight={hasStyleValue(component.customCss[name])}
182
- on:right={() => {
183
- copyLocalToGlobal(name, component?.customCss?.[name])
184
- tab = 'global'
185
- }}
186
- overridding={hasStyleValue($app.css?.[component.type]?.[name]) &&
187
- hasStyleValue(component.customCss[name])}
188
- />
189
- </div>
190
- {/each}
168
+ <div class="flex-col flex gap-4 divide-y">
169
+ {#each Object.keys(ccomponents[component.type].customCss ?? {}) as name}
170
+ <div class="w-full">
171
+ <CssProperty
172
+ quickStyleProperties={quickStyleProperties?.[component.type]?.[name]}
173
+ forceStyle={ccomponents[component.type].customCss[name].style !== undefined}
174
+ forceClass={ccomponents[component.type].customCss[name].class !== undefined}
175
+ tooltip={ccomponents[component.type].customCss[name].tooltip}
176
+ {name}
177
+ wmClass={getSelector(name)}
178
+ componentType={component.type}
179
+ bind:value={component.customCss[name]}
180
+ on:change={() => app.set($app)}
181
+ shouldDisplayRight={hasStyleValue(component.customCss[name])}
182
+ on:right={() => {
183
+ copyLocalToGlobal(name, component?.customCss?.[name])
184
+ tab = 'global'
185
+ }}
186
+ overridding={hasStyleValue($app.css?.[component.type]?.[name]) &&
187
+ hasStyleValue(component.customCss[name])}
188
+ />
189
+ </div>
190
+ {/each}
191
+ </div>
191
192
  {/if}
192
193
  </TabContent>
193
194
  <TabContent value="global">
@@ -3,6 +3,7 @@ export let value;
3
3
  export let componentInput;
4
4
  export let subFieldType;
5
5
  export let id;
6
+ export let dragging = false;
6
7
  let fakeComponentInput = {
7
8
  ...componentInput,
8
9
  value
@@ -16,4 +17,5 @@ $: fakeComponentInput && (value = fakeComponentInput.value);
16
17
  fieldType={subFieldType}
17
18
  bind:componentInput={fakeComponentInput}
18
19
  on:remove
20
+ {dragging}
19
21
  />
@@ -6,6 +6,7 @@ declare const __propDef: {
6
6
  componentInput: StaticInput<any>;
7
7
  subFieldType: InputType | undefined;
8
8
  id: string | undefined;
9
+ dragging?: boolean | undefined;
9
10
  };
10
11
  events: {
11
12
  remove: CustomEvent<any>;
@@ -84,7 +84,6 @@ let focus = false;
84
84
  lang="javascript"
85
85
  bind:code={componentInput.expr}
86
86
  shouldBindKey={false}
87
- domLib
88
87
  {extraLib}
89
88
  autoHeight
90
89
  {fixedOverflowWidgets}
@@ -7,7 +7,7 @@ import ColorInput from './ColorInput.svelte';
7
7
  import TabSelectInput from './TabSelectInput.svelte';
8
8
  import Toggle from '../../../../Toggle.svelte';
9
9
  import SchemaEditor from '../../../../SchemaEditor.svelte';
10
- import autosize from 'svelte-autosize';
10
+ import autosize from '../../../../../autosize';
11
11
  import Button from '../../../../common/button/Button.svelte';
12
12
  import { Settings } from 'lucide-svelte';
13
13
  import AgGridWizard from '../../../../wizards/AgGridWizard.svelte';
@@ -26,6 +26,7 @@ export let selectOptions = undefined;
26
26
  export let placeholder = undefined;
27
27
  export let format = undefined;
28
28
  export let id;
29
+ export let dragging = false;
29
30
  const { onchange } = getContext('AppViewerContext');
30
31
  $: componentInput && onchange?.();
31
32
  </script>
@@ -147,11 +148,17 @@ $: componentInput && onchange?.();
147
148
  />
148
149
  {:else}
149
150
  <div class="flex w-full flex-col">
150
- <JsonEditor
151
- small
152
- bind:value={componentInput.value}
153
- code={JSON.stringify(componentInput.value, null, 2)}
154
- />
151
+ {#if dragging}
152
+ <div class="text-xs text-secondary whitespace-pre border p-1"
153
+ >{JSON.stringify(componentInput.value, null, 2)}</div
154
+ >
155
+ {:else}
156
+ <JsonEditor
157
+ small
158
+ bind:value={componentInput.value}
159
+ code={JSON.stringify(componentInput.value, null, 2)}
160
+ />
161
+ {/if}
155
162
  </div>
156
163
  {/if}
157
164
  {:else if fieldType === 'array'}
@@ -9,6 +9,7 @@ declare const __propDef: {
9
9
  placeholder?: string | undefined;
10
10
  format?: string | undefined;
11
11
  id: string | undefined;
12
+ dragging?: boolean | undefined;
12
13
  };
13
14
  events: {
14
15
  keydown: KeyboardEvent;
@@ -17,7 +17,11 @@ let picker;
17
17
  const { app, workspace } = getContext('AppViewerContext');
18
18
  const dispatch = createEventDispatcher();
19
19
  async function loadSchemaFromTriggerable(path, runType) {
20
- return loadSchema(workspace, path, runType) ?? emptySchema();
20
+ const schema = await loadSchema(workspace, path, runType);
21
+ if (!schema.schema.order) {
22
+ schema.schema.order = Object.keys(schema.schema.properties ?? {});
23
+ }
24
+ return schema ?? { schema: emptySchema(), summary: undefined };
21
25
  }
22
26
  async function pickScript(path) {
23
27
  const schema = await loadSchemaFromTriggerable(path, 'script');
@@ -26,7 +30,7 @@ async function pickScript(path) {
26
30
  type: 'runnableByPath',
27
31
  path,
28
32
  runType: 'script',
29
- schema,
33
+ schema: schema.schema,
30
34
  name: defaultIfEmptyString(schema.summary, path)
31
35
  };
32
36
  dispatch('pick', {
@@ -1,5 +1,4 @@
1
1
  <script>import { fly } from 'svelte/transition';
2
- import { Badge } from '../../../../common';
3
2
  import { secondaryMenuLeft, secondaryMenuRight } from './';
4
3
  import { getContext } from 'svelte';
5
4
  import CloseButton from '../../../../common/CloseButton.svelte';
@@ -29,11 +28,7 @@ $: if (right && lastSelected !== $selectedComponent) {
29
28
  class="flex justify-between {right ? '' : 'flex-row-reverse'} items-center gap-1 px-3 py-2"
30
29
  >
31
30
  <CloseButton on:close={() => secondaryMenu?.close()} />
32
- {#if $selectedComponent}
33
- <Badge color="blue">{$selectedComponent}</Badge>
34
- {:else}
35
- <div />
36
- {/if}
31
+ <div class="text-xs font-bold"> Style Panel</div>
37
32
  </div>
38
33
  <div class="relative h-full overflow-y-auto">
39
34
  {#if typeof $secondaryMenu.component === 'string'}
@@ -3,9 +3,9 @@
3
3
  /** @typedef {typeof __propDef.slots} SelectSlots */
4
4
  export default class Select extends SvelteComponent<{
5
5
  value?: any;
6
+ input?: any;
6
7
  id?: null | undefined;
7
8
  name?: null | undefined;
8
- input?: any;
9
9
  filter?: typeof _filter | undefined;
10
10
  class?: string | undefined;
11
11
  label?: string | undefined;
@@ -107,9 +107,9 @@ import { SvelteComponent } from "svelte";
107
107
  declare const __propDef: {
108
108
  props: {
109
109
  value?: any;
110
+ input?: any;
110
111
  id?: null | undefined;
111
112
  name?: null | undefined;
112
- input?: any;
113
113
  filter?: typeof _filter | undefined;
114
114
  class?: string | undefined;
115
115
  label?: string | undefined;
@@ -194,6 +194,7 @@ export type AppViewerContext = {
194
194
  invalidate?: (key: string, error: string) => void;
195
195
  validateAll?: () => void;
196
196
  clearFiles?: () => void;
197
+ showToast?: (message: string, error?: boolean) => void;
197
198
  }>>;
198
199
  hoverStore: Writable<string | undefined>;
199
200
  allIdsInPath: Writable<string[]>;
@@ -177,18 +177,18 @@ declare function close(id: string): void;
177
177
  * @param id component's id
178
178
  * @param key property's key to validate
179
179
  */
180
- declare function validate(id: string, key: number): void;
180
+ declare function validate(id: string, key: string): void;
181
181
 
182
182
  /** validate form field property 'key'
183
183
  * @param id component's id
184
184
  * @param key property's key to validate
185
185
  */
186
- declare function invalidate(id: string, key: number, error: string): void;
186
+ declare function invalidate(id: string, key: string, error: string): void;
187
187
 
188
188
  /** validate all form's properties
189
189
  * @param id component's id
190
190
  */
191
- declare function validateAll(id: string, key: number): void;
191
+ declare function validateAll(id: string): void;
192
192
 
193
193
  /** Clear the files of a file input component
194
194
  * @param id component's id
@@ -1,5 +1,6 @@
1
1
  import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker';
2
2
  import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker';
3
+ import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker';
3
4
  import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker';
4
5
  import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
5
6
  export function buildWorkerDefinition(workerPath, basePath, useModuleWorker) {
@@ -27,7 +28,7 @@ export function buildWorkerDefinition(workerPath, basePath, useModuleWorker) {
27
28
  case 'template':
28
29
  case 'typescript':
29
30
  case 'javascript':
30
- return new Worker(new URL('../../../node_modules/monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url), { type: 'module' });
31
+ return new tsWorker();
31
32
  case 'html':
32
33
  case 'handlebars':
33
34
  case 'razor':
@@ -18,7 +18,7 @@ $: tweenedProgress.set(progress);
18
18
  <div class="progress-bar">
19
19
  <div
20
20
  class={`progress ${!ended ? 'blinking' : ''}`}
21
- style={`--color: ${color}; width: ${$tweenedProgress}%`}
21
+ style={`--color: ${color}; width: ${Math.round($tweenedProgress)}%`}
22
22
  />
23
23
  </div>
24
24
  <span class="text-xs p-1">{Math.round($tweenedProgress)}%</span>
@@ -4,7 +4,7 @@ declare const __propDef: {
4
4
  [x: string]: any;
5
5
  value?: any;
6
6
  placeholder?: string | undefined;
7
- type?: "number" | "text" | "textarea" | undefined;
7
+ type?: "number" | "textarea" | "text" | undefined;
8
8
  inputClass?: string | undefined;
9
9
  wrapperClass?: string | undefined;
10
10
  buttonClass?: string | undefined;
@@ -85,6 +85,10 @@ async function dispatchChange() {
85
85
  dispatch('change', files);
86
86
  }
87
87
  }
88
+ export function clearFiles() {
89
+ files = undefined;
90
+ dispatchChange();
91
+ }
88
92
  </script>
89
93
 
90
94
  <button
@@ -13,6 +13,7 @@ declare const __propDef: {
13
13
  returnFileNames?: boolean | undefined;
14
14
  submittedText?: string | undefined;
15
15
  defaultFile?: string | undefined;
16
+ clearFiles?: (() => void) | undefined;
16
17
  };
17
18
  events: {
18
19
  change: CustomEvent<any>;
@@ -28,5 +29,6 @@ export type FileInputProps = typeof __propDef.props;
28
29
  export type FileInputEvents = typeof __propDef.events;
29
30
  export type FileInputSlots = typeof __propDef.slots;
30
31
  export default class FileInput extends SvelteComponent<FileInputProps, FileInputEvents, FileInputSlots> {
32
+ get clearFiles(): () => void;
31
33
  }
32
34
  export {};
@@ -35,6 +35,7 @@ function fadeFast(node) {
35
35
 
36
36
  {#if open}
37
37
  <!-- svelte-ignore a11y-click-events-have-key-events -->
38
+ <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
38
39
  <div
39
40
  on:click={() => (open = false)}
40
41
  transition:fadeFast|local
@@ -50,6 +51,7 @@ function fadeFast(node) {
50
51
 
51
52
  <div class="fixed inset-0 z-10 overflow-y-auto">
52
53
  <div class="flex min-h-full items-center justify-center p-4">
54
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
53
55
  <div
54
56
  on:click|stopPropagation
55
57
  class={twMerge(
@@ -5,7 +5,7 @@ import { copilotInfo, metadataCompletionEnabled } from '../../stores';
5
5
  import { createEventDispatcher, onDestroy } from 'svelte';
6
6
  import { sendUserToast } from '../../toast';
7
7
  import { twMerge } from 'tailwind-merge';
8
- import autosize from 'svelte-autosize';
8
+ import autosize from '../../autosize';
9
9
  import { yamlStringifyExceptKeys } from './utils';
10
10
  const promptConfigs = {
11
11
  summary: {
@@ -197,7 +197,9 @@ onDestroy(() => {
197
197
  }}
198
198
  >
199
199
  <div
200
- class={'absolute left-[0.5rem] top-[0.3rem] flex flex-row gap-2 items-start pointer-events-none'}
200
+ class="absolute left-[0.5rem] {elementType === 'textarea'
201
+ ? 'top-[1.3rem]'
202
+ : 'top-[0.3rem]'} flex flex-row gap-2 items-start pointer-events-none"
201
203
  >
202
204
  {#if active}
203
205
  <span
@@ -236,16 +238,19 @@ onDestroy(() => {
236
238
  {/if}
237
239
  </div>
238
240
  {#if elementType === 'textarea'}
239
- <textarea
240
- bind:this={el}
241
- bind:value={content}
242
- use:autosize
243
- {...elementProps}
244
- placeholder={!active ? elementProps.placeholder : ''}
245
- class={active ? '!indent-[3.5rem]' : ''}
246
- on:focus={() => (focused = true)}
247
- on:blur={() => (focused = false)}
248
- />
241
+ <div>
242
+ <div class="flex flex-row-reverse text-2xs text-tertiary -mt-4">GH Markdown</div>
243
+ <textarea
244
+ bind:this={el}
245
+ bind:value={content}
246
+ use:autosize
247
+ {...elementProps}
248
+ placeholder={!active ? elementProps.placeholder : ''}
249
+ class={active ? '!indent-[3.5rem]' : ''}
250
+ on:focus={() => (focused = true)}
251
+ on:blur={() => (focused = false)}
252
+ />
253
+ </div>
249
254
  {:else}
250
255
  <input
251
256
  bind:this={el}
@@ -8,7 +8,7 @@ declare const __propDef: {
8
8
  flow?: FlowValue | undefined;
9
9
  promptConfigName: "summary" | "description" | "flowSummary" | "flowDescription";
10
10
  generateOnAppear?: boolean | undefined;
11
- elementType?: "input" | "textarea" | undefined;
11
+ elementType?: "textarea" | "input" | undefined;
12
12
  elementProps?: Record<string, any> | undefined;
13
13
  };
14
14
  events: {
@@ -1,5 +1,5 @@
1
1
  <script>import { Button } from '../common';
2
- import { SUPPORTED_LANGUAGES, copilot } from './lib';
2
+ import { MAX_SCHEMA_LENGTH, SUPPORTED_LANGUAGES, addThousandsSeparator, copilot } from './lib';
3
3
  import { sendUserToast } from '../../toast';
4
4
  import Popup from '../common/popup/Popup.svelte';
5
5
  import { dbSchemas, copilotInfo, workspaceStore } from '../../stores';
@@ -8,15 +8,16 @@ import Tooltip from '../Tooltip.svelte';
8
8
  import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
9
9
  import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
10
10
  import { writable } from 'svelte/store';
11
- import { WindmillIcon } from '../icons';
12
11
  import HighlightCode from '../HighlightCode.svelte';
13
12
  import LoadingIcon from '../apps/svelte-select/lib/LoadingIcon.svelte';
14
13
  import { sleep } from '../../utils';
15
14
  import { autoPlacement } from '@floating-ui/core';
16
- import { Ban, Bot, Check, ExternalLink, HistoryIcon, Wand2, X } from 'lucide-svelte';
15
+ import { AlertTriangle, Ban, Bot, Check, ExternalLink, HistoryIcon, Wand2, X } from 'lucide-svelte';
17
16
  import { fade } from 'svelte/transition';
18
17
  import { isInitialCode } from '../../script_helpers';
19
18
  import { twMerge } from 'tailwind-merge';
19
+ import Popover from '../Popover.svelte';
20
+ import { onDestroy } from 'svelte';
20
21
  // props
21
22
  export let iconOnly = false;
22
23
  export let lang;
@@ -27,6 +28,7 @@ export let args;
27
28
  export let transformer = false;
28
29
  // state
29
30
  let funcDesc = '';
31
+ let trimmedDesc = '';
30
32
  let genLoading = false;
31
33
  let input;
32
34
  let generatedCode = writable('');
@@ -35,8 +37,9 @@ let abortController = undefined;
35
37
  let blockPopupOpen = false;
36
38
  let mode = 'gen';
37
39
  let button;
40
+ $: trimmedDesc = funcDesc.trim();
38
41
  async function onGenerate(closePopup) {
39
- if (funcDesc.length <= 0) {
42
+ if (trimmedDesc.length <= 0) {
40
43
  return;
41
44
  }
42
45
  savePrompt();
@@ -47,7 +50,7 @@ async function onGenerate(closePopup) {
47
50
  if (mode === 'edit') {
48
51
  await copilot({
49
52
  language: transformer && lang === 'frontend' ? 'transformer' : lang,
50
- description: funcDesc,
53
+ description: trimmedDesc,
51
54
  code: editor?.getCode() || '',
52
55
  dbSchema: dbSchema,
53
56
  type: 'edit',
@@ -57,7 +60,7 @@ async function onGenerate(closePopup) {
57
60
  else {
58
61
  await copilot({
59
62
  language: transformer && lang === 'frontend' ? 'transformer' : lang,
60
- description: funcDesc,
63
+ description: trimmedDesc,
61
64
  dbSchema: dbSchema,
62
65
  type: 'gen',
63
66
  workspace: $workspaceStore
@@ -86,6 +89,9 @@ async function onGenerate(closePopup) {
86
89
  finally {
87
90
  genLoading = false;
88
91
  blockPopupOpen = false;
92
+ setTimeout(() => {
93
+ autoResize();
94
+ }, 0);
89
95
  }
90
96
  }
91
97
  function acceptDiff() {
@@ -148,10 +154,10 @@ function getPromptHistory() {
148
154
  }
149
155
  }
150
156
  function savePrompt() {
151
- if (promptHistory.includes(funcDesc)) {
157
+ if (promptHistory.includes(trimmedDesc)) {
152
158
  return;
153
159
  }
154
- promptHistory.unshift(funcDesc);
160
+ promptHistory.unshift(trimmedDesc);
155
161
  while (promptHistory.length > 5) {
156
162
  promptHistory.pop();
157
163
  }
@@ -173,6 +179,18 @@ function clearPromptHistory() {
173
179
  }
174
180
  $: lang && getPromptHistory();
175
181
  $: $generatedCode && updateScroll();
182
+ function autoResize() {
183
+ if (input) {
184
+ const maxLinesHeight = 100; // Adjust this value based on your font size and line-height to fit 5 lines
185
+ input.style.height = 'auto'; // Reset height to recalibrate
186
+ const newHeight = Math.min(input.scrollHeight, maxLinesHeight); // Calculate new height, but not exceed max
187
+ input.style.height = newHeight + 'px'; // Set new height
188
+ input.style.overflowY = newHeight >= maxLinesHeight ? 'scroll' : 'hidden'; // Show scrollbar if at max height
189
+ }
190
+ }
191
+ onDestroy(() => {
192
+ abortController?.abort();
193
+ });
176
194
  </script>
177
195
 
178
196
  {#if genLoading}
@@ -247,7 +265,7 @@ $: $generatedCode && updateScroll();
247
265
  size="xs"
248
266
  color={genLoading ? 'red' : 'light'}
249
267
  btnClasses={genLoading ? '!px-3 z-[5000]' : '!px-2'}
250
- propagateEvent
268
+ propagateEvent={!genLoading}
251
269
  on:click={genLoading
252
270
  ? () => abortController?.abort()
253
271
  : () => {
@@ -258,6 +276,9 @@ $: $generatedCode && updateScroll();
258
276
  mode = 'edit'
259
277
  }
260
278
  }
279
+ setTimeout(() => {
280
+ autoResize()
281
+ }, 0)
261
282
  }}
262
283
  bind:element={button}
263
284
  iconOnly
@@ -276,8 +297,8 @@ $: $generatedCode && updateScroll();
276
297
  size="xs"
277
298
  color={genLoading ? 'red' : 'light'}
278
299
  spacingSize="md"
279
- startIcon={genLoading ? undefined : { icon: Wand2 }}
280
- propagateEvent
300
+ startIcon={genLoading ? { icon: Ban } : { icon: Wand2 }}
301
+ propagateEvent={!genLoading}
281
302
  on:click={genLoading
282
303
  ? () => abortController?.abort()
283
304
  : () => {
@@ -288,18 +309,14 @@ $: $generatedCode && updateScroll();
288
309
  mode = 'edit'
289
310
  }
290
311
  }
312
+ setTimeout(() => {
313
+ autoResize()
314
+ }, 0)
291
315
  }}
292
316
  bind:element={button}
293
317
  {iconOnly}
294
318
  >
295
319
  {#if genLoading}
296
- <WindmillIcon
297
- white={true}
298
- class="mr-1 text-white"
299
- height="16px"
300
- width="20px"
301
- spin="veryfast"
302
- />
303
320
  Stop
304
321
  {:else}
305
322
  AI Gen
@@ -330,31 +347,34 @@ $: $generatedCode && updateScroll();
330
347
  GPT-4 Turbo<Bot size={14} />
331
348
  </div>
332
349
  </div>
333
- <div class="flex w-96">
334
- <input
335
- type="text"
350
+ <div class="flex w-96 items-start">
351
+ <textarea
336
352
  bind:this={input}
337
353
  bind:value={funcDesc}
338
- on:keypress={({ key }) => {
339
- if (key === 'Enter' && funcDesc.length > 0) {
354
+ on:input={autoResize}
355
+ on:keydown={({ key, shiftKey }) => {
356
+ if (key === 'Enter' && !shiftKey && trimmedDesc.length > 0) {
340
357
  onGenerate(() => close(input || null))
358
+ return false
341
359
  }
342
360
  }}
343
361
  placeholder={mode === 'edit'
344
362
  ? 'Describe the changes you want'
345
363
  : 'Describe what the script should do'}
364
+ rows="1"
365
+ class="resize-none overflow-hidden"
346
366
  />
347
367
  <Button
348
368
  size="xs"
349
369
  color="light"
350
370
  buttonType="button"
351
- btnClasses="!p-1 !w-[38px] !ml-2 text-violet-800 dark:text-violet-400 bg-violet-100 dark:bg-gray-700"
371
+ btnClasses="h-[36px] !p-1 !w-[38px] !ml-2 text-violet-800 dark:text-violet-400 bg-violet-100 dark:bg-gray-700"
352
372
  title="Generate code from prompt"
353
373
  aria-label="Generate"
354
374
  on:click={() => {
355
375
  onGenerate(() => close(input || null))
356
376
  }}
357
- disabled={funcDesc.length <= 0}
377
+ disabled={trimmedDesc.length <= 0}
358
378
  iconOnly
359
379
  startIcon={{ icon: Wand2 }}
360
380
  />
@@ -369,6 +389,9 @@ $: $generatedCode && updateScroll();
369
389
  startIcon={{ icon: HistoryIcon, classes: 'shrink-0' }}
370
390
  on:click={() => {
371
391
  funcDesc = p
392
+ setTimeout(() => {
393
+ autoResize()
394
+ }, 0)
372
395
  }}>{p}</Button
373
396
  >
374
397
  {/each}
@@ -381,13 +404,24 @@ $: $generatedCode && updateScroll();
381
404
 
382
405
  {#if ['postgresql', 'mysql', 'snowflake', 'bigquery', 'mssql', 'graphql'].includes(lang) && dbSchema?.lang === lang}
383
406
  <div class="flex flex-row items-center justify-between gap-2 w-96">
384
- <div class="flex flex-row items-center">
407
+ <div class="flex flex-row items-center gap-1">
385
408
  <p class="text-xs text-secondary">
386
409
  Context: {lang === 'graphql' ? 'GraphQL' : 'DB'} schema
387
410
  </p>
388
- <Tooltip>
411
+ <Tooltip placement="top">
389
412
  We pass the selected schema to GPT-4 Turbo for better script generation.
390
413
  </Tooltip>
414
+ {#if dbSchema.stringified.length > MAX_SCHEMA_LENGTH}
415
+ <Popover notClickable placement="top">
416
+ <AlertTriangle size={16} class="text-yellow-500" />
417
+ <svelte:fragment slot="text">
418
+ The schema is about {addThousandsSeparator(dbSchema.stringified.length / 3.5)}
419
+ tokens. To avoid exceeding the model's context length, it will be truncated to
420
+ {addThousandsSeparator(MAX_SCHEMA_LENGTH / 3.5)}
421
+ tokens.
422
+ </svelte:fragment>
423
+ </Popover>
424
+ {/if}
391
425
  </div>
392
426
  {#if dbSchema.lang !== 'graphql' && (dbSchema.schema?.public || dbSchema.schema?.PUBLIC || dbSchema.schema?.dbo)}
393
427
  <ToggleButtonGroup class="w-auto shrink-0" bind:selected={dbSchema.publicOnly}>