windmill-components 1.78.0 → 1.82.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/ArgInput.svelte +3 -0
- package/components/ArgInput.svelte.d.ts +1 -0
- package/components/DisplayResult.svelte +18 -15
- package/components/SchemaEditor.svelte +15 -10
- package/components/SettingSection.svelte +1 -1
- package/components/Toggle.svelte +5 -2
- package/components/Toggle.svelte.d.ts +1 -0
- package/components/apps/components/buttons/AppButton.svelte +50 -70
- package/components/apps/components/buttons/AppButton.svelte.d.ts +8 -3
- package/components/apps/components/buttons/AppForm.svelte +22 -15
- package/components/apps/components/buttons/AppForm.svelte.d.ts +3 -3
- package/components/apps/components/buttons/AppFormButton.svelte +32 -24
- package/components/apps/components/buttons/AppFormButton.svelte.d.ts +3 -5
- package/components/apps/components/display/AppBarChart.svelte +2 -2
- package/components/apps/components/display/AppBarChart.svelte.d.ts +3 -3
- package/components/apps/components/display/AppDisplayComponent.svelte +2 -2
- package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -1
- package/components/apps/components/display/AppHtml.svelte +10 -2
- package/components/apps/components/display/AppHtml.svelte.d.ts +1 -1
- package/components/apps/components/display/AppIcon.svelte +4 -1
- package/components/apps/components/display/AppIcon.svelte.d.ts +3 -4
- package/components/apps/components/display/AppImage.svelte +28 -15
- package/components/apps/components/display/AppImage.svelte.d.ts +3 -4
- package/components/apps/components/display/AppMap.svelte +3 -3
- package/components/apps/components/display/AppMap.svelte.d.ts +3 -4
- package/components/apps/components/display/AppPdf.svelte +3 -2
- package/components/apps/components/display/AppPdf.svelte.d.ts +3 -4
- package/components/apps/components/display/AppPieChart.svelte +2 -2
- package/components/apps/components/display/AppPieChart.svelte.d.ts +3 -3
- package/components/apps/components/display/AppScatterChart.svelte +2 -2
- package/components/apps/components/display/AppScatterChart.svelte.d.ts +3 -3
- package/components/apps/components/display/AppText.svelte +35 -22
- package/components/apps/components/display/AppText.svelte.d.ts +3 -3
- package/components/apps/components/display/AppTimeseries.svelte +2 -2
- package/components/apps/components/display/AppTimeseries.svelte.d.ts +3 -3
- package/components/apps/components/display/PlotlyHtml.svelte +2 -2
- package/components/apps/components/display/VegaLiteHtml.svelte +2 -2
- package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +2 -1
- package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
- package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +2 -1
- package/components/apps/components/display/table/AppTable.svelte +102 -34
- package/components/apps/components/display/table/AppTable.svelte.d.ts +3 -3
- package/components/apps/components/helpers/HiddenComponent.svelte +6 -3
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +1 -1
- package/components/apps/components/helpers/InputValue.svelte +11 -7
- package/components/apps/components/helpers/InputValue.svelte.d.ts +3 -1
- package/components/apps/components/helpers/Loader.svelte +18 -0
- package/components/apps/components/helpers/Loader.svelte.d.ts +18 -0
- package/components/apps/components/helpers/NonRunnableComponent.svelte +1 -12
- package/components/apps/components/helpers/ResolveConfig.svelte +29 -0
- package/components/apps/components/helpers/ResolveConfig.svelte.d.ts +21 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +126 -93
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +13 -3
- package/components/apps/components/helpers/RunnableWrapper.svelte +48 -9
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +26 -2
- package/components/apps/components/helpers/eval.js +36 -1
- package/components/apps/components/inputs/AppCheckbox.svelte +1 -1
- package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +3 -4
- package/components/apps/components/inputs/AppDateInput.svelte.d.ts +3 -4
- package/components/apps/components/inputs/AppFileInput.svelte.d.ts +3 -4
- package/components/apps/components/inputs/AppMultiSelect.svelte +0 -1
- package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +3 -4
- package/components/apps/components/inputs/AppNumberInput.svelte +1 -1
- package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +3 -6
- package/components/apps/components/inputs/AppRangeInput.svelte +7 -1
- package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +4 -4
- package/components/apps/components/inputs/AppSelect.svelte +8 -2
- package/components/apps/components/inputs/AppSelect.svelte.d.ts +3 -4
- package/components/apps/components/inputs/AppSliderInputs.svelte +7 -1
- package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +4 -4
- package/components/apps/components/inputs/AppTextInput.svelte +4 -4
- package/components/apps/components/inputs/AppTextInput.svelte.d.ts +3 -6
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +17 -19
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +3 -4
- package/components/apps/components/layout/AppContainer.svelte +7 -5
- package/components/apps/components/layout/AppContainer.svelte.d.ts +1 -3
- package/components/apps/components/layout/AppDivider.svelte +4 -1
- package/components/apps/components/layout/AppDivider.svelte.d.ts +3 -4
- package/components/apps/components/layout/AppDrawer.svelte +7 -4
- package/components/apps/components/layout/AppDrawer.svelte.d.ts +3 -4
- package/components/apps/components/layout/AppSplitpanes.svelte +34 -25
- package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +1 -5
- package/components/apps/components/layout/AppTabs.svelte +22 -37
- package/components/apps/components/layout/AppTabs.svelte.d.ts +3 -5
- package/components/apps/editor/AppEditor.svelte +6 -3
- package/components/apps/editor/AppEditorHeader.svelte +4 -5
- package/components/apps/editor/AppInputs.svelte +13 -14
- package/components/apps/editor/AppPreview.svelte +12 -16
- package/components/apps/editor/ComponentHeader.svelte +58 -57
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -2
- package/components/apps/editor/GridEditor.svelte +21 -50
- package/components/apps/editor/GridEditor.svelte.d.ts +0 -2
- package/components/apps/editor/RecomputeAllComponents.svelte +13 -2
- package/components/apps/editor/SettingsPanel.svelte +104 -30
- package/components/apps/editor/SubGridEditor.svelte +34 -43
- package/components/apps/editor/SubGridEditor.svelte.d.ts +2 -3
- package/components/apps/editor/appUtils.d.ts +49 -6
- package/components/apps/editor/appUtils.js +145 -37
- package/components/apps/editor/component/Component.svelte +37 -22
- package/components/apps/editor/component/Component.svelte.d.ts +1 -2
- package/components/apps/editor/component/ComponentNavigation.svelte +28 -12
- package/components/apps/editor/component/components.d.ts +1550 -16
- package/components/apps/editor/component/components.js +295 -304
- package/components/apps/editor/component/default-codes.d.ts +1 -1
- package/components/apps/editor/component/default-codes.js +25 -25
- package/components/apps/editor/componentsPanel/ComponentList.svelte +18 -3
- package/components/apps/editor/componentsPanel/CssProperty.svelte +5 -3
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +3 -1
- package/components/apps/editor/componentsPanel/CssSettings.svelte +48 -90
- package/components/apps/editor/componentsPanel/ListItem.svelte +3 -0
- package/components/apps/editor/componentsPanel/ListItem.svelte.d.ts +2 -0
- package/components/apps/editor/contextPanel/ContextPanel.svelte +4 -5
- package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte +0 -1
- package/components/apps/editor/contextPanel/components/BackgroundScriptsOutput.svelte.d.ts +1 -3
- package/components/apps/editor/contextPanel/components/OutputHeader.svelte +12 -2
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +2 -2
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +158 -129
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +2 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +31 -3
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +42 -74
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +68 -18
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +1 -3
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +27 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte.d.ts +17 -0
- package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -0
- package/components/apps/editor/inlineScriptsPanel/utils.js +6 -5
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +10 -2
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +37 -31
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +4 -104
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +108 -87
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +5 -3
- package/components/apps/editor/settingsPanel/GridTab.svelte +0 -1
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +128 -13
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +14 -2
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +35 -100
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +3 -2
- package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +52 -0
- package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte.d.ts +28 -0
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +73 -25
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +2 -0
- package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +7 -5
- package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +3 -2
- package/components/apps/editor/settingsPanel/TableActionLabel.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/TableActions.svelte +8 -63
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -2
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +0 -1
- package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +2 -4
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +3 -1
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -4
- package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +5 -5
- package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +2 -0
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +59 -37
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +8 -2
- package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte +46 -0
- package/components/apps/editor/settingsPanel/inputEditor/TabSelectInput.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +7 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +31 -0
- package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +22 -0
- package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +24 -0
- package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +21 -0
- package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +156 -0
- package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +22 -0
- package/components/apps/editor/settingsPanel/triggerLists/triggerListUtils.d.ts +2 -0
- package/components/apps/editor/settingsPanel/triggerLists/triggerListUtils.js +11 -0
- package/components/apps/gridUtils.js +1 -1
- package/components/apps/inputType.d.ts +23 -18
- package/components/apps/rx.d.ts +2 -0
- package/components/apps/rx.js +10 -3
- package/components/apps/svelte-grid/Grid.svelte +1 -5
- package/components/apps/svelte-grid/Grid.svelte.d.ts +1 -1
- package/components/apps/svelte-grid/MoveResize.svelte +24 -30
- package/components/apps/svelte-grid/MoveResize.svelte.d.ts +0 -4
- package/components/apps/svelte-grid/types.d.ts +1 -7
- package/components/apps/svelte-grid/utils/helper.js +6 -10
- package/components/apps/types.d.ts +32 -15
- package/components/apps/utils.d.ts +2 -2
- package/components/apps/utils.js +13 -11
- package/components/common/skeleton/Skeleton.svelte +1 -1
- package/components/flows/flowStateUtils.js +8 -1
- package/components/flows/flowStore.js +1 -1
- package/components/graph/FlowGraph.svelte +0 -2
- package/components/graph/FlowGraph.svelte.d.ts +0 -1
- package/components/graph/svelvet/container/views/GraphView.svelte +3 -28
- package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -3
- package/components/graph/svelvet/container/views/Svelvet.svelte +1 -17
- package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -8
- package/components/graph/svelvet/customCss/controllers/getCss.js +0 -11
- package/components/graph/svelvet/edges/controllers/util.js +1 -2
- package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +2 -2
- package/components/graph/svelvet/nodes/controllers/util.js +1 -1
- package/components/graph/svelvet/nodes/models/Node.d.ts +0 -4
- package/components/graph/svelvet/nodes/models/Node.js +3 -41
- package/components/graph/svelvet/store/controllers/storeApi.js +2 -7
- package/components/graph/svelvet/store/controllers/util.d.ts +0 -7
- package/components/graph/svelvet/store/controllers/util.js +4 -36
- package/components/graph/svelvet/store/types/types.d.ts +0 -5
- package/components/home/ItemsList.svelte +1 -1
- package/package.json +13 -8
- package/utils.d.ts +2 -0
- package/utils.js +6 -0
- package/components/apps/editor/GridPanel.svelte +0 -31
- package/components/apps/editor/GridPanel.svelte.d.ts +0 -18
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +0 -12
- package/components/apps/editor/componentsPanel/componentStaticValues.js +0 -25
- package/components/graph/svelvet/nodes/views/EditNode.svelte +0 -147
- package/components/graph/svelvet/nodes/views/EditNode.svelte.d.ts +0 -33
- package/components/graph/svelvet/resizableNodes/controllers/util.d.ts +0 -11
- package/components/graph/svelvet/resizableNodes/controllers/util.js +0 -24
- package/components/graph/svelvet/resizableNodes/models/ResizeNode.d.ts +0 -33
- package/components/graph/svelvet/resizableNodes/models/ResizeNode.js +0 -71
- package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte +0 -81
- package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte.d.ts +0 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getNextId } from '../../flows/flowStateUtils';
|
|
2
|
-
import { getRecommendedDimensionsByComponent } from './component';
|
|
2
|
+
import { ccomponents, components, getRecommendedDimensionsByComponent } from './component';
|
|
3
3
|
import { gridColumns } from '../gridUtils';
|
|
4
4
|
import { allItems } from '../utils';
|
|
5
5
|
import gridHelp from '../svelte-grid/utils/helper';
|
|
@@ -13,14 +13,14 @@ function findGridItemById(root, subGrids, id) {
|
|
|
13
13
|
}
|
|
14
14
|
export function findGridItemParentGrid(app, id) {
|
|
15
15
|
const gridItem = app.grid.find((x) => x.id === id);
|
|
16
|
-
if (gridItem) {
|
|
16
|
+
if (gridItem || app.subgrids === undefined) {
|
|
17
17
|
return undefined;
|
|
18
18
|
}
|
|
19
19
|
else {
|
|
20
|
-
for (const key
|
|
20
|
+
for (const key of Object.keys(app.subgrids ?? {})) {
|
|
21
21
|
const subGrid = app.subgrids[key];
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
22
|
+
const gridItemIdx = subGrid.findIndex((x) => x.id === id);
|
|
23
|
+
if (gridItemIdx > -1) {
|
|
24
24
|
return key;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -29,7 +29,13 @@ export function findGridItemParentGrid(app, id) {
|
|
|
29
29
|
export function allsubIds(app, parentId) {
|
|
30
30
|
let item = findGridItem(app, parentId);
|
|
31
31
|
if (!item?.data.numberOfSubgrids) {
|
|
32
|
-
|
|
32
|
+
let subIds = [parentId];
|
|
33
|
+
if (item) {
|
|
34
|
+
if (item.data.type === 'tablecomponent') {
|
|
35
|
+
subIds.push(...item.data.actionButtons?.map((x) => x.id));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return subIds;
|
|
33
39
|
}
|
|
34
40
|
return getAllSubgridsAndComponentIds(app, item?.data)[1];
|
|
35
41
|
}
|
|
@@ -42,10 +48,23 @@ export function getNextGridItemId(app) {
|
|
|
42
48
|
const id = getNextId([...new Set(withoutDash)]);
|
|
43
49
|
return id;
|
|
44
50
|
}
|
|
45
|
-
export function
|
|
51
|
+
export function getAllRecomputeIdsForComponent(app, id) {
|
|
52
|
+
if (!app || !id)
|
|
53
|
+
return [];
|
|
54
|
+
const items = allItems(app.grid, app.subgrids);
|
|
55
|
+
const recomputedBy = [];
|
|
56
|
+
items.forEach((item) => {
|
|
57
|
+
if (item.data.type === 'buttoncomponent') {
|
|
58
|
+
if (item.data.recomputeIds?.includes(id)) {
|
|
59
|
+
recomputedBy.push(item.id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return recomputedBy;
|
|
64
|
+
}
|
|
65
|
+
export function createNewGridItem(grid, id, data, columns) {
|
|
46
66
|
const newComponent = {
|
|
47
|
-
|
|
48
|
-
draggable: true,
|
|
67
|
+
fixed: false,
|
|
49
68
|
x: 0,
|
|
50
69
|
y: 0
|
|
51
70
|
};
|
|
@@ -56,17 +75,17 @@ export function createNewGridItem(grid, id, data) {
|
|
|
56
75
|
id: id
|
|
57
76
|
};
|
|
58
77
|
gridColumns.forEach((column) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
78
|
+
if (!columns) {
|
|
79
|
+
const rec = getRecommendedDimensionsByComponent(newData.type, column);
|
|
80
|
+
newItem[column] = {
|
|
81
|
+
...newComponent,
|
|
82
|
+
w: rec.w,
|
|
83
|
+
h: rec.h
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
newItem[column] = columns[column];
|
|
88
|
+
}
|
|
70
89
|
const position = gridHelp.findSpace(newItem, grid, column);
|
|
71
90
|
newItem[column] = { ...newItem[column], ...position };
|
|
72
91
|
});
|
|
@@ -82,8 +101,57 @@ export function getGridItems(app, focusedGrid) {
|
|
|
82
101
|
return app?.subgrids?.[key] ?? [];
|
|
83
102
|
}
|
|
84
103
|
}
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
function cleanseValue(key, value) {
|
|
105
|
+
if (!value) {
|
|
106
|
+
return [key, undefined];
|
|
107
|
+
}
|
|
108
|
+
if (value.type === 'static') {
|
|
109
|
+
return [key, { type: value.type, value: value.value }];
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return [key, { type: value.type, expr: value.expr }];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function appComponentFromType(type) {
|
|
116
|
+
return (id) => {
|
|
117
|
+
const init = JSON.parse(JSON.stringify(ccomponents[type].initialData));
|
|
118
|
+
return {
|
|
119
|
+
type,
|
|
120
|
+
//TODO remove tooltip and onlyStatic from there
|
|
121
|
+
configuration: Object.fromEntries(Object.entries(init.configuration).map(([key, value]) => {
|
|
122
|
+
if (value.type != 'oneOf') {
|
|
123
|
+
return cleanseValue(key, value);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
return [
|
|
127
|
+
key,
|
|
128
|
+
{
|
|
129
|
+
type: value.type,
|
|
130
|
+
selected: value.selected,
|
|
131
|
+
configuration: Object.fromEntries(Object.entries(value.configuration).map(([key, val]) => [
|
|
132
|
+
key,
|
|
133
|
+
Object.fromEntries(Object.entries(val).map(([key, val]) => cleanseValue(key, val)))
|
|
134
|
+
]))
|
|
135
|
+
}
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
})),
|
|
139
|
+
componentInput: init.componentInput,
|
|
140
|
+
panes: init.panes,
|
|
141
|
+
tabs: init.tabs,
|
|
142
|
+
customCss: {},
|
|
143
|
+
recomputeIds: init.recomputeIds ? [] : undefined,
|
|
144
|
+
actionButtons: init.actionButtons ? [] : undefined,
|
|
145
|
+
numberOfSubgrids: init.numberOfSubgrids,
|
|
146
|
+
horizontalAlignment: init.horizontalAlignment,
|
|
147
|
+
verticalAlignment: init.verticalAlignment,
|
|
148
|
+
id
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
export function insertNewGridItem(app, builddata, focusedGrid, columns, keepId) {
|
|
153
|
+
const id = keepId ?? getNextGridItemId(app);
|
|
154
|
+
const data = builddata(id);
|
|
87
155
|
if (!app.subgrids) {
|
|
88
156
|
app.subgrids = {};
|
|
89
157
|
}
|
|
@@ -97,16 +165,16 @@ export function insertNewGridItem(app, data, focusedGrid, keepId) {
|
|
|
97
165
|
? `${focusedGrid?.parentComponentId}-${focusedGrid?.subGridIndex ?? 0}`
|
|
98
166
|
: undefined;
|
|
99
167
|
let grid = focusedGrid ? app.subgrids[key] : app.grid;
|
|
100
|
-
const newItem = createNewGridItem(grid, id, data);
|
|
168
|
+
const newItem = createNewGridItem(grid, id, data, columns);
|
|
101
169
|
grid.push(newItem);
|
|
102
|
-
if (focusedGrid) {
|
|
103
|
-
app.subgrids[key] = grid;
|
|
104
|
-
}
|
|
105
170
|
return id;
|
|
106
171
|
}
|
|
107
172
|
export function getAllSubgridsAndComponentIds(app, component) {
|
|
108
173
|
const subgrids = [];
|
|
109
174
|
let components = [component.id];
|
|
175
|
+
if (component.type === 'tablecomponent') {
|
|
176
|
+
components.push(...component.actionButtons?.map((x) => x.id));
|
|
177
|
+
}
|
|
110
178
|
if (app.subgrids && component.numberOfSubgrids) {
|
|
111
179
|
for (let i = 0; i < component.numberOfSubgrids; i++) {
|
|
112
180
|
const key = `${component.id}-${i}`;
|
|
@@ -130,18 +198,12 @@ export function deleteGridItem(app, component, parent, shouldKeepSubGrid) {
|
|
|
130
198
|
delete app.subgrids[id];
|
|
131
199
|
});
|
|
132
200
|
}
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
app.grid.splice(index, 1);
|
|
137
|
-
}
|
|
201
|
+
if (parent) {
|
|
202
|
+
app.subgrids &&
|
|
203
|
+
(app.subgrids[parent] = app.subgrids[parent].filter((item) => item.id !== component?.id));
|
|
138
204
|
}
|
|
139
205
|
else {
|
|
140
|
-
|
|
141
|
-
let index = grid.findIndex((x) => x.id == component.id);
|
|
142
|
-
if (index > -1) {
|
|
143
|
-
grid.splice(index, 1);
|
|
144
|
-
}
|
|
206
|
+
app.grid = app.grid.filter((item) => item.id !== component?.id);
|
|
145
207
|
}
|
|
146
208
|
return components;
|
|
147
209
|
}
|
|
@@ -227,12 +289,36 @@ function isOverlapping(item1, item2) {
|
|
|
227
289
|
item1.y + item1.h > item2.y);
|
|
228
290
|
}
|
|
229
291
|
export function initOutput(world, id, init) {
|
|
292
|
+
world.initializedOutputs += 1;
|
|
230
293
|
if (!world) {
|
|
231
294
|
return {};
|
|
232
295
|
}
|
|
233
296
|
return Object.fromEntries(Object.entries(init).map(([key, value]) => [key, world.newOutput(id, key, value)]));
|
|
234
297
|
}
|
|
235
|
-
export function
|
|
298
|
+
export function initConfig(r, configuration) {
|
|
299
|
+
return JSON.parse(JSON.stringify(Object.fromEntries(Object.entries(r).map(([key, value]) => value.type == 'static'
|
|
300
|
+
? [
|
|
301
|
+
key,
|
|
302
|
+
configuration?.[key]?.type == 'static' ? configuration?.[key]?.['value'] : undefined
|
|
303
|
+
]
|
|
304
|
+
: value.type == 'oneOf'
|
|
305
|
+
? [
|
|
306
|
+
key,
|
|
307
|
+
{
|
|
308
|
+
selected: value.selected,
|
|
309
|
+
type: 'oneOf',
|
|
310
|
+
configuration: Object.fromEntries(Object.entries(value.configuration).map(([choice, config]) => [
|
|
311
|
+
choice,
|
|
312
|
+
initConfig(config, configuration?.[key]?.configuration?.[choice])
|
|
313
|
+
]))
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
: [key, undefined]))));
|
|
317
|
+
}
|
|
318
|
+
export function expandGriditem(grid, id, $breakpoint, parentGridItem = undefined) {
|
|
319
|
+
const gridComponent = grid.find((item) => item.id === id);
|
|
320
|
+
if (!gridComponent)
|
|
321
|
+
return;
|
|
236
322
|
const availableSpace = findAvailableSpace(grid, gridComponent, $breakpoint, parentGridItem);
|
|
237
323
|
if (!availableSpace) {
|
|
238
324
|
return;
|
|
@@ -308,3 +394,25 @@ export function recursivelyFilterKeyInJSON(json, search, extraSearch) {
|
|
|
308
394
|
});
|
|
309
395
|
return filteredJSON;
|
|
310
396
|
}
|
|
397
|
+
export function clearErrorByComponentId(id, errorByComponent) {
|
|
398
|
+
return Object.entries(errorByComponent).reduce((acc, [key, value]) => {
|
|
399
|
+
if (value.componentId !== id) {
|
|
400
|
+
acc[key] = value;
|
|
401
|
+
}
|
|
402
|
+
return acc;
|
|
403
|
+
}, {});
|
|
404
|
+
}
|
|
405
|
+
export function clearJobsByComponentId(id, jobs) {
|
|
406
|
+
return jobs.filter((job) => job.component !== id);
|
|
407
|
+
}
|
|
408
|
+
// Returns the error message for the latest job for a component if an error occurred, otherwise undefined
|
|
409
|
+
export function getErrorFromLatestResult(id, errorByComponent, jobs) {
|
|
410
|
+
// find last jobId for component id
|
|
411
|
+
const lastJob = jobs.find((job) => job.component === id);
|
|
412
|
+
if (lastJob?.job && errorByComponent[lastJob.job]) {
|
|
413
|
+
return errorByComponent[lastJob.job].error;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
@@ -2,30 +2,40 @@
|
|
|
2
2
|
import { Loader2 } from 'lucide-svelte';
|
|
3
3
|
import { twMerge } from 'tailwind-merge';
|
|
4
4
|
import ComponentHeader from '../ComponentHeader.svelte';
|
|
5
|
+
import { ccomponents, components } from './components';
|
|
5
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';
|
|
6
7
|
import AppMultiSelect from '../../components/inputs/AppMultiSelect.svelte';
|
|
7
8
|
export let component;
|
|
8
9
|
export let selected;
|
|
9
10
|
export let locked = false;
|
|
10
|
-
export let pointerdown = false;
|
|
11
11
|
export let render;
|
|
12
|
-
const { mode,
|
|
13
|
-
|
|
12
|
+
const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext');
|
|
13
|
+
const editorContext = getContext('AppEditorContext');
|
|
14
|
+
const movingcomponent = editorContext?.movingcomponent;
|
|
15
|
+
$: ismoving = movingcomponent != undefined && $mode == 'dnd' && $movingcomponent === component.id;
|
|
14
16
|
let initializing = undefined;
|
|
15
17
|
let componentContainerHeight = 0;
|
|
16
18
|
$: componentWithErrors = Object.values($errorByComponent).map((e) => e.componentId);
|
|
17
19
|
$: hasError = componentWithErrors.includes(component.id);
|
|
18
20
|
</script>
|
|
19
21
|
|
|
22
|
+
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
|
|
20
23
|
<div
|
|
21
|
-
on:
|
|
22
|
-
|
|
24
|
+
on:mouseover|stopPropagation={() => {
|
|
25
|
+
if (component.id !== $hoverStore) {
|
|
26
|
+
$hoverStore = component.id
|
|
27
|
+
}
|
|
28
|
+
}}
|
|
29
|
+
on:mouseout|stopPropagation={() => {
|
|
30
|
+
if ($hoverStore !== undefined) {
|
|
31
|
+
$hoverStore = undefined
|
|
32
|
+
}
|
|
33
|
+
}}
|
|
23
34
|
class="h-full flex flex-col w-full component {initializing ? 'overflow-hidden h-0' : ''}"
|
|
24
35
|
>
|
|
25
36
|
{#if $mode !== 'preview'}
|
|
26
37
|
<ComponentHeader
|
|
27
|
-
{
|
|
28
|
-
{pointerdown}
|
|
38
|
+
hover={$hoverStore === component.id}
|
|
29
39
|
{component}
|
|
30
40
|
{selected}
|
|
31
41
|
on:delete
|
|
@@ -35,16 +45,26 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
35
45
|
/>
|
|
36
46
|
{/if}
|
|
37
47
|
|
|
48
|
+
{#if ismoving}
|
|
49
|
+
<div class="absolute -top-8 w-40 ">
|
|
50
|
+
<button
|
|
51
|
+
class="border p-0.5 text-xs"
|
|
52
|
+
on:click={() => {
|
|
53
|
+
$movingcomponent = undefined
|
|
54
|
+
}}>Cancel move</button
|
|
55
|
+
>
|
|
56
|
+
</div>
|
|
57
|
+
{/if}
|
|
38
58
|
<div
|
|
39
59
|
class={twMerge(
|
|
40
|
-
'h-full bg-white/40',
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
component.softWrap || hasError ? '' : 'overflow-auto',
|
|
60
|
+
'h-full bg-white/40 outline-1',
|
|
61
|
+
$hoverStore === component.id && $mode !== 'preview' ? 'outline outline-blue-600' : '',
|
|
62
|
+
selected && $mode !== 'preview' ? 'outline outline-indigo-600' : '',
|
|
63
|
+
ccomponents[component.type].softWrap || hasError ? '' : 'overflow-auto',
|
|
45
64
|
$mode != 'preview' ? 'cursor-pointer' : '',
|
|
46
65
|
'relative z-auto',
|
|
47
|
-
$app.css?.['app']?.['component']?.class
|
|
66
|
+
$app.css?.['app']?.['component']?.class,
|
|
67
|
+
ismoving ? 'animate-pulse' : ''
|
|
48
68
|
)}
|
|
49
69
|
style={$app.css?.['app']?.['component']?.style}
|
|
50
70
|
bind:clientHeight={componentContainerHeight}
|
|
@@ -264,6 +284,7 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
264
284
|
configuration={component.configuration}
|
|
265
285
|
id={component.id}
|
|
266
286
|
customCss={component.customCss}
|
|
287
|
+
bind:initializing
|
|
267
288
|
{render}
|
|
268
289
|
/>
|
|
269
290
|
{:else if component.type === 'horizontaldividercomponent'}
|
|
@@ -293,8 +314,9 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
293
314
|
id={component.id}
|
|
294
315
|
customCss={component.customCss}
|
|
295
316
|
{render}
|
|
317
|
+
bind:initializing
|
|
296
318
|
/>
|
|
297
|
-
{:else if component.type === 'tabscomponent'}
|
|
319
|
+
{:else if component.type === 'tabscomponent' && component.tabs}
|
|
298
320
|
<AppTabs
|
|
299
321
|
configuration={component.configuration}
|
|
300
322
|
id={component.id}
|
|
@@ -302,11 +324,9 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
302
324
|
customCss={component.customCss}
|
|
303
325
|
{componentContainerHeight}
|
|
304
326
|
{render}
|
|
305
|
-
bind:initializing
|
|
306
327
|
/>
|
|
307
328
|
{:else if component.type === 'containercomponent'}
|
|
308
329
|
<AppContainer
|
|
309
|
-
configuration={component.configuration}
|
|
310
330
|
id={component.id}
|
|
311
331
|
customCss={component.customCss}
|
|
312
332
|
{componentContainerHeight}
|
|
@@ -314,7 +334,6 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
314
334
|
/>
|
|
315
335
|
{:else if component.type === 'verticalsplitpanescomponent'}
|
|
316
336
|
<AppSplitpanes
|
|
317
|
-
configuration={component.configuration}
|
|
318
337
|
id={component.id}
|
|
319
338
|
customCss={component.customCss}
|
|
320
339
|
panes={component.panes}
|
|
@@ -323,7 +342,6 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
323
342
|
/>
|
|
324
343
|
{:else if component.type === 'horizontalsplitpanescomponent'}
|
|
325
344
|
<AppSplitpanes
|
|
326
|
-
configuration={component.configuration}
|
|
327
345
|
id={component.id}
|
|
328
346
|
customCss={component.customCss}
|
|
329
347
|
panes={component.panes}
|
|
@@ -381,8 +399,5 @@ $: hasError = componentWithErrors.includes(component.id);
|
|
|
381
399
|
</div>
|
|
382
400
|
</div>
|
|
383
401
|
{#if initializing}
|
|
384
|
-
<div class="absolute inset-0 center-center flex-col bg-
|
|
385
|
-
<Loader2 class="animate-spin" size={16} />
|
|
386
|
-
<span class="text-xs mt-1">Loading</span>
|
|
387
|
-
</div>
|
|
402
|
+
<div class="absolute inset-0 center-center flex-col bg- border animate-skeleton" />
|
|
388
403
|
{/if}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type
|
|
2
|
+
import { type AppComponent } from './components';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
component: AppComponent;
|
|
6
6
|
selected: boolean;
|
|
7
7
|
locked?: boolean | undefined;
|
|
8
|
-
pointerdown?: boolean | undefined;
|
|
9
8
|
render: boolean;
|
|
10
9
|
};
|
|
11
10
|
events: {
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import { findGridItem, findGridItemParentGrid, getAllSubgridsAndComponentIds, insertNewGridItem } from '../appUtils';
|
|
3
3
|
import { push } from '../../../../history';
|
|
4
4
|
import { sendUserToast } from '../../../../utils';
|
|
5
|
+
import { gridColumns } from '../../gridUtils';
|
|
5
6
|
const { app, selectedComponent, worldStore, focusedGrid, componentControl } = getContext('AppViewerContext');
|
|
6
|
-
const { history } = getContext('AppEditorContext');
|
|
7
|
+
const { history, movingcomponent } = getContext('AppEditorContext');
|
|
7
8
|
let tempGridItem = undefined;
|
|
8
9
|
let copiedGridItem = undefined;
|
|
9
10
|
function getSortedGridItemsOfChildren() {
|
|
@@ -29,13 +30,23 @@ function left(event) {
|
|
|
29
30
|
const sortedGridItems = getGridItems();
|
|
30
31
|
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
|
|
31
32
|
if (currentIndex !== -1 && currentIndex > 0) {
|
|
32
|
-
|
|
33
|
+
const left = sortedGridItems[currentIndex - 1];
|
|
34
|
+
if (left.data.type === 'tablecomponent' && left.data.actionButtons.length >= 1) {
|
|
35
|
+
$selectedComponent = left.data.actionButtons[left.data.actionButtons.length - 1].id;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
$selectedComponent = left.id;
|
|
39
|
+
}
|
|
33
40
|
}
|
|
34
41
|
}
|
|
35
42
|
event.preventDefault();
|
|
36
43
|
}
|
|
37
44
|
function right(event) {
|
|
38
45
|
let r = $componentControl[$selectedComponent]?.right?.();
|
|
46
|
+
if (typeof r === 'string') {
|
|
47
|
+
$selectedComponent = r;
|
|
48
|
+
r = $componentControl[r]?.right?.(true);
|
|
49
|
+
}
|
|
39
50
|
if (!r) {
|
|
40
51
|
const sortedGridItems = getGridItems();
|
|
41
52
|
const currentIndex = sortedGridItems.findIndex((item) => item.id === $selectedComponent);
|
|
@@ -90,6 +101,7 @@ function handleCut(event) {
|
|
|
90
101
|
if (!$selectedComponent) {
|
|
91
102
|
return;
|
|
92
103
|
}
|
|
104
|
+
$movingcomponent = $selectedComponent;
|
|
93
105
|
push(history, $app);
|
|
94
106
|
const gridItem = findGridItem($app, $selectedComponent);
|
|
95
107
|
copiedGridItem = gridItem;
|
|
@@ -101,26 +113,30 @@ function handleCut(event) {
|
|
|
101
113
|
}
|
|
102
114
|
function handlePaste(event) {
|
|
103
115
|
push(history, $app);
|
|
104
|
-
|
|
116
|
+
$movingcomponent = undefined;
|
|
117
|
+
if (tempGridItem != undefined) {
|
|
105
118
|
if ($focusedGrid &&
|
|
106
119
|
getAllSubgridsAndComponentIds($app, tempGridItem.data)[0].includes(`${$focusedGrid.parentComponentId}-${$focusedGrid.subGridIndex}`)) {
|
|
107
120
|
sendUserToast('Cannot paste a component into itself', true);
|
|
108
121
|
return;
|
|
109
122
|
}
|
|
110
|
-
let parentGrid = findGridItemParentGrid($app, tempGridItem.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
grid.
|
|
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));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
$app.grid = $app.grid.filter((item) => item.id !== tempGridItem?.id);
|
|
117
130
|
}
|
|
118
|
-
|
|
131
|
+
const gridItem = tempGridItem;
|
|
132
|
+
insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
|
|
119
133
|
copiedGridItem = tempGridItem;
|
|
134
|
+
$selectedComponent = tempGridItem.id;
|
|
120
135
|
tempGridItem = undefined;
|
|
121
136
|
}
|
|
122
137
|
else if (copiedGridItem) {
|
|
123
|
-
|
|
138
|
+
const gridItem = copiedGridItem;
|
|
139
|
+
$selectedComponent = insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])));
|
|
124
140
|
}
|
|
125
141
|
$worldStore = $worldStore;
|
|
126
142
|
$app = $app;
|