diff --git a/apps/designer/app/designer/designer.tsx b/apps/designer/app/designer/designer.tsx index c6c2d3c99c..9f74bf6827 100644 --- a/apps/designer/app/designer/designer.tsx +++ b/apps/designer/app/designer/designer.tsx @@ -36,6 +36,7 @@ import { useDragAndDropState, } from "~/shared/nano-states"; import { useSubscribeClientSetting } from "./shared/client-settings"; +import { Navigator } from "./features/navigator"; export const links = () => { return [ @@ -71,7 +72,7 @@ type SidePanelProps = { children: JSX.Element | Array; isPreviewMode: boolean; css?: CSS; - gridArea: "inspector" | "sidebar"; + gridArea: "inspector" | "sidebar" | "navigator"; }; const SidePanel = ({ @@ -131,19 +132,19 @@ const ChromeWrapper = ({ children, isPreviewMode }: ChromeWrapperProps) => { gridTemplateColumns: "auto 1fr", gridTemplateRows: "auto 1fr auto", gridTemplateAreas: ` - "header header" - "sidebar main" - "footer footer" - `, + "header header" + "sidebar main" + "footer footer" + `, } : { - gridTemplateColumns: "auto 1fr 240px", + gridTemplateColumns: "auto 240px 1fr 240px", gridTemplateRows: "auto 1fr auto", gridTemplateAreas: ` - "header header header" - "sidebar main inspector" - "footer footer footer" - `, + "header header header header" + "sidebar navigator main inspector" + "footer footer footer footer" + `, }; return ( { + + + { + const [selectedInstanceData] = useSelectedInstanceData(); + const [rootInstance] = useRootInstance(); + const selectedInstancePath = useSelectedInstancePath( + selectedInstanceData?.id + ); + + if (rootInstance === undefined) return null; + return ( + { + publish<"selectInstanceById", Instance["id"]>({ + type: "selectInstanceById", + payload: instance.id, + }); + }} + /> + ); +}; diff --git a/apps/designer/app/designer/features/sidebar-left/panels/index.ts b/apps/designer/app/designer/features/sidebar-left/panels/index.ts index 40ae1c16af..ae8625e821 100644 --- a/apps/designer/app/designer/features/sidebar-left/panels/index.ts +++ b/apps/designer/app/designer/features/sidebar-left/panels/index.ts @@ -1,5 +1,5 @@ import * as components from "./components"; -import * as tree from "./tree"; +import * as navigator from "./navigator"; import * as assetManager from "./asset-manager"; -export const panels = { components, tree, assetManager } as const; +export const panels = { components, navigator, assetManager } as const; diff --git a/apps/designer/app/designer/features/sidebar-left/panels/navigator.tsx b/apps/designer/app/designer/features/sidebar-left/panels/navigator.tsx new file mode 100644 index 0000000000..c61e36d199 --- /dev/null +++ b/apps/designer/app/designer/features/sidebar-left/panels/navigator.tsx @@ -0,0 +1,13 @@ +import { type Publish } from "@webstudio-is/react-sdk"; +import { ListNestedIcon } from "@webstudio-is/icons"; +import { Navigator } from "~/designer/features/navigator"; + +type TabContentProps = { + publish: Publish; +}; + +export const TabContent = ({ publish }: TabContentProps) => { + return ; +}; + +export const icon = ; diff --git a/apps/designer/app/designer/features/sidebar-left/panels/tree.tsx b/apps/designer/app/designer/features/sidebar-left/panels/tree.tsx deleted file mode 100644 index 01d0b75d94..0000000000 --- a/apps/designer/app/designer/features/sidebar-left/panels/tree.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { type Instance, type Publish } from "@webstudio-is/react-sdk"; -import { ListNestedIcon } from "@webstudio-is/icons"; -import { Flex } from "@webstudio-is/design-system"; -import { type SelectedInstanceData } from "~/shared/canvas-components"; -import { useSelectedInstancePath } from "~/designer/shared/instance/use-selected-instance-path"; -import { Tree } from "~/designer/shared/tree"; -import { useRootInstance } from "~/shared/nano-states"; - -type TabContentProps = { - publish: Publish; - selectedInstanceData?: SelectedInstanceData; -}; - -export const TabContent = ({ - publish, - selectedInstanceData, -}: TabContentProps) => { - const [rootInstance] = useRootInstance(); - const selectedInstancePath = useSelectedInstancePath( - selectedInstanceData?.id - ); - - if (rootInstance === undefined) return null; - - return ( - - { - publish<"selectInstanceById", Instance["id"]>({ - type: "selectInstanceById", - payload: instance.id, - }); - }} - /> - - ); -}; - -export const icon = ; diff --git a/apps/designer/app/designer/features/sidebar-left/sidebar-left.tsx b/apps/designer/app/designer/features/sidebar-left/sidebar-left.tsx index 964bbe87a9..e9c7e2c5f7 100644 --- a/apps/designer/app/designer/features/sidebar-left/sidebar-left.tsx +++ b/apps/designer/app/designer/features/sidebar-left/sidebar-left.tsx @@ -8,7 +8,6 @@ import { SidebarTabsList, SidebarTabsTrigger, } from "@webstudio-is/design-system"; -import { useSelectedInstanceData } from "../../shared/nano-states"; import { useDragAndDropState } from "~/shared/nano-states"; import { panels } from "./panels"; import type { TabName } from "./types"; @@ -32,7 +31,6 @@ type SidebarLeftProps = { }; export const SidebarLeft = ({ publish, assets }: SidebarLeftProps) => { - const [selectedInstanceData] = useSelectedInstanceData(); const [dragAndDropState] = useDragAndDropState(); const [activeTab, setActiveTab] = useState("none"); const { TabContent } = activeTab === "none" ? none : panels[activeTab]; @@ -82,7 +80,6 @@ export const SidebarLeft = ({ publish, assets }: SidebarLeftProps) => { >