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.
- package/package/assets/app.css +8 -45
- package/package/components/ApiConnectForm.svelte +1 -0
- package/package/components/ArgInput.svelte +5 -1
- package/package/components/ChangeInstanceUsername.svelte +20 -12
- package/package/components/ContentSearchInner.svelte +359 -0
- package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
- package/package/components/CustomPopover.svelte +73 -0
- package/package/components/CustomPopover.svelte.d.ts +29 -0
- package/package/components/DateTimeInput.svelte +29 -3
- package/package/components/DateTimeInput.svelte.d.ts +4 -0
- package/package/components/Dev.svelte +8 -3
- package/package/components/DurationMs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +122 -24
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewerStep.svelte +2 -2
- package/package/components/FlowJobResult.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -3
- package/package/components/FlowStatusViewerInner.svelte +265 -160
- package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
- package/package/components/HighlightTheme.svelte +75 -77
- package/package/components/InputTransformForm.svelte +2 -0
- package/package/components/JobArgs.svelte +59 -44
- package/package/components/JobArgs.svelte.d.ts +2 -0
- package/package/components/LightweightArgInput.svelte +27 -2
- package/package/components/Path.svelte +3 -8
- package/package/components/Popover.svelte +1 -1
- package/package/components/ResourceEditor.svelte +3 -2
- package/package/components/ResourceEditorDrawer.svelte +4 -1
- package/package/components/ResourcePicker.svelte +1 -0
- package/package/components/RunChart.svelte +6 -3
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +24 -23
- package/package/components/RunForm.svelte.d.ts +0 -2
- package/package/components/SavedInputs.svelte +50 -39
- package/package/components/ScheduleEditorInner.svelte +26 -4
- package/package/components/ScriptBuilder.svelte +47 -22
- package/package/components/ScriptBuilder.svelte.d.ts +1 -0
- package/package/components/SearchItems.svelte +5 -4
- package/package/components/Summary.svelte +74 -0
- package/package/components/Summary.svelte.d.ts +16 -0
- package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
- package/package/components/apps/components/display/AppMenu.svelte +2 -2
- package/package/components/apps/components/display/AppNavbar.svelte +94 -0
- package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
- package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
- package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
- package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
- package/package/components/apps/components/layout/AppModal.svelte +17 -6
- package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
- package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
- package/package/components/apps/editor/AppEditor.svelte +9 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
- package/package/components/apps/editor/AppPreview.svelte +12 -3
- package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
- package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
- package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
- package/package/components/apps/editor/appUtils.d.ts +1 -0
- package/package/components/apps/editor/appUtils.js +17 -0
- package/package/components/apps/editor/component/Component.svelte +23 -0
- package/package/components/apps/editor/component/components.d.ts +205 -3
- package/package/components/apps/editor/component/components.js +160 -1
- package/package/components/apps/editor/component/default-codes.js +13 -13
- package/package/components/apps/editor/component/sets.js +4 -2
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
- package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
- package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
- package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
- package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
- package/package/components/apps/inputType.d.ts +2 -2
- package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
- package/package/components/apps/types.d.ts +3 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
- package/package/components/common/CloseButton.svelte +10 -10
- package/package/components/common/CloseButton.svelte.d.ts +6 -14
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
- package/package/components/common/fileInput/FileInput.svelte +2 -0
- package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +4 -3
- package/package/components/common/popup/Popup.svelte.d.ts +1 -0
- package/package/components/common/table/AppRow.svelte +3 -10
- package/package/components/common/table/FlowRow.svelte +12 -1
- package/package/components/copilot/IteratorGen.svelte +1 -1
- package/package/components/copilot/PredicateGen.svelte +1 -1
- package/package/components/copilot/StepInputGen.svelte +8 -3
- package/package/components/copilot/StepInputsGen.svelte +5 -2
- package/package/components/details/WebhooksPanel.svelte +32 -1
- package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
- package/package/components/flows/FlowHistory.svelte +208 -0
- package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
- package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +23 -26
- package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
- package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/SuspendDrawer.svelte +7 -7
- package/package/components/flows/flowStateUtils.js +2 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
- package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +20 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
- package/package/components/flows/map/VirtualItem.svelte +4 -2
- package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
- package/package/components/flows/previousResults.d.ts +9 -0
- package/package/components/flows/previousResults.js +42 -8
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
- package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/graph/FlowGraph.svelte +80 -42
- package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
- package/package/components/graph/model.d.ts +6 -1
- package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
- package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
- package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +1 -2
- package/package/components/home/ItemsList.svelte +22 -19
- package/package/components/jobs/JobPreview.svelte +11 -2
- package/package/components/propertyPicker/PropPicker.svelte +30 -0
- package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
- package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
- package/package/components/runs/JobLoader.svelte +21 -8
- package/package/components/runs/JobLoader.svelte.d.ts +2 -0
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +12 -8
- package/package/components/runs/RunsFilter.svelte +2 -4
- package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
- package/package/components/runs/RunsTable.svelte +63 -29
- package/package/components/runs/RunsTable.svelte.d.ts +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
- package/package/components/schema/PropertyEditor.svelte +1 -1
- package/package/components/search/GlobalSearchModal.svelte +559 -0
- package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
- package/package/components/search/QuickMenuItem.svelte +76 -0
- package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
- package/package/components/sidebar/MenuButton.svelte +11 -0
- package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
- package/package/components/sidebar/changelogs.js +35 -0
- package/package/components/wizards/AppPicker.svelte +68 -0
- package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
- package/package/components/wizards/NavbarWizard.svelte +131 -0
- package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
- package/package/defaults.d.ts +1 -1
- package/package/defaults.js +1 -1
- package/package/es6.d.ts.txt +370 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +42 -3
- package/package/gen/schemas.gen.js +42 -3
- package/package/gen/services.gen.d.ts +80 -5
- package/package/gen/services.gen.js +149 -8
- package/package/gen/types.gen.d.ts +265 -11
- package/package/inferArgSig.js +4 -0
- package/package/script_helpers.d.ts +3 -3
- package/package/script_helpers.js +46 -22
- package/package/stores.d.ts +1 -1
- package/package/stores.js +1 -1
- package/package/utils.d.ts +7 -23
- package/package/utils.js +54 -33
- package/package/windmill_fetch.d.ts.txt +6 -6
- package/package.json +3 -11
- 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-
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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:
|
|
78
|
+
on:consider={handleConsider}
|
|
79
|
+
on:finalize={handleFinalize}
|
|
58
80
|
>
|
|
59
|
-
|
|
60
|
-
{component.
|
|
61
|
-
</Badge>
|
|
81
|
+
{#each items as item, index (item.id)}
|
|
82
|
+
{@const component = items[index].value}
|
|
62
83
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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"
|
package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte
CHANGED
|
@@ -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
|
|
170
|
-
if (
|
|
171
|
-
deleteSubgrid(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
on:change={({ 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 ===
|
|
79
|
+
{label === value ? 'text-blue-600 bg-blue-50 pointer-events-none' : ''}"
|
|
81
80
|
>
|
|
82
81
|
<img
|
|
83
82
|
class="dark:invert"
|
package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ComputeConfig } from 'svelte-floating-ui';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
-
|
|
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="
|
|
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">
|