windmill-components 1.103.2 → 1.109.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AppConnect.svelte +4 -1
- package/package/components/ArgInput.svelte +81 -68
- package/package/components/ArgInput.svelte.d.ts +0 -2
- package/package/components/Awareness.svelte +17 -0
- package/package/components/Awareness.svelte.d.ts +14 -0
- package/package/components/CliHelpBox.svelte +2 -5
- package/package/components/Editor.svelte +81 -30
- package/package/components/Editor.svelte.d.ts +4 -0
- package/package/components/EditorBar.svelte +127 -131
- package/package/components/EditorBar.svelte.d.ts +8 -0
- package/package/components/FlowBuilder.svelte +6 -1
- package/package/components/FlowStatusViewer.svelte +157 -144
- package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
- package/package/components/HighlightCode.svelte +9 -2
- package/package/components/HighlightCode.svelte.d.ts +1 -0
- package/package/components/InputTransformForm.svelte +1 -1
- package/package/components/InputTransformSchemaForm.svelte +4 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +3 -0
- package/package/components/ObjectTypeNarrowing.svelte +8 -2
- package/package/components/ResourcePicker.svelte +0 -1
- package/package/components/ResourceTypePicker.svelte +1 -1
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/ScheduleEditor.svelte +35 -3
- package/package/components/SchemaEditor.svelte +7 -8
- package/package/components/SchemaEditor.svelte.d.ts +1 -1
- package/package/components/SchemaForm.svelte.d.ts +1 -1
- package/package/components/SchemaModal.svelte +7 -12
- package/package/components/SchemaModal.svelte.d.ts +2 -3
- package/package/components/SchemaViewer.svelte +7 -1
- package/package/components/SchemaViewer.svelte.d.ts +1 -1
- package/package/components/ScriptBuilder.svelte +95 -21
- package/package/components/ScriptEditor.svelte +114 -6
- package/package/components/ScriptEditor.svelte.d.ts +7 -1
- package/package/components/ScriptSchema.svelte.d.ts +1 -1
- package/package/components/TemplateEditor.svelte +1 -0
- package/package/components/Toggle.svelte +1 -1
- package/package/components/Urlize.svelte +19 -0
- package/package/components/Urlize.svelte.d.ts +16 -0
- package/package/components/UserSettings.svelte +57 -36
- package/package/components/UserSettings.svelte.d.ts +1 -0
- package/package/components/VariableEditor.svelte +1 -1
- package/package/components/apps/components/buttons/AppSchemaForm.svelte +6 -1
- package/package/components/apps/components/display/AppDisplayComponent.svelte +6 -1
- package/package/components/apps/components/display/AppDownload.svelte +33 -25
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte +2 -2
- package/package/components/apps/components/display/AppLogsComponent.svelte +2 -2
- package/package/components/apps/components/display/AppText.svelte +9 -14
- package/package/components/apps/components/display/table/AppAggridTable.svelte +45 -36
- package/package/components/apps/components/display/table/AppTable.svelte +5 -2
- package/package/components/apps/components/helpers/ComponentErrorHandler.svelte +26 -0
- package/package/components/apps/components/helpers/ComponentErrorHandler.svelte.d.ts +18 -0
- package/package/components/apps/components/helpers/InputValue.svelte +15 -17
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte +1 -1
- package/package/components/apps/components/helpers/eval.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +3 -1
- package/package/components/apps/components/inputs/AppCheckbox.svelte +21 -8
- package/package/components/apps/components/inputs/AppDateInput.svelte +6 -1
- package/package/components/apps/components/inputs/AppMultiSelect.svelte +18 -7
- package/package/components/apps/components/inputs/AppNumberInput.svelte +6 -1
- package/package/components/apps/components/inputs/AppRangeInput.svelte +6 -2
- package/package/components/apps/components/inputs/AppSelect.svelte +11 -3
- package/package/components/apps/components/inputs/AppSelectStep.svelte +19 -6
- package/package/components/apps/components/inputs/AppSelectTab.svelte +9 -1
- package/package/components/apps/components/inputs/AppSliderInputs.svelte +6 -1
- package/package/components/apps/components/inputs/AppTextInput.svelte +6 -1
- package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +6 -1
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +0 -1
- package/package/components/apps/editor/AppEditor.svelte +4 -7
- package/package/components/apps/editor/AppEditor.svelte.d.ts +3 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +38 -11
- package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +3 -0
- package/package/components/apps/editor/AppPreview.svelte +9 -7
- package/package/components/apps/editor/AppPreview.svelte.d.ts +6 -6
- package/package/components/apps/editor/ConnectionInstructions.svelte +1 -0
- package/package/components/apps/editor/DeploymentHistory.svelte +70 -0
- package/package/components/apps/editor/DeploymentHistory.svelte.d.ts +18 -0
- package/package/components/apps/editor/RecomputeAllComponents.svelte +49 -20
- package/package/components/apps/editor/component/ComponentNavigation.svelte +51 -20
- package/package/components/apps/editor/component/ComponentNavigation.svelte.d.ts +4 -1
- package/package/components/apps/editor/component/components.d.ts +50 -49
- package/package/components/apps/editor/component/components.js +6 -0
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +1 -4
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -7
- package/package/components/apps/rx.js +6 -1
- package/package/components/apps/types.d.ts +1 -1
- package/package/components/apps/utils.js +1 -0
- package/package/components/common/button/ButtonDropdown.svelte +45 -19
- package/package/components/common/button/ButtonDropdown.svelte.d.ts +1 -0
- package/package/components/common/modal/Modal.svelte +13 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -0
- package/package/components/common/table/AppRow.svelte +33 -3
- package/package/components/flows/content/FlowModuleCache.svelte +37 -0
- package/package/components/flows/content/FlowModuleCache.svelte.d.ts +17 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +57 -54
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +1 -1
- package/package/components/flows/content/FlowModuleHeader.svelte +12 -1
- package/package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -7
- package/package/components/flows/content/ScriptEditorDrawer.svelte +2 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +13 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -5
- package/package/components/flows/map/MapItem.svelte +9 -2
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubApp.svelte +2 -1
- package/package/components/flows/pickers/PickHubApp.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubFlow.svelte +2 -1
- package/package/components/flows/pickers/PickHubFlow.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubScript.svelte +2 -1
- package/package/components/flows/pickers/PickHubScript.svelte.d.ts +1 -0
- package/package/components/flows/previousResults.d.ts +2 -0
- package/package/components/flows/previousResults.js +46 -0
- package/package/components/graph/FlowGraph.svelte +1 -1
- package/package/components/home/ItemsList.svelte +11 -3
- package/package/components/home/ListFilters.svelte +39 -0
- package/package/components/home/ListFilters.svelte.d.ts +4 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +77 -79
- package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -1
- package/package/components/propertyPicker/PropPicker.svelte +18 -0
- package/package/components/sidebar/MultiplayerMenu.svelte +123 -0
- package/package/components/sidebar/MultiplayerMenu.svelte.d.ts +16 -0
- package/package/components/sidebar/WorkspaceMenu.svelte +1 -1
- package/package/gen/core/CancelablePromise.d.ts +2 -8
- package/package/gen/core/CancelablePromise.js +38 -36
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/core/request.js +3 -2
- package/package/gen/models/AuditLog.d.ts +1 -1
- package/package/gen/models/CreateInput.d.ts +1 -1
- package/package/gen/models/FlowMetadata.d.ts +1 -1
- package/package/gen/models/FlowModule.d.ts +1 -0
- package/package/gen/models/Input.d.ts +1 -1
- package/package/gen/models/NewScript.d.ts +2 -1
- package/package/gen/models/NewToken.d.ts +1 -0
- package/package/gen/models/OpenFlow.d.ts +1 -1
- package/package/gen/models/Policy.d.ts +1 -1
- package/package/gen/models/Script.d.ts +2 -1
- package/package/gen/models/TruncatedToken.d.ts +1 -0
- package/package/gen/services/AppService.d.ts +1 -1
- package/package/gen/services/JobService.d.ts +64 -4
- package/package/gen/services/JobService.js +45 -0
- package/package/gen/services/ResourceService.d.ts +2 -1
- package/package/gen/services/ResourceService.js +4 -1
- package/package/gen/services/ScriptService.d.ts +0 -45
- package/package/gen/services/ScriptService.js +0 -52
- package/package/gen/services/SettingsService.d.ts +6 -0
- package/package/gen/services/SettingsService.js +11 -0
- package/package/gen/services/UserService.d.ts +14 -0
- package/package/gen/services/UserService.js +11 -0
- package/package/gen/services/VariableService.d.ts +12 -0
- package/package/gen/services/VariableService.js +16 -0
- package/package/hub.d.ts +1 -1
- package/package/infer.js +8 -13
- package/package/navigation.d.ts +1 -1
- package/package/navigation.js +6 -1
- package/package/script_helpers.d.ts +1 -1
- package/package/script_helpers.js +6 -1
- package/package/stores.d.ts +2 -0
- package/package/stores.js +4 -2
- package/package/utils.d.ts +1 -0
- package/package/utils.js +14 -0
- package/package.json +28 -19
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<script>import { Pane, Splitpanes } from 'svelte-splitpanes';
|
|
2
|
+
import PanelSection from './settingsPanel/common/PanelSection.svelte';
|
|
3
|
+
import { classNames, displayDate } from '../../../utils';
|
|
4
|
+
import { AppService, AppWithLastVersion } from '../../../gen';
|
|
5
|
+
import { workspaceStore } from '../../../stores';
|
|
6
|
+
import AppPreview from './AppPreview.svelte';
|
|
7
|
+
import { Skeleton } from '../../common';
|
|
8
|
+
import Button from '../../common/button/Button.svelte';
|
|
9
|
+
import { createEventDispatcher } from 'svelte';
|
|
10
|
+
export let versions;
|
|
11
|
+
let selectedVersion = undefined;
|
|
12
|
+
let selected = undefined;
|
|
13
|
+
$: selectedVersion !== undefined && loadValue(selectedVersion);
|
|
14
|
+
async function loadValue(version) {
|
|
15
|
+
let app = await AppService.getAppByVersion({ workspace: $workspaceStore, id: version });
|
|
16
|
+
selected = app;
|
|
17
|
+
}
|
|
18
|
+
$: reversedVersions = versions.slice().reverse();
|
|
19
|
+
const dispatch = createEventDispatcher();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<Splitpanes class="!overflow-visible">
|
|
23
|
+
<Pane size={20}>
|
|
24
|
+
<PanelSection title="Past Deployments">
|
|
25
|
+
<div class="flex flex-col gap-2 w-full">
|
|
26
|
+
{#if versions.length > 0}
|
|
27
|
+
<div class="flex gap-2 flex-col">
|
|
28
|
+
{#each reversedVersions ?? [] as version}
|
|
29
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
30
|
+
<div
|
|
31
|
+
class={classNames(
|
|
32
|
+
'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
|
|
33
|
+
selectedVersion == version ? 'bg-blue-100 text-blue-600' : ''
|
|
34
|
+
)}
|
|
35
|
+
on:click={() => (selectedVersion = version)}
|
|
36
|
+
>
|
|
37
|
+
<span class="text-xs truncate">{version}</span>
|
|
38
|
+
</div>
|
|
39
|
+
{/each}
|
|
40
|
+
</div>
|
|
41
|
+
{:else}
|
|
42
|
+
<div class="text-sm text-gray-500">No items</div>
|
|
43
|
+
{/if}
|
|
44
|
+
</div>
|
|
45
|
+
</PanelSection>
|
|
46
|
+
</Pane>
|
|
47
|
+
<Pane size={80}>
|
|
48
|
+
<div class="h-full w-full overflow-auto">
|
|
49
|
+
{#if selectedVersion}
|
|
50
|
+
{#if selected}
|
|
51
|
+
<div class="flex justify-between">
|
|
52
|
+
<h3 class="p-1">Deployed {displayDate(selected.created_at)} by {selected.created_by}</h3
|
|
53
|
+
>
|
|
54
|
+
<div class="flex gap-2">
|
|
55
|
+
<Button on:click={() => window.open(`/apps/add?template_id=${selectedVersion}`)}
|
|
56
|
+
>Restore as fork</Button
|
|
57
|
+
>
|
|
58
|
+
<Button on:click={() => dispatch('restore', selected)}>Restore here</Button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<AppPreview noBackend app={selected.value} context={{}} />
|
|
62
|
+
{:else}
|
|
63
|
+
<Skeleton layout={[[40]]} />
|
|
64
|
+
{/if}
|
|
65
|
+
{:else}
|
|
66
|
+
<div class="text-sm p-2 text-gray-500">Select a deployment version to see its details</div>
|
|
67
|
+
{/if}
|
|
68
|
+
</div>
|
|
69
|
+
</Pane>
|
|
70
|
+
</Splitpanes>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
versions: number[];
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
restore: CustomEvent<any>;
|
|
8
|
+
} & {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export type DeploymentHistoryProps = typeof __propDef.props;
|
|
14
|
+
export type DeploymentHistoryEvents = typeof __propDef.events;
|
|
15
|
+
export type DeploymentHistorySlots = typeof __propDef.slots;
|
|
16
|
+
export default class DeploymentHistory extends SvelteComponentTyped<DeploymentHistoryProps, DeploymentHistoryEvents, DeploymentHistorySlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
<script>import
|
|
2
|
-
import { ChevronDown, RefreshCw } from 'lucide-svelte';
|
|
1
|
+
<script>import { RefreshCw } from 'lucide-svelte';
|
|
3
2
|
import { getContext, onMount } from 'svelte';
|
|
4
3
|
import Button from '../../common/button/Button.svelte';
|
|
5
4
|
import { allItems } from '../utils';
|
|
5
|
+
import ButtonDropdown from '../../common/button/ButtonDropdown.svelte';
|
|
6
|
+
import { MenuItem } from '@rgossiaux/svelte-headlessui';
|
|
7
|
+
import { classNames } from '../../../utils';
|
|
6
8
|
const { runnableComponents, app, initialized } = getContext('AppViewerContext');
|
|
7
9
|
let loading = false;
|
|
8
10
|
let timeout = undefined;
|
|
@@ -73,6 +75,16 @@ onMount(() => {
|
|
|
73
75
|
clearInterval(timeout);
|
|
74
76
|
};
|
|
75
77
|
});
|
|
78
|
+
let items = [
|
|
79
|
+
{
|
|
80
|
+
displayName: 'Once',
|
|
81
|
+
action: () => setInter(undefined)
|
|
82
|
+
},
|
|
83
|
+
...[1, 2, 3, 4, 5, 6].map((i) => ({
|
|
84
|
+
displayName: `Every ${i * 5} seconds`,
|
|
85
|
+
action: () => setInter(i * 5000)
|
|
86
|
+
}))
|
|
87
|
+
];
|
|
76
88
|
</script>
|
|
77
89
|
|
|
78
90
|
<div class="flex items-center">
|
|
@@ -89,22 +101,39 @@ onMount(() => {
|
|
|
89
101
|
>
|
|
90
102
|
<RefreshCw class={loading ? 'animate-spin' : ''} size={16} /> ({componentNumber})
|
|
91
103
|
</Button>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
|
|
105
|
+
<ButtonDropdown hasPadding={true}>
|
|
106
|
+
<svelte:fragment slot="label">
|
|
107
|
+
<span
|
|
108
|
+
class={classNames('text-xs min-w-[2rem]', interval ? 'text-blue-500' : 'text-gray-600')}
|
|
109
|
+
>
|
|
110
|
+
{interval ? `${interval / 1000}s` : 'once'}
|
|
111
|
+
</span>
|
|
112
|
+
</svelte:fragment>
|
|
113
|
+
<svelte:fragment slot="items">
|
|
114
|
+
{#each items ?? [] as { }, index}
|
|
115
|
+
<MenuItem
|
|
116
|
+
on:click={() => {
|
|
117
|
+
if (index === 0) {
|
|
118
|
+
setInter(undefined)
|
|
119
|
+
} else {
|
|
120
|
+
setInter(index * 5000)
|
|
121
|
+
}
|
|
122
|
+
}}
|
|
123
|
+
>
|
|
124
|
+
<div
|
|
125
|
+
class={classNames(
|
|
126
|
+
'!text-gray-600 text-left px-4 py-2 gap-2 cursor-pointer hover:bg-gray-100 !text-xs font-semibold'
|
|
127
|
+
)}
|
|
128
|
+
>
|
|
129
|
+
{#if index === 0}
|
|
130
|
+
Once
|
|
131
|
+
{:else}
|
|
132
|
+
{`Every ${index * 5} seconds`}
|
|
133
|
+
{/if}
|
|
134
|
+
</div>
|
|
135
|
+
</MenuItem>
|
|
136
|
+
{/each}
|
|
137
|
+
</svelte:fragment>
|
|
138
|
+
</ButtonDropdown>
|
|
110
139
|
</div>
|
|
@@ -3,10 +3,11 @@ import { findGridItem, findGridItemParentGrid, getAllSubgridsAndComponentIds, in
|
|
|
3
3
|
import { push } from '../../../../history';
|
|
4
4
|
import { sendUserToast } from '../../../../toast';
|
|
5
5
|
import { gridColumns } from '../../gridUtils';
|
|
6
|
+
import { copyToClipboard } from '../../../../utils';
|
|
6
7
|
const { app, selectedComponent, focusedGrid, componentControl } = getContext('AppViewerContext');
|
|
7
8
|
const { history, movingcomponents } = getContext('AppEditorContext');
|
|
8
9
|
let tempGridItems = undefined;
|
|
9
|
-
|
|
10
|
+
const ITEM_TYPE = 'wm-grid-items';
|
|
10
11
|
function getSortedGridItemsOfChildren() {
|
|
11
12
|
if (!$focusedGrid) {
|
|
12
13
|
return $app.grid;
|
|
@@ -90,14 +91,28 @@ function handleArrowUp(event) {
|
|
|
90
91
|
$focusedGrid = undefined;
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
|
-
function handleCopy(event) {
|
|
94
|
+
async function handleCopy(event) {
|
|
94
95
|
if (!$selectedComponent) {
|
|
95
96
|
return;
|
|
96
97
|
}
|
|
97
98
|
tempGridItems = undefined;
|
|
98
|
-
copiedGridItems = $selectedComponent
|
|
99
|
+
const copiedGridItems = $selectedComponent
|
|
99
100
|
.map((x) => findGridItem($app, x))
|
|
100
101
|
.filter((x) => x != undefined);
|
|
102
|
+
copyGridItemsToClipboard(copiedGridItems);
|
|
103
|
+
}
|
|
104
|
+
function copyGridItemsToClipboard(items) {
|
|
105
|
+
let allSubgrids = {};
|
|
106
|
+
for (let item of items) {
|
|
107
|
+
let subgrids = getAllSubgridsAndComponentIds($app, item.data)[0];
|
|
108
|
+
for (let key of subgrids) {
|
|
109
|
+
allSubgrids[key] = $app.subgrids?.[key];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
let success = copyToClipboard(JSON.stringify({ type: ITEM_TYPE, items, subgrids: allSubgrids }), false);
|
|
113
|
+
if (!success) {
|
|
114
|
+
sendUserToast('Could not copy to clipboard. Are you in an unsecure context?', true);
|
|
115
|
+
}
|
|
101
116
|
}
|
|
102
117
|
function handleCut(event) {
|
|
103
118
|
if (!$selectedComponent) {
|
|
@@ -108,16 +123,39 @@ function handleCut(event) {
|
|
|
108
123
|
let gridItems = $selectedComponent
|
|
109
124
|
.map((x) => findGridItem($app, x))
|
|
110
125
|
.filter((x) => x != undefined);
|
|
111
|
-
|
|
126
|
+
copyGridItemsToClipboard(gridItems);
|
|
112
127
|
if (!gridItems) {
|
|
113
128
|
return;
|
|
114
129
|
}
|
|
115
130
|
// Store the grid item in a temp variable so we can paste it later
|
|
116
131
|
tempGridItems = gridItems;
|
|
117
132
|
}
|
|
118
|
-
function handlePaste(event) {
|
|
133
|
+
export async function handlePaste(event) {
|
|
134
|
+
let classes = event.target?.['className'];
|
|
135
|
+
if ((typeof classes === 'string' && classes.includes('inputarea')) ||
|
|
136
|
+
['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
event.preventDefault();
|
|
119
140
|
push(history, $app);
|
|
120
141
|
$movingcomponents = undefined;
|
|
142
|
+
let copiedGridItems = undefined;
|
|
143
|
+
let subgrids = $app.subgrids ?? {};
|
|
144
|
+
const txt = event?.clipboardData?.getData('text');
|
|
145
|
+
if (txt) {
|
|
146
|
+
try {
|
|
147
|
+
const parsed = JSON.parse(txt);
|
|
148
|
+
if (parsed.type == ITEM_TYPE) {
|
|
149
|
+
copiedGridItems = parsed.items;
|
|
150
|
+
subgrids = parsed.subgrids ?? subgrids;
|
|
151
|
+
console.log('subgrids', subgrids);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
copiedGridItems = undefined;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch { }
|
|
158
|
+
}
|
|
121
159
|
if (tempGridItems != undefined) {
|
|
122
160
|
for (let tempGridItem of tempGridItems) {
|
|
123
161
|
if ($focusedGrid &&
|
|
@@ -136,31 +174,29 @@ function handlePaste(event) {
|
|
|
136
174
|
const gridItem = tempGridItem;
|
|
137
175
|
insertNewGridItem($app, (id) => ({ ...gridItem.data, id }), $focusedGrid, Object.fromEntries(gridColumns.map((column) => [column, gridItem[column]])), tempGridItem.id);
|
|
138
176
|
}
|
|
139
|
-
|
|
177
|
+
copyGridItemsToClipboard(tempGridItems);
|
|
140
178
|
$selectedComponent = tempGridItems.map((x) => x.id);
|
|
141
179
|
tempGridItems = undefined;
|
|
142
180
|
}
|
|
143
181
|
else if (copiedGridItems) {
|
|
144
182
|
let nitems = [];
|
|
145
183
|
for (let copiedGridItem of copiedGridItems) {
|
|
146
|
-
let newItem = copyComponent(copiedGridItem, $focusedGrid);
|
|
184
|
+
let newItem = copyComponent(copiedGridItem, $focusedGrid, subgrids);
|
|
147
185
|
newItem && nitems.push(newItem);
|
|
148
186
|
}
|
|
149
187
|
$selectedComponent = nitems.map((x) => x);
|
|
150
188
|
}
|
|
151
189
|
$app = $app;
|
|
152
190
|
}
|
|
153
|
-
function copyComponent(item, parentGrid, doNotVisit) {
|
|
191
|
+
function copyComponent(item, parentGrid, subgrids, doNotVisit) {
|
|
154
192
|
if (item.id === doNotVisit) {
|
|
155
193
|
return;
|
|
156
194
|
}
|
|
157
195
|
const newItem = insertNewGridItem($app, (id) => ({ ...item.data, id }), parentGrid, Object.fromEntries(gridColumns.map((column) => [column, item[column]])));
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
});
|
|
163
|
-
}
|
|
196
|
+
for (let i = 0; i < (item?.data?.numberOfSubgrids ?? 0); i++) {
|
|
197
|
+
subgrids[`${item.id}-${i}`].forEach((subgridItem) => {
|
|
198
|
+
copyComponent(subgridItem, { parentComponentId: newItem, subGridIndex: i }, subgrids, doNotVisit ?? newItem);
|
|
199
|
+
});
|
|
164
200
|
}
|
|
165
201
|
return newItem;
|
|
166
202
|
}
|
|
@@ -196,11 +232,6 @@ function keydown(event) {
|
|
|
196
232
|
handleCopy(event);
|
|
197
233
|
}
|
|
198
234
|
break;
|
|
199
|
-
case 'v':
|
|
200
|
-
if (event.ctrlKey || event.metaKey) {
|
|
201
|
-
handlePaste(event);
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
204
235
|
case 'x':
|
|
205
236
|
if (event.ctrlKey || event.metaKey) {
|
|
206
237
|
handleCut(event);
|
|
@@ -212,4 +243,4 @@ function keydown(event) {
|
|
|
212
243
|
}
|
|
213
244
|
</script>
|
|
214
245
|
|
|
215
|
-
<svelte:window on:keydown={keydown} />
|
|
246
|
+
<svelte:window on:keydown={keydown} on:paste={handlePaste} />
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
|
-
props:
|
|
3
|
+
props: {
|
|
4
|
+
handlePaste?: ((event: ClipboardEvent) => Promise<void>) | undefined;
|
|
5
|
+
};
|
|
4
6
|
events: {
|
|
5
7
|
[evt: string]: CustomEvent<any>;
|
|
6
8
|
};
|
|
@@ -10,5 +12,6 @@ export type ComponentNavigationProps = typeof __propDef.props;
|
|
|
10
12
|
export type ComponentNavigationEvents = typeof __propDef.events;
|
|
11
13
|
export type ComponentNavigationSlots = typeof __propDef.slots;
|
|
12
14
|
export default class ComponentNavigation extends SvelteComponentTyped<ComponentNavigationProps, ComponentNavigationEvents, ComponentNavigationSlots> {
|
|
15
|
+
get handlePaste(): (event: ClipboardEvent) => Promise<void>;
|
|
13
16
|
}
|
|
14
17
|
export {};
|