From bd927a27ed9581dbf67ea3694f9d989f8d71d2ed Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Thu, 16 Mar 2023 12:42:10 +0100 Subject: [PATCH] feat(frontend): Component control (#1293) * fix(frontend): fix app tabs * fix(frontend): app controls * fix(frontend): app controls * fix(frontend): align output panel * fix(frontend): clean up * fix(frontend): refactor events * fix(frontend): fix display * fix(frontend): fix indentation * fix(frontend): merge main --- .../components/layout/AppSplitpanes.svelte | 1 - .../apps/components/layout/AppTabs.svelte | 10 +- .../components/apps/editor/AppEditor.svelte | 3 +- .../components/apps/editor/AppPreview.svelte | 3 +- .../apps/editor/ComponentHeader.svelte | 99 +++++++++---------- .../apps/editor/SubGridEditor.svelte | 2 +- .../apps/editor/component/Component.svelte | 25 +++-- .../editor/contextPanel/ContextPanel.svelte | 5 +- .../components/BackgroundScriptsOutput.svelte | 2 - .../settingsPanel/ComponentPanel.svelte | 47 ++++----- .../components/apps/svelte-grid/Grid.svelte | 2 +- frontend/src/lib/components/apps/types.ts | 1 + frontend/src/lib/utils.ts | 8 ++ 13 files changed, 105 insertions(+), 103 deletions(-) diff --git a/frontend/src/lib/components/apps/components/layout/AppSplitpanes.svelte b/frontend/src/lib/components/apps/components/layout/AppSplitpanes.svelte index 6da5430e0c..c01756d6f9 100644 --- a/frontend/src/lib/components/apps/components/layout/AppSplitpanes.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppSplitpanes.svelte @@ -70,7 +70,6 @@ {#if $app.subgrids?.[`${id}-${index}`]} import { Tab, Tabs } from '$lib/components/common' - import { getContext, onMount } from 'svelte' + import { getContext } from 'svelte' import { initOutput } from '../../editor/appUtils' import SubGridEditor from '../../editor/SubGridEditor.svelte' import type { AppInput } from '../../inputType' @@ -80,9 +80,7 @@ } $: selected && handleTabSelection() - $: selectedIndex = tabs?.indexOf(selected) ?? -1 - $: css = concatCustomCss($app.css?.tabscomponent, customCss) let subgridWidth: number | undefined = undefined @@ -131,7 +129,8 @@
{#if $app.subgrids} - {#each tabs ?? [] as res, i} { $selectedComponent = id }} - />{/each} + /> + {/each} {/if}
diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index bc44301686..205fb53774 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -93,7 +93,8 @@ stateId: writable(0), parentWidth: writable(0), state: writable({}), - componentControl: writable({}) + componentControl: writable({}), + hoverStore: writable(undefined) }) setContext('AppEditorContext', { diff --git a/frontend/src/lib/components/apps/editor/AppPreview.svelte b/frontend/src/lib/components/apps/editor/AppPreview.svelte index 50ca3b01f4..26a12b043f 100644 --- a/frontend/src/lib/components/apps/editor/AppPreview.svelte +++ b/frontend/src/lib/components/apps/editor/AppPreview.svelte @@ -67,7 +67,8 @@ stateId: writable(0), parentWidth, state: writable({}), - componentControl: writable({}) + componentControl: writable({}), + hoverStore: writable(undefined) }) setContext('AppEditorContext', { diff --git a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte index 6411ab5abd..04a40eb246 100644 --- a/frontend/src/lib/components/apps/editor/ComponentHeader.svelte +++ b/frontend/src/lib/components/apps/editor/ComponentHeader.svelte @@ -6,6 +6,7 @@ import Popover from '$lib/components/Popover.svelte' import { Alert, Button } from '$lib/components/common' import type { AppComponent } from './component' + import { twMerge } from 'tailwind-merge' export let component: AppComponent export let selected: boolean @@ -26,63 +27,61 @@ } - - {component.id} - - -{#if pointerdown || selected || hover} - - -{/if} - {#if selected || hover} - + {component.id} {/if} +{#if selected} +
+ + + + + +
+{/if} + {#if error} {@const json = JSON.parse(JSON.stringify(error.error))} {#if $mode !== 'preview'} -
+
{ diff --git a/frontend/src/lib/components/apps/editor/component/Component.svelte b/frontend/src/lib/components/apps/editor/component/Component.svelte index 4a4c8c735d..cf42966838 100644 --- a/frontend/src/lib/components/apps/editor/component/Component.svelte +++ b/frontend/src/lib/components/apps/editor/component/Component.svelte @@ -47,9 +47,8 @@ export let pointerdown: boolean = false export let render: boolean - const { mode, connectingInput, app, errorByComponent } = + const { mode, app, errorByComponent, hoverStore } = getContext('AppViewerContext') - let hover = false let initializing: boolean | undefined = undefined let componentContainerHeight: number = 0 @@ -57,14 +56,23 @@ $: hasError = componentWithErrors.includes(component.id) +
(hover = true)} - on:pointerleave={() => (hover = false)} + on:mouseover|stopPropagation={() => { + if (component.id !== $hoverStore) { + $hoverStore = component.id + } + }} + on:mouseout|stopPropagation={() => { + if ($hoverStore !== undefined) { + $hoverStore = undefined + } + }} class="h-full flex flex-col w-full component {initializing ? 'overflow-hidden h-0' : ''}" > {#if $mode !== 'preview'} - import ObjectViewer from '$lib/components/propertyPicker/ObjectViewer.svelte' import { X } from 'lucide-svelte' import { getContext, setContext } from 'svelte' import { writable } from 'svelte/store' @@ -33,7 +32,7 @@
{#if search} @@ -53,7 +52,7 @@
- State & Context + State & Context ('AppViewerContext') - - export let expanded: boolean = false {#each $app.hiddenInlineScripts as action, index} diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte index e7b8e6c12f..21560ada54 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte @@ -9,7 +9,7 @@ import StaticInputEditor from './inputEditor/StaticInputEditor.svelte' import ConnectedInputEditor from './inputEditor/ConnectedInputEditor.svelte' import Badge from '$lib/components/common/badge/Badge.svelte' - import { capitalize, classNames } from '$lib/utils' + import { capitalize, classNames, getModifierKey } from '$lib/utils' import { buildExtraLib, fieldTypeToTsType } from '../../utils' import Recompute from './Recompute.svelte' import Tooltip from '$lib/components/Tooltip.svelte' @@ -222,34 +222,23 @@ Del
-
-
Copy:CTRL+C + CTRL+V
- -
Move:CTRL+X + CTRL+V
-
Navigate:ESC
+
+
+ Copy: + {getModifierKey()}+C, + {getModifierKey()}+V +
+
+ Move: + {getModifierKey()}+X, + {getModifierKey()}+V +
+
+ Navigate: + + + ESC +
{/if} diff --git a/frontend/src/lib/components/apps/svelte-grid/Grid.svelte b/frontend/src/lib/components/apps/svelte-grid/Grid.svelte index fcdad43f08..76778d6953 100644 --- a/frontend/src/lib/components/apps/svelte-grid/Grid.svelte +++ b/frontend/src/lib/components/apps/svelte-grid/Grid.svelte @@ -1,6 +1,6 @@