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
@@ -3,7 +3,7 @@ import SubGridEditor from '../../editor/SubGridEditor.svelte';
3
3
  import { initCss } from '../../utils';
4
4
  import { Button } from '../../../common';
5
5
  import { twMerge } from 'tailwind-merge';
6
- import { initConfig, initOutput } from '../../editor/appUtils';
6
+ import { initConfig, initOutput, maxHeight, ROW_GAP_Y, ROW_HEIGHT } from '../../editor/appUtils';
7
7
  import InitializeComponent from '../helpers/InitializeComponent.svelte';
8
8
  import Portal from 'svelte-portal';
9
9
  import { clickOutside } from '../../../../utils';
@@ -22,7 +22,7 @@ export let noWFull = false;
22
22
  export let render;
23
23
  export let onOpenRecomputeIds = undefined;
24
24
  export let onCloseRecomputeIds = undefined;
25
- const { app, focusedGrid, selectedComponent, worldStore, connectingInput, mode, componentControl, runnableComponents } = getContext('AppViewerContext');
25
+ const { app, focusedGrid, selectedComponent, worldStore, connectingInput, mode, componentControl, runnableComponents, breakpoint } = getContext('AppViewerContext');
26
26
  //used so that we can count number of outputs setup for first refresh
27
27
  const outputs = initOutput($worldStore, id, {
28
28
  open: false
@@ -53,6 +53,13 @@ $componentControl[id] = {
53
53
  disposable?.closeDrawer();
54
54
  }
55
55
  };
56
+ let wrapperHeight = 0;
57
+ let headerHeight = 0;
58
+ $: containerHeight = Math.min(
59
+ // 8px * 2 of padding
60
+ maxHeight($app.subgrids?.[`${id}-0`] ?? [], 0, $breakpoint) * (ROW_HEIGHT + ROW_GAP_Y) + 16,
61
+ // 32px (2rem) of top and bottom margin
62
+ wrapperHeight - headerHeight - 64);
56
63
  </script>
57
64
 
58
65
  <InitializeComponent {id} />
@@ -111,7 +118,6 @@ $componentControl[id] = {
111
118
  </AlignWrapper>
112
119
  </div>
113
120
  {/if}
114
-
115
121
  <Portal target="#app-editor-top-level-drawer">
116
122
  <Disposable
117
123
  {id}
@@ -136,6 +142,7 @@ $componentControl[id] = {
136
142
  open ? ' bg-black bg-opacity-60' : 'h-0 overflow-hidden invisible'
137
143
  )}
138
144
  style="z-index: {zIndex}"
145
+ bind:clientHeight={wrapperHeight}
139
146
  >
140
147
  <div
141
148
  style={css?.popup?.style}
@@ -147,7 +154,10 @@ $componentControl[id] = {
147
154
  }
148
155
  }}
149
156
  >
150
- <div class="px-4 py-2 border-b flex justify-between items-center">
157
+ <div
158
+ class="px-4 py-2 border-b flex justify-between items-center"
159
+ bind:clientHeight={headerHeight}
160
+ >
151
161
  <div>{resolvedConfig.modalTitle}</div>
152
162
  <div class="w-8">
153
163
  <button
@@ -160,8 +170,9 @@ $componentControl[id] = {
160
170
  </button>
161
171
  </div>
162
172
  </div>
173
+
163
174
  <div
164
- class="wm-modal"
175
+ class={twMerge('wm-modal h-full', 'overflow-y-auto')}
165
176
  on:pointerdown={(e) => {
166
177
  e?.stopPropagation()
167
178
  if (!$connectingInput.opened) {
@@ -177,7 +188,7 @@ $componentControl[id] = {
177
188
  <SubGridEditor
178
189
  visible={open && render}
179
190
  {id}
180
- noPadding
191
+ {containerHeight}
181
192
  subGridId={`${id}-0`}
182
193
  on:focus={() => {
183
194
  if (!$connectingInput.opened) {
@@ -3,10 +3,9 @@ import { AppService } from '../../../gen';
3
3
  import { workspaceStore } from '../../../stores';
4
4
  import { sendUserToast } from '../../../toast';
5
5
  import DeploymentHistory from './DeploymentHistory.svelte';
6
- let appPath = undefined;
6
+ export let appPath = undefined;
7
7
  let historyBrowserDrawerOpen = false;
8
- export function open(appPath) {
9
- appPath = appPath;
8
+ export function open() {
10
9
  historyBrowserDrawerOpen = true;
11
10
  }
12
11
  async function updateApp(app) {
@@ -1,7 +1,8 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
- open?: ((appPath: string) => void) | undefined;
4
+ appPath?: string | undefined;
5
+ open?: (() => void) | undefined;
5
6
  };
6
7
  events: {
7
8
  [evt: string]: CustomEvent<any>;
@@ -12,6 +13,6 @@ export type AppDeploymentHistoryProps = typeof __propDef.props;
12
13
  export type AppDeploymentHistoryEvents = typeof __propDef.events;
13
14
  export type AppDeploymentHistorySlots = typeof __propDef.slots;
14
15
  export default class AppDeploymentHistory extends SvelteComponent<AppDeploymentHistoryProps, AppDeploymentHistoryEvents, AppDeploymentHistorySlots> {
15
- get open(): (appPath: string) => void;
16
+ get open(): () => void;
16
17
  }
17
18
  export {};
@@ -33,6 +33,7 @@ import DarkModeObserver from '../../DarkModeObserver.svelte';
33
33
  import { getTheme } from './componentsPanel/themeUtils';
34
34
  import StylePanel from './settingsPanel/StylePanel.svelte';
35
35
  import RunnableJobPanel from './RunnableJobPanel.svelte';
36
+ import { goto, replaceState } from '$app/navigation';
36
37
  export let app;
37
38
  export let path;
38
39
  export let policy;
@@ -103,7 +104,8 @@ setContext('AppViewerContext', {
103
104
  darkMode,
104
105
  cssEditorOpen,
105
106
  previewTheme,
106
- debuggingComponents: writable({})
107
+ debuggingComponents: writable({}),
108
+ replaceStateFn: (path) => replaceState(path, $page.state)
107
109
  });
108
110
  let scale = writable(100);
109
111
  const componentActive = writable(false);
@@ -243,7 +245,10 @@ else if (!$connectingInput.opened && toggled) {
243
245
  }
244
246
  // Animation logic for cssInput
245
247
  $: animateCssInput($cssEditorOpen);
246
- $: $cssEditorOpen && secondaryMenuLeft?.open(StylePanel, {});
248
+ $: $cssEditorOpen &&
249
+ secondaryMenuLeft?.open(StylePanel, {
250
+ type: 'style'
251
+ });
247
252
  function animateCssInput(cssEditorOpen) {
248
253
  if (cssEditorOpen && !cssToggled) {
249
254
  cssToggled = true;
@@ -420,6 +425,8 @@ let runnableJobEnterTimeout = undefined;
420
425
  isEditor
421
426
  {context}
422
427
  noBackend={false}
428
+ replaceStateFn={(path) => replaceState(path, $page.state)}
429
+ gotoFn={(path, opt) => goto(path, opt)}
423
430
  />
424
431
  </div>
425
432
  </SplitPanesWrapper>
@@ -45,6 +45,7 @@ import { getInsertInput } from '../components/display/dbtable/queries/insert';
45
45
  import { getUpdateInput } from '../components/display/dbtable/queries/update';
46
46
  import { getDeleteInput } from '../components/display/dbtable/queries/delete';
47
47
  import { collectOneOfFields } from './appUtils';
48
+ import Summary from '../../Summary.svelte';
48
49
  async function hash(message) {
49
50
  try {
50
51
  const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
@@ -997,7 +998,11 @@ export function openTroubleshootPanel() {
997
998
  {/if}
998
999
  {#if job?.args}
999
1000
  <div class="p-2">
1000
- <JobArgs args={job?.args} />
1001
+ <JobArgs
1002
+ id={job.id}
1003
+ workspace={job.workspace_id ?? $workspaceStore ?? 'no_w'}
1004
+ args={job?.args}
1005
+ />
1001
1006
  </div>
1002
1007
  {/if}
1003
1008
  {#if job?.raw_code}
@@ -1120,15 +1125,7 @@ export function openTroubleshootPanel() {
1120
1125
  class="border-b flex flex-row justify-between py-1 gap-2 gap-y-2 px-2 items-center overflow-y-visible overflow-x-auto"
1121
1126
  >
1122
1127
  <div class="flex flex-row gap-2 items-center">
1123
- <div class="min-w-64 w-64">
1124
- <input
1125
- type="text"
1126
- placeholder="App summary"
1127
- class="text-sm w-full font-semibold"
1128
- bind:value={$summary}
1129
- on:keydown|stopPropagation
1130
- />
1131
- </div>
1128
+ <Summary bind:value={$summary} />
1132
1129
  <div class="flex gap-2">
1133
1130
  <UndoRedo
1134
1131
  undoProps={{ disabled: $history?.index === 0 }}
@@ -27,6 +27,8 @@ export let context;
27
27
  export let noBackend = false;
28
28
  export let isLocked = false;
29
29
  export let hideRefreshBar = false;
30
+ export let replaceStateFn = (path) => window.history.replaceState(null, '', path);
31
+ export let gotoFn = (path, opt) => window.history.pushState(null, '', path);
30
32
  migrateApp(app);
31
33
  const appStore = writable(app);
32
34
  const selectedComponent = writable(undefined);
@@ -81,7 +83,9 @@ setContext('AppViewerContext', {
81
83
  darkMode,
82
84
  cssEditorOpen: writable(false),
83
85
  previewTheme: writable(undefined),
84
- debuggingComponents: writable({})
86
+ debuggingComponents: writable({}),
87
+ replaceStateFn,
88
+ gotoFn
85
89
  });
86
90
  let previousSelectedIds = undefined;
87
91
  $: if (!deepEqual(previousSelectedIds, $selectedComponent)) {
@@ -128,8 +132,13 @@ function addOrRemoveCss(isPremium, cssString) {
128
132
  link.innerHTML = cssString;
129
133
  head.appendChild(link);
130
134
  }
131
- else if (existingElement && cssString) {
132
- existingElement.innerHTML = cssString;
135
+ else if (existingElement) {
136
+ if (cssString) {
137
+ existingElement.innerHTML = cssString;
138
+ }
139
+ else {
140
+ existingElement.innerHTML = '';
141
+ }
133
142
  }
134
143
  }
135
144
  }
@@ -16,6 +16,8 @@ declare const __propDef: {
16
16
  noBackend?: boolean | undefined;
17
17
  isLocked?: boolean | undefined;
18
18
  hideRefreshBar?: boolean | undefined;
19
+ replaceStateFn?: ((path: string) => void) | undefined;
20
+ gotoFn?: ((path: string, opt?: Record<string, any> | undefined) => void) | undefined;
19
21
  };
20
22
  events: {
21
23
  [evt: string]: CustomEvent<any>;
@@ -9,88 +9,112 @@ export let id;
9
9
  const { componentControl, debuggingComponents, worldStore } = getContext('AppViewerContext');
10
10
  const dispatch = createEventDispatcher();
11
11
  let currentNodeId = $worldStore.outputsById[id]?.currentNodeId?.peak() ?? 'a';
12
- $worldStore.outputsById[id]?.currentNodeId?.subscribe({
13
- id: id,
14
- next: (value) => {
15
- currentNodeId = value;
12
+ function subscribeToCurrentNode(id) {
13
+ return $worldStore.outputsById[id]?.currentNodeId?.subscribe({
14
+ id: `id-${id}-${currentNodeId}`,
15
+ next: (value) => {
16
+ currentNodeId = value;
17
+ }
18
+ }, currentNodeId);
19
+ }
20
+ let subscription = subscribeToCurrentNode(id);
21
+ function onDebugNode(debuggedNodeIndex) {
22
+ if (debuggedNodeIndex === undefined) {
23
+ return;
24
+ }
25
+ if (debuggedNodeIndex !== undefined && nodes[debuggedNodeIndex]?.id === undefined) {
26
+ currentNodeId = nodes[0]?.id ?? '';
27
+ $componentControl?.[id]?.setTab?.(0);
28
+ $debuggingComponents = Object.fromEntries(Object.entries($debuggingComponents).filter(([key]) => key !== id));
29
+ }
30
+ }
31
+ $: onDebugNode($debuggingComponents[id]);
32
+ let renderCount = 0;
33
+ let lastNodes = nodes;
34
+ function onNodesChange(newNodes) {
35
+ if (JSON.stringify(newNodes) !== JSON.stringify(lastNodes)) {
36
+ lastNodes = newNodes;
37
+ if (subscription) {
38
+ subscription?.();
39
+ }
40
+ subscription = subscribeToCurrentNode(id);
41
+ renderCount++;
16
42
  }
17
- }, currentNodeId);
18
- $: if (nodes[$debuggingComponents[id] ?? 0]?.id === undefined) {
19
- currentNodeId = '';
20
- $componentControl?.[id]?.setTab?.(0);
21
- $debuggingComponents = Object.fromEntries(Object.entries($debuggingComponents).filter(([key]) => key !== id));
22
43
  }
44
+ $: onNodesChange(nodes);
23
45
  </script>
24
46
 
25
- <button
26
- title={'Debug tabs'}
27
- class={classNames(
28
- 'text-2xs py-0.5 font-bold w-fit border cursor-pointer rounded-sm',
29
- isDebugging($debuggingComponents, id)
30
- ? 'bg-red-100 text-red-600 border-red-500 hover:bg-red-200 hover:text-red-800'
31
- : 'bg-indigo-100 text-indigo-600 border-indigo-500 hover:bg-indigo-200 hover:text-indigo-800'
32
- )}
33
- on:click={() => dispatch('triggerInlineEditor')}
34
- on:pointerdown|stopPropagation
35
- >
36
- <ButtonDropdown hasPadding={false}>
37
- <svelte:fragment slot="buttonReplacement">
38
- <div class="px-1">
39
- {#if isDebugging($debuggingComponents, id)}
40
- <div class="flex flex-row items-center gap-2">
41
- {`Debugging node ${nodes[$debuggingComponents[id] ?? 0]?.id}`}
42
- <button
43
- on:click={() => {
44
- $componentControl?.[id]?.setTab?.(0)
47
+ {#key renderCount}
48
+ <button
49
+ title={'Debug tabs'}
50
+ class={classNames(
51
+ 'text-2xs py-0.5 font-bold w-fit border cursor-pointer rounded-sm',
52
+ isDebugging($debuggingComponents, id)
53
+ ? 'bg-red-100 text-red-600 border-red-500 hover:bg-red-200 hover:text-red-800'
54
+ : 'bg-indigo-100 text-indigo-600 border-indigo-500 hover:bg-indigo-200 hover:text-indigo-800'
55
+ )}
56
+ on:click={() => dispatch('triggerInlineEditor')}
57
+ on:pointerdown|stopPropagation
58
+ >
59
+ <ButtonDropdown hasPadding={false}>
60
+ <svelte:fragment slot="buttonReplacement">
61
+ <div class="px-1">
62
+ {#if isDebugging($debuggingComponents, id)}
63
+ <div class="flex flex-row items-center gap-2">
64
+ {`Debugging node ${nodes[$debuggingComponents[id] ?? 0]?.id}`}
65
+ <button
66
+ on:click={() => {
67
+ $componentControl?.[id]?.setTab?.(0)
68
+
69
+ $debuggingComponents = Object.fromEntries(
70
+ Object.entries($debuggingComponents).filter(([key]) => key !== id)
71
+ )
72
+ }}
73
+ >
74
+ <X size={14} />
75
+ </button>
76
+ </div>
77
+ {:else}
78
+ {`Debug nodes (current node: ${currentNodeId})`}
79
+ {/if}
80
+ </div>
81
+ </svelte:fragment>
82
+ <svelte:fragment slot="items">
83
+ {#each nodes ?? [] as node, index}
84
+ <MenuItem
85
+ on:click={() => {
86
+ $componentControl?.[id]?.setTab?.(index)
45
87
 
46
- $debuggingComponents = Object.fromEntries(
47
- Object.entries($debuggingComponents).filter(([key]) => key !== id)
48
- )
49
- }}
88
+ $debuggingComponents[id] = index
89
+ }}
90
+ >
91
+ <div
92
+ class={classNames(
93
+ '!text-tertiary text-left px-4 py-2 gap-2 cursor-pointer hover:bg-gray-100 !text-xs font-semibold'
94
+ )}
50
95
  >
51
- <X size={14} />
52
- </button>
53
- </div>
54
- {:else}
55
- {`Debug nodes (current node: ${currentNodeId})`}
56
- {/if}
57
- </div>
58
- </svelte:fragment>
59
- <svelte:fragment slot="items">
60
- {#each nodes ?? [] as node, index}
96
+ {`Debug node ${node.label}`}
97
+ </div>
98
+ </MenuItem>
99
+ {/each}
61
100
  <MenuItem
62
101
  on:click={() => {
63
- $componentControl?.[id]?.setTab?.(index)
102
+ $componentControl?.[id]?.setTab?.(0)
64
103
 
65
- $debuggingComponents[id] = index
104
+ $debuggingComponents = Object.fromEntries(
105
+ Object.entries($debuggingComponents).filter(([key]) => key !== id)
106
+ )
66
107
  }}
67
108
  >
68
109
  <div
69
110
  class={classNames(
70
- '!text-tertiary text-left px-4 py-2 gap-2 cursor-pointer hover:bg-gray-100 !text-xs font-semibold'
111
+ '!text-red-600 text-left px-4 py-2 gap-2 cursor-pointer hover:bg-gray-100 !text-xs font-semibold'
71
112
  )}
72
113
  >
73
- {`Debug node ${node.label}`}
114
+ {`Reset debug mode`}
74
115
  </div>
75
116
  </MenuItem>
76
- {/each}
77
- <MenuItem
78
- on:click={() => {
79
- $componentControl?.[id]?.setTab?.(0)
80
-
81
- $debuggingComponents = Object.fromEntries(
82
- Object.entries($debuggingComponents).filter(([key]) => key !== id)
83
- )
84
- }}
85
- >
86
- <div
87
- class={classNames(
88
- '!text-red-600 text-left px-4 py-2 gap-2 cursor-pointer hover:bg-gray-100 !text-xs font-semibold'
89
- )}
90
- >
91
- {`Reset debug mode`}
92
- </div>
93
- </MenuItem>
94
- </svelte:fragment>
95
- </ButtonDropdown>
96
- </button>
117
+ </svelte:fragment>
118
+ </ButtonDropdown>
119
+ </button>
120
+ {/key}
@@ -17,11 +17,9 @@ let deploymentMsgUpdateMode = false;
17
17
  let deploymentMsgUpdate = undefined;
18
18
  $: selectedVersion !== undefined && loadValue(selectedVersion.version);
19
19
  async function loadVersions() {
20
- console.log('loading versions');
21
20
  if (appPath === undefined) {
22
21
  return;
23
22
  }
24
- console.log('loading versions');
25
23
  loading = true;
26
24
  versions = await AppService.getAppHistoryByPath({
27
25
  workspace: $workspaceStore,
@@ -77,4 +77,5 @@ export declare const ROW_HEIGHT = 36;
77
77
  export declare const ROW_GAP_Y = 2;
78
78
  export declare const ROW_GAP_X = 4;
79
79
  export declare function maxHeight(grid: GridItem[], windowHeight: number, breakpoint?: EditorBreakpoint): number;
80
+ export declare function isTableAction(id: string, app: App): boolean;
80
81
  export {};
@@ -707,3 +707,20 @@ export function maxHeight(grid, windowHeight, breakpoint = 'lg') {
707
707
  }, 0);
708
708
  return Math.max(maxRowPerGrid, maxRows);
709
709
  }
710
+ export function isTableAction(id, app) {
711
+ const [tableId, actionId] = id.split('_');
712
+ if (!tableId || !actionId) {
713
+ return false;
714
+ }
715
+ const table = findGridItem(app, tableId);
716
+ if (!table ||
717
+ (table.data.type !== 'tablecomponent' &&
718
+ table.data.type !== 'aggridcomponent' &&
719
+ table.data.type !== 'aggridcomponentee' &&
720
+ table.data.type !== 'dbexplorercomponent' &&
721
+ table.data.type !== 'aggridinfinitecomponent' &&
722
+ table.data.type !== 'aggridinfinitecomponentee')) {
723
+ return false;
724
+ }
725
+ return true;
726
+ }
@@ -71,6 +71,8 @@ import AppPdf from '../../components/display/AppPdf.svelte';
71
71
  import AppCurrencyInput from '../../components/inputs/currency/AppCurrencyInput.svelte';
72
72
  import AppSliderInputs from '../../components/inputs/AppSliderInputs.svelte';
73
73
  import AppNumberInput from '../../components/inputs/AppNumberInput.svelte';
74
+ import AppNavbar from '../../components/display/AppNavbar.svelte';
75
+ import AppDateSelect from '../../components/inputs/AppDateSelect.svelte';
74
76
  export let component;
75
77
  export let selected;
76
78
  export let locked = false;
@@ -90,6 +92,11 @@ function mouseOut() {
90
92
  outTimeout && clearTimeout(outTimeout);
91
93
  outTimeout = setTimeout(() => {
92
94
  if ($hoverStore !== undefined) {
95
+ // In order to avoid flickering when hovering over table actions,
96
+ // we leave the actions to manage the hover state
97
+ if ($hoverStore.startsWith(`${component.id}_`)) {
98
+ return;
99
+ }
93
100
  $hoverStore = undefined;
94
101
  }
95
102
  }, 50);
@@ -812,6 +819,22 @@ function mouseOut() {
812
819
  verticalAlignment={component.verticalAlignment}
813
820
  {render}
814
821
  />
822
+ {:else if component.type === 'navbarcomponent'}
823
+ <AppNavbar
824
+ id={component.id}
825
+ configuration={component.configuration}
826
+ customCss={component.customCss}
827
+ navbarItems={component.navbarItems}
828
+ {render}
829
+ />
830
+ {:else if component.type === 'dateselectcomponent'}
831
+ <AppDateSelect
832
+ id={component.id}
833
+ configuration={component.configuration}
834
+ customCss={component.customCss}
835
+ verticalAlignment={component.verticalAlignment}
836
+ {render}
837
+ />
815
838
  {/if}
816
839
  </div>
817
840
  </div>