windmill-components 1.82.4 → 1.82.6
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 +72 -52
- package/components/ArgInput.svelte.d.ts +3 -1
- package/components/DisplayResult.svelte +17 -17
- package/components/Editor.svelte +3 -0
- package/components/Editor.svelte.d.ts +1 -0
- package/components/FieldHeader.svelte +1 -0
- package/components/FieldHeader.svelte.d.ts +4 -0
- package/components/FlowBuilder.svelte +0 -6
- package/components/FlowStatusViewer.svelte +4 -7
- package/components/FlowStatusViewer.svelte.d.ts +0 -1
- package/components/FlowViewer.svelte +1 -0
- package/components/InputTransformForm.svelte +1 -0
- package/components/LightweightArgInput.svelte +14 -1
- package/components/LightweightArgInput.svelte.d.ts +3 -1
- package/components/Multiselect.svelte.d.ts +2 -2
- package/components/SimpleEditor.svelte +1 -0
- package/components/SimpleEditor.svelte.d.ts +1 -0
- package/components/TemplateEditor.svelte +1 -0
- package/components/Toggle.svelte +1 -1
- package/components/Toggle.svelte.d.ts +1 -0
- package/components/apps/components/buttons/AppButton.svelte +17 -3
- package/components/apps/components/buttons/AppForm.svelte +10 -2
- package/components/apps/components/buttons/AppFormButton.svelte +82 -58
- package/components/apps/components/display/AppDisplayComponent.svelte +17 -23
- package/components/apps/components/display/AppHtml.svelte +1 -7
- package/components/apps/components/display/AppHtml.svelte.d.ts +0 -2
- 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 +3 -20
- package/components/apps/components/display/PlotlyHtml.svelte.d.ts +0 -2
- package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
- package/components/apps/components/display/table/AppTable.svelte +49 -75
- package/components/apps/components/display/table/AppTable.svelte.d.ts +1 -1
- package/components/apps/components/display/table/AppTableFooter.svelte +1 -2
- package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +0 -1
- package/components/apps/components/display/table/tableOptions.js +1 -1
- package/components/apps/components/helpers/DebouncedInput.svelte +0 -1
- package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +0 -2
- package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -2
- package/components/apps/components/helpers/InputValue.svelte +3 -3
- package/components/apps/components/helpers/RefreshButton.svelte +10 -3
- package/components/apps/components/helpers/RefreshButton.svelte.d.ts +0 -1
- package/components/apps/components/helpers/RunnableComponent.svelte +15 -19
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -2
- package/components/apps/components/helpers/RunnableWrapper.svelte +1 -3
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +0 -1
- package/components/apps/components/helpers/eval.d.ts +2 -4
- package/components/apps/components/helpers/eval.js +4 -6
- package/components/apps/components/inputs/AppCheckbox.svelte +4 -0
- package/components/apps/components/inputs/AppDateInput.svelte +2 -2
- package/components/apps/components/inputs/AppMultiSelect.svelte +5 -13
- package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +2 -0
- package/components/apps/components/inputs/AppNumberInput.svelte +3 -3
- package/components/apps/components/inputs/AppSelect.svelte +4 -11
- package/components/apps/components/inputs/AppSelect.svelte.d.ts +2 -0
- package/components/apps/components/inputs/AppSliderInputs.svelte +1 -1
- package/components/apps/components/inputs/AppTextInput.svelte +43 -53
- 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 +2 -1
- package/components/apps/components/layout/AppSplitpanes.svelte +3 -3
- package/components/apps/components/layout/AppTabs.svelte +1 -1
- package/components/apps/editor/AppEditor.svelte +21 -49
- package/components/apps/editor/AppEditorHeader.svelte +0 -5
- package/components/apps/editor/AppPreview.svelte +7 -18
- package/components/apps/editor/ComponentHeader.svelte +0 -1
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -1
- package/components/apps/editor/GridEditor.svelte +12 -22
- package/components/apps/editor/GridViewer.svelte +2 -2
- package/components/apps/editor/GridViewer.svelte.d.ts +1 -1
- package/components/apps/editor/RecomputeAllComponents.svelte +7 -5
- package/components/apps/editor/SettingsPanel.svelte +4 -4
- package/components/apps/editor/SubGridEditor.svelte +12 -13
- package/components/apps/editor/appUtils.d.ts +0 -1
- package/components/apps/editor/appUtils.js +0 -19
- package/components/apps/editor/component/Component.svelte +8 -19
- package/components/apps/editor/component/Component.svelte.d.ts +1 -1
- package/components/apps/editor/component/ComponentNavigation.svelte +47 -57
- package/components/apps/editor/component/README.md +0 -4
- package/components/apps/editor/component/components.d.ts +28 -45
- package/components/apps/editor/component/components.js +27 -41
- package/components/apps/editor/component/sets.js +1 -2
- package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
- package/components/apps/editor/componentsPanel/CssProperty.svelte +48 -62
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +2 -3
- package/components/apps/editor/componentsPanel/CssSettings.svelte +0 -1
- package/components/apps/editor/componentsPanel/store.js +4 -4
- package/components/apps/editor/contextPanel/ComponentOutput.svelte +26 -2
- package/components/apps/editor/contextPanel/ComponentOutput.svelte.d.ts +1 -0
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +6 -8
- package/components/apps/editor/contextPanel/ContextPanel.svelte +14 -7
- package/components/apps/editor/contextPanel/components/BackgroundScriptOutput.svelte +25 -2
- 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 +40 -29
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte.d.ts +2 -1
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +7 -2
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +11 -10
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +3 -4
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +0 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +0 -2
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +19 -22
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +13 -42
- package/components/apps/editor/settingsPanel/GridTab.svelte +2 -1
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -2
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +0 -4
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +0 -1
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +2 -1
- package/components/apps/editor/settingsPanel/TableActions.svelte +3 -3
- package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +12 -12
- package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +2 -3
- package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +1 -5
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +3 -3
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +2 -3
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +1 -4
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +3 -3
- 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 +34 -50
- package/components/apps/svelte-grid/Grid.svelte.d.ts +9 -14
- package/components/apps/svelte-grid/MoveResize.svelte +55 -76
- package/components/apps/svelte-grid/MoveResize.svelte.d.ts +9 -15
- package/components/apps/svelte-grid/utils/helper.d.ts +1 -0
- package/components/apps/svelte-grid/utils/helper.js +3 -0
- package/components/apps/types.d.ts +5 -9
- package/components/apps/utils.d.ts +0 -2
- package/components/apps/utils.js +1 -33
- package/components/common/button/ButtonPopup.svelte +2 -5
- package/components/common/button/ButtonPopup.svelte.d.ts +1 -5
- package/components/common/button/ButtonPopupItem.svelte +1 -2
- package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -1
- package/components/common/index.d.ts +0 -1
- package/components/common/index.js +0 -1
- package/components/common/kbd/Kbd.svelte +1 -4
- package/components/common/kbd/Kbd.svelte.d.ts +14 -6
- package/components/common/menu/Menu.svelte +2 -8
- package/components/common/menu/Menu.svelte.d.ts +1 -4
- package/components/flows/map/MapItem.svelte +3 -3
- package/components/propertyPicker/ObjectViewer.svelte +3 -0
- package/components/scriptEditor/LogPanel.svelte +3 -3
- package/infer.js +1 -6
- package/package.json +2 -11
- package/utils.d.ts +0 -1
- package/utils.js +0 -3
- package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +0 -170
- package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte.d.ts +0 -18
- package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte +0 -130
- package/components/apps/editor/componentsPanel/QuickStyleProperty.svelte.d.ts +0 -21
- package/components/apps/editor/componentsPanel/quickStyleProperties.d.ts +0 -535
- package/components/apps/editor/componentsPanel/quickStyleProperties.js +0 -598
- package/components/apps/editor/settingsPanel/StylePanel.svelte +0 -61
- package/components/apps/editor/settingsPanel/StylePanel.svelte.d.ts +0 -17
- package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +0 -47
- package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte.d.ts +0 -14
- package/components/apps/editor/settingsPanel/secondaryMenu/index.d.ts +0 -2
- package/components/apps/editor/settingsPanel/secondaryMenu/index.js +0 -2
- package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.d.ts +0 -12
- package/components/apps/editor/settingsPanel/secondaryMenu/menuStore.js +0 -10
- package/components/common/clearableInput/ClearableInput.svelte +0 -56
- package/components/common/clearableInput/ClearableInput.svelte.d.ts +0 -28
- package/components/common/modal/AlwaysMountedModal.svelte +0 -109
- package/components/common/modal/AlwaysMountedModal.svelte.d.ts +0 -22
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script>import { getContext } from 'svelte';
|
|
1
|
+
<script>import { getContext, afterUpdate } from 'svelte';
|
|
2
2
|
import { classNames } from '../../../utils';
|
|
3
3
|
import { columnConfiguration, isFixed, toggleFixed } from '../gridUtils';
|
|
4
4
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -6,20 +6,12 @@ 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 {
|
|
9
|
+
import { expandGriditem, findGridItem } from './appUtils';
|
|
10
10
|
import Grid from '../svelte-grid/Grid.svelte';
|
|
11
|
-
import
|
|
12
|
-
import { deepEqual } from 'fast-equals';
|
|
11
|
+
import Toggle from '../../Toggle.svelte';
|
|
13
12
|
export let policy;
|
|
14
|
-
const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint
|
|
13
|
+
const { selectedComponent, app, mode, connectingInput, runnableComponents, summary, focusedGrid, parentWidth, breakpoint } = getContext('AppViewerContext');
|
|
15
14
|
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
|
-
}
|
|
23
15
|
function removeGridElement(component) {
|
|
24
16
|
if (component) {
|
|
25
17
|
$app.grid = $app.grid.filter((gridComponent) => {
|
|
@@ -45,9 +37,9 @@ function removeGridElement(component) {
|
|
|
45
37
|
$selectedComponent = undefined;
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
|
-
function selectComponent(
|
|
40
|
+
function selectComponent(id) {
|
|
49
41
|
if (!$connectingInput.opened) {
|
|
50
|
-
|
|
42
|
+
$selectedComponent = id;
|
|
51
43
|
if ($focusedGrid?.parentComponentId != id) {
|
|
52
44
|
$focusedGrid = undefined;
|
|
53
45
|
}
|
|
@@ -89,8 +81,7 @@ function selectComponent(e, id) {
|
|
|
89
81
|
>
|
|
90
82
|
<div class={!$focusedGrid && $mode !== 'preview' ? 'border-gray-400 border border-dashed' : ''}>
|
|
91
83
|
<Grid
|
|
92
|
-
|
|
93
|
-
selectedIds={$selectedComponent}
|
|
84
|
+
onTopId={$selectedComponent}
|
|
94
85
|
items={$app.grid}
|
|
95
86
|
on:redraw={(e) => {
|
|
96
87
|
push(history, $app)
|
|
@@ -118,16 +109,16 @@ function selectComponent(e, id) {
|
|
|
118
109
|
{/if}
|
|
119
110
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
120
111
|
<div
|
|
121
|
-
on:pointerdown={(
|
|
112
|
+
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
122
113
|
class={classNames(
|
|
123
114
|
'h-full w-full center-center',
|
|
124
|
-
|
|
115
|
+
$selectedComponent === dataItem.id ? 'active-grid-item' : ''
|
|
125
116
|
)}
|
|
126
117
|
>
|
|
127
118
|
<Component
|
|
128
119
|
render={true}
|
|
129
120
|
component={dataItem.data}
|
|
130
|
-
selected={
|
|
121
|
+
selected={$selectedComponent === dataItem.id}
|
|
131
122
|
locked={isFixed(dataItem)}
|
|
132
123
|
on:delete={() => removeGridElement(dataItem.data)}
|
|
133
124
|
on:lock={() => {
|
|
@@ -139,7 +130,7 @@ function selectComponent(e, id) {
|
|
|
139
130
|
}}
|
|
140
131
|
on:expand={() => {
|
|
141
132
|
push(history, $app)
|
|
142
|
-
$selectedComponent =
|
|
133
|
+
$selectedComponent = dataItem.id
|
|
143
134
|
expandGriditem($app.grid, dataItem.id, $breakpoint)
|
|
144
135
|
$app = $app
|
|
145
136
|
}}
|
|
@@ -158,8 +149,7 @@ function selectComponent(e, id) {
|
|
|
158
149
|
inlineScript={script.inlineScript}
|
|
159
150
|
name={script.name}
|
|
160
151
|
fields={script.fields}
|
|
161
|
-
doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged
|
|
162
|
-
recomputableByRefreshButton={script.autoRefresh ?? false}
|
|
152
|
+
doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged}
|
|
163
153
|
/>
|
|
164
154
|
{/if}
|
|
165
155
|
{/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 onTopId = 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 =
|
|
59
|
+
{@const onTop = item.id == onTopId}
|
|
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
|
+
onTopId?: 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.keys($runnableComponents).length;
|
|
17
17
|
function onClick(stopAfterClear = true) {
|
|
18
18
|
if (timeout) {
|
|
19
19
|
clearInterval(timeout);
|
|
@@ -39,10 +39,13 @@ function refresh() {
|
|
|
39
39
|
}
|
|
40
40
|
loading = true;
|
|
41
41
|
Promise.all(Object.keys($runnableComponents).map((id) => {
|
|
42
|
-
if (
|
|
43
|
-
|
|
42
|
+
if (id.startsWith('bg_')) {
|
|
43
|
+
let index = parseInt(id.split('_')[1]);
|
|
44
|
+
if (!$app.hiddenInlineScripts[index]?.autoRefresh) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
44
47
|
}
|
|
45
|
-
return $runnableComponents?.[id]?.
|
|
48
|
+
return $runnableComponents?.[id]?.();
|
|
46
49
|
})).finally(() => {
|
|
47
50
|
loading = false;
|
|
48
51
|
});
|
|
@@ -71,7 +74,6 @@ onMount(() => {
|
|
|
71
74
|
|
|
72
75
|
<div class="flex items-center">
|
|
73
76
|
<Button
|
|
74
|
-
disabled={componentNumber == 0}
|
|
75
77
|
on:click={() => onClick()}
|
|
76
78
|
color={timeout ? 'blue' : 'light'}
|
|
77
79
|
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 }) =>
|
|
14
|
-
$: componentSettings = findComponentSettings($app, $selectedComponent
|
|
15
|
-
$: tableActionSettings = findTableActionSettings($app, $selectedComponent
|
|
13
|
+
.find(({ script, index }) => `bg_${index}` === $selectedComponent);
|
|
14
|
+
$: componentSettings = findComponentSettings($app, $selectedComponent);
|
|
15
|
+
$: tableActionSettings = findTableActionSettings($app, $selectedComponent);
|
|
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;
|
|
33
33
|
if (app?.grid) {
|
|
34
34
|
const gridItem = app.grid.find((x) => x.data?.id === id);
|
|
35
35
|
if (gridItem) {
|
|
@@ -7,7 +7,6 @@ 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';
|
|
11
10
|
export let containerHeight = undefined;
|
|
12
11
|
export let containerWidth = undefined;
|
|
13
12
|
let classes = '';
|
|
@@ -20,15 +19,16 @@ export let visible = true;
|
|
|
20
19
|
export let id;
|
|
21
20
|
export let shouldHighlight = true;
|
|
22
21
|
const dispatch = createEventDispatcher();
|
|
23
|
-
const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint
|
|
22
|
+
const { app, connectingInput, selectedComponent, focusedGrid, mode, parentWidth, breakpoint } = getContext('AppViewerContext');
|
|
24
23
|
const editorContext = getContext('AppEditorContext');
|
|
25
24
|
$: highlight = id === $focusedGrid?.parentComponentId && shouldHighlight;
|
|
26
25
|
const onpointerdown = (e) => {
|
|
27
26
|
dispatch('focus');
|
|
28
27
|
};
|
|
29
|
-
function selectComponent(
|
|
28
|
+
function selectComponent(id) {
|
|
30
29
|
if (!$connectingInput.opened) {
|
|
31
|
-
|
|
30
|
+
dispatch('focus');
|
|
31
|
+
$selectedComponent = id;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
function lock(dataItem) {
|
|
@@ -60,7 +60,6 @@ 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}
|
|
64
63
|
items={$app.subgrids?.[subGridId] ?? []}
|
|
65
64
|
on:redraw={(e) => {
|
|
66
65
|
push(editorContext?.history, $app)
|
|
@@ -68,7 +67,7 @@ let container = undefined;
|
|
|
68
67
|
$app.subgrids[subGridId] = e.detail
|
|
69
68
|
}
|
|
70
69
|
}}
|
|
71
|
-
|
|
70
|
+
onTopId={$selectedComponent}
|
|
72
71
|
let:dataItem
|
|
73
72
|
rowHeight={36}
|
|
74
73
|
cols={columnConfiguration}
|
|
@@ -95,17 +94,17 @@ let container = undefined;
|
|
|
95
94
|
|
|
96
95
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
97
96
|
<div
|
|
98
|
-
on:pointerdown={(
|
|
97
|
+
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
99
98
|
class={classNames(
|
|
100
99
|
'h-full w-full center-center',
|
|
101
|
-
$selectedComponent
|
|
100
|
+
$selectedComponent === dataItem.id ? 'active-grid-item' : '',
|
|
102
101
|
'top-0'
|
|
103
102
|
)}
|
|
104
103
|
>
|
|
105
104
|
<Component
|
|
106
105
|
render={visible}
|
|
107
106
|
component={dataItem.data}
|
|
108
|
-
selected={
|
|
107
|
+
selected={$selectedComponent === dataItem.id}
|
|
109
108
|
locked={isFixed(dataItem)}
|
|
110
109
|
on:lock={() => lock(dataItem)}
|
|
111
110
|
on:expand={() => {
|
|
@@ -114,7 +113,7 @@ let container = undefined;
|
|
|
114
113
|
if (!parentGridItem) {
|
|
115
114
|
return
|
|
116
115
|
}
|
|
117
|
-
$selectedComponent =
|
|
116
|
+
$selectedComponent = dataItem.id
|
|
118
117
|
push(editorContext?.history, $app)
|
|
119
118
|
|
|
120
119
|
expandGriditem(
|
|
@@ -131,7 +130,7 @@ let container = undefined;
|
|
|
131
130
|
</div>
|
|
132
131
|
{:else}
|
|
133
132
|
<GridViewer
|
|
134
|
-
|
|
133
|
+
onTopId={$selectedComponent}
|
|
135
134
|
items={$app.subgrids?.[subGridId] ?? []}
|
|
136
135
|
let:dataItem
|
|
137
136
|
rowHeight={36}
|
|
@@ -142,13 +141,13 @@ let container = undefined;
|
|
|
142
141
|
>
|
|
143
142
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
144
143
|
<div
|
|
145
|
-
on:pointerdown
|
|
144
|
+
on:pointerdown={() => selectComponent(dataItem.id)}
|
|
146
145
|
class={classNames('h-full w-full center-center', 'top-0')}
|
|
147
146
|
>
|
|
148
147
|
<Component
|
|
149
148
|
render={visible}
|
|
150
149
|
component={dataItem.data}
|
|
151
|
-
selected={
|
|
150
|
+
selected={$selectedComponent === dataItem.id}
|
|
152
151
|
locked={isFixed(dataItem)}
|
|
153
152
|
/>
|
|
154
153
|
</div>
|
|
@@ -3,7 +3,6 @@ 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;
|
|
7
6
|
export declare function findGridItemParentGrid(app: App, id: string): string | undefined;
|
|
8
7
|
export declare function allsubIds(app: App, parentId: string): string[];
|
|
9
8
|
export declare function findGridItem(app: App, id: string): GridItem | undefined;
|
|
@@ -3,25 +3,6 @@ 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
|
-
}
|
|
25
6
|
function findGridItemById(root, subGrids, id) {
|
|
26
7
|
for (const gridItem of allItems(root, subGrids)) {
|
|
27
8
|
if (gridItem.id === id) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<script>import { getContext } from 'svelte';
|
|
2
|
+
import { Loader2 } from 'lucide-svelte';
|
|
2
3
|
import { twMerge } from 'tailwind-merge';
|
|
3
4
|
import ComponentHeader from '../ComponentHeader.svelte';
|
|
5
|
+
import { ccomponents, components } from './components';
|
|
4
6
|
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';
|
|
5
7
|
import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
|
|
6
8
|
export let component;
|
|
@@ -9,9 +11,8 @@ export let locked = false;
|
|
|
9
11
|
export let render;
|
|
10
12
|
const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
|
|
11
13
|
const editorContext = getContext('AppEditorContext');
|
|
12
|
-
const
|
|
13
|
-
$: ismoving =
|
|
14
|
-
movingcomponents != undefined && $mode == 'dnd' && $movingcomponents?.includes(component.id);
|
|
14
|
+
const movingcomponent = editorContext?.movingcomponent;
|
|
15
|
+
$: ismoving = movingcomponent != undefined && $mode == 'dnd' && $movingcomponent === component.id;
|
|
15
16
|
let initializing = undefined;
|
|
16
17
|
let componentContainerHeight = 0;
|
|
17
18
|
$: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
|
|
@@ -49,11 +50,9 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
49
50
|
<button
|
|
50
51
|
class="border p-0.5 text-xs"
|
|
51
52
|
on:click={() => {
|
|
52
|
-
$
|
|
53
|
-
}}
|
|
53
|
+
$movingcomponent = undefined
|
|
54
|
+
}}>Cancel move</button
|
|
54
55
|
>
|
|
55
|
-
Cancel move
|
|
56
|
-
</button>
|
|
57
56
|
</div>
|
|
58
57
|
{/if}
|
|
59
58
|
<div
|
|
@@ -61,6 +60,7 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
61
60
|
'h-full bg-white/40 outline-1',
|
|
62
61
|
$hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
|
|
63
62
|
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,7 +114,6 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
114
114
|
{:else if component.type === 'plotlycomponent'}
|
|
115
115
|
<PlotlyHtml
|
|
116
116
|
id={component.id}
|
|
117
|
-
configuration={component.configuration}
|
|
118
117
|
bind:initializing
|
|
119
118
|
componentInput={component.componentInput}
|
|
120
119
|
{render}
|
|
@@ -144,7 +143,7 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
144
143
|
customCss={component.customCss}
|
|
145
144
|
bind:initializing
|
|
146
145
|
componentInput={component.componentInput}
|
|
147
|
-
actionButtons={component.actionButtons}
|
|
146
|
+
bind:actionButtons={component.actionButtons}
|
|
148
147
|
{render}
|
|
149
148
|
/>
|
|
150
149
|
{:else if component.type === 'aggridcomponent'}
|
|
@@ -234,16 +233,6 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
234
233
|
customCss={component.customCss}
|
|
235
234
|
{render}
|
|
236
235
|
/>
|
|
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
|
-
/>
|
|
247
236
|
{:else if component.type === 'emailinputcomponent'}
|
|
248
237
|
<AppTextInput
|
|
249
238
|
verticalAlignment={component.verticalAlignment}
|
|
@@ -4,9 +4,9 @@ import { push } from '../../../../history';
|
|
|
4
4
|
import { sendUserToast } from '../../../../utils';
|
|
5
5
|
import { gridColumns } from '../../gridUtils';
|
|
6
6
|
const { app, selectedComponent, worldStore, focusedGrid, componentControl } = getContext('AppViewerContext');
|
|
7
|
-
const { history,
|
|
8
|
-
let
|
|
9
|
-
let
|
|
7
|
+
const { history, movingcomponent } = getContext('AppEditorContext');
|
|
8
|
+
let tempGridItem = undefined;
|
|
9
|
+
let copiedGridItem = undefined;
|
|
10
10
|
function getSortedGridItemsOfChildren() {
|
|
11
11
|
if (!$focusedGrid) {
|
|
12
12
|
return $app.grid;
|
|
@@ -17,48 +17,48 @@ function getSortedGridItemsOfChildren() {
|
|
|
17
17
|
return $app.subgrids[`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`] ?? [];
|
|
18
18
|
}
|
|
19
19
|
function getGridItems() {
|
|
20
|
-
if ($app.grid.find((item) => item.id === $selectedComponent
|
|
20
|
+
if ($app.grid.find((item) => item.id === $selectedComponent)) {
|
|
21
21
|
return $app.grid;
|
|
22
22
|
}
|
|
23
23
|
if (!$app.subgrids) {
|
|
24
24
|
return [];
|
|
25
25
|
}
|
|
26
|
-
return (Object.values($app.subgrids ?? {}).find((grid) => grid.find((item) => item.id === $selectedComponent
|
|
26
|
+
return (Object.values($app.subgrids ?? {}).find((grid) => grid.find((item) => item.id === $selectedComponent)) ?? []);
|
|
27
27
|
}
|
|
28
28
|
function left(event) {
|
|
29
|
-
if (!$componentControl[$selectedComponent
|
|
29
|
+
if (!$componentControl[$selectedComponent]?.left?.()) {
|
|
30
30
|
const sortedGridItems = getGridItems();
|
|
31
|
-
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent
|
|
31
|
+
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
|
|
32
32
|
if (currentIndex !== -1 && currentIndex > 0) {
|
|
33
33
|
const left = sortedGridItems[currentIndex - 1];
|
|
34
34
|
if (left.data.type === 'tablecomponent' && left.data.actionButtons.length >= 1) {
|
|
35
|
-
$selectedComponent =
|
|
35
|
+
$selectedComponent = left.data.actionButtons[left.data.actionButtons.length - 1].id;
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
$selectedComponent =
|
|
38
|
+
$selectedComponent = left.id;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
event.preventDefault();
|
|
43
43
|
}
|
|
44
44
|
function right(event) {
|
|
45
|
-
let r = $componentControl[$selectedComponent
|
|
45
|
+
let r = $componentControl[$selectedComponent]?.right?.();
|
|
46
46
|
if (typeof r === 'string') {
|
|
47
|
-
$selectedComponent =
|
|
47
|
+
$selectedComponent = r;
|
|
48
48
|
r = $componentControl[r]?.right?.(true);
|
|
49
49
|
}
|
|
50
50
|
if (!r) {
|
|
51
51
|
const sortedGridItems = getGridItems();
|
|
52
|
-
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent
|
|
52
|
+
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
|
|
53
53
|
if (currentIndex !== -1 && currentIndex < sortedGridItems.length - 1) {
|
|
54
|
-
$selectedComponent =
|
|
54
|
+
$selectedComponent = sortedGridItems[currentIndex + 1].id;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
event.preventDefault();
|
|
58
58
|
}
|
|
59
59
|
function down(event) {
|
|
60
60
|
if (!$focusedGrid) {
|
|
61
|
-
$selectedComponent =
|
|
61
|
+
$selectedComponent = getSortedGridItemsOfChildren()[0]?.id;
|
|
62
62
|
event.preventDefault();
|
|
63
63
|
}
|
|
64
64
|
else if ($app.subgrids) {
|
|
@@ -68,7 +68,7 @@ function down(event) {
|
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
70
|
if (subgrid) {
|
|
71
|
-
$selectedComponent =
|
|
71
|
+
$selectedComponent = subgrid[0].id;
|
|
72
72
|
}
|
|
73
73
|
event.preventDefault();
|
|
74
74
|
}
|
|
@@ -81,9 +81,9 @@ function handleEscape(event) {
|
|
|
81
81
|
function handleArrowUp(event) {
|
|
82
82
|
if (!$selectedComponent)
|
|
83
83
|
return;
|
|
84
|
-
let parentId = findGridItemParentGrid($app, $selectedComponent
|
|
84
|
+
let parentId = findGridItemParentGrid($app, $selectedComponent)?.split('-')[0];
|
|
85
85
|
if (parentId) {
|
|
86
|
-
$selectedComponent =
|
|
86
|
+
$selectedComponent = parentId;
|
|
87
87
|
}
|
|
88
88
|
else {
|
|
89
89
|
$selectedComponent = undefined;
|
|
@@ -94,58 +94,49 @@ function handleCopy(event) {
|
|
|
94
94
|
if (!$selectedComponent) {
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
.map((x) => findGridItem($app, x))
|
|
100
|
-
.filter((x) => x != undefined);
|
|
97
|
+
tempGridItem = undefined;
|
|
98
|
+
copiedGridItem = findGridItem($app, $selectedComponent);
|
|
101
99
|
}
|
|
102
100
|
function handleCut(event) {
|
|
103
101
|
if (!$selectedComponent) {
|
|
104
102
|
return;
|
|
105
103
|
}
|
|
106
|
-
$
|
|
104
|
+
$movingcomponent = $selectedComponent;
|
|
107
105
|
push(history, $app);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
copiedGridItems = gridItems;
|
|
112
|
-
if (!gridItems) {
|
|
106
|
+
const gridItem = findGridItem($app, $selectedComponent);
|
|
107
|
+
copiedGridItem = gridItem;
|
|
108
|
+
if (!gridItem) {
|
|
113
109
|
return;
|
|
114
110
|
}
|
|
115
111
|
// Store the grid item in a temp variable so we can paste it later
|
|
116
|
-
|
|
112
|
+
tempGridItem = gridItem;
|
|
117
113
|
}
|
|
118
114
|
function handlePaste(event) {
|
|
119
115
|
push(history, $app);
|
|
120
|
-
$
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
$app.subgrids
|
|
131
|
-
($app.subgrids[parentGrid] = $app.subgrids[parentGrid].filter((item) => item.id !== tempGridItem?.id));
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
$app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
|
|
135
|
-
}
|
|
136
|
-
const gridItem = tempGridItem;
|
|
137
|
-
insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
|
|
116
|
+
$movingcomponent = undefined;
|
|
117
|
+
if (tempGridItem != undefined) {
|
|
118
|
+
if ($focusedGrid &&
|
|
119
|
+
getAllSubgridsAndComponentIds($app, tempGridItem.data)[0].includes(`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`)) {
|
|
120
|
+
sendUserToast('Cannot paste a component into itself', true);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
let parentGrid = findGridItemParentGrid($app, tempGridItem.id);
|
|
124
|
+
if (parentGrid) {
|
|
125
|
+
$app.subgrids &&
|
|
126
|
+
($app.subgrids[parentGrid] = $app.subgrids[parentGrid].filter((item) => item.id !== tempGridItem?.id));
|
|
138
127
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
tempGridItems = undefined;
|
|
142
|
-
}
|
|
143
|
-
else if (copiedGridItems) {
|
|
144
|
-
let nitems = [];
|
|
145
|
-
for (let copiedGridItem of copiedGridItems) {
|
|
146
|
-
nitems.push(insertNewGridItem($app, (id) => ({ ...copiedGridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, copiedGridItem[column]]))));
|
|
128
|
+
else {
|
|
129
|
+
$app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
|
|
147
130
|
}
|
|
148
|
-
|
|
131
|
+
const gridItem = tempGridItem;
|
|
132
|
+
insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
|
|
133
|
+
copiedGridItem = tempGridItem;
|
|
134
|
+
$selectedComponent = tempGridItem.id;
|
|
135
|
+
tempGridItem = undefined;
|
|
136
|
+
}
|
|
137
|
+
else if (copiedGridItem) {
|
|
138
|
+
const gridItem = copiedGridItem;
|
|
139
|
+
$selectedComponent = insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])));
|
|
149
140
|
}
|
|
150
141
|
$worldStore = $worldStore;
|
|
151
142
|
$app = $app;
|
|
@@ -153,8 +144,7 @@ function handlePaste(event) {
|
|
|
153
144
|
function keydown(event) {
|
|
154
145
|
// Ignore keydown events if the user is typing in monaco
|
|
155
146
|
let classes = event.target?.['className'];
|
|
156
|
-
if (
|
|
157
|
-
['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
|
|
147
|
+
if (typeof classes === 'string' && classes.includes('inputarea')) {
|
|
158
148
|
return;
|
|
159
149
|
}
|
|
160
150
|
switch (event.key) {
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
1. Add the component to one of the component sets: `layout`, `buttons`,
|
|
9
9
|
`inputs` or `display` _(this controls which group the component will be
|
|
10
10
|
placed in in the **Insert** menu)_
|
|
11
|
-
1. [**`quickStyleProperties.ts`**](../componentsPanel/quickStyleProperties.ts):
|
|
12
|
-
1. Add the component to the `quickStyleProperties` record
|
|
13
|
-
1. _(optional)_ Add the CSS properties that could be applied to the component
|
|
14
|
-
parts
|
|
15
11
|
1. [**`Component.svelte`**](./Component.svelte):
|
|
16
12
|
1. Add the new component in the Svelte `if` statement
|
|
17
13
|
1. [**`default-codes.ts`**](./default-codes.ts):
|