windmill-components 1.75.0 → 1.77.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/components/DisplayResult.svelte +1 -1
- package/components/Dropdown.svelte +14 -4
- package/components/FlowGraphViewer.svelte +1 -1
- package/components/FolderUsageInfo.svelte +16 -6
- package/components/FolderUsageInfo.svelte.d.ts +2 -0
- package/components/PageHeader.svelte +1 -1
- package/components/Path.svelte +22 -3
- package/components/ScriptBuilder.svelte +122 -122
- package/components/SettingSection.svelte +44 -0
- package/components/SettingSection.svelte.d.ts +21 -0
- package/components/Tooltip.svelte +3 -1
- package/components/WhitelistIp.svelte +1 -3
- package/components/apps/components/buttons/AppButton.svelte +11 -5
- package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/components/apps/components/buttons/AppForm.svelte +3 -7
- package/components/apps/components/buttons/AppFormButton.svelte +2 -6
- package/components/apps/components/display/table/AppAggridTable.svelte +4 -1
- package/components/apps/components/display/table/AppTable.svelte +4 -1
- package/components/apps/components/helpers/HiddenComponent.svelte +3 -0
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -0
- package/components/apps/components/helpers/InputValue.svelte +26 -43
- package/components/apps/components/helpers/InputValue.svelte.d.ts +4 -3
- package/components/apps/components/helpers/RefreshButton.svelte +2 -3
- package/components/apps/components/helpers/RunnableComponent.svelte +61 -34
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -0
- package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/components/apps/components/helpers/eval.d.ts +5 -0
- package/components/apps/components/helpers/eval.js +57 -0
- package/components/apps/components/layout/AppContainer.svelte +1 -6
- package/components/apps/components/layout/AppDrawer.svelte +0 -3
- package/components/apps/components/layout/AppSplitpanes.svelte +1 -6
- package/components/apps/components/layout/AppTabs.svelte +64 -33
- package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/components/apps/editor/AppEditor.svelte +136 -131
- package/components/apps/editor/AppEditorHeader.svelte +43 -35
- package/components/apps/editor/AppPreview.svelte +3 -2
- package/components/apps/editor/ComponentHeader.svelte +3 -1
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
- package/components/apps/editor/GridEditor.svelte +53 -51
- package/components/apps/editor/RecomputeAllComponents.svelte +7 -1
- package/components/apps/editor/SettingsPanel.svelte +23 -10
- package/components/apps/editor/SubGridEditor.svelte +56 -52
- package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -4
- package/components/apps/editor/appUtils.d.ts +12 -3
- package/components/apps/editor/appUtils.js +111 -37
- package/components/apps/editor/component/Component.svelte +4 -9
- package/components/apps/editor/component/ComponentNavigation.svelte +91 -46
- package/components/apps/editor/component/components.d.ts +1 -1
- package/components/apps/editor/component/components.js +24 -43
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +1 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.js +1 -0
- package/components/apps/editor/contextPanel/ComponentOutput.svelte +77 -0
- package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +21 -0
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +9 -5
- package/components/apps/editor/contextPanel/ContextPanel.svelte +80 -136
- package/components/apps/editor/contextPanel/SubGridOutput.svelte +71 -0
- package/components/apps/editor/contextPanel/SubGridOutput.svelte.d.ts +19 -0
- package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +38 -0
- package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte.d.ts +19 -0
- package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +10 -0
- package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte.d.ts +16 -0
- package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +25 -0
- package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +16 -0
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte +78 -0
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +26 -0
- package/components/apps/editor/contextPanel/components/TableActionOutput.svelte +19 -0
- package/components/apps/editor/contextPanel/components/TableActionOutput.svelte.d.ts +18 -0
- package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +14 -0
- package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte.d.ts +18 -0
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +53 -21
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +69 -43
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +1 -1
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +32 -31
- package/components/apps/editor/settingsPanel/GridTab.svelte +4 -12
- package/components/apps/editor/settingsPanel/Recompute.svelte +1 -0
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +6 -0
- package/components/apps/editor/settingsPanel/TableActions.svelte +2 -1
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -8
- package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +2 -2
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +58 -46
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +2 -0
- package/components/apps/rx.d.ts +6 -4
- package/components/apps/rx.js +34 -14
- package/components/apps/svelte-grid/Grid.svelte +171 -0
- package/components/apps/svelte-grid/Grid.svelte.d.ts +47 -0
- package/components/apps/svelte-grid/LICENSE +23 -0
- package/components/apps/svelte-grid/MoveResize.svelte +328 -0
- package/components/apps/svelte-grid/MoveResize.svelte.d.ts +46 -0
- package/components/apps/svelte-grid/types.d.ts +25 -0
- package/components/apps/svelte-grid/utils/container.d.ts +1 -0
- package/components/apps/svelte-grid/utils/container.js +4 -0
- package/components/apps/svelte-grid/utils/helper.d.ts +14 -0
- package/components/apps/svelte-grid/utils/helper.js +36 -0
- package/components/apps/svelte-grid/utils/item.d.ts +14 -0
- package/components/apps/svelte-grid/utils/item.js +192 -0
- package/components/apps/svelte-grid/utils/matrix.d.ts +6 -0
- package/components/apps/svelte-grid/utils/matrix.js +53 -0
- package/components/apps/svelte-grid/utils/other.d.ts +3 -0
- package/components/apps/svelte-grid/utils/other.js +30 -0
- package/components/apps/types.d.ts +10 -7
- package/components/apps/utils.d.ts +1 -1
- package/components/apps/utils.js +13 -7
- package/components/common/CloseButton.svelte +18 -0
- package/components/common/CloseButton.svelte.d.ts +27 -0
- package/components/common/badge/Badge.svelte +6 -1
- package/components/common/badge/Badge.svelte.d.ts +1 -0
- package/components/common/drawer/DrawerContent.svelte +2 -6
- package/components/common/languageIcons/JavaScript.svelte +11 -0
- package/components/common/languageIcons/JavaScript.svelte.d.ts +25 -0
- package/components/common/languageIcons/LanguageIcon.svelte +3 -1
- package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -1
- package/components/common/menu/Menu.svelte +1 -1
- package/components/common/popup/Popup.svelte +2 -1
- package/components/common/popup/Popup.svelte.d.ts +9 -0
- package/components/common/table/AppRow.svelte +1 -4
- package/components/common/table/FlowRow.svelte +1 -4
- package/components/common/table/ScriptRow.svelte +1 -4
- package/components/common/tabs/Tab.svelte +1 -0
- package/components/common/tabs/Tab.svelte.d.ts +2 -0
- package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
- package/components/graph/FlowGraph.svelte +1 -1
- package/components/sidebar/SidebarContent.svelte +2 -2
- package/consts.js +1 -1
- package/history.js +8 -1
- package/package.json +21 -27
- package/utils.js +0 -1
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +0 -92
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte.d.ts +0 -18
- package/components/graph/svelvet/d3/controllers/README.md +0 -3
- package/components/graph/svelvet/d3/controllers/d3Old.d.ts +0 -1
- package/components/graph/svelvet/d3/controllers/d3Old.js +0 -43
- package/components/graph/svelvet/docs/CHANGELOG.md +0 -145
- package/components/graph/svelvet/docs/DESIGN_PATTERNS.md +0 -44
- package/components/graph/svelvet/docs/DOCUMENTATION.md +0 -5
- package/components/graph/svelvet/docs/README.md +0 -34
- package/components/graph/svelvet/docs/TODO.md +0 -14
- package/components/graph/svelvet/docs/Tutorials.md +0 -25
- package/components/graph/svelvet/docs/images/css-background-after.png +0 -0
- package/components/graph/svelvet/docs/images/css-background-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-edges-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-edges-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-nodes-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-nodes-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-svelte-components-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-svelte-components-before.png +0 -0
- package/components/graph/svelvet/docs/images/html-docs-after.png +0 -0
- package/components/graph/svelvet/docs/images/html-docs-before.png +0 -0
- package/components/graph/svelvet/docs/images/minimap-after.png +0 -0
- package/components/graph/svelvet/docs/images/minimap-before.png +0 -0
- package/components/graph/svelvet/docs/images/node-classes-after.png +0 -0
- package/components/graph/svelvet/docs/images/node-classes-before.png +0 -0
- package/components/graph/svelvet/docs/images/node-create-after.png +0 -0
- package/components/graph/svelvet/docs/images/node-create-before.png +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script>import { Tab, Tabs } from '../../../common';
|
|
2
2
|
import { getContext, onMount } from 'svelte';
|
|
3
|
+
import { initOutput } from '../../editor/appUtils';
|
|
3
4
|
import SubGridEditor from '../../editor/SubGridEditor.svelte';
|
|
4
5
|
import { concatCustomCss } from '../../utils';
|
|
5
6
|
import InputValue from '../helpers/InputValue.svelte';
|
|
@@ -9,12 +10,17 @@ export let componentContainerHeight;
|
|
|
9
10
|
export let tabs;
|
|
10
11
|
export let customCss = undefined;
|
|
11
12
|
export let render;
|
|
13
|
+
export let initializing = configuration.tabsKind != undefined;
|
|
12
14
|
export const staticOutputs = ['selectedTabIndex'];
|
|
13
|
-
const { app, worldStore, focusedGrid, selectedComponent } = getContext('AppViewerContext');
|
|
14
|
-
const { componentControl } = getContext('AppEditorContext');
|
|
15
|
+
const { app, worldStore, focusedGrid, selectedComponent, mode, componentControl } = getContext('AppViewerContext');
|
|
15
16
|
let selected = tabs[0];
|
|
16
|
-
let
|
|
17
|
+
let kind = undefined;
|
|
17
18
|
let tabHeight = 0;
|
|
19
|
+
$: outputs = $worldStore
|
|
20
|
+
? initOutput($worldStore, id, {
|
|
21
|
+
selectedTabIndex: 0
|
|
22
|
+
})
|
|
23
|
+
: undefined;
|
|
18
24
|
function handleTabSelection() {
|
|
19
25
|
const selectedIndex = tabs?.indexOf(selected);
|
|
20
26
|
outputs?.selectedTabIndex.set(selectedIndex, true);
|
|
@@ -54,46 +60,71 @@ $componentControl[id] = {
|
|
|
54
60
|
return true;
|
|
55
61
|
}
|
|
56
62
|
return false;
|
|
63
|
+
},
|
|
64
|
+
setTab: (tab) => {
|
|
65
|
+
selected = tabs[tab];
|
|
57
66
|
}
|
|
58
67
|
};
|
|
59
68
|
$: selected && handleTabSelection();
|
|
60
|
-
$: outputs = $worldStore?.outputsById[id];
|
|
61
69
|
$: selectedIndex = tabs?.indexOf(selected) ?? -1;
|
|
62
70
|
$: css = concatCustomCss($app.css?.tabscomponent, customCss);
|
|
71
|
+
let subgridWidth = undefined;
|
|
63
72
|
</script>
|
|
64
73
|
|
|
65
|
-
<InputValue
|
|
74
|
+
<InputValue
|
|
75
|
+
on:done={() => initializing && (initializing = false)}
|
|
76
|
+
{id}
|
|
77
|
+
input={configuration.tabsKind}
|
|
78
|
+
bind:value={kind}
|
|
79
|
+
/>
|
|
66
80
|
|
|
67
|
-
<div>
|
|
68
|
-
|
|
69
|
-
<
|
|
81
|
+
<div class={kind == 'sidebar' ? 'flex gap-4 w-full' : 'w-full'}>
|
|
82
|
+
{#if !kind || kind == 'tabs' || (kind == 'invisibleOnView' && $mode == 'dnd')}
|
|
83
|
+
<div bind:clientHeight={tabHeight}>
|
|
84
|
+
<Tabs bind:selected class={css?.tabRow?.class} style={css?.tabRow?.style}>
|
|
85
|
+
{#each tabs ?? [] as res}
|
|
86
|
+
<Tab
|
|
87
|
+
value={res}
|
|
88
|
+
class={css?.tabs?.class}
|
|
89
|
+
style={css?.tabs?.style}
|
|
90
|
+
selectedClass={css?.selectedTab?.class}
|
|
91
|
+
selectedStyle={css?.selectedTab?.style}
|
|
92
|
+
>
|
|
93
|
+
<span class="font-semibold">{res}</span>
|
|
94
|
+
</Tab>
|
|
95
|
+
{/each}
|
|
96
|
+
</Tabs>
|
|
97
|
+
</div>
|
|
98
|
+
{:else if kind == 'sidebar'}
|
|
99
|
+
<div
|
|
100
|
+
class="flex gap-y-2 flex-col w-1/6 max-w-[160px] bg-white text-[#2e3440] opacity-80 px-4 pt-4 border-r border-gray-400"
|
|
101
|
+
>
|
|
70
102
|
{#each tabs ?? [] as res}
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
103
|
+
<button
|
|
104
|
+
class="rounded-sm !truncate text-sm hover:bg-gray-100 hover:border hover:text-black px-1 py-2 {selected ==
|
|
105
|
+
res
|
|
106
|
+
? 'outline outline-gray-500 outline-1 bg-white text-black'
|
|
107
|
+
: ''}"
|
|
108
|
+
on:pointerdown|stopPropagation
|
|
109
|
+
on:click={() => (selected = res)}>{res}</button
|
|
77
110
|
>
|
|
78
|
-
<span class="font-semibold">{res}</span>
|
|
79
|
-
</Tab>
|
|
80
111
|
{/each}
|
|
81
|
-
</
|
|
82
|
-
</div>
|
|
83
|
-
{#if $app.subgrids}
|
|
84
|
-
{#each tabs ?? [] as res, i}
|
|
85
|
-
<SubGridEditor
|
|
86
|
-
{id}
|
|
87
|
-
visible={render && i === selectedIndex}
|
|
88
|
-
bind:subGrid={$app.subgrids[`${id}-${i}`]}
|
|
89
|
-
{noPadding}
|
|
90
|
-
class={css?.container?.class}
|
|
91
|
-
style={css?.container?.style}
|
|
92
|
-
containerHeight={componentContainerHeight - tabHeight}
|
|
93
|
-
on:focus={() => {
|
|
94
|
-
$selectedComponent = id
|
|
95
|
-
}}
|
|
96
|
-
/>
|
|
97
|
-
{/each}
|
|
112
|
+
</div>
|
|
98
113
|
{/if}
|
|
114
|
+
|
|
115
|
+
<div bind:clientWidth={subgridWidth} class="w-full">
|
|
116
|
+
{#if $app.subgrids}
|
|
117
|
+
{#each tabs ?? [] as res, i}<SubGridEditor
|
|
118
|
+
{id}
|
|
119
|
+
visible={render && i === selectedIndex}
|
|
120
|
+
bind:subGrid={$app.subgrids[`${id}-${i}`]}
|
|
121
|
+
class={css?.container?.class}
|
|
122
|
+
style={css?.container?.style}
|
|
123
|
+
containerHeight={componentContainerHeight - tabHeight}
|
|
124
|
+
on:focus={() => {
|
|
125
|
+
$selectedComponent = id
|
|
126
|
+
}}
|
|
127
|
+
/>{/each}
|
|
128
|
+
{/if}
|
|
129
|
+
</div>
|
|
99
130
|
</div>
|
|
@@ -70,11 +70,12 @@ setContext('AppViewerContext', {
|
|
|
70
70
|
openDebugRun: writable(undefined),
|
|
71
71
|
focusedGrid,
|
|
72
72
|
stateId: writable(0),
|
|
73
|
-
parentWidth: writable(0)
|
|
73
|
+
parentWidth: writable(0),
|
|
74
|
+
state: writable({}),
|
|
75
|
+
componentControl: writable({})
|
|
74
76
|
});
|
|
75
77
|
setContext('AppEditorContext', {
|
|
76
78
|
history,
|
|
77
|
-
componentControl: writable({}),
|
|
78
79
|
pickVariableCallback
|
|
79
80
|
});
|
|
80
81
|
let timeout = undefined;
|
|
@@ -129,144 +130,148 @@ let variableEditor = undefined;
|
|
|
129
130
|
/>
|
|
130
131
|
{/if}
|
|
131
132
|
{#if !$userStore?.operator}
|
|
132
|
-
{#if
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
{#if $appStore}
|
|
134
|
+
{#if initialMode !== 'preview'}
|
|
135
|
+
<AppEditorHeader {policy} {fromHub} />
|
|
136
|
+
{/if}
|
|
135
137
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
<div
|
|
166
|
-
on:pointerdown={(e) => {
|
|
167
|
-
$selectedComponent = undefined
|
|
168
|
-
$focusedGrid = undefined
|
|
169
|
-
}}
|
|
170
|
-
class={twMerge(
|
|
171
|
-
'bg-gray-100 h-full w-full',
|
|
172
|
-
$appStore.css?.['app']?.['viewer']?.class
|
|
173
|
-
)}
|
|
174
|
-
style={$appStore.css?.['app']?.['viewer']?.style}
|
|
175
|
-
>
|
|
138
|
+
{#if previewing}
|
|
139
|
+
<SplitPanesWrapper>
|
|
140
|
+
<div
|
|
141
|
+
class={twMerge('h-full w-full', $appStore.css?.['app']?.['viewer']?.class)}
|
|
142
|
+
style={$appStore.css?.['app']?.['viewer']?.style}
|
|
143
|
+
>
|
|
144
|
+
<AppPreview
|
|
145
|
+
workspace={$workspaceStore ?? ''}
|
|
146
|
+
summary={$summaryStore}
|
|
147
|
+
app={$appStore}
|
|
148
|
+
appPath={path}
|
|
149
|
+
{breakpoint}
|
|
150
|
+
{policy}
|
|
151
|
+
isEditor
|
|
152
|
+
{context}
|
|
153
|
+
noBackend={false}
|
|
154
|
+
/>
|
|
155
|
+
</div>
|
|
156
|
+
</SplitPanesWrapper>
|
|
157
|
+
{:else}
|
|
158
|
+
<SplitPanesWrapper>
|
|
159
|
+
<Splitpanes class="max-w-full overflow-hidden">
|
|
160
|
+
<Pane size={15} minSize={5} maxSize={33}>
|
|
161
|
+
<ContextPanel />
|
|
162
|
+
</Pane>
|
|
163
|
+
<Pane size={64}>
|
|
164
|
+
<SplitPanesWrapper>
|
|
165
|
+
<Splitpanes horizontal>
|
|
166
|
+
<Pane size={70}>
|
|
176
167
|
<div
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
168
|
+
on:pointerdown={(e) => {
|
|
169
|
+
$selectedComponent = undefined
|
|
170
|
+
$focusedGrid = undefined
|
|
171
|
+
}}
|
|
172
|
+
class={twMerge(
|
|
173
|
+
'bg-gray-100 h-full w-full',
|
|
174
|
+
$appStore.css?.['app']?.['viewer']?.class
|
|
180
175
|
)}
|
|
176
|
+
style={$appStore.css?.['app']?.['viewer']?.style}
|
|
181
177
|
>
|
|
182
|
-
|
|
183
|
-
|
|
178
|
+
<div
|
|
179
|
+
class={classNames(
|
|
180
|
+
'relative mx-auto w-full h-full overflow-auto',
|
|
181
|
+
app.fullscreen ? '' : 'max-w-6xl'
|
|
182
|
+
)}
|
|
183
|
+
>
|
|
184
|
+
{#if $appStore.grid}
|
|
185
|
+
<ComponentNavigation />
|
|
184
186
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
<div on:pointerdown|stopPropagation class={width}>
|
|
188
|
+
<GridEditor {policy} />
|
|
189
|
+
</div>
|
|
188
190
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
+
<div id="app-editor-top-level-drawer" />
|
|
192
|
+
{/if}
|
|
193
|
+
</div>
|
|
191
194
|
</div>
|
|
195
|
+
</Pane>
|
|
196
|
+
<Pane size={$connectingInput?.opened ? 0 : 30}>
|
|
197
|
+
<div class="relative h-full w-full">
|
|
198
|
+
<InlineScriptsPanel />
|
|
199
|
+
</div>
|
|
200
|
+
</Pane>
|
|
201
|
+
</Splitpanes>
|
|
202
|
+
</SplitPanesWrapper>
|
|
203
|
+
</Pane>
|
|
204
|
+
<Pane size={21} minSize={5} maxSize={33}>
|
|
205
|
+
<div class="relative flex flex-col h-full">
|
|
206
|
+
<Tabs bind:selected={selectedTab} wrapperClass="!h-[40px]" class="!h-full">
|
|
207
|
+
<Tab value="insert" size="xs">
|
|
208
|
+
<div class="m-1 center-center gap-2">
|
|
209
|
+
<Icon data={faPlus} />
|
|
210
|
+
<span>Insert</span>
|
|
211
|
+
</div>
|
|
212
|
+
</Tab>
|
|
213
|
+
<Tab value="settings" size="xs">
|
|
214
|
+
<div class="m-1 center-center gap-2">
|
|
215
|
+
<Icon data={faSliders} />
|
|
216
|
+
<span>Settings</span>
|
|
217
|
+
</div>
|
|
218
|
+
</Tab>
|
|
219
|
+
<Tab value="css" size="xs">
|
|
220
|
+
<div class="m-1 center-center gap-2">
|
|
221
|
+
<Icon data={faCode} />
|
|
222
|
+
<span>CSS</span>
|
|
223
|
+
</div>
|
|
224
|
+
</Tab>
|
|
225
|
+
<div slot="content" class="h-full overflow-y-auto pb-4">
|
|
226
|
+
<TabContent class="overflow-auto h-full" value="settings">
|
|
227
|
+
{#if $selectedComponent !== undefined}
|
|
228
|
+
<SettingsPanel />
|
|
229
|
+
{:else}
|
|
230
|
+
<div class="min-w-[150px] text-sm text-gray-500 text-center py-8 px-2">
|
|
231
|
+
Select a component to see the settings for it
|
|
232
|
+
</div>
|
|
233
|
+
{/if}
|
|
234
|
+
</TabContent>
|
|
235
|
+
<TabContent value="insert">
|
|
236
|
+
<ComponentList />
|
|
237
|
+
</TabContent>
|
|
238
|
+
<TabContent value="css">
|
|
239
|
+
<CssSettings />
|
|
240
|
+
</TabContent>
|
|
192
241
|
</div>
|
|
193
|
-
</
|
|
194
|
-
|
|
195
|
-
<div
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
</div>
|
|
216
|
-
</Tab>
|
|
217
|
-
<Tab value="css" size="xs">
|
|
218
|
-
<div class="m-1 center-center gap-2">
|
|
219
|
-
<Icon data={faCode} />
|
|
220
|
-
<span>CSS</span>
|
|
221
|
-
</div>
|
|
222
|
-
</Tab>
|
|
223
|
-
<div slot="content" class="h-full overflow-y-auto pb-4">
|
|
224
|
-
<TabContent class="overflow-auto" value="settings">
|
|
225
|
-
{#if $selectedComponent !== undefined}
|
|
226
|
-
<SettingsPanel />
|
|
227
|
-
{:else}
|
|
228
|
-
<div class="min-w-[150px] text-sm text-gray-500 text-center py-8 px-2">
|
|
229
|
-
Select a component to see the settings for it
|
|
230
|
-
</div>
|
|
231
|
-
{/if}
|
|
232
|
-
</TabContent>
|
|
233
|
-
<TabContent value="insert">
|
|
234
|
-
<ComponentList />
|
|
235
|
-
</TabContent>
|
|
236
|
-
<TabContent value="css">
|
|
237
|
-
<CssSettings />
|
|
238
|
-
</TabContent>
|
|
239
|
-
</div>
|
|
240
|
-
</Tabs>
|
|
241
|
-
{#if $connectingInput.opened}
|
|
242
|
-
<div
|
|
243
|
-
class="fixed top-32 p-2 z-50 flex justify-center items-center"
|
|
244
|
-
transition:fly|local={{ duration: 100, y: -100 }}
|
|
245
|
-
>
|
|
246
|
-
<Alert title="Connecting" type="info">
|
|
247
|
-
<div class="flex gap-2 flex-col">
|
|
248
|
-
Click on the output of the component you want to connect to on the left panel.
|
|
249
|
-
<div>
|
|
250
|
-
<Button
|
|
251
|
-
color="blue"
|
|
252
|
-
variant="border"
|
|
253
|
-
size="xs"
|
|
254
|
-
on:click={() => {
|
|
255
|
-
$connectingInput.opened = false
|
|
256
|
-
$connectingInput.input = undefined
|
|
257
|
-
}}
|
|
258
|
-
>
|
|
259
|
-
Stop connecting
|
|
260
|
-
</Button>
|
|
242
|
+
</Tabs>
|
|
243
|
+
{#if $connectingInput.opened}
|
|
244
|
+
<div
|
|
245
|
+
class="fixed top-32 p-2 z-50 flex justify-center items-center"
|
|
246
|
+
transition:fly|local={{ duration: 100, y: -100 }}
|
|
247
|
+
>
|
|
248
|
+
<Alert title="Connecting" type="info">
|
|
249
|
+
<div class="flex gap-2 flex-col">
|
|
250
|
+
Click on the output of the component you want to connect to on the left panel.
|
|
251
|
+
<div>
|
|
252
|
+
<Button
|
|
253
|
+
color="blue"
|
|
254
|
+
variant="border"
|
|
255
|
+
size="xs"
|
|
256
|
+
on:click={() => {
|
|
257
|
+
$connectingInput.opened = false
|
|
258
|
+
$connectingInput.input = undefined
|
|
259
|
+
}}
|
|
260
|
+
>
|
|
261
|
+
Stop connecting
|
|
262
|
+
</Button>
|
|
263
|
+
</div>
|
|
261
264
|
</div>
|
|
262
|
-
</
|
|
263
|
-
</
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
</
|
|
267
|
-
</
|
|
268
|
-
</
|
|
269
|
-
|
|
265
|
+
</Alert>
|
|
266
|
+
</div>
|
|
267
|
+
{/if}
|
|
268
|
+
</div>
|
|
269
|
+
</Pane>
|
|
270
|
+
</Splitpanes>
|
|
271
|
+
</SplitPanesWrapper>
|
|
272
|
+
{/if}
|
|
273
|
+
{:else}
|
|
274
|
+
App is null
|
|
270
275
|
{/if}
|
|
271
276
|
{:else}
|
|
272
277
|
App editor not available to operators
|
|
@@ -9,6 +9,7 @@ import ToggleButtonGroup from '../../common/toggleButton/ToggleButtonGroup.svelt
|
|
|
9
9
|
import DisplayResult from '../../DisplayResult.svelte';
|
|
10
10
|
import Dropdown from '../../Dropdown.svelte';
|
|
11
11
|
import FlowProgressBar from '../../flows/FlowProgressBar.svelte';
|
|
12
|
+
import { idMutex } from '../../flows/flowStateUtils';
|
|
12
13
|
import FlowStatusViewer from '../../FlowStatusViewer.svelte';
|
|
13
14
|
import JobArgs from '../../JobArgs.svelte';
|
|
14
15
|
import LogViewer from '../../LogViewer.svelte';
|
|
@@ -173,7 +174,11 @@ let job = undefined;
|
|
|
173
174
|
let testIsLoading = false;
|
|
174
175
|
$: selectedJobId && testJobLoader?.watchJob(selectedJobId);
|
|
175
176
|
$: hasErrors = Object.keys($errorByComponent).length > 0;
|
|
177
|
+
let lock = false;
|
|
176
178
|
function onKeyDown(event) {
|
|
179
|
+
if (lock)
|
|
180
|
+
return;
|
|
181
|
+
lock = true;
|
|
177
182
|
switch (event.key) {
|
|
178
183
|
case 'Z':
|
|
179
184
|
if (event.ctrlKey) {
|
|
@@ -212,6 +217,7 @@ function onKeyDown(event) {
|
|
|
212
217
|
// break
|
|
213
218
|
// }
|
|
214
219
|
}
|
|
220
|
+
lock = false;
|
|
215
221
|
}
|
|
216
222
|
</script>
|
|
217
223
|
|
|
@@ -417,12 +423,12 @@ function onKeyDown(event) {
|
|
|
417
423
|
<ToggleButton position="left" value="dnd" size="xs">
|
|
418
424
|
<div class="inline-flex gap-1 items-center">
|
|
419
425
|
<Pencil size={14} />
|
|
420
|
-
<span class="hidden
|
|
426
|
+
<span class="hidden lg:inline">Editor</span>
|
|
421
427
|
</div>
|
|
422
428
|
</ToggleButton>
|
|
423
429
|
<ToggleButton position="right" value="preview" size="xs">
|
|
424
430
|
<div class="inline-flex gap-1 items-center">
|
|
425
|
-
<Eye size={14} /> <span class="hidden
|
|
431
|
+
<Eye size={14} /> <span class="hidden lg:inline">Preview</span>
|
|
426
432
|
</div>
|
|
427
433
|
</ToggleButton>
|
|
428
434
|
</ToggleButtonGroup>
|
|
@@ -439,42 +445,46 @@ function onKeyDown(event) {
|
|
|
439
445
|
</div>
|
|
440
446
|
|
|
441
447
|
<div class="hidden lg:block">
|
|
442
|
-
|
|
443
|
-
<
|
|
444
|
-
<
|
|
445
|
-
<
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
<
|
|
454
|
-
|
|
455
|
-
|
|
448
|
+
{#if $app}
|
|
449
|
+
<ToggleButtonGroup bind:selected={$app.fullscreen}>
|
|
450
|
+
<ToggleButton position="left" value={false} size="xs">
|
|
451
|
+
<div class="flex gap-1 justify-start items-center">
|
|
452
|
+
<AlignHorizontalSpaceAround size={14} />
|
|
453
|
+
<Tooltip light class="mb-0.5">
|
|
454
|
+
The max width is 1168px and the content stay centered instead of taking the full
|
|
455
|
+
page width
|
|
456
|
+
</Tooltip>
|
|
457
|
+
</div>
|
|
458
|
+
</ToggleButton>
|
|
459
|
+
<ToggleButton position="right" value={true} size="xs">
|
|
460
|
+
<Expand size={14} />
|
|
461
|
+
</ToggleButton>
|
|
462
|
+
</ToggleButtonGroup>
|
|
463
|
+
{/if}
|
|
456
464
|
</div>
|
|
457
465
|
</div>
|
|
458
466
|
{#if $focusedGrid !== undefined}
|
|
459
|
-
<
|
|
460
|
-
<
|
|
461
|
-
<div
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
467
|
+
<div class="hidden lg:block">
|
|
468
|
+
<Badge color="indigo">
|
|
469
|
+
<div class="flex flex-row gap-2 justify-center items-center">
|
|
470
|
+
<div>{`Sub grid: ${$focusedGrid.parentComponentId} (${$focusedGrid.subGridIndex})`}</div>
|
|
471
|
+
<button
|
|
472
|
+
on:click={() => {
|
|
473
|
+
$selectedComponent = undefined
|
|
474
|
+
$focusedGrid = undefined
|
|
475
|
+
}}
|
|
476
|
+
>
|
|
477
|
+
<X size={14} />
|
|
478
|
+
</button>
|
|
479
|
+
</div>
|
|
480
|
+
</Badge>
|
|
481
|
+
</div>
|
|
472
482
|
{/if}
|
|
473
483
|
|
|
474
484
|
<div class="flex flex-row gap-2 justify-end items-center overflow-visible">
|
|
475
485
|
<Dropdown
|
|
476
486
|
placement="bottom-end"
|
|
477
|
-
btnClasses="
|
|
487
|
+
btnClasses="hidden lg:block"
|
|
478
488
|
dropdownItems={[
|
|
479
489
|
{
|
|
480
490
|
displayName: 'JSON',
|
|
@@ -499,9 +509,7 @@ function onKeyDown(event) {
|
|
|
499
509
|
}
|
|
500
510
|
}
|
|
501
511
|
]}
|
|
502
|
-
|
|
503
|
-
<MoreVertical size={20} />
|
|
504
|
-
</Dropdown>
|
|
512
|
+
/>
|
|
505
513
|
<span class="hidden md:inline">
|
|
506
514
|
<Button on:click={() => (inputsDrawerOpen = true)} color="light" size="xs" variant="border">
|
|
507
515
|
<span class="flex gap-2">
|
|
@@ -518,7 +526,7 @@ function onKeyDown(event) {
|
|
|
518
526
|
variant="border"
|
|
519
527
|
startIcon={{ icon: faBug }}
|
|
520
528
|
>
|
|
521
|
-
<span class="hidden
|
|
529
|
+
<span class="hidden xl:inline">Debug Runs</span>
|
|
522
530
|
</Button>
|
|
523
531
|
</span>
|
|
524
532
|
<AppExportButton bind:this={appExport} />
|
|
@@ -529,7 +537,7 @@ function onKeyDown(event) {
|
|
|
529
537
|
variant="border"
|
|
530
538
|
startIcon={{ icon: faExternalLink }}
|
|
531
539
|
>
|
|
532
|
-
<span class="hidden
|
|
540
|
+
<span class="hidden xl:inline">Publish</span>
|
|
533
541
|
</Button>
|
|
534
542
|
{#if appPath == ''}
|
|
535
543
|
<Button
|
|
@@ -47,11 +47,12 @@ setContext('AppViewerContext', {
|
|
|
47
47
|
openDebugRun: writable(undefined),
|
|
48
48
|
focusedGrid: writable(undefined),
|
|
49
49
|
stateId: writable(0),
|
|
50
|
-
parentWidth: writable(0)
|
|
50
|
+
parentWidth: writable(0),
|
|
51
|
+
state: writable({}),
|
|
52
|
+
componentControl: writable({})
|
|
51
53
|
});
|
|
52
54
|
setContext('AppEditorContext', {
|
|
53
55
|
history: undefined,
|
|
54
|
-
componentControl: writable({}),
|
|
55
56
|
pickVariableCallback: writable(undefined)
|
|
56
57
|
});
|
|
57
58
|
let mounted = false;
|
|
@@ -33,13 +33,14 @@ function openDebugRuns() {
|
|
|
33
33
|
|
|
34
34
|
{#if pointerdown || selected || hover}
|
|
35
35
|
<button
|
|
36
|
-
title="Position
|
|
36
|
+
title="Lock Position"
|
|
37
37
|
class={classNames(
|
|
38
38
|
'text-gray-800 px-1 text-2xs py-0.5 font-bold w-fit shadow border border-gray-300 absolute -top-1 right-[2.5rem] z-50 cursor-pointer',
|
|
39
39
|
' hover:bg-gray-300',
|
|
40
40
|
selected ? 'bg-gray-200/80' : 'bg-gray-200/80'
|
|
41
41
|
)}
|
|
42
42
|
on:click={() => dispatch('lock')}
|
|
43
|
+
on:pointerdown|stopPropagation
|
|
43
44
|
>
|
|
44
45
|
{#if locked}
|
|
45
46
|
<Anchor aria-label="Unlock position" size={14} class="text-orange-500" />
|
|
@@ -55,6 +56,7 @@ function openDebugRuns() {
|
|
|
55
56
|
selected ? 'bg-gray-200/80' : 'bg-gray-200/80'
|
|
56
57
|
)}
|
|
57
58
|
on:click={() => dispatch('expand')}
|
|
59
|
+
on:pointerdown|stopPropagation
|
|
58
60
|
>
|
|
59
61
|
<Expand aria-label="Expand position" size={14} />
|
|
60
62
|
</button>
|