windmill-components 1.82.2 → 1.82.4
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/common.d.ts +2 -2
- package/components/ArgInput.svelte +52 -72
- package/components/ArgInput.svelte.d.ts +1 -3
- package/components/DisplayResult.svelte +17 -17
- package/components/Editor.svelte +0 -3
- package/components/Editor.svelte.d.ts +0 -1
- package/components/FieldHeader.svelte +0 -1
- package/components/FieldHeader.svelte.d.ts +0 -4
- package/components/FlowBuilder.svelte +6 -0
- package/components/FlowStatusViewer.svelte +7 -4
- package/components/FlowStatusViewer.svelte.d.ts +1 -0
- package/components/FlowViewer.svelte +0 -1
- package/components/InputTransformForm.svelte +0 -1
- package/components/LightweightArgInput.svelte +1 -14
- package/components/LightweightArgInput.svelte.d.ts +1 -3
- package/components/SimpleEditor.svelte +0 -1
- package/components/SimpleEditor.svelte.d.ts +0 -1
- package/components/TemplateEditor.svelte +0 -1
- package/components/Toggle.svelte +1 -1
- package/components/Toggle.svelte.d.ts +0 -1
- package/components/apps/components/buttons/AppButton.svelte +3 -17
- package/components/apps/components/buttons/AppForm.svelte +2 -10
- package/components/apps/components/buttons/AppFormButton.svelte +1 -13
- package/components/apps/components/display/AppDisplayComponent.svelte +23 -17
- package/components/apps/components/display/AppHtml.svelte +7 -1
- package/components/apps/components/display/AppHtml.svelte.d.ts +2 -0
- package/components/apps/components/display/AppMap.svelte +1 -1
- package/components/apps/components/display/AppPdf.svelte +1 -1
- package/components/apps/components/display/PlotlyHtml.svelte +20 -3
- package/components/apps/components/display/PlotlyHtml.svelte.d.ts +2 -0
- package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
- package/components/apps/components/display/table/AppTable.svelte +75 -49
- package/components/apps/components/display/table/AppTable.svelte.d.ts +1 -1
- package/components/apps/components/display/table/AppTableFooter.svelte +2 -1
- package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +1 -0
- package/components/apps/components/display/table/tableOptions.js +1 -1
- package/components/apps/components/helpers/DebouncedInput.svelte +1 -0
- package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +2 -0
- package/components/apps/components/helpers/HiddenComponent.svelte +3 -2
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
- package/components/apps/components/helpers/InputValue.svelte +3 -3
- package/components/apps/components/helpers/RefreshButton.svelte +3 -10
- package/components/apps/components/helpers/RefreshButton.svelte.d.ts +1 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +19 -15
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte +3 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/components/apps/components/helpers/eval.d.ts +4 -2
- package/components/apps/components/helpers/eval.js +6 -4
- package/components/apps/components/inputs/AppCheckbox.svelte +0 -4
- package/components/apps/components/inputs/AppDateInput.svelte +2 -2
- package/components/apps/components/inputs/AppMultiSelect.svelte +13 -5
- package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +0 -2
- package/components/apps/components/inputs/AppNumberInput.svelte +3 -3
- package/components/apps/components/inputs/AppSelect.svelte +11 -4
- package/components/apps/components/inputs/AppSelect.svelte.d.ts +0 -2
- package/components/apps/components/inputs/AppSliderInputs.svelte +1 -1
- package/components/apps/components/inputs/AppTextInput.svelte +53 -43
- package/components/apps/components/inputs/AppTextInput.svelte.d.ts +1 -1
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +1 -1
- package/components/apps/components/layout/AppContainer.svelte +2 -2
- package/components/apps/components/layout/AppDrawer.svelte +1 -2
- package/components/apps/components/layout/AppSplitpanes.svelte +3 -3
- package/components/apps/components/layout/AppTabs.svelte +1 -1
- package/components/apps/editor/AppEditor.svelte +36 -10
- package/components/apps/editor/AppEditorHeader.svelte +5 -0
- package/components/apps/editor/AppPreview.svelte +17 -5
- package/components/apps/editor/ComponentHeader.svelte +1 -0
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -1
- package/components/apps/editor/GridEditor.svelte +22 -12
- package/components/apps/editor/GridViewer.svelte +2 -2
- package/components/apps/editor/GridViewer.svelte.d.ts +1 -1
- package/components/apps/editor/RecomputeAllComponents.svelte +5 -7
- package/components/apps/editor/SettingsPanel.svelte +4 -4
- package/components/apps/editor/SubGridEditor.svelte +13 -12
- package/components/apps/editor/appUtils.d.ts +1 -0
- package/components/apps/editor/appUtils.js +19 -0
- package/components/apps/editor/component/Component.svelte +19 -8
- package/components/apps/editor/component/Component.svelte.d.ts +1 -1
- package/components/apps/editor/component/ComponentNavigation.svelte +55 -46
- package/components/apps/editor/component/components.d.ts +45 -28
- package/components/apps/editor/component/components.js +41 -27
- package/components/apps/editor/component/sets.js +2 -1
- package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
- package/components/apps/editor/componentsPanel/CssProperty.svelte +0 -26
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +0 -2
- package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -0
- package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +13 -10
- package/components/apps/editor/componentsPanel/quickStyleProperties.js +3 -0
- package/components/apps/editor/componentsPanel/store.js +4 -4
- package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -26
- package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +0 -1
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +8 -6
- package/components/apps/editor/contextPanel/ContextPanel.svelte +7 -14
- package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +2 -25
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte +29 -40
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +1 -2
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -7
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +10 -11
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +4 -3
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +0 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +2 -0
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +22 -19
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +22 -3
- package/components/apps/editor/settingsPanel/GridTab.svelte +1 -2
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +4 -0
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -0
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +1 -2
- package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -2
- package/components/apps/editor/settingsPanel/TableActions.svelte +3 -3
- package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +5 -1
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +3 -3
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +3 -2
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +4 -1
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +2 -2
- package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +1 -1
- package/components/apps/inputType.d.ts +2 -2
- package/components/apps/rx.d.ts +2 -2
- package/components/apps/svelte-grid/Grid.svelte +50 -34
- package/components/apps/svelte-grid/Grid.svelte.d.ts +14 -9
- package/components/apps/svelte-grid/MoveResize.svelte +76 -55
- package/components/apps/svelte-grid/MoveResize.svelte.d.ts +15 -9
- package/components/apps/svelte-grid/utils/helper.d.ts +0 -1
- package/components/apps/svelte-grid/utils/helper.js +0 -3
- package/components/apps/types.d.ts +7 -4
- package/components/apps/utils.d.ts +2 -0
- package/components/apps/utils.js +33 -1
- package/components/flows/map/MapItem.svelte +3 -3
- package/components/propertyPicker/ObjectViewer.svelte +0 -3
- package/components/scriptEditor/LogPanel.svelte +3 -3
- package/infer.js +6 -1
- package/package.json +1 -2
- package/components/apps/editor/contextPanel/components/MinMaxButton.svelte +0 -25
- package/components/apps/editor/contextPanel/components/MinMaxButton.svelte.d.ts +0 -16
|
@@ -27,6 +27,8 @@ import ItemPicker from '../../ItemPicker.svelte';
|
|
|
27
27
|
import VariableEditor from '../../VariableEditor.svelte';
|
|
28
28
|
import { SecondaryMenu } from './settingsPanel/secondaryMenu';
|
|
29
29
|
import { Component, Paintbrush, Plus } from 'lucide-svelte';
|
|
30
|
+
import { findGridItem, findGridItemParentGrid } from './appUtils';
|
|
31
|
+
import { findItemsById } from '../svelte-grid/utils/matrix';
|
|
30
32
|
export let app;
|
|
31
33
|
export let path;
|
|
32
34
|
export let initialMode = 'dnd';
|
|
@@ -62,7 +64,7 @@ setContext('AppViewerContext', {
|
|
|
62
64
|
mode,
|
|
63
65
|
connectingInput,
|
|
64
66
|
breakpoint,
|
|
65
|
-
runnableComponents,
|
|
67
|
+
runnableComponents: writable({}),
|
|
66
68
|
appPath: path,
|
|
67
69
|
workspace: $workspaceStore ?? '',
|
|
68
70
|
onchange: () => saveDraft(),
|
|
@@ -77,13 +79,14 @@ setContext('AppViewerContext', {
|
|
|
77
79
|
parentWidth: writable(0),
|
|
78
80
|
state: writable({}),
|
|
79
81
|
componentControl: writable({}),
|
|
80
|
-
hoverStore: writable(undefined)
|
|
82
|
+
hoverStore: writable(undefined),
|
|
83
|
+
allIdsInPath: writable([])
|
|
81
84
|
});
|
|
82
85
|
setContext('AppEditorContext', {
|
|
83
86
|
history,
|
|
84
87
|
pickVariableCallback,
|
|
85
88
|
ontextfocus: writable(undefined),
|
|
86
|
-
|
|
89
|
+
movingcomponents: writable(undefined),
|
|
87
90
|
selectedComponentInEditor: writable(undefined)
|
|
88
91
|
});
|
|
89
92
|
let timeout = undefined;
|
|
@@ -110,11 +113,36 @@ function hashchange(e) {
|
|
|
110
113
|
$: previewing = $mode === 'preview';
|
|
111
114
|
$: width = $breakpoint === 'sm' ? 'min-w-[400px] max-w-[656px]' : 'min-w-[710px] w-full';
|
|
112
115
|
let selectedTab = 'insert';
|
|
113
|
-
|
|
116
|
+
let befSelected = undefined;
|
|
117
|
+
$: if ($selectedComponent?.[0] != befSelected) {
|
|
118
|
+
befSelected = $selectedComponent?.[0];
|
|
114
119
|
selectedTab = 'settings';
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
if (befSelected) {
|
|
121
|
+
if (!['ctx', 'state'].includes(befSelected) && !befSelected?.startsWith('bg_')) {
|
|
122
|
+
let item = findGridItem($appStore, befSelected);
|
|
123
|
+
if (item?.data.type === 'containercomponent') {
|
|
124
|
+
$focusedGrid = {
|
|
125
|
+
parentComponentId: befSelected,
|
|
126
|
+
subGridIndex: 0
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
let subgrid = findGridItemParentGrid($appStore, befSelected);
|
|
131
|
+
if (subgrid) {
|
|
132
|
+
try {
|
|
133
|
+
$focusedGrid = {
|
|
134
|
+
parentComponentId: subgrid.split('-')[0],
|
|
135
|
+
subGridIndex: parseInt(subgrid.split('-')[1])
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch { }
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
$focusedGrid = undefined;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
118
146
|
}
|
|
119
147
|
let itemPicker = undefined;
|
|
120
148
|
$: if ($pickVariableCallback) {
|
|
@@ -185,7 +213,7 @@ let variableEditor = undefined;
|
|
|
185
213
|
{#if $appStore.grid}
|
|
186
214
|
<ComponentNavigation />
|
|
187
215
|
|
|
188
|
-
<div on:pointerdown|stopPropagation class={width}>
|
|
216
|
+
<div on:pointerdown|stopPropagation class={twMerge(width, 'mx-auto')}>
|
|
189
217
|
<GridEditor {policy} />
|
|
190
218
|
</div>
|
|
191
219
|
|
|
@@ -208,7 +236,6 @@ let variableEditor = undefined;
|
|
|
208
236
|
<Tab value="insert" size="xs">
|
|
209
237
|
<div class="m-1 center-center gap-1">
|
|
210
238
|
<Plus size={18} />
|
|
211
|
-
<span>Insert</span>
|
|
212
239
|
</div>
|
|
213
240
|
</Tab>
|
|
214
241
|
<Tab value="settings" size="xs">
|
|
@@ -220,7 +247,6 @@ let variableEditor = undefined;
|
|
|
220
247
|
<Tab value="css" size="xs">
|
|
221
248
|
<div class="m-1 center-center gap-1">
|
|
222
249
|
<Paintbrush size={18} />
|
|
223
|
-
<span>Styling</span>
|
|
224
250
|
</div>
|
|
225
251
|
</Tab>
|
|
226
252
|
<div slot="content" class="h-full overflow-y-auto">
|
|
@@ -177,6 +177,11 @@ let lock = false;
|
|
|
177
177
|
function onKeyDown(event) {
|
|
178
178
|
if (lock)
|
|
179
179
|
return;
|
|
180
|
+
let classes = event.target?.['className'];
|
|
181
|
+
if ((typeof classes === 'string' && classes.includes('inputarea')) ||
|
|
182
|
+
['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
180
185
|
lock = true;
|
|
181
186
|
switch (event.key) {
|
|
182
187
|
case 'Z':
|
|
@@ -10,6 +10,8 @@ import { Component } from './component';
|
|
|
10
10
|
import { twMerge } from 'tailwind-merge';
|
|
11
11
|
import { columnConfiguration } from '../gridUtils';
|
|
12
12
|
import { HiddenComponent } from '../components';
|
|
13
|
+
import { deepEqual } from 'fast-equals';
|
|
14
|
+
import { dfs } from './appUtils';
|
|
13
15
|
export let app;
|
|
14
16
|
export let appPath;
|
|
15
17
|
export let breakpoint;
|
|
@@ -28,7 +30,7 @@ const connectingInput = writable({
|
|
|
28
30
|
input: undefined,
|
|
29
31
|
hoveredComponent: undefined
|
|
30
32
|
});
|
|
31
|
-
const
|
|
33
|
+
const allIdsInPath = writable([]);
|
|
32
34
|
const parentWidth = writable(0);
|
|
33
35
|
setContext('AppViewerContext', {
|
|
34
36
|
worldStore: buildWorld(context),
|
|
@@ -38,7 +40,7 @@ setContext('AppViewerContext', {
|
|
|
38
40
|
mode,
|
|
39
41
|
connectingInput,
|
|
40
42
|
breakpoint,
|
|
41
|
-
runnableComponents,
|
|
43
|
+
runnableComponents: writable({}),
|
|
42
44
|
appPath,
|
|
43
45
|
workspace,
|
|
44
46
|
onchange: undefined,
|
|
@@ -53,13 +55,21 @@ setContext('AppViewerContext', {
|
|
|
53
55
|
parentWidth,
|
|
54
56
|
state: writable({}),
|
|
55
57
|
componentControl: writable({}),
|
|
56
|
-
hoverStore: writable(undefined)
|
|
58
|
+
hoverStore: writable(undefined),
|
|
59
|
+
allIdsInPath
|
|
57
60
|
});
|
|
58
61
|
let ncontext = context;
|
|
59
62
|
function hashchange(e) {
|
|
60
63
|
ncontext.hash = e.newURL.split('#')[1];
|
|
61
64
|
ncontext = ncontext;
|
|
62
65
|
}
|
|
66
|
+
let previousSelectedIds = undefined;
|
|
67
|
+
$: if (!deepEqual(previousSelectedIds, $selectedComponent)) {
|
|
68
|
+
previousSelectedIds = $selectedComponent;
|
|
69
|
+
$allIdsInPath = ($selectedComponent ?? [])
|
|
70
|
+
.flatMap((id) => dfs(app.grid, id, app.subgrids ?? {}))
|
|
71
|
+
.filter((x) => x != undefined);
|
|
72
|
+
}
|
|
63
73
|
$: width = $breakpoint === 'sm' ? 'max-w-[640px]' : 'w-full ';
|
|
64
74
|
$: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-none' : '';
|
|
65
75
|
</script>
|
|
@@ -100,7 +110,7 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
|
|
|
100
110
|
>
|
|
101
111
|
<div>
|
|
102
112
|
<GridViewer
|
|
103
|
-
|
|
113
|
+
allIdsInPath={$allIdsInPath}
|
|
104
114
|
items={app.grid}
|
|
105
115
|
let:dataItem
|
|
106
116
|
rowHeight={36}
|
|
@@ -110,7 +120,7 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
|
|
|
110
120
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
111
121
|
<div
|
|
112
122
|
class={'h-full w-full center-center'}
|
|
113
|
-
on:pointerdown={() => ($selectedComponent = dataItem.id)}
|
|
123
|
+
on:pointerdown={() => ($selectedComponent = [dataItem.id])}
|
|
114
124
|
>
|
|
115
125
|
<Component render={true} component={dataItem.data} selected={false} locked={true} />
|
|
116
126
|
</div>
|
|
@@ -141,6 +151,8 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
|
|
|
141
151
|
inlineScript={script.inlineScript}
|
|
142
152
|
name={script.name}
|
|
143
153
|
fields={script.fields}
|
|
154
|
+
doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
|
|
155
|
+
recomputableByRefreshButton={script.autoRefresh ?? false}
|
|
144
156
|
/>
|
|
145
157
|
{/if}
|
|
146
158
|
{/each}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script>import { getContext
|
|
1
|
+
<script>import { getContext } from 'svelte';
|
|
2
2
|
import { classNames } from '../../../utils';
|
|
3
3
|
import { columnConfiguration, isFixed, toggleFixed } from '../gridUtils';
|
|
4
4
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -6,12 +6,20 @@ import RecomputeAllComponents from './RecomputeAllComponents.svelte';
|
|
|
6
6
|
import HiddenComponent from '../components/helpers/HiddenComponent.svelte';
|
|
7
7
|
import Component from './component/Component.svelte';
|
|
8
8
|
import { push } from '../../../history';
|
|
9
|
-
import { expandGriditem, findGridItem } from './appUtils';
|
|
9
|
+
import { dfs, expandGriditem, findGridItem } from './appUtils';
|
|
10
10
|
import Grid from '../svelte-grid/Grid.svelte';
|
|
11
|
-
import
|
|
11
|
+
import { selectId } from '../utils';
|
|
12
|
+
import { deepEqual } from 'fast-equals';
|
|
12
13
|
export let policy;
|
|
13
|
-
const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint } = getContext('AppViewerContext');
|
|
14
|
+
const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
|
|
14
15
|
const { history } = getContext('AppEditorContext');
|
|
16
|
+
let previousSelectedIds = undefined;
|
|
17
|
+
$: if (!deepEqual(previousSelectedIds, $selectedComponent)) {
|
|
18
|
+
previousSelectedIds = $selectedComponent;
|
|
19
|
+
$allIdsInPath = ($selectedComponent ?? [])
|
|
20
|
+
.flatMap((id) => dfs($app.grid, id, $app.subgrids ?? {}))
|
|
21
|
+
.filter((x) => x != undefined);
|
|
22
|
+
}
|
|
15
23
|
function removeGridElement(component) {
|
|
16
24
|
if (component) {
|
|
17
25
|
$app.grid = $app.grid.filter((gridComponent) => {
|
|
@@ -37,9 +45,9 @@ function removeGridElement(component) {
|
|
|
37
45
|
$selectedComponent = undefined;
|
|
38
46
|
}
|
|
39
47
|
}
|
|
40
|
-
function selectComponent(id) {
|
|
48
|
+
function selectComponent(e, id) {
|
|
41
49
|
if (!$connectingInput.opened) {
|
|
42
|
-
|
|
50
|
+
selectId(e, id, selectedComponent, $app);
|
|
43
51
|
if ($focusedGrid?.parentComponentId != id) {
|
|
44
52
|
$focusedGrid = undefined;
|
|
45
53
|
}
|
|
@@ -81,7 +89,8 @@ function selectComponent(id) {
|
|
|
81
89
|
>
|
|
82
90
|
<div class={!$focusedGrid && $mode !== 'preview' ? 'border-gray-400 border border-dashed' : ''}>
|
|
83
91
|
<Grid
|
|
84
|
-
|
|
92
|
+
allIdsInPath={$allIdsInPath}
|
|
93
|
+
selectedIds={$selectedComponent}
|
|
85
94
|
items={$app.grid}
|
|
86
95
|
on:redraw={(e) => {
|
|
87
96
|
push(history, $app)
|
|
@@ -109,16 +118,16 @@ function selectComponent(id) {
|
|
|
109
118
|
{/if}
|
|
110
119
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
111
120
|
<div
|
|
112
|
-
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
121
|
+
on:pointerdown={(e) => selectComponent(e, dataItem.id)}
|
|
113
122
|
class={classNames(
|
|
114
123
|
'h-full w-full center-center',
|
|
115
|
-
$selectedComponent
|
|
124
|
+
Boolean($selectedComponent?.includes(dataItem.id)) ? 'active-grid-item' : ''
|
|
116
125
|
)}
|
|
117
126
|
>
|
|
118
127
|
<Component
|
|
119
128
|
render={true}
|
|
120
129
|
component={dataItem.data}
|
|
121
|
-
selected={$selectedComponent
|
|
130
|
+
selected={Boolean($selectedComponent?.includes(dataItem.id))}
|
|
122
131
|
locked={isFixed(dataItem)}
|
|
123
132
|
on:delete={() => removeGridElement(dataItem.data)}
|
|
124
133
|
on:lock={() => {
|
|
@@ -130,7 +139,7 @@ function selectComponent(id) {
|
|
|
130
139
|
}}
|
|
131
140
|
on:expand={() => {
|
|
132
141
|
push(history, $app)
|
|
133
|
-
$selectedComponent = dataItem.id
|
|
142
|
+
$selectedComponent = [dataItem.id]
|
|
134
143
|
expandGriditem($app.grid, dataItem.id, $breakpoint)
|
|
135
144
|
$app = $app
|
|
136
145
|
}}
|
|
@@ -149,7 +158,8 @@ function selectComponent(id) {
|
|
|
149
158
|
inlineScript={script.inlineScript}
|
|
150
159
|
name={script.name}
|
|
151
160
|
fields={script.fields}
|
|
152
|
-
doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged}
|
|
161
|
+
doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
|
|
162
|
+
recomputableByRefreshButton={script.autoRefresh ?? false}
|
|
153
163
|
/>
|
|
154
164
|
{/if}
|
|
155
165
|
{/each}
|
|
@@ -8,7 +8,7 @@ export let rowHeight;
|
|
|
8
8
|
export let cols;
|
|
9
9
|
export let gap = [10, 10];
|
|
10
10
|
export let throttleUpdate = 100;
|
|
11
|
-
export let
|
|
11
|
+
export let allIdsInPath = undefined;
|
|
12
12
|
export let containerWidth = undefined;
|
|
13
13
|
export let parentWidth = undefined;
|
|
14
14
|
let getComputedCols;
|
|
@@ -56,7 +56,7 @@ onMount(() => {
|
|
|
56
56
|
<div class="svlt-grid-container" style="height: {containerHeight}px" bind:this={container}>
|
|
57
57
|
{#if xPerPx}
|
|
58
58
|
{#each items as item (item.id)}
|
|
59
|
-
{@const onTop = item.id
|
|
59
|
+
{@const onTop = allIdsInPath?.includes(item.id)}
|
|
60
60
|
{@const width =
|
|
61
61
|
Math.min(getComputedCols, item[getComputedCols] && item[getComputedCols].w) * xPerPx -
|
|
62
62
|
gapX * 2}
|
|
@@ -7,7 +7,7 @@ declare class __sveltets_Render<T> {
|
|
|
7
7
|
cols: [number, number][];
|
|
8
8
|
gap?: number[] | undefined;
|
|
9
9
|
throttleUpdate?: number | undefined;
|
|
10
|
-
|
|
10
|
+
allIdsInPath?: string[] | undefined;
|
|
11
11
|
containerWidth?: number | undefined;
|
|
12
12
|
parentWidth?: number | undefined;
|
|
13
13
|
};
|
|
@@ -13,7 +13,7 @@ $: !firstLoad &&
|
|
|
13
13
|
$worldStore.initializedOutputs ==
|
|
14
14
|
allItems($app.grid, $app.subgrids).length + $app.hiddenInlineScripts.length &&
|
|
15
15
|
refresh();
|
|
16
|
-
$: componentNumber = Object.
|
|
16
|
+
$: componentNumber = Object.values($runnableComponents).filter((x) => x.autoRefresh).length;
|
|
17
17
|
function onClick(stopAfterClear = true) {
|
|
18
18
|
if (timeout) {
|
|
19
19
|
clearInterval(timeout);
|
|
@@ -39,13 +39,10 @@ function refresh() {
|
|
|
39
39
|
}
|
|
40
40
|
loading = true;
|
|
41
41
|
Promise.all(Object.keys($runnableComponents).map((id) => {
|
|
42
|
-
if (id
|
|
43
|
-
|
|
44
|
-
if (!$app.hiddenInlineScripts[index]?.autoRefresh) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
42
|
+
if (!$runnableComponents?.[id]?.autoRefresh) {
|
|
43
|
+
return;
|
|
47
44
|
}
|
|
48
|
-
return $runnableComponents?.[id]?.();
|
|
45
|
+
return $runnableComponents?.[id]?.cb?.();
|
|
49
46
|
})).finally(() => {
|
|
50
47
|
loading = false;
|
|
51
48
|
});
|
|
@@ -74,6 +71,7 @@ onMount(() => {
|
|
|
74
71
|
|
|
75
72
|
<div class="flex items-center">
|
|
76
73
|
<Button
|
|
74
|
+
disabled={componentNumber == 0}
|
|
77
75
|
on:click={() => onClick()}
|
|
78
76
|
color={timeout ? 'blue' : 'light'}
|
|
79
77
|
variant={timeout ? 'contained' : 'border'}
|
|
@@ -10,9 +10,9 @@ import BackgroundScriptTriggerList from './settingsPanel/triggerLists/Background
|
|
|
10
10
|
const { selectedComponent, app, stateId } = getContext('AppViewerContext');
|
|
11
11
|
$: hiddenInlineScript = $app?.hiddenInlineScripts
|
|
12
12
|
?.map((x, i) => ({ script: x, index: i }))
|
|
13
|
-
.find(({ script, index }) => `bg_${index}`
|
|
14
|
-
$: componentSettings = findComponentSettings($app, $selectedComponent);
|
|
15
|
-
$: tableActionSettings = findTableActionSettings($app, $selectedComponent);
|
|
13
|
+
.find(({ script, index }) => $selectedComponent?.includes(`bg_${index}`));
|
|
14
|
+
$: componentSettings = findComponentSettings($app, $selectedComponent?.[0]);
|
|
15
|
+
$: tableActionSettings = findTableActionSettings($app, $selectedComponent?.[0]);
|
|
16
16
|
function findTableActionSettings(app, id) {
|
|
17
17
|
return allItems(app.grid, app.subgrids)
|
|
18
18
|
.map((x) => {
|
|
@@ -29,7 +29,7 @@ function findTableActionSettings(app, id) {
|
|
|
29
29
|
}
|
|
30
30
|
function findComponentSettings(app, id) {
|
|
31
31
|
if (!id)
|
|
32
|
-
return;
|
|
32
|
+
return undefined;
|
|
33
33
|
if (app?.grid) {
|
|
34
34
|
const gridItem = app.grid.find((x) => x.data?.id === id);
|
|
35
35
|
if (gridItem) {
|
|
@@ -7,6 +7,7 @@ import { expandGriditem, findGridItem } from './appUtils';
|
|
|
7
7
|
import { push } from '../../../history';
|
|
8
8
|
import Grid from '../svelte-grid/Grid.svelte';
|
|
9
9
|
import GridViewer from './GridViewer.svelte';
|
|
10
|
+
import { selectId } from '../utils';
|
|
10
11
|
export let containerHeight = undefined;
|
|
11
12
|
export let containerWidth = undefined;
|
|
12
13
|
let classes = '';
|
|
@@ -19,16 +20,15 @@ export let visible = true;
|
|
|
19
20
|
export let id;
|
|
20
21
|
export let shouldHighlight = true;
|
|
21
22
|
const dispatch = createEventDispatcher();
|
|
22
|
-
const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint } = getContext('AppViewerContext');
|
|
23
|
+
const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint, allIdsInPath } = getContext('AppViewerContext');
|
|
23
24
|
const editorContext = getContext('AppEditorContext');
|
|
24
25
|
$: highlight = id === $focusedGrid?.parentComponentId && shouldHighlight;
|
|
25
26
|
const onpointerdown = (e) => {
|
|
26
27
|
dispatch('focus');
|
|
27
28
|
};
|
|
28
|
-
function selectComponent(id) {
|
|
29
|
+
function selectComponent(e, id) {
|
|
29
30
|
if (!$connectingInput.opened) {
|
|
30
|
-
|
|
31
|
-
$selectedComponent = id;
|
|
31
|
+
selectId(e, id, selectedComponent, $app);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
function lock(dataItem) {
|
|
@@ -60,6 +60,7 @@ let container = undefined;
|
|
|
60
60
|
{#if $mode !== 'preview'}
|
|
61
61
|
<div class={highlight ? 'border-gray-400 border border-dashed min-h-full' : ''}>
|
|
62
62
|
<Grid
|
|
63
|
+
allIdsInPath={$allIdsInPath}
|
|
63
64
|
items={$app.subgrids?.[subGridId] ?? []}
|
|
64
65
|
on:redraw={(e) => {
|
|
65
66
|
push(editorContext?.history, $app)
|
|
@@ -67,7 +68,7 @@ let container = undefined;
|
|
|
67
68
|
$app.subgrids[subGridId] = e.detail
|
|
68
69
|
}
|
|
69
70
|
}}
|
|
70
|
-
|
|
71
|
+
selectedIds={$selectedComponent}
|
|
71
72
|
let:dataItem
|
|
72
73
|
rowHeight={36}
|
|
73
74
|
cols={columnConfiguration}
|
|
@@ -94,17 +95,17 @@ let container = undefined;
|
|
|
94
95
|
|
|
95
96
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
96
97
|
<div
|
|
97
|
-
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
98
|
+
on:pointerdown={(e) => selectComponent(e, dataItem.id)}
|
|
98
99
|
class={classNames(
|
|
99
100
|
'h-full w-full center-center',
|
|
100
|
-
$selectedComponent
|
|
101
|
+
$selectedComponent?.includes(dataItem.id) ? 'active-grid-item' : '',
|
|
101
102
|
'top-0'
|
|
102
103
|
)}
|
|
103
104
|
>
|
|
104
105
|
<Component
|
|
105
106
|
render={visible}
|
|
106
107
|
component={dataItem.data}
|
|
107
|
-
selected={$selectedComponent
|
|
108
|
+
selected={Boolean($selectedComponent?.includes(dataItem.id))}
|
|
108
109
|
locked={isFixed(dataItem)}
|
|
109
110
|
on:lock={() => lock(dataItem)}
|
|
110
111
|
on:expand={() => {
|
|
@@ -113,7 +114,7 @@ let container = undefined;
|
|
|
113
114
|
if (!parentGridItem) {
|
|
114
115
|
return
|
|
115
116
|
}
|
|
116
|
-
$selectedComponent = dataItem.id
|
|
117
|
+
$selectedComponent = [dataItem.id]
|
|
117
118
|
push(editorContext?.history, $app)
|
|
118
119
|
|
|
119
120
|
expandGriditem(
|
|
@@ -130,7 +131,7 @@ let container = undefined;
|
|
|
130
131
|
</div>
|
|
131
132
|
{:else}
|
|
132
133
|
<GridViewer
|
|
133
|
-
|
|
134
|
+
allIdsInPath={$allIdsInPath}
|
|
134
135
|
items={$app.subgrids?.[subGridId] ?? []}
|
|
135
136
|
let:dataItem
|
|
136
137
|
rowHeight={36}
|
|
@@ -141,13 +142,13 @@ let container = undefined;
|
|
|
141
142
|
>
|
|
142
143
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
143
144
|
<div
|
|
144
|
-
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
145
|
+
on:pointerdown|stopPropagation={(e) => selectComponent(e, dataItem.id)}
|
|
145
146
|
class={classNames('h-full w-full center-center', 'top-0')}
|
|
146
147
|
>
|
|
147
148
|
<Component
|
|
148
149
|
render={visible}
|
|
149
150
|
component={dataItem.data}
|
|
150
|
-
selected={$selectedComponent
|
|
151
|
+
selected={Boolean($selectedComponent?.includes(dataItem.id))}
|
|
151
152
|
locked={isFixed(dataItem)}
|
|
152
153
|
/>
|
|
153
154
|
</div>
|
|
@@ -3,6 +3,7 @@ import { components, type AppComponent, type BaseComponent } from './component';
|
|
|
3
3
|
import type { Output, World } from '../rx';
|
|
4
4
|
import type { FilledItem } from '../svelte-grid/types';
|
|
5
5
|
import type { EvalAppInput, StaticAppInput } from '../inputType';
|
|
6
|
+
export declare function dfs(grid: GridItem[], id: string, subgrids: Record<string, GridItem[]>): string[] | undefined;
|
|
6
7
|
export declare function findGridItemParentGrid(app: App, id: string): string | undefined;
|
|
7
8
|
export declare function allsubIds(app: App, parentId: string): string[];
|
|
8
9
|
export declare function findGridItem(app: App, id: string): GridItem | undefined;
|
|
@@ -3,6 +3,25 @@ import { ccomponents, components, getRecommendedDimensionsByComponent } from './
|
|
|
3
3
|
import { gridColumns } from '../gridUtils';
|
|
4
4
|
import { allItems } from '../utils';
|
|
5
5
|
import gridHelp from '../svelte-grid/utils/helper';
|
|
6
|
+
export function dfs(grid, id, subgrids) {
|
|
7
|
+
for (const item of grid) {
|
|
8
|
+
if (item.id === id) {
|
|
9
|
+
return [id];
|
|
10
|
+
}
|
|
11
|
+
else if (item.data.type == 'tablecomponent' && item.data.actionButtons.find((x) => x.id)) {
|
|
12
|
+
return [item.id, id];
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
for (let i = 0; i < (item.data.numberOfSubgrids ?? 0); i++) {
|
|
16
|
+
const res = dfs(subgrids[`${item.id}-${i}`], id, subgrids);
|
|
17
|
+
if (res) {
|
|
18
|
+
return [item.id, ...res];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
6
25
|
function findGridItemById(root, subGrids, id) {
|
|
7
26
|
for (const gridItem of allItems(root, subGrids)) {
|
|
8
27
|
if (gridItem.id === id) {
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
<script>import { getContext } from 'svelte';
|
|
2
|
-
import { Loader2 } from 'lucide-svelte';
|
|
3
2
|
import { twMerge } from 'tailwind-merge';
|
|
4
3
|
import ComponentHeader from '../ComponentHeader.svelte';
|
|
5
|
-
import { ccomponents, components } from './components';
|
|
6
4
|
import { AppBarChart, AppDisplayComponent, AppTable, AppText, AppButton, AppPieChart, AppSelect, AppCheckbox, AppTextInput, AppNumberInput, AppDateInput, AppForm, AppScatterChart, AppTimeseries, AppHtml, AppSliderInputs, AppFormButton, VegaLiteHtml, PlotlyHtml, AppRangeInput, AppTabs, AppIcon, AppCurrencyInput, AppDivider, AppFileInput, AppImage, AppContainer, AppAggridTable, AppDrawer, AppMap, AppSplitpanes, AppPdf } from '../../components';
|
|
7
5
|
import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
|
|
8
6
|
export let component;
|
|
@@ -11,8 +9,9 @@ export let locked = false;
|
|
|
11
9
|
export let render;
|
|
12
10
|
const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
|
|
13
11
|
const editorContext = getContext('AppEditorContext');
|
|
14
|
-
const
|
|
15
|
-
$: ismoving =
|
|
12
|
+
const movingcomponents = editorContext?.movingcomponents;
|
|
13
|
+
$: ismoving =
|
|
14
|
+
movingcomponents != undefined && $mode == 'dnd' && $movingcomponents?.includes(component.id);
|
|
16
15
|
let initializing = undefined;
|
|
17
16
|
let componentContainerHeight = 0;
|
|
18
17
|
$: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
|
|
@@ -50,9 +49,11 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
50
49
|
<button
|
|
51
50
|
class="border p-0.5 text-xs"
|
|
52
51
|
on:click={() => {
|
|
53
|
-
$
|
|
54
|
-
}}
|
|
52
|
+
$movingcomponents = undefined
|
|
53
|
+
}}
|
|
55
54
|
>
|
|
55
|
+
Cancel move
|
|
56
|
+
</button>
|
|
56
57
|
</div>
|
|
57
58
|
{/if}
|
|
58
59
|
<div
|
|
@@ -60,7 +61,6 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
60
61
|
'h-full bg-white/40 outline-1',
|
|
61
62
|
$hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
|
|
62
63
|
selected && $mode !== 'preview' ? 'outline outline-indigo-600' : '',
|
|
63
|
-
ccomponents[component.type].softWrap || hasError ? '' : 'overflow-auto',
|
|
64
64
|
$mode != 'preview' ? 'cursor-pointer' : '',
|
|
65
65
|
'relative z-auto',
|
|
66
66
|
$app.css?.['app']?.['component']?.class,
|
|
@@ -114,6 +114,7 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
114
114
|
{:else if component.type === 'plotlycomponent'}
|
|
115
115
|
<PlotlyHtml
|
|
116
116
|
id={component.id}
|
|
117
|
+
configuration={component.configuration}
|
|
117
118
|
bind:initializing
|
|
118
119
|
componentInput={component.componentInput}
|
|
119
120
|
{render}
|
|
@@ -143,7 +144,7 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
143
144
|
customCss={component.customCss}
|
|
144
145
|
bind:initializing
|
|
145
146
|
componentInput={component.componentInput}
|
|
146
|
-
|
|
147
|
+
actionButtons={component.actionButtons}
|
|
147
148
|
{render}
|
|
148
149
|
/>
|
|
149
150
|
{:else if component.type === 'aggridcomponent'}
|
|
@@ -233,6 +234,16 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
233
234
|
customCss={component.customCss}
|
|
234
235
|
{render}
|
|
235
236
|
/>
|
|
237
|
+
{:else if component.type === 'textareainputcomponent'}
|
|
238
|
+
<AppTextInput
|
|
239
|
+
id={component.id}
|
|
240
|
+
verticalAlignment={component.verticalAlignment}
|
|
241
|
+
configuration={component.configuration}
|
|
242
|
+
customCss={component.customCss}
|
|
243
|
+
inputType="textarea"
|
|
244
|
+
appCssKey="textareainputcomponent"
|
|
245
|
+
{render}
|
|
246
|
+
/>
|
|
236
247
|
{:else if component.type === 'emailinputcomponent'}
|
|
237
248
|
<AppTextInput
|
|
238
249
|
verticalAlignment={component.verticalAlignment}
|