windmill-components 1.352.9 → 1.362.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 (208) hide show
  1. package/package/assets/app.css +8 -45
  2. package/package/components/ApiConnectForm.svelte +1 -0
  3. package/package/components/ArgInput.svelte +5 -1
  4. package/package/components/ChangeInstanceUsername.svelte +20 -12
  5. package/package/components/ContentSearchInner.svelte +359 -0
  6. package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
  7. package/package/components/CustomPopover.svelte +73 -0
  8. package/package/components/CustomPopover.svelte.d.ts +29 -0
  9. package/package/components/DateTimeInput.svelte +29 -3
  10. package/package/components/DateTimeInput.svelte.d.ts +4 -0
  11. package/package/components/Dev.svelte +8 -3
  12. package/package/components/DurationMs.svelte +2 -2
  13. package/package/components/FlowBuilder.svelte +122 -24
  14. package/package/components/FlowBuilder.svelte.d.ts +1 -0
  15. package/package/components/FlowGraphViewerStep.svelte +2 -2
  16. package/package/components/FlowJobResult.svelte +5 -3
  17. package/package/components/FlowStatusViewer.svelte +4 -3
  18. package/package/components/FlowStatusViewerInner.svelte +265 -160
  19. package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
  20. package/package/components/HighlightTheme.svelte +75 -77
  21. package/package/components/InputTransformForm.svelte +2 -0
  22. package/package/components/JobArgs.svelte +59 -44
  23. package/package/components/JobArgs.svelte.d.ts +2 -0
  24. package/package/components/LightweightArgInput.svelte +27 -2
  25. package/package/components/Path.svelte +3 -8
  26. package/package/components/Popover.svelte +1 -1
  27. package/package/components/ResourceEditor.svelte +3 -2
  28. package/package/components/ResourceEditorDrawer.svelte +4 -1
  29. package/package/components/ResourcePicker.svelte +1 -0
  30. package/package/components/RunChart.svelte +6 -3
  31. package/package/components/RunChart.svelte.d.ts +1 -0
  32. package/package/components/RunForm.svelte +24 -23
  33. package/package/components/RunForm.svelte.d.ts +0 -2
  34. package/package/components/SavedInputs.svelte +50 -39
  35. package/package/components/ScheduleEditorInner.svelte +26 -4
  36. package/package/components/ScriptBuilder.svelte +47 -22
  37. package/package/components/ScriptBuilder.svelte.d.ts +1 -0
  38. package/package/components/SearchItems.svelte +5 -4
  39. package/package/components/Summary.svelte +74 -0
  40. package/package/components/Summary.svelte.d.ts +16 -0
  41. package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
  42. package/package/components/apps/components/display/AppMenu.svelte +2 -2
  43. package/package/components/apps/components/display/AppNavbar.svelte +94 -0
  44. package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
  45. package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
  46. package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
  47. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
  48. package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
  49. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
  50. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
  51. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
  53. package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
  54. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
  55. package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
  56. package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
  57. package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
  58. package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
  59. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  60. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  61. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
  62. package/package/components/apps/components/layout/AppModal.svelte +17 -6
  63. package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
  64. package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
  65. package/package/components/apps/editor/AppEditor.svelte +9 -2
  66. package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
  67. package/package/components/apps/editor/AppPreview.svelte +12 -3
  68. package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
  69. package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
  70. package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
  71. package/package/components/apps/editor/appUtils.d.ts +1 -0
  72. package/package/components/apps/editor/appUtils.js +17 -0
  73. package/package/components/apps/editor/component/Component.svelte +23 -0
  74. package/package/components/apps/editor/component/components.d.ts +205 -3
  75. package/package/components/apps/editor/component/components.js +160 -1
  76. package/package/components/apps/editor/component/default-codes.js +13 -13
  77. package/package/components/apps/editor/component/sets.js +4 -2
  78. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
  79. package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
  80. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
  81. package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
  82. package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
  83. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
  84. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
  85. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
  86. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
  87. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
  88. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
  90. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
  93. package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
  94. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
  95. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
  96. package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
  97. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
  98. package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
  99. package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
  100. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
  101. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
  102. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
  103. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
  104. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
  105. package/package/components/apps/inputType.d.ts +2 -2
  106. package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
  107. package/package/components/apps/types.d.ts +3 -0
  108. package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
  109. package/package/components/common/CloseButton.svelte +10 -10
  110. package/package/components/common/CloseButton.svelte.d.ts +6 -14
  111. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
  112. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
  113. package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
  114. package/package/components/common/fileInput/FileInput.svelte +2 -0
  115. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/package/components/common/popup/Popup.svelte +4 -3
  117. package/package/components/common/popup/Popup.svelte.d.ts +1 -0
  118. package/package/components/common/table/AppRow.svelte +3 -10
  119. package/package/components/common/table/FlowRow.svelte +12 -1
  120. package/package/components/copilot/IteratorGen.svelte +1 -1
  121. package/package/components/copilot/PredicateGen.svelte +1 -1
  122. package/package/components/copilot/StepInputGen.svelte +8 -3
  123. package/package/components/copilot/StepInputsGen.svelte +5 -2
  124. package/package/components/details/WebhooksPanel.svelte +32 -1
  125. package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
  126. package/package/components/flows/FlowHistory.svelte +208 -0
  127. package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
  128. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  129. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
  130. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  131. package/package/components/flows/content/FlowLoop.svelte +23 -26
  132. package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
  133. package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
  134. package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
  135. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  136. package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  138. package/package/components/flows/content/SuspendDrawer.svelte +7 -7
  139. package/package/components/flows/flowStateUtils.js +2 -1
  140. package/package/components/flows/flowStore.js +1 -1
  141. package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
  142. package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
  143. package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
  144. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
  145. package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
  146. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  147. package/package/components/flows/map/MapItem.svelte +20 -0
  148. package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
  149. package/package/components/flows/map/VirtualItem.svelte +4 -2
  150. package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
  151. package/package/components/flows/previousResults.d.ts +9 -0
  152. package/package/components/flows/previousResults.js +42 -8
  153. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  154. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  155. package/package/components/flows/types.d.ts +1 -1
  156. package/package/components/graph/FlowGraph.svelte +80 -42
  157. package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
  158. package/package/components/graph/model.d.ts +6 -1
  159. package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
  160. package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
  161. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
  162. package/package/components/graph/util.d.ts +1 -1
  163. package/package/components/graph/util.js +1 -2
  164. package/package/components/home/ItemsList.svelte +22 -19
  165. package/package/components/jobs/JobPreview.svelte +11 -2
  166. package/package/components/propertyPicker/PropPicker.svelte +30 -0
  167. package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
  168. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  169. package/package/components/runs/JobLoader.svelte +21 -8
  170. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  171. package/package/components/runs/JobPreview.svelte +5 -1
  172. package/package/components/runs/RunRow.svelte +12 -8
  173. package/package/components/runs/RunsFilter.svelte +2 -4
  174. package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
  175. package/package/components/runs/RunsTable.svelte +63 -29
  176. package/package/components/runs/RunsTable.svelte.d.ts +1 -0
  177. package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
  178. package/package/components/schema/PropertyEditor.svelte +1 -1
  179. package/package/components/search/GlobalSearchModal.svelte +559 -0
  180. package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
  181. package/package/components/search/QuickMenuItem.svelte +76 -0
  182. package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
  183. package/package/components/sidebar/MenuButton.svelte +11 -0
  184. package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
  185. package/package/components/sidebar/changelogs.js +35 -0
  186. package/package/components/wizards/AppPicker.svelte +68 -0
  187. package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
  188. package/package/components/wizards/NavbarWizard.svelte +131 -0
  189. package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
  190. package/package/defaults.d.ts +1 -1
  191. package/package/defaults.js +1 -1
  192. package/package/es6.d.ts.txt +370 -1
  193. package/package/gen/core/OpenAPI.js +1 -1
  194. package/package/gen/schemas.gen.d.ts +42 -3
  195. package/package/gen/schemas.gen.js +42 -3
  196. package/package/gen/services.gen.d.ts +80 -5
  197. package/package/gen/services.gen.js +149 -8
  198. package/package/gen/types.gen.d.ts +265 -11
  199. package/package/inferArgSig.js +4 -0
  200. package/package/script_helpers.d.ts +3 -3
  201. package/package/script_helpers.js +46 -22
  202. package/package/stores.d.ts +1 -1
  203. package/package/stores.js +1 -1
  204. package/package/utils.d.ts +7 -23
  205. package/package/utils.js +54 -33
  206. package/package/windmill_fetch.d.ts.txt +6 -6
  207. package/package.json +3 -11
  208. package/package/components/ContentSearch.svelte +0 -355
@@ -138,7 +138,7 @@ let ccDrawer;
138
138
  <ListItem title={`${title}`} subtitle={`(${components.length})`}>
139
139
  <div class="flex flex-wrap gap-3 py-2">
140
140
  {#each components as item (item)}
141
- <div class="w-20 relative">
141
+ <div class="w-[64px] relative">
142
142
  {#if DEPRECATED_COMPONENTS[item]}
143
143
  <div
144
144
  class="absolute -top-2 -right-2 bg-gray-100 text-gray-900 dark:bg-gray-800 dark:text-gray-100 rounded-md py-0.5 px-1 flex flex-row gap-1 items-center"
@@ -166,7 +166,7 @@ let ccDrawer;
166
166
  })
167
167
  }}
168
168
  title={componentsRecord[item].name}
169
- class="cursor-move transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
169
+ class="cursor-move transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
170
170
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
171
171
  >
172
172
  <svelte:component this={componentsRecord[item].icon} class="text-primary" />
@@ -178,11 +178,11 @@ let ccDrawer;
178
178
  {/each}
179
179
  {#if presets}
180
180
  {#each presets as presetItem (presetItem)}
181
- <div class="w-20">
181
+ <div class="w-[64px]">
182
182
  <button
183
183
  on:click={() => addPresetComponent(presetItem)}
184
184
  title={presetsRecord[presetItem].name}
185
- class="transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
185
+ class="transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
186
186
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
187
187
  >
188
188
  <svelte:component
@@ -205,13 +205,13 @@ let ccDrawer;
205
205
  <div class="flex flex-wrap gap-3 py-2">
206
206
  {#if groups}
207
207
  {#each groups as group (group.path)}
208
- <div class="w-20">
208
+ <div class="w-[64px]">
209
209
  <button
210
210
  on:click={() => {
211
211
  addGroup(group)
212
212
  }}
213
213
  title={group.name}
214
- class="transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
214
+ class="transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
215
215
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
216
216
  >
217
217
  <LayoutDashboard class="text-secondary" />
@@ -222,13 +222,13 @@ let ccDrawer;
222
222
  </div>
223
223
  {/each}
224
224
  {/if}
225
- <div class="w-20">
225
+ <div class="w-[64px]">
226
226
  <button
227
227
  on:click={() => {
228
228
  addNewGroup()
229
229
  }}
230
230
  title=""
231
- class="transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
231
+ class="transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
232
232
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
233
233
  >
234
234
  <Plus class="text-secondary" />
@@ -241,13 +241,13 @@ let ccDrawer;
241
241
  <div class="flex flex-wrap gap-3 py-2">
242
242
  {#if customComponents}
243
243
  {#each customComponents as cc (cc.path)}
244
- <div class="w-20">
244
+ <div class="w-[64px]">
245
245
  <button
246
246
  on:click={() => {
247
247
  addCustomComponent(cc)
248
248
  }}
249
249
  title={cc.name}
250
- class="transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
250
+ class="transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
251
251
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
252
252
  >
253
253
  <LayoutDashboard class="text-secondary" />
@@ -258,7 +258,7 @@ let ccDrawer;
258
258
  </div>
259
259
  {/each}
260
260
  {/if}
261
- <div class="w-20">
261
+ <div class="w-[64px]">
262
262
  <button
263
263
  on:click={() => {
264
264
  if (!$enterpriseLicense) {
@@ -268,7 +268,7 @@ let ccDrawer;
268
268
  }
269
269
  }}
270
270
  title=""
271
- class="transition-all border w-20 shadow-sm h-16 p-2 flex flex-col gap-2 items-center
271
+ class="transition-all border w-[64px] shadow-sm h-16 p-2 flex flex-col gap-2 items-center
272
272
  justify-center bg-surface rounded-md hover:bg-blue-50 dark:hover:bg-blue-900 duration-200 hover:border-blue-500"
273
273
  >
274
274
  <Plus class="text-secondary" />
@@ -322,7 +322,13 @@ export const customisationByComponent = [
322
322
  variables: []
323
323
  },
324
324
  {
325
- components: ['aggridcomponent', 'aggridcomponentee'],
325
+ components: [
326
+ 'aggridcomponent',
327
+ 'aggridcomponentee',
328
+ 'aggridinfinitecomponent',
329
+ 'aggridinfinitecomponentee',
330
+ 'dbexplorercomponent'
331
+ ],
326
332
  selectors: [
327
333
  { selector: '.wm-aggrid-container', comment: 'Ag grid container', customCssKey: 'container' }
328
334
  ],
@@ -354,7 +360,7 @@ export const customisationByComponent = [
354
360
  variables: []
355
361
  },
356
362
  {
357
- components: ['fileinputcomponent'],
363
+ components: ['fileinputcomponent', 's3fileinputcomponent'],
358
364
  selectors: [
359
365
  { selector: '.wm-file-input', comment: 'File input component', customCssKey: 'input' }
360
366
  ],
@@ -517,7 +523,7 @@ export const customisationByComponent = [
517
523
  variables: []
518
524
  },
519
525
  {
520
- components: ['agchartscomponent'],
526
+ components: ['agchartscomponent', 'agchartscomponentee'],
521
527
  selectors: [{ selector: '.wm-agchart', comment: 'AgCharts', customCssKey: 'container' }],
522
528
  variables: []
523
529
  },
@@ -739,6 +745,36 @@ export const customisationByComponent = [
739
745
  }
740
746
  ],
741
747
  root: '.multiselect'
748
+ },
749
+ {
750
+ components: ['alertcomponent'],
751
+ selectors: [
752
+ {
753
+ selector: 'wm-alert-card-container',
754
+ comment: 'Alert container',
755
+ customCssKey: 'container'
756
+ }
757
+ ],
758
+ variables: []
759
+ },
760
+ {
761
+ components: ['decisiontreecomponent'],
762
+ selectors: [
763
+ {
764
+ selector: 'wm-decision-tree',
765
+ comment: 'Decision tree container',
766
+ customCssKey: 'container'
767
+ }
768
+ ],
769
+ variables: []
770
+ },
771
+ {
772
+ components: ['menucomponent'],
773
+ selectors: [
774
+ { selector: '.wm-menu-button', comment: 'Menu button', customCssKey: 'button' },
775
+ { selector: '.wm-menu-button-container', comment: 'Menu button container' }
776
+ ],
777
+ variables: []
742
778
  }
743
779
  ];
744
780
  export const allClasses = customisationByComponent
@@ -694,5 +694,11 @@ export const quickStyleProperties = {
694
694
  icon: containerDefaultProps,
695
695
  title: containerDefaultProps,
696
696
  description: containerDefaultProps
697
+ },
698
+ navbarcomponent: {
699
+ container: containerDefaultProps
700
+ },
701
+ dateselectcomponent: {
702
+ input: inputDefaultProps
697
703
  }
698
704
  };
@@ -15,7 +15,7 @@ export let expanded = false;
15
15
  const { connectingInput } = getContext('AppViewerContext');
16
16
  const name = getComponentNameById(gridItem.id);
17
17
  $: nameOverrides =
18
- gridItem.data.type === 'decisiontreecomponent'
18
+ gridItem?.data?.type === 'decisiontreecomponent'
19
19
  ? gridItem.data.nodes.map((n, i) => `${n.label} (Tab index ${i})`)
20
20
  : undefined;
21
21
  function getComponentNameById(componentId) {
@@ -32,7 +32,7 @@ function getComponentNameById(componentId) {
32
32
  return 'Table action';
33
33
  }
34
34
  }
35
- $: subGrids = Array.from({ length: gridItem.data.numberOfSubgrids ?? 0 }).map((_, i) => `${gridItem.id}-${i}`);
35
+ $: subGrids = Array.from({ length: gridItem.data?.numberOfSubgrids ?? 0 }).map((_, i) => `${gridItem.id}-${i}`);
36
36
  </script>
37
37
 
38
38
  <OutputHeader id={gridItem.id} name={getComponentNameById(gridItem.id)} {first} {nested}>
@@ -7,12 +7,18 @@ import ComponentOutputViewer from './ComponentOutputViewer.svelte';
7
7
  import BackgroundScriptsOutput from './components/BackgroundScriptsOutput.svelte';
8
8
  import OutputHeader from './components/OutputHeader.svelte';
9
9
  import { ClearableInput } from '../../../common';
10
+ import DocLink from '../settingsPanel/DocLink.svelte';
10
11
  const { connectingInput, app } = getContext('AppViewerContext');
11
12
  const { search } = getContext('ContextPanel');
12
13
  let hasState = false;
13
14
  </script>
14
15
 
15
16
  <PanelSection noPadding titlePadding="px-2 pt-2" title="Outputs">
17
+ <svelte:fragment slot="action">
18
+ <div class="p-0.5">
19
+ <DocLink docLink="https://www.windmill.dev/docs/apps/outputs" />
20
+ </div>
21
+ </svelte:fragment>
16
22
  <div
17
23
  class={classNames(
18
24
  'bg-surface w-full h-full z-30 overflow-auto',
@@ -4,6 +4,7 @@ import { ChevronDown, ChevronUp, Pointer } from 'lucide-svelte';
4
4
  import { getContext } from 'svelte';
5
5
  import { allsubIds, findGridItem } from '../../appUtils';
6
6
  import IdEditor from './IdEditor.svelte';
7
+ import DocLink from '../../settingsPanel/DocLink.svelte';
7
8
  export let id;
8
9
  export let name;
9
10
  export let first = false;
@@ -227,6 +228,16 @@ function processRunnable(from, to, runnable) {
227
228
  {/if}
228
229
  </div>
229
230
  <div class="text-2xs font-bold flex flex-row gap-2 items-center truncate">
231
+ {#if ['ctx', 'state'].includes(id)}
232
+ <DocLink
233
+ docLink={id === 'state'
234
+ ? 'https://www.windmill.dev/docs/apps/outputs#state'
235
+ : id === 'ctx'
236
+ ? 'https://www.windmill.dev/docs/apps/outputs#app-context'
237
+ : ''}
238
+ size="xs2"
239
+ />
240
+ {/if}
230
241
  {name}
231
242
  <div class={classNames('bg-surface-secondary rounded-sm')}>
232
243
  {#if !open}
@@ -9,6 +9,7 @@ import AppTutorials from '../../../AppTutorials.svelte';
9
9
  import { tutorialsToDo } from '../../../../stores';
10
10
  import { ignoredTutorials } from '../../../tutorials/ignoredTutorials';
11
11
  import { tutorialInProgress } from '../../../../tutorialUtils';
12
+ import DocLink from '../settingsPanel/DocLink.svelte';
12
13
  const PREFIX = 'script-selector-';
13
14
  const { app, selectedComponent } = getContext('AppViewerContext');
14
15
  const { selectedComponentInEditor } = getContext('AppEditorContext');
@@ -64,6 +65,9 @@ let appTutorials = undefined;
64
65
  </script>
65
66
 
66
67
  <PanelSection title="Runnables" id="app-editor-runnable-panel">
68
+ <svelte:fragment slot="action">
69
+ <DocLink docLink="https://www.windmill.dev/docs/apps/app-runnable-panel#creating-a-runnable" />
70
+ </svelte:fragment>
67
71
  <div class="w-full flex flex-col gap-6 py-1">
68
72
  <div>
69
73
  <div class="flex flex-col gap-2 w-full">
@@ -6,6 +6,7 @@ import { dragHandle, dragHandleZone } from '@windmill-labs/svelte-dnd-action';
6
6
  import { generateRandomString, pluralize } from '../../../../utils';
7
7
  import Toggle from '../../../Toggle.svelte';
8
8
  import QuickAddColumn from './QuickAddColumn.svelte';
9
+ import RefreshDatabaseStudioTable from './RefreshDatabaseStudioTable.svelte';
9
10
  export let componentInput;
10
11
  export let subFieldType = undefined;
11
12
  export let selectOptions = undefined;
@@ -191,11 +192,20 @@ function handleFinalize(e) {
191
192
  const reorderedValues = items.map((item) => item.value);
192
193
  componentInput.value = reorderedValues;
193
194
  }
194
- let items = (Array.isArray(componentInput.value) ? componentInput.value : [])
195
- .filter((x) => x != undefined)
196
- .map((item, index) => {
197
- return { value: item, id: generateRandomString() };
198
- });
195
+ let items = getItems(componentInput);
196
+ function getItems(componentInput) {
197
+ return (Array.isArray(componentInput.value) ? componentInput.value : [])
198
+ .filter((x) => x != undefined)
199
+ .map((item) => {
200
+ return { value: item, id: generateRandomString() };
201
+ });
202
+ }
203
+ function clearTableOnComponentReset(value) {
204
+ if (Array.isArray(value) && value.length === 0 && items.length > 0) {
205
+ items = [];
206
+ }
207
+ }
208
+ $: subFieldType === 'db-explorer' && clearTableOnComponentReset(componentInput?.value);
199
209
  $: items != undefined && handleItemsChange();
200
210
  function handleItemsChange() {
201
211
  componentInput.value = items.map((item) => item.value).filter((item) => item != undefined);
@@ -280,11 +290,14 @@ let raw = false;
280
290
  {/if}
281
291
  {#if subFieldType === 'db-explorer'}
282
292
  {#if componentInput.loading}
283
- <div class="flex flex-row gap-2 w-full items-center text-xs">
284
- <Loader2 class="animate-spin" size={14} />
285
- Loading columns defintions...
293
+ <div class="flex flex-row gap-2 w-full items-center">
294
+ <div class="flex flex-row gap-2 w-full items-center text-xs">
295
+ <Loader2 class="animate-spin" size={14} />
296
+ Loading columns defintions...
297
+ </div>
286
298
  </div>
287
299
  {/if}
300
+ <RefreshDatabaseStudioTable {id} />
288
301
  {/if}
289
302
  {#if subFieldType !== 'db-explorer'}
290
303
  <Button size="xs" color="light" startIcon={{ icon: Plus }} on:click={() => addElementByType()}>
@@ -15,18 +15,19 @@ import TemplateEditor from '../../../TemplateEditor.svelte';
15
15
  import { ccomponents, components } from '../component';
16
16
  import CssProperty from '../componentsPanel/CssProperty.svelte';
17
17
  import GridTab from './GridTab.svelte';
18
- import { deleteGridItem } from '../appUtils';
18
+ import { deleteGridItem, isTableAction } from '../appUtils';
19
19
  import GridPane from './GridPane.svelte';
20
20
  import { slide } from 'svelte/transition';
21
21
  import { push } from '../../../../history';
22
22
  import StylePanel from './StylePanel.svelte';
23
- import { ChevronLeft, ExternalLink, ArrowBigUp } from 'lucide-svelte';
23
+ import { ChevronLeft, ArrowBigUp, ArrowLeft } from 'lucide-svelte';
24
24
  import GridCondition from './GridCondition.svelte';
25
25
  import { isTriggerable } from './script/utils';
26
26
  import { inferDeps } from '../appUtilsInfer';
27
27
  import EvalV2InputEditor from './inputEditor/EvalV2InputEditor.svelte';
28
28
  import GridGroup from './GridGroup.svelte';
29
29
  import { secondaryMenuLeft } from './secondaryMenu';
30
+ import DocLink from './DocLink.svelte';
30
31
  import ComponentControl from './ComponentControl.svelte';
31
32
  import GridAgGridLicenseKey from './GridAgGridLicenseKey.svelte';
32
33
  import ComponentPanelDataSource from './ComponentPanelDataSource.svelte';
@@ -36,6 +37,10 @@ import GridAgChartsLicenseKe from './GridAgChartsLicenseKe.svelte';
36
37
  import Toggle from '../../../Toggle.svelte';
37
38
  import ContextVariables from './ContextVariables.svelte';
38
39
  import EventHandlers from './EventHandlers.svelte';
40
+ import GridNavbar from './GridNavbar.svelte';
41
+ import Badge from '../../../common/badge/Badge.svelte';
42
+ import { twMerge } from 'tailwind-merge';
43
+ import Popover from '../../../Popover.svelte';
39
44
  export let componentSettings = undefined;
40
45
  export let onDelete = undefined;
41
46
  export let noGrid = false;
@@ -133,22 +138,54 @@ function transformToFrontend() {
133
138
 
134
139
  <svelte:window on:keydown={keydown} />
135
140
 
141
+ {#if componentSettings?.item?.id && isTableAction(componentSettings?.item?.id, $app)}
142
+ <div
143
+ class="flex items-center px-3 py-2 bg-surface border-b text-xs font-semibold gap-2 justify-between"
144
+ >
145
+ <div class="flex flex-row items-center gap-2">
146
+ <Popover>
147
+ <svelte:fragment slot="text">
148
+ <div class="flex flex-row gap-1"> Back to table component </div>
149
+ </svelte:fragment>
150
+ <Button
151
+ iconOnly
152
+ startIcon={{
153
+ icon: ArrowLeft
154
+ }}
155
+ size="xs"
156
+ btnClasses={twMerge(
157
+ 'p-1 text-gray-300 hover:!text-gray-600 dark:text-gray-500 dark:hover:!text-gray-200 bg-transparent'
158
+ )}
159
+ on:click={() => {
160
+ const tableId = componentSettings?.item?.id?.split?.('_')?.[0]
161
+
162
+ if (tableId) {
163
+ $selectedComponent = [tableId]
164
+ }
165
+ }}
166
+ color="light"
167
+ />
168
+ </Popover>
169
+
170
+ <div class="flex flex-row gap-2 items-center">
171
+ Table action of table
172
+ <Badge color="indigo">{componentSettings?.item?.id.split('_')[0]}</Badge>
173
+ </div>
174
+ </div>
175
+
176
+ <DocLink
177
+ docLink="https://www.windmill.dev/docs/apps/app_configuration_settings/aggrid_table#table-actions"
178
+ />
179
+ </div>
180
+ {/if}
181
+
136
182
  {#if componentSettings?.item?.data}
137
183
  {@const component = componentSettings.item.data}
138
- <div class="flex justify-between items-center px-3 py-2 bg-surface-secondary">
184
+ <div class="flex justify-between items-center px-3 py-1 bg-surface-secondary">
139
185
  <div class="text-xs text-primary font-semibold"
140
186
  >{components[componentSettings.item.data.type]?.name ?? 'Unknown'}</div
141
187
  >
142
- <a
143
- href={components[componentSettings.item.data.type]?.documentationLink}
144
- target="_blank"
145
- class="text-frost-500 dark:text-frost-300 font-semibold text-xs"
146
- >
147
- <div class="flex flex-row gap-2">
148
- See documentation
149
- <ExternalLink size="16" />
150
- </div>
151
- </a>
188
+ <DocLink docLink={components[componentSettings.item.data.type]?.documentationLink} />
152
189
  </div>
153
190
 
154
191
  <div class="flex min-h-[calc(100%-32px)] flex-col min-w-[150px] w-full divide-y">
@@ -165,16 +202,19 @@ function transformToFrontend() {
165
202
  id={'component-input'}
166
203
  >
167
204
  <svelte:fragment slot="action">
168
- {#if componentSettings.item.data.type !== 'plotlycomponentv2'}
169
- <span
205
+ <div class="flex flex-row gap-1 justify-center items-center">
206
+ <DocLink
207
+ docLink={'https://www.windmill.dev/docs/apps/app-runnable-panel#creating-a-runnable'}
208
+ />
209
+ <div
170
210
  class={classNames(
171
- 'text-white px-2 text-2xs py-0.5 font-bold rounded-sm w-fit',
211
+ 'text-white px-2 text-2xs py-0.5 font-bold rounded-sm',
172
212
  'bg-indigo-500'
173
213
  )}
174
214
  >
175
215
  {`${component.id}`}
176
- </span>
177
- {/if}
216
+ </div>
217
+ </div>
178
218
  </svelte:fragment>
179
219
 
180
220
  {#if componentSettings.item.data.componentInput}
@@ -250,7 +290,8 @@ function transformToFrontend() {
250
290
  {/if}
251
291
  </div>
252
292
  {/if}
253
- <ContextVariables type={component.type} />
293
+
294
+ <ContextVariables type={component.type} id={component.id} />
254
295
 
255
296
  {#key $stateId}
256
297
  {#if componentSettings.item.data.componentInput?.type === 'runnable'}
@@ -293,6 +334,9 @@ function transformToFrontend() {
293
334
 
294
335
  <ComponentControl type={component.type} />
295
336
 
337
+ {#if componentSettings.item.data.type === 'navbarcomponent'}
338
+ <GridNavbar bind:navbarItems={componentSettings.item.data.navbarItems} id={component.id} />
339
+ {/if}
296
340
  {#if componentSettings.item.data.type === 'tabscomponent'}
297
341
  <GridTab
298
342
  bind:tabs={componentSettings.item.data.tabs}
@@ -375,7 +419,7 @@ function transformToFrontend() {
375
419
  size="xs"
376
420
  variant="border"
377
421
  startIcon={{ icon: ChevronLeft }}
378
- on:click={() => secondaryMenuLeft.toggle(StylePanel, {})}
422
+ on:click={() => secondaryMenuLeft.toggle(StylePanel, { type: 'style' })}
379
423
  >
380
424
  Show
381
425
  </Button>
@@ -1,6 +1,10 @@
1
1
  <script>import Popover from '../../../Popover.svelte';
2
2
  import Tooltip from '../../../Tooltip.svelte';
3
+ import { getContext } from 'svelte';
4
+ import { dfs, findGridItem } from '../appUtils';
3
5
  export let type;
6
+ export let id;
7
+ const { app } = getContext('AppViewerContext');
4
8
  const tables = [
5
9
  'aggridcomponent',
6
10
  'aggridcomponentee',
@@ -9,30 +13,59 @@ const tables = [
9
13
  'aggridinfinitecomponentee'
10
14
  ];
11
15
  const contextVariables = [];
16
+ function addContextVariable(label, description) {
17
+ if (!contextVariables.some((variable) => variable.label === label)) {
18
+ contextVariables.push({ label, description });
19
+ }
20
+ }
12
21
  if (tables.includes(type)) {
13
- contextVariables.push({
14
- label: 'row',
15
- description: 'The current row of a table. Row is an object with keys index and value.'
16
- });
22
+ addContextVariable('row', 'The current row of a table. Row is an object with keys index and value.');
17
23
  }
18
24
  else if (type === 's3fileinputcomponent' || type === 'fileinputcomponent') {
19
- contextVariables.push({
20
- label: 'file',
21
- description: 'The current file being processed.'
22
- });
25
+ addContextVariable('file', 'The current file being processed.');
23
26
  }
24
27
  else if (type === 'containercomponent') {
25
- contextVariables.push({
26
- label: 'group',
27
- description: 'The group name of the container.'
28
- });
28
+ addContextVariable('group', 'The group name of the container.');
29
29
  }
30
30
  else if (type === 'listcomponent') {
31
- contextVariables.push({
32
- label: 'iter',
33
- description: 'The current iteration of the list. Iter is an object with keys index and value.'
31
+ addContextVariable('iter', 'The current iteration of the list. Iter is an object with keys index and value.');
32
+ }
33
+ function addGridItemContext(parentId) {
34
+ if (!parentId)
35
+ return;
36
+ const gridItem = findGridItem($app, parentId);
37
+ addParentContextVariable(gridItem);
38
+ }
39
+ function processParents(parents) {
40
+ parents.forEach((parentId) => {
41
+ if (parentId) {
42
+ const parsedParentId = parentId?.includes('-') ? parentId.split('-')[0] : parentId;
43
+ addGridItemContext(parsedParentId);
44
+ }
34
45
  });
35
46
  }
47
+ function findParentsContextVariables(id) {
48
+ if (!id)
49
+ return;
50
+ const allParents = dfs($app.grid, id, $app.subgrids ?? {});
51
+ if (!allParents)
52
+ return;
53
+ // Remove last element as it is the current component
54
+ allParents.pop();
55
+ processParents(allParents);
56
+ }
57
+ findParentsContextVariables(id);
58
+ function addParentContextVariable(parent) {
59
+ if (parent?.data?.type === 'containercomponent') {
60
+ addContextVariable('group', 'The group name of the container.');
61
+ }
62
+ else if (parent?.data?.type === 'listcomponent') {
63
+ addContextVariable('iter', 'The current iteration of the list. Iter is an object with keys index and value.');
64
+ }
65
+ else if (parent?.data?.type && tables.includes(parent?.data?.type)) {
66
+ addContextVariable('row', 'The current row of a table. Row is an object with keys index and value.');
67
+ }
68
+ }
36
69
  </script>
37
70
 
38
71
  {#if contextVariables.length > 0}
@@ -2,6 +2,7 @@ import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  type: string;
5
+ id: string;
5
6
  };
6
7
  events: {
7
8
  [evt: string]: CustomEvent<any>;
@@ -1,7 +1,7 @@
1
- <script>import { Button, Drawer, DrawerContent } from '../../../common';
1
+ <script>import { Alert, Button, Drawer, DrawerContent } from '../../../common';
2
2
  import { Network, Plus, Trash } from 'lucide-svelte';
3
3
  import { Pane, Splitpanes } from 'svelte-splitpanes';
4
- import { setContext } from 'svelte';
4
+ import { getContext, setContext } from 'svelte';
5
5
  import InputsSpecEditor from './InputsSpecEditor.svelte';
6
6
  import Section from '../../../Section.svelte';
7
7
  import { writable } from 'svelte/store';
@@ -9,6 +9,7 @@ import DecisionTreePreview from './decisionTree/DecisionTreePreview.svelte';
9
9
  import { addNewBranch, removeNode } from './decisionTree/utils';
10
10
  import Label from '../../../Label.svelte';
11
11
  import { debounce } from '../../../../utils';
12
+ import Badge from '../../../common/badge/Badge.svelte';
12
13
  export let component;
13
14
  export let nodes;
14
15
  export let rebuildOnChange = undefined;
@@ -16,6 +17,7 @@ let drawer = undefined;
16
17
  let paneWidth = 0;
17
18
  let paneHeight = 0;
18
19
  let renderCount = 0;
20
+ const { debuggingComponents } = getContext('AppViewerContext');
19
21
  const selectedNodeId = writable(undefined);
20
22
  $: selectedNode = nodes?.find((node) => node.id == $selectedNodeId);
21
23
  setContext('DecisionTreeEditor', { selectedNodeId });
@@ -57,6 +59,11 @@ setContext('DecisionTreeEditor', { selectedNodeId });
57
59
  variant="border"
58
60
  on:click={() => {
59
61
  nodes = removeNode(nodes, selectedNode)
62
+
63
+ $debuggingComponents = Object.fromEntries(
64
+ Object.entries($debuggingComponents).filter(([key]) => key !== component.id)
65
+ )
66
+
60
67
  renderCount++
61
68
  }}
62
69
  disabled={selectedNode?.next?.length > 1 || nodes.length == 1}
@@ -87,9 +94,9 @@ setContext('DecisionTreeEditor', { selectedNodeId });
87
94
  <div class="grow relative">
88
95
  <InputsSpecEditor
89
96
  key={`condition-${selectedNode.id}-${index}`}
90
- customTitle={`${index > 0 ? 'Otherwise ' : ''}Goes to branch ${
91
- index + 1
92
- } (First node: ${nodes?.findIndex((node) => node.id == subNode.id)}) if:`}
97
+ customTitle={index === 0
98
+ ? 'Goes to the default branch'
99
+ : `${index > 0 ? 'Otherwise ' : ''}Goes to branch ${index}`}
93
100
  bind:componentInput={subNode.condition}
94
101
  id={selectedNode.id}
95
102
  userInputEnabled={false}
@@ -105,10 +112,23 @@ setContext('DecisionTreeEditor', { selectedNodeId });
105
112
  displayType={false}
106
113
  fixedOverflowWidgets={false}
107
114
  />
115
+ <div class="flex flex-row gap-1 mt-2">
116
+ <Badge>
117
+ {`Next node id: ${subNode.id}`}
118
+ </Badge>
119
+ <Badge color="indigo">
120
+ {`Next tab index: ${nodes?.findIndex((node) => node.id == subNode.id)}`}
121
+ </Badge>
122
+ </div>
108
123
  </div>
109
124
  </div>
110
125
  {/if}
111
126
  {/each}
127
+
128
+ <Alert type="info" class="mt-4" title="Multiple branches" size="xs">
129
+ The conditions above are evaluated in order. The first condition that is met will
130
+ be the branch that is taken.
131
+ </Alert>
112
132
  {/if}
113
133
  {#key selectedNode.id}
114
134
  {#if selectedNode.allowed}
@@ -11,6 +11,7 @@ export let selected = false;
11
11
  export let canDelete = true;
12
12
  export let canAddBranch = true;
13
13
  export let index;
14
+ export let darkMode;
14
15
  let open = false;
15
16
  const dispatch = createEventDispatcher();
16
17
  const { selectedNodeId } = getContext('DecisionTreeEditor');
@@ -24,7 +25,7 @@ $: selected = $selectedNodeId === node.id;
24
25
  selected ? 'outline outline-2 outline-offset-2 outline-gray-600' : '',
25
26
  'flex flex-row gap-2 items-center justify-between'
26
27
  )}
27
- style="width: 275px; height: 34px; background-color: {getStateColor(undefined)};"
28
+ style="width: 275px; height: 34px; background-color: {getStateColor(undefined, darkMode)};"
28
29
  on:click={() => {
29
30
  selected = true
30
31
  dispatch('select', node.id)
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  canDelete?: boolean | undefined;
8
8
  canAddBranch?: boolean | undefined;
9
9
  index: number;
10
+ darkMode: boolean;
10
11
  };
11
12
  events: {
12
13
  select: CustomEvent<string>;