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
@@ -0,0 +1,33 @@
1
+ <script>import Popover from '../../../Popover.svelte';
2
+ import { ButtonType } from '../../../common';
3
+ import Button from '../../../common/button/Button.svelte';
4
+ import { BookText, ExternalLink } from 'lucide-svelte';
5
+ import { twMerge } from 'tailwind-merge';
6
+ export let docLink;
7
+ export let btnClasses = undefined;
8
+ export let size = 'xs';
9
+ </script>
10
+
11
+ <Popover>
12
+ <svelte:fragment slot="text">
13
+ <div class="flex flex-row gap-1">
14
+ Open documentation in a new tab
15
+
16
+ <ExternalLink size={16} />
17
+ </div>
18
+ </svelte:fragment>
19
+ <Button
20
+ iconOnly
21
+ startIcon={{
22
+ icon: BookText
23
+ }}
24
+ {size}
25
+ btnClasses={twMerge(
26
+ 'p-1 text-gray-300 hover:!text-gray-600 dark:text-gray-500 dark:hover:!text-gray-200 bg-transparent',
27
+ btnClasses
28
+ )}
29
+ href={docLink}
30
+ target="_blank"
31
+ color="light"
32
+ />
33
+ </Popover>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { ButtonType } from '../../../common';
3
+ declare const __propDef: {
4
+ props: {
5
+ docLink: string;
6
+ btnClasses?: string | undefined;
7
+ size?: ButtonType.Size | undefined;
8
+ };
9
+ events: {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export type DocLinkProps = typeof __propDef.props;
15
+ export type DocLinkEvents = typeof __propDef.events;
16
+ export type DocLinkSlots = typeof __propDef.slots;
17
+ export default class DocLink extends SvelteComponent<DocLinkProps, DocLinkEvents, DocLinkSlots> {
18
+ }
19
+ export {};
@@ -0,0 +1,192 @@
1
+ <script>import Button from '../../../common/button/Button.svelte';
2
+ import CloseButton from '../../../common/CloseButton.svelte';
3
+ import PanelSection from './common/PanelSection.svelte';
4
+ import { dragHandle, dragHandleZone } from '@windmill-labs/svelte-dnd-action';
5
+ import { generateRandomString } from '../../../../utils';
6
+ import { GripVertical, Plus, Settings } from 'lucide-svelte';
7
+ import NavbarWizard from '../../../wizards/NavbarWizard.svelte';
8
+ import Badge from '../../../common/badge/Badge.svelte';
9
+ import ResolveConfig from '../../components/helpers/ResolveConfig.svelte';
10
+ import { getContext } from 'svelte';
11
+ import Tooltip from '../../../Tooltip.svelte';
12
+ import ResolveNavbarItemPath from '../../components/display/ResolveNavbarItemPath.svelte';
13
+ export let navbarItems = [];
14
+ export let id;
15
+ const { appPath } = getContext('AppViewerContext');
16
+ let items = navbarItems.map((tab, index) => {
17
+ return { value: tab, id: generateRandomString(), originalIndex: index };
18
+ });
19
+ $: navbarItems = items.map((item) => item.value);
20
+ function addPath() {
21
+ const emptyAppPath = {
22
+ disabled: {
23
+ type: 'static',
24
+ value: false,
25
+ fieldType: 'boolean'
26
+ },
27
+ label: {
28
+ type: 'static',
29
+ value: undefined,
30
+ fieldType: 'text'
31
+ },
32
+ path: {
33
+ type: 'oneOf',
34
+ selected: 'app',
35
+ labels: {
36
+ href: 'Navigate to an external URL',
37
+ app: 'Navigate to an app'
38
+ },
39
+ configuration: {
40
+ href: {
41
+ href: {
42
+ type: 'static',
43
+ value: undefined,
44
+ fieldType: 'text',
45
+ tooltip: "The URL to navigate to when the item is clicked. Will be opened in a new tab. If you want to navigate to an other app, use the 'App' option."
46
+ }
47
+ },
48
+ app: {
49
+ path: {
50
+ type: 'static',
51
+ value: '',
52
+ fieldType: 'app-path',
53
+ allowTypeChange: false,
54
+ tooltip: 'The app to navigate to when the item is clicked. Will be opened in the same tab. If you want to navigate to an external URL, use the "Href" option.'
55
+ },
56
+ queryParamsOrHash: {
57
+ type: 'static',
58
+ value: undefined,
59
+ fieldType: 'text',
60
+ tooltip: 'Query parameters or hash to append to the URL. For example, `?key=value` or `#hash`.',
61
+ placeholder: '?key=value#hash'
62
+ }
63
+ }
64
+ }
65
+ },
66
+ hidden: {
67
+ type: 'static',
68
+ value: false,
69
+ fieldType: 'boolean'
70
+ }
71
+ };
72
+ items = [
73
+ ...items,
74
+ {
75
+ value: emptyAppPath,
76
+ id: generateRandomString(),
77
+ originalIndex: items.length
78
+ }
79
+ ];
80
+ }
81
+ function handleConsider(e) {
82
+ const { items: newItems } = e.detail;
83
+ items = newItems;
84
+ }
85
+ function handleFinalize(e) {
86
+ const { items: newItems } = e.detail;
87
+ items = newItems;
88
+ }
89
+ let resolvedPaths = [];
90
+ let resolvedLabels = [];
91
+ </script>
92
+
93
+ <PanelSection
94
+ title={`Items ${navbarItems && navbarItems.length > 0 ? `(${navbarItems.length})` : ''}`}
95
+ >
96
+ {#if !navbarItems || navbarItems.length == 0}
97
+ <span class="text-xs text-tertiary">No items</span>
98
+ {/if}
99
+ <div class="w-full flex gap-2 flex-col mt-2">
100
+ <section
101
+ use:dragHandleZone={{
102
+ items,
103
+ flipDurationMs: 200,
104
+ dropTargetStyle: {}
105
+ }}
106
+ on:consider={handleConsider}
107
+ on:finalize={handleFinalize}
108
+ >
109
+ {#each items as item, index (item.id)}
110
+ {#key item.id}
111
+ <div class="border rounded-md p-2 mb-2 bg-surface">
112
+ <ResolveConfig
113
+ {id}
114
+ key={'label'}
115
+ extraKey={item.id}
116
+ bind:resolvedConfig={resolvedLabels[item.originalIndex]}
117
+ configuration={item.value.label}
118
+ />
119
+
120
+ <div class="w-full flex flex-row gap-2 items-center relative my-1">
121
+ <div
122
+ class="text-xs px-2 border-y flex flex-row items-center border rounded-md h-8 w-full"
123
+ >
124
+ {resolvedLabels[item.originalIndex] ?? 'No label'}
125
+ </div>
126
+
127
+ <div class="absolute right-[4.5rem]">
128
+ <CloseButton
129
+ noBg
130
+ small
131
+ on:close={() => {
132
+ items = items.filter((_, i) => i !== index)
133
+ }}
134
+ />
135
+ </div>
136
+ <NavbarWizard bind:value={items[index].value}>
137
+ <svelte:fragment slot="trigger">
138
+ <Button color="light" size="xs2" nonCaptureEvent={true}>
139
+ <div class="flex flex-row items-center gap-2 text-xs font-normal">
140
+ <Settings size={16} />
141
+ </div>
142
+ </Button>
143
+ </svelte:fragment>
144
+ </NavbarWizard>
145
+
146
+ <div class="flex flex-col justify-center gap-2">
147
+ <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
148
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
149
+ <div use:dragHandle class="handle w-4 h-4" aria-label="drag-handle">
150
+ <GripVertical size={16} />
151
+ </div>
152
+ </div>
153
+ </div>
154
+
155
+ <ResolveNavbarItemPath
156
+ navbarItem={item.value}
157
+ {id}
158
+ {index}
159
+ bind:resolvedPath={resolvedPaths[item.originalIndex]}
160
+ />
161
+
162
+ {#if resolvedPaths[item.originalIndex]}
163
+ <div class="text-xs text-tertiary flex gap-2 flex-row flex-wrap">
164
+ Path: <Badge small>{resolvedPaths[item.originalIndex]}</Badge>
165
+ {#if appPath && resolvedPaths[item.originalIndex]?.includes(appPath)}
166
+ <Badge small color="blue"
167
+ >Current app
168
+
169
+ <Tooltip class="ml-2 !text-blue-900">
170
+ Clicking on those items will keep you in the current tab and change the output
171
+ of the component.
172
+ </Tooltip>
173
+ </Badge>
174
+ {/if}
175
+ </div>
176
+ {:else}
177
+ <div class="text-xs text-red-500">No app path or url selected</div>
178
+ {/if}
179
+ </div>
180
+ {/key}
181
+ {/each}
182
+ </section>
183
+ <Button
184
+ size="xs"
185
+ color="light"
186
+ variant="border"
187
+ startIcon={{ icon: Plus }}
188
+ on:click={addPath}
189
+ iconOnly
190
+ />
191
+ </div>
192
+ </PanelSection>
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { NavbarItem } from '../component';
3
+ declare const __propDef: {
4
+ props: {
5
+ navbarItems?: NavbarItem[] | undefined;
6
+ id: string;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ };
13
+ export type GridNavbarProps = typeof __propDef.props;
14
+ export type GridNavbarEvents = typeof __propDef.events;
15
+ export type GridNavbarSlots = typeof __propDef.slots;
16
+ export default class GridNavbar extends SvelteComponent<GridNavbarProps, GridNavbarEvents, GridNavbarSlots> {
17
+ }
18
+ export {};
@@ -129,8 +129,8 @@ function handleFinalize(e) {
129
129
  type="text"
130
130
  bind:value={items[index].value}
131
131
  />
132
- <div class="absolute right-6">
133
- <CloseButton noBg on:close={() => deleteSubgrid(index)} />
132
+ <div class="absolute right-8">
133
+ <CloseButton noBg small on:close={() => deleteSubgrid(index)} />
134
134
  </div>
135
135
 
136
136
  <div class="flex flex-col justify-center gap-2">
@@ -0,0 +1,17 @@
1
+ <script>import { Button } from '../../../common';
2
+ import { RotateCcw } from 'lucide-svelte';
3
+ import { getContext } from 'svelte';
4
+ export let id = undefined;
5
+ const { componentControl } = getContext('AppViewerContext');
6
+ function onRefresh() {
7
+ if (!id)
8
+ return;
9
+ $componentControl[id]?.recompute?.();
10
+ }
11
+ </script>
12
+
13
+ {#if id}
14
+ <Button size="xs2" color="light" startIcon={{ icon: RotateCcw }} on:click={() => onRefresh()}>
15
+ Force refresh
16
+ </Button>
17
+ {/if}
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ id?: string | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type RefreshDatabaseStudioTableProps = typeof __propDef.props;
12
+ export type RefreshDatabaseStudioTableEvents = typeof __propDef.events;
13
+ export type RefreshDatabaseStudioTableSlots = typeof __propDef.slots;
14
+ export default class RefreshDatabaseStudioTable extends SvelteComponent<RefreshDatabaseStudioTableProps, RefreshDatabaseStudioTableEvents, RefreshDatabaseStudioTableSlots> {
15
+ }
16
+ export {};
@@ -1,11 +1,14 @@
1
1
  <script>import { Badge } from '../../../common';
2
2
  import Button from '../../../common/button/Button.svelte';
3
3
  import { getNextId } from '../../../flows/idUtils';
4
- import { classNames } from '../../../../utils';
4
+ import { classNames, generateRandomString } from '../../../../utils';
5
5
  import { getContext, onMount } from 'svelte';
6
6
  import { appComponentFromType } from '../appUtils';
7
7
  import PanelSection from './common/PanelSection.svelte';
8
- import { Inspect, List, ToggleRightIcon, Trash } from 'lucide-svelte';
8
+ import { GripVertical, Inspect, List, ToggleRightIcon } from 'lucide-svelte';
9
+ import { dragHandle, dragHandleZone } from '@windmill-labs/svelte-dnd-action';
10
+ import CloseButton from '../../../common/CloseButton.svelte';
11
+ import { flip } from 'svelte/animate';
9
12
  export let components;
10
13
  // Migration code:
11
14
  onMount(() => {
@@ -13,8 +16,12 @@ onMount(() => {
13
16
  components = [];
14
17
  }
15
18
  });
19
+ let items = components?.map((tab, index) => {
20
+ return { value: tab, id: generateRandomString(), originalIndex: index };
21
+ }) ?? [];
22
+ $: components = items.map((item) => item.value);
16
23
  export let id;
17
- const { selectedComponent, app, errorByComponent } = getContext('AppViewerContext');
24
+ const { selectedComponent, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
18
25
  function addComponent(typ) {
19
26
  if (!components) {
20
27
  return;
@@ -24,10 +31,18 @@ function addComponent(typ) {
24
31
  ...appComponentFromType(typ)(`${id}_${actionId}`),
25
32
  recomputeIds: []
26
33
  };
34
+ items = [
35
+ ...items,
36
+ {
37
+ value: newComponent,
38
+ id: generateRandomString(),
39
+ originalIndex: items.length
40
+ }
41
+ ];
27
42
  components = [...components, newComponent];
28
43
  $app = $app;
29
44
  }
30
- function deleteComponent(cid) {
45
+ function deleteComponent(cid, index) {
31
46
  if (!components) {
32
47
  return;
33
48
  }
@@ -35,6 +50,16 @@ function deleteComponent(cid) {
35
50
  delete $errorByComponent[cid];
36
51
  $selectedComponent = [id];
37
52
  $app = $app;
53
+ // Remove the corresponding item from the items array
54
+ items = items.filter((item) => item.originalIndex !== index);
55
+ }
56
+ function handleConsider(e) {
57
+ const { items: newItems } = e.detail;
58
+ items = newItems;
59
+ }
60
+ function handleFinalize(e) {
61
+ const { items: newItems } = e.detail;
62
+ items = newItems;
38
63
  }
39
64
  </script>
40
65
 
@@ -43,43 +68,61 @@ function deleteComponent(cid) {
43
68
  {#if components.length == 0}
44
69
  <span class="text-xs text-tertiary">No action buttons</span>
45
70
  {/if}
46
- {#each components as component}
47
- <!-- svelte-ignore a11y-no-static-element-interactions -->
48
- <div
49
- class={classNames(
50
- 'w-full text-xs font-bold gap-1 truncate py-1.5 px-2 cursor-pointer transition-all justify-between flex items-center border border-gray-3 rounded-md',
51
- 'bg-surface hover:bg-surface-hover focus:border-primary text-secondary',
52
- $selectedComponent?.includes(component.id) ? 'outline outline-blue-500 bg-red-400' : ''
53
- )}
54
- on:click={() => {
55
- $selectedComponent = [component.id]
71
+ <div class="w-full flex gap-2 flex-col mt-2">
72
+ <section
73
+ use:dragHandleZone={{
74
+ items,
75
+ flipDurationMs: 200,
76
+ dropTargetStyle: {}
56
77
  }}
57
- on:keypress
78
+ on:consider={handleConsider}
79
+ on:finalize={handleFinalize}
58
80
  >
59
- <Badge color="dark-indigo">
60
- {component.id}
61
- </Badge>
81
+ {#each items as item, index (item.id)}
82
+ {@const component = items[index].value}
62
83
 
63
- <div>
64
- {#if component.type == 'buttoncomponent'}
65
- Button
66
- {:else if component.type == 'selectcomponent'}
67
- Select
68
- {:else if component.type == 'checkboxcomponent'}
69
- Toggle
70
- {/if}
71
- </div>
72
- <div>
73
- <Button
74
- variant="border"
75
- color="red"
76
- on:click={() => deleteComponent(component.id)}
77
- startIcon={{ icon: Trash }}
78
- iconOnly
79
- />
80
- </div>
81
- </div>
82
- {/each}
84
+ <div animate:flip={{ duration: 200 }} class="flex flex-row gap-2 items-center mb-2">
85
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
86
+ <!-- svelte-ignore a11y-mouse-events-have-key-events -->
87
+ <div
88
+ class={classNames(
89
+ 'w-full text-xs text-semibold truncate py-1.5 px-2 cursor-pointer justify-between flex items-center border rounded-md',
90
+ 'bg-surface hover:bg-surface-hover focus:border-primary text-secondary'
91
+ )}
92
+ on:click={() => {
93
+ $selectedComponent = [component.id]
94
+ }}
95
+ on:mouseover={() => {
96
+ $hoverStore = component.id
97
+ }}
98
+ on:keypress
99
+ >
100
+ <div class="flex flex-row gap-2 items-center">
101
+ <Badge color="dark-indigo">
102
+ {component.id}
103
+ </Badge>
104
+
105
+ <div>
106
+ {#if component.type == 'buttoncomponent'}
107
+ Button
108
+ {:else if component.type == 'selectcomponent'}
109
+ Select
110
+ {:else if component.type == 'checkboxcomponent'}
111
+ Toggle
112
+ {/if}
113
+ </div>
114
+ </div>
115
+ <div class="flex flex-row items-center gap-1">
116
+ <CloseButton small on:close={() => deleteComponent(component.id, index)} />
117
+ </div>
118
+ </div>
119
+ <div use:dragHandle class="handle w-4 h-4" aria-label="drag-handle">
120
+ <GripVertical size={16} />
121
+ </div>
122
+ </div>
123
+ {/each}
124
+ </section>
125
+ </div>
83
126
  <div class="w-full flex gap-2">
84
127
  <Button
85
128
  btnClasses="gap-1 flex items-center text-sm text-tertiary"
@@ -8,6 +8,7 @@ import DecisionTreeGraphHeader from '../DecisionTreeGraphHeader.svelte';
8
8
  import { addNewBranch, addNode, getFirstNode, getParents, insertNode, removeBranch, removeNode } from './utils';
9
9
  import { createEdge, createNode } from './nodeHelpers';
10
10
  import { deleteGridItem } from '../../appUtils';
11
+ import DarkModeObserver from '../../../../DarkModeObserver.svelte';
11
12
  export let nodes;
12
13
  export let rebuildOnChange = undefined;
13
14
  export let paneWidth = 0;
@@ -16,6 +17,7 @@ export let component;
16
17
  let displayedNodes = [];
17
18
  let edges = [];
18
19
  let scroll = false;
20
+ let darkMode = false;
19
21
  const dispatch = createEventDispatcher();
20
22
  const { selectedNodeId } = getContext('DecisionTreeEditor');
21
23
  $: rebuildOnChange && triggerRebuild();
@@ -166,11 +168,12 @@ function nodeCallbackHandler(event, detail, graphNode, parentIds, branchInsert =
166
168
  break;
167
169
  }
168
170
  case 'delete': {
169
- const graphhNodeIndex = nodes.findIndex((node) => node.id == graphNode?.id);
170
- if (graphhNodeIndex > -1) {
171
- deleteSubgrid(graphhNodeIndex);
171
+ const graphNodeIndex = nodes.findIndex((node) => node.id == graphNode?.id);
172
+ if (graphNodeIndex > -1) {
173
+ deleteSubgrid(graphNodeIndex);
172
174
  }
173
175
  nodes = removeNode(nodes, graphNode);
176
+ $debuggingComponents = Object.fromEntries(Object.entries($debuggingComponents).filter(([key]) => key !== component.id));
174
177
  break;
175
178
  }
176
179
  case 'addBranch': {
@@ -230,7 +233,8 @@ function buildGraphNodes() {
230
233
  node: graphNode,
231
234
  canDelete: !(graphNode.next.length > 1 && parentIds.length > 1),
232
235
  canAddBranch: !cannotAddBranch,
233
- index
236
+ index,
237
+ darkMode
234
238
  },
235
239
  cb: (e, detail) => nodeCallbackHandler(e, detail, graphNode, parentIds, false)
236
240
  }
@@ -279,7 +283,8 @@ function buildGraphNodes() {
279
283
  canDelete: !cannotAddBranch &&
280
284
  (graphNode.next.length == 1 || !parentIds.includes('start')),
281
285
  canAddBranch: !cannotAddBranch,
282
- index
286
+ index,
287
+ darkMode
283
288
  },
284
289
  cb: (e, detail) => nodeCallbackHandler(e, detail, graphNode, parentIds, false)
285
290
  }
@@ -372,6 +377,8 @@ $: if (nodes.length > 0 && !$selectedNodeId) {
372
377
  }
373
378
  </script>
374
379
 
380
+ <DarkModeObserver bind:darkMode />
381
+
375
382
  {#if mounted}
376
383
  <Svelvet
377
384
  download={false}
@@ -1,7 +1,7 @@
1
1
  <script>import { Loader2 } from 'lucide-svelte';
2
2
  import { ClearableInput, Popup } from '../../../../common';
3
3
  import { AllIcons } from './icons';
4
- export let componentInput;
4
+ export let value = '';
5
5
  let loading = false;
6
6
  let items;
7
7
  let filteredItems;
@@ -21,27 +21,26 @@ async function getData() {
21
21
  loading = false;
22
22
  }
23
23
  function select(label) {
24
- componentInput.value = label;
24
+ value = label;
25
25
  const elem = document.activeElement;
26
26
  if (elem.blur) {
27
27
  elem.blur();
28
28
  }
29
29
  }
30
+ export let floatingConfig = {
31
+ strategy: 'absolute',
32
+ placement: 'bottom-end'
33
+ };
34
+ export let shouldUsePortal = true;
30
35
  </script>
31
36
 
32
- <Popup
33
- let:close
34
- floatingConfig={{
35
- strategy: 'absolute',
36
- placement: 'bottom-end'
37
- }}
38
- >
37
+ <Popup let:close {floatingConfig} {shouldUsePortal}>
39
38
  <svelte:fragment slot="button">
40
39
  <div class="relative">
41
40
  <ClearableInput
42
41
  readonly
43
- value={componentInput.value}
44
- on:change={({ detail }) => (componentInput.value = detail)}
42
+ {value}
43
+ on:change={({ detail }) => (value = detail)}
45
44
  on:focus={getData}
46
45
  class="!pr-6"
47
46
  />
@@ -77,7 +76,7 @@ function select(label) {
77
76
  }}
78
77
  class="w-full center-center flex-col font-normal p-1
79
78
  hover:bg-gray-100 focus:bg-gray-100 rounded duration-200 dark:hover:bg-frost-900 dark:focus:bg-frost-900
80
- {label === componentInput.value ? 'text-blue-600 bg-blue-50 pointer-events-none' : ''}"
79
+ {label === value ? 'text-blue-600 bg-blue-50 pointer-events-none' : ''}"
81
80
  >
82
81
  <img
83
82
  class="dark:invert"
@@ -1,8 +1,10 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { StaticInput } from '../../../inputType';
2
+ import type { ComputeConfig } from 'svelte-floating-ui';
3
3
  declare const __propDef: {
4
4
  props: {
5
- componentInput: StaticInput<string>;
5
+ value?: string | undefined;
6
+ floatingConfig?: ComputeConfig | undefined;
7
+ shouldUsePortal?: boolean | undefined;
6
8
  };
7
9
  events: {
8
10
  [evt: string]: CustomEvent<any>;
@@ -19,6 +19,7 @@ import Label from '../../../../Label.svelte';
19
19
  import DateTimeInput from '../../../../DateTimeInput.svelte';
20
20
  import DBTableSelect from './DBTableSelect.svelte';
21
21
  import EditableSchemaDrawer from '../../../../schema/EditableSchemaDrawer.svelte';
22
+ import AppPicker from '../../../../wizards/AppPicker.svelte';
22
23
  export let componentInput;
23
24
  export let fieldType = undefined;
24
25
  export let subFieldType = undefined;
@@ -63,7 +64,7 @@ $: componentInput && onchange?.();
63
64
  </select>
64
65
  {/if}
65
66
  {:else if fieldType === 'icon-select'}
66
- <IconSelectInput bind:componentInput />
67
+ <IconSelectInput bind:value={componentInput.value} />
67
68
  {:else if fieldType === 'tab-select'}
68
69
  <TabSelectInput bind:componentInput />
69
70
  {:else if fieldType === 'resource' && subFieldType && ['mysql', 'postgres', 'ms_sql_server', 'snowflake', 'bigquery'].includes(subFieldType)}
@@ -307,6 +308,8 @@ $: componentInput && onchange?.();
307
308
  </Label>
308
309
  </div>
309
310
  </div>
311
+ {:else if fieldType === 'app-path'}
312
+ <AppPicker bind:value={componentInput.value} />
310
313
  {:else}
311
314
  <div class="flex gap-1 relative w-full">
312
315
  <textarea
@@ -3,6 +3,7 @@ import { secondaryMenuLeft, secondaryMenuRight } from './';
3
3
  import { getContext } from 'svelte';
4
4
  import CloseButton from '../../../../common/CloseButton.svelte';
5
5
  import { zIndexes } from '../../../../../zIndexes';
6
+ import DocLink from '../DocLink.svelte';
6
7
  const { selectedComponent } = getContext('AppViewerContext');
7
8
  export let right;
8
9
  let secondaryMenu = right ? secondaryMenuRight : secondaryMenuLeft;
@@ -30,7 +31,12 @@ $: if (right && lastSelected !== $selectedComponent) {
30
31
  >
31
32
  <CloseButton on:close={() => secondaryMenu?.close()} />
32
33
  {#if $secondaryMenu?.props?.type === 'style'}
33
- <div class="text-xs font-bold"> Style Panel</div>
34
+ <div class="flex flex-row items-center gap-1">
35
+ <div class="text-xs font-bold"> Style Panel</div>
36
+ <DocLink
37
+ docLink="https://www.windmill.dev/docs/apps/app_configuration_settings/app_styling"
38
+ />
39
+ </div>
34
40
  {/if}
35
41
  </div>
36
42
  <div class="relative h-full overflow-y-auto">