diff --git a/packages/design/src/types/context.ts b/packages/design/src/types/context.ts deleted file mode 100644 index 2d46987..0000000 --- a/packages/design/src/types/context.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Dispatch } from 'react'; -import type { Data } from '@idraw/types'; -import { DesignData, DesignDrawDataType } from './data'; - -export interface DesignState { - activeDrawDataType: DesignDrawDataType; - designData: DesignData; - viewDrawData: Data; - viewDrawUUID: string | null; - themeMode: 'light' | 'dark'; -} - -export type DesignActionType = 'updateThemeMode' | 'updateDesignData' | 'switchDrawDataType'; - -export type DesignAction = { - type: DesignActionType; - payload: Partial; -}; - -export type DesignDispatch = Dispatch; - -export interface DesignContext { - state: DesignState; - dispatch: DesignDispatch; -} diff --git a/packages/design/src/types/data.ts b/packages/design/src/types/data.ts deleted file mode 100644 index f0446df..0000000 --- a/packages/design/src/types/data.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { Element, ElementType, ElementSize, ElementBaseDesc } from '@idraw/types'; - -export type DesignItemType = 'component' | 'component-item' | 'module' | 'page'; - -export type DesignDrawDataType = 'component' | 'module' | 'page'; - -export type DesignComponentItem = ElementSize & { - uuid: string; - type: 'component-item'; - name: string; - detail?: ElementBaseDesc & { - children: Array | DesignComponentItem>; - }; -}; - -export type DesignComponent = ElementSize & { - uuid: string; - type: 'component'; - name: string; - detail?: ElementBaseDesc & { - default: DesignComponentItem; - variants: DesignComponentItem[]; - }; -}; - -export type DesignModule = ElementSize & { - uuid: string; - type: 'module'; - name: string; - detail?: ElementBaseDesc & { - children: Array; - }; -}; - -export type DesignPage = ElementSize & { - uuid: string; - type: 'page'; - name: string; - detail: ElementBaseDesc & { - children: Array; - }; -}; - -export interface DesignData { - components: DesignComponent[]; - modules: DesignModule[]; - pages: DesignPage[]; -} diff --git a/packages/design/src/util/component.ts b/packages/design/src/util/component.ts deleted file mode 100644 index a04b7ba..0000000 --- a/packages/design/src/util/component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ViewTreeNode, DesignData, DesignComponent } from '../types'; -import { parseComponentToViewTreeNode } from './view-tree'; - -export function parseComponentViewTree(designData: DesignData | null): ViewTreeNode[] { - const treeNodes: ViewTreeNode[] = []; - designData?.components?.forEach((comp: DesignComponent) => { - const node = parseComponentToViewTreeNode(comp); - treeNodes.push(node); - }); - return treeNodes; -} diff --git a/packages/design/README.md b/packages/lab/README.md similarity index 100% rename from packages/design/README.md rename to packages/lab/README.md diff --git a/packages/design/dev/data/components/button.ts b/packages/lab/dev/data/components/button.ts similarity index 94% rename from packages/design/dev/data/components/button.ts rename to packages/lab/dev/data/components/button.ts index 0b8d213..77f0b21 100644 --- a/packages/design/dev/data/components/button.ts +++ b/packages/lab/dev/data/components/button.ts @@ -1,9 +1,9 @@ import { createUUID } from '@idraw/util'; import type { ElementSize } from '@idraw/types'; -import type { DesignComponent, DesignComponentItem } from '../../../src'; +import type { LabComponent, LabComponentItem } from '../../../src'; function createButtonItem(variantName: string, size?: Partial) { - const componentItem: DesignComponentItem = { + const componentItem: LabComponentItem = { uuid: createUUID(), type: 'component-item', name: `Button ${variantName}`, @@ -105,7 +105,7 @@ function createButtonItem(variantName: string, size?: Partial) { } export function createButton(name: string, size?: Partial) { - const button: DesignComponent = { + const button: LabComponent = { uuid: createUUID(), type: 'component', name: `Button ${name}`, diff --git a/packages/design/dev/data/components/checkbox.ts b/packages/lab/dev/data/components/checkbox.ts similarity index 92% rename from packages/design/dev/data/components/checkbox.ts rename to packages/lab/dev/data/components/checkbox.ts index c3aaef6..25b7647 100644 --- a/packages/design/dev/data/components/checkbox.ts +++ b/packages/lab/dev/data/components/checkbox.ts @@ -1,9 +1,9 @@ import { createUUID } from '@idraw/util'; import type { ElementSize } from '@idraw/types'; -import type { DesignComponent, DesignComponentItem } from '../../../src'; +import type { LabComponent, LabComponentItem } from '../../../src'; function createCheckboxItem(variantName: string, size?: Partial) { - const componentItem: DesignComponentItem = { + const componentItem: LabComponentItem = { uuid: createUUID(), type: 'component-item', name: `Checkbox ${variantName}`, @@ -76,7 +76,7 @@ function createCheckboxItem(variantName: string, size?: Partial) { } export function createCheckbox(name: string, size?: Partial) { - const checkbox: DesignComponent = { + const checkbox: LabComponent = { uuid: createUUID(), type: 'component', name: `Checkbox ${name}`, diff --git a/packages/design/dev/data/index.ts b/packages/lab/dev/data/index.ts similarity index 84% rename from packages/design/dev/data/index.ts rename to packages/lab/dev/data/index.ts index 51f2f80..f0cbe3a 100644 --- a/packages/design/dev/data/index.ts +++ b/packages/lab/dev/data/index.ts @@ -1,8 +1,8 @@ -import type { DesignData } from '../../src'; +import type { LabData } from '../../src'; import { createButton } from './components/button'; import { createCheckbox } from './components/checkbox'; -const data: DesignData = { +const data: LabData = { components: [ createButton('001', { angle: 45 }), // createButton('001', {}), diff --git a/packages/design/dev/images/building-001.png b/packages/lab/dev/images/building-001.png similarity index 100% rename from packages/design/dev/images/building-001.png rename to packages/lab/dev/images/building-001.png diff --git a/packages/design/dev/images/building-002.png b/packages/lab/dev/images/building-002.png similarity index 100% rename from packages/design/dev/images/building-002.png rename to packages/lab/dev/images/building-002.png diff --git a/packages/design/dev/images/building-003.png b/packages/lab/dev/images/building-003.png similarity index 100% rename from packages/design/dev/images/building-003.png rename to packages/lab/dev/images/building-003.png diff --git a/packages/design/dev/images/chart.png b/packages/lab/dev/images/chart.png similarity index 100% rename from packages/design/dev/images/chart.png rename to packages/lab/dev/images/chart.png diff --git a/packages/design/dev/images/computer.png b/packages/lab/dev/images/computer.png similarity index 100% rename from packages/design/dev/images/computer.png rename to packages/lab/dev/images/computer.png diff --git a/packages/design/dev/images/github.png b/packages/lab/dev/images/github.png similarity index 100% rename from packages/design/dev/images/github.png rename to packages/lab/dev/images/github.png diff --git a/packages/design/dev/images/lena.png b/packages/lab/dev/images/lena.png similarity index 100% rename from packages/design/dev/images/lena.png rename to packages/lab/dev/images/lena.png diff --git a/packages/design/dev/images/phone.png b/packages/lab/dev/images/phone.png similarity index 100% rename from packages/design/dev/images/phone.png rename to packages/lab/dev/images/phone.png diff --git a/packages/design/dev/index.html b/packages/lab/dev/index.html similarity index 100% rename from packages/design/dev/index.html rename to packages/lab/dev/index.html diff --git a/packages/design/dev/main.tsx b/packages/lab/dev/main.tsx similarity index 84% rename from packages/design/dev/main.tsx rename to packages/lab/dev/main.tsx index f4bc697..34df3e3 100644 --- a/packages/design/dev/main.tsx +++ b/packages/lab/dev/main.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import { createRoot } from 'react-dom/client'; -import { Design } from '../src/index'; +import { Lab } from '../src/index'; import data from './data'; const dom = document.querySelector('#lab') as HTMLDivElement; @@ -21,7 +21,7 @@ const App = () => { // const width = 800; // const height = 600; - return ; + return ; }; root.render(); diff --git a/packages/design/package.json b/packages/lab/package.json similarity index 93% rename from packages/design/package.json rename to packages/lab/package.json index 5e70a59..1f48f43 100644 --- a/packages/design/package.json +++ b/packages/lab/package.json @@ -1,5 +1,5 @@ { - "name": "@idraw/design", + "name": "@idraw/lab", "version": "0.4.0-alpha.0", "dependencies": { "@ant-design/icons": "^5.1.3", diff --git a/packages/design/src/context.ts b/packages/lab/src/context.ts similarity index 57% rename from packages/design/src/context.ts rename to packages/lab/src/context.ts index a5be539..6799d88 100644 --- a/packages/design/src/context.ts +++ b/packages/lab/src/context.ts @@ -1,9 +1,9 @@ import { createContext } from 'react'; import type { Data } from '@idraw/types'; -import { DesignData, DesignState, DesignAction, DesignContext, DesignDrawDataType } from './types'; +import { LabData, LabState, LabAction, LabContext, LabDrawDataType } from './types'; import { parseComponentsToDrawData } from './util/view-data'; -export function createDesignData(): DesignData { +export function createLabData(): LabData { return { components: [], modules: [], @@ -11,21 +11,21 @@ export function createDesignData(): DesignData { }; } -function parseDrawData(drawDataType: DesignDrawDataType, designData: DesignData | null): Data { +function parseDrawData(drawDataType: LabDrawDataType, labData: LabData | null): Data { let drawData: Data = { elements: [] }; if (drawDataType === 'component') { - drawData = parseComponentsToDrawData(designData?.components || []); + drawData = parseComponentsToDrawData(labData?.components || []); } return drawData; } -export function createDesignContextState(opts?: Partial): DesignState { - const activeDrawDataType: DesignDrawDataType = 'component'; - const designData: DesignData = opts?.designData || createDesignData(); - const viewDrawData = parseDrawData(activeDrawDataType, designData); +export function createLabContextState(opts?: Partial): LabState { + const activeDrawDataType: LabDrawDataType = 'component'; + const labData: LabData = opts?.labData || createLabData(); + const viewDrawData = parseDrawData(activeDrawDataType, labData); return { - designData: designData, + labData: labData, activeDrawDataType: activeDrawDataType, themeMode: opts?.themeMode || 'light', viewDrawData: viewDrawData, @@ -33,7 +33,7 @@ export function createDesignContextState(opts?: Partial): DesignSta }; } -export function createDesignReducer(state: DesignState, action: DesignAction): DesignState { +export function createLabReducer(state: LabState, action: LabAction): LabState { switch (action.type) { case 'updateThemeMode': { if (!action?.payload?.themeMode) { @@ -46,14 +46,14 @@ export function createDesignReducer(state: DesignState, action: DesignAction): D } }; } - case 'updateDesignData': { - if (!action?.payload?.designData) { + case 'updateLabData': { + if (!action?.payload?.labData) { return state; } return { ...state, ...{ - designData: action?.payload?.designData + labData: action?.payload?.labData } }; } @@ -65,7 +65,7 @@ export function createDesignReducer(state: DesignState, action: DesignAction): D ...state, ...{ activeDrawDataType: action?.payload.activeDrawDataType, - viewDrawData: parseDrawData(action?.payload?.activeDrawDataType, state.designData) + viewDrawData: parseDrawData(action?.payload?.activeDrawDataType, state.labData) } }; return newState; @@ -76,8 +76,8 @@ export function createDesignReducer(state: DesignState, action: DesignAction): D } } -export const Context = createContext({ - state: createDesignContextState(), +export const Context = createContext({ + state: createLabContextState(), dispatch: () => { return; } diff --git a/packages/design/src/css/icons/index.less b/packages/lab/src/css/icons/index.less similarity index 100% rename from packages/design/src/css/icons/index.less rename to packages/lab/src/css/icons/index.less diff --git a/packages/design/src/css/index.less b/packages/lab/src/css/index.less similarity index 100% rename from packages/design/src/css/index.less rename to packages/lab/src/css/index.less diff --git a/packages/design/src/css/index.ts b/packages/lab/src/css/index.ts similarity index 100% rename from packages/design/src/css/index.ts rename to packages/lab/src/css/index.ts diff --git a/packages/design/src/css/modules/_mod.less b/packages/lab/src/css/modules/_mod.less similarity index 100% rename from packages/design/src/css/modules/_mod.less rename to packages/lab/src/css/modules/_mod.less diff --git a/packages/design/src/css/modules/dashboard.less b/packages/lab/src/css/modules/dashboard.less similarity index 100% rename from packages/design/src/css/modules/dashboard.less rename to packages/lab/src/css/modules/dashboard.less diff --git a/packages/design/src/css/modules/header.less b/packages/lab/src/css/modules/header.less similarity index 100% rename from packages/design/src/css/modules/header.less rename to packages/lab/src/css/modules/header.less diff --git a/packages/design/src/css/modules/panel-layer.less b/packages/lab/src/css/modules/panel-layer.less similarity index 100% rename from packages/design/src/css/modules/panel-layer.less rename to packages/lab/src/css/modules/panel-layer.less diff --git a/packages/design/src/css/modules/sketch.less b/packages/lab/src/css/modules/sketch.less similarity index 100% rename from packages/design/src/css/modules/sketch.less rename to packages/lab/src/css/modules/sketch.less diff --git a/packages/design/src/css/modules/split-pane.less b/packages/lab/src/css/modules/split-pane.less similarity index 100% rename from packages/design/src/css/modules/split-pane.less rename to packages/lab/src/css/modules/split-pane.less diff --git a/packages/design/src/css/modules/toolbar.less b/packages/lab/src/css/modules/toolbar.less similarity index 100% rename from packages/design/src/css/modules/toolbar.less rename to packages/lab/src/css/modules/toolbar.less diff --git a/packages/design/src/css/theme/dark.less b/packages/lab/src/css/theme/dark.less similarity index 100% rename from packages/design/src/css/theme/dark.less rename to packages/lab/src/css/theme/dark.less diff --git a/packages/design/src/css/theme/light.less b/packages/lab/src/css/theme/light.less similarity index 100% rename from packages/design/src/css/theme/light.less rename to packages/lab/src/css/theme/light.less diff --git a/packages/design/src/css/variable.less b/packages/lab/src/css/variable.less similarity index 96% rename from packages/design/src/css/variable.less rename to packages/lab/src/css/variable.less index 6eb4c8f..3004932 100644 --- a/packages/design/src/css/variable.less +++ b/packages/lab/src/css/variable.less @@ -1,10 +1,10 @@ -@prefix: idraw-design; +@prefix: idraw-lab; @white: #ffffff; @black: #000000; -// https://ant.design/docs/spec/colors-cn -// https://ant.design/docs/spec/dark-cn +// https://ant.lab/docs/spec/colors-cn +// https://ant.lab/docs/spec/dark-cn @gray-1: #f5f5f5; @gray-2: #f0f0f0; @gray-3: #d9d9d9; diff --git a/packages/design/src/css/variable.ts b/packages/lab/src/css/variable.ts similarity index 79% rename from packages/design/src/css/variable.ts rename to packages/lab/src/css/variable.ts index 12fe636..55ea1d4 100644 --- a/packages/design/src/css/variable.ts +++ b/packages/lab/src/css/variable.ts @@ -1,4 +1,4 @@ -export const PREFIX = 'idraw-design'; +export const PREFIX = 'idraw-lab'; export function createPrefixName(modName: string) { return (...args: string[]) => { diff --git a/packages/design/src/data.ts b/packages/lab/src/data.ts similarity index 100% rename from packages/design/src/data.ts rename to packages/lab/src/data.ts diff --git a/packages/design/src/icons/dark.tsx b/packages/lab/src/icons/dark.tsx similarity index 100% rename from packages/design/src/icons/dark.tsx rename to packages/lab/src/icons/dark.tsx diff --git a/packages/design/src/icons/hand.tsx b/packages/lab/src/icons/hand.tsx similarity index 100% rename from packages/design/src/icons/hand.tsx rename to packages/lab/src/icons/hand.tsx diff --git a/packages/design/src/icons/layer.tsx b/packages/lab/src/icons/layer.tsx similarity index 100% rename from packages/design/src/icons/layer.tsx rename to packages/lab/src/icons/layer.tsx diff --git a/packages/design/src/icons/light.tsx b/packages/lab/src/icons/light.tsx similarity index 100% rename from packages/design/src/icons/light.tsx rename to packages/lab/src/icons/light.tsx diff --git a/packages/design/src/icons/more.tsx b/packages/lab/src/icons/more.tsx similarity index 100% rename from packages/design/src/icons/more.tsx rename to packages/lab/src/icons/more.tsx diff --git a/packages/design/src/icons/mouse.tsx b/packages/lab/src/icons/mouse.tsx similarity index 100% rename from packages/design/src/icons/mouse.tsx rename to packages/lab/src/icons/mouse.tsx diff --git a/packages/design/src/icons/pen.tsx b/packages/lab/src/icons/pen.tsx similarity index 100% rename from packages/design/src/icons/pen.tsx rename to packages/lab/src/icons/pen.tsx diff --git a/packages/design/src/icons/scale.tsx b/packages/lab/src/icons/scale.tsx similarity index 100% rename from packages/design/src/icons/scale.tsx rename to packages/lab/src/icons/scale.tsx diff --git a/packages/design/src/icons/setting.tsx b/packages/lab/src/icons/setting.tsx similarity index 100% rename from packages/design/src/icons/setting.tsx rename to packages/lab/src/icons/setting.tsx diff --git a/packages/design/src/icons/util/index.ts b/packages/lab/src/icons/util/index.ts similarity index 100% rename from packages/design/src/icons/util/index.ts rename to packages/lab/src/icons/util/index.ts diff --git a/packages/design/src/index.tsx b/packages/lab/src/index.tsx similarity index 64% rename from packages/design/src/index.tsx rename to packages/lab/src/index.tsx index 474ba33..7144197 100644 --- a/packages/design/src/index.tsx +++ b/packages/lab/src/index.tsx @@ -4,33 +4,33 @@ import theme from 'antd/es/theme'; import classnames from 'classnames'; import { Dashboard } from './modules'; import { createPrefixName } from './css'; -import { Provider, createDesignContextState, createDesignReducer } from './context'; -import type { DesignData } from './types'; +import { Provider, createLabContextState, createLabReducer } from './context'; +import type { LabData } from './types'; import type { DashboardProps } from './modules'; import './css/index.less'; const themeName = 'theme'; const themePrefixName = createPrefixName(themeName); -export type DesignProps = DashboardProps & { - designData?: DesignData; +export type LabProps = DashboardProps & { + labData?: LabData; locale?: string; // TODO themeMode?: 'light' | 'dark'; }; -export const Design = (props: DesignProps) => { - const { width = 1000, height = 600, style, className, designData, themeMode } = props; +export const Lab = (props: LabProps) => { + const { width = 1000, height = 600, style, className, labData, themeMode } = props; - const [state, dispatch] = useReducer(createDesignReducer, createDesignContextState({ designData, themeMode })); + const [state, dispatch] = useReducer(createLabReducer, createLabContextState({ labData, themeMode })); useEffect(() => { - if (designData) { + if (labData) { dispatch({ - type: 'updateDesignData', - payload: { designData } + type: 'updateLabData', + payload: { labData } }); } - }, [designData]); + }, [labData]); return ( diff --git a/packages/design/src/modules/_mod/index.tsx b/packages/lab/src/modules/_mod/index.tsx similarity index 100% rename from packages/design/src/modules/_mod/index.tsx rename to packages/lab/src/modules/_mod/index.tsx diff --git a/packages/design/src/modules/dashboard/index.tsx b/packages/lab/src/modules/dashboard/index.tsx similarity index 100% rename from packages/design/src/modules/dashboard/index.tsx rename to packages/lab/src/modules/dashboard/index.tsx diff --git a/packages/design/src/modules/header/index.tsx b/packages/lab/src/modules/header/index.tsx similarity index 97% rename from packages/design/src/modules/header/index.tsx rename to packages/lab/src/modules/header/index.tsx index 3e0a83b..3ce3c7a 100644 --- a/packages/design/src/modules/header/index.tsx +++ b/packages/lab/src/modules/header/index.tsx @@ -24,7 +24,7 @@ export const Header = (props: ModProps) => { return (
- @idraw/design + @idraw/lab { items={items} size="small" onTabClick={(activeKey: string) => { - dispatch({ type: 'switchDrawDataType', payload: { activeDrawDataType: activeKey as DesignDrawDataType } }); + dispatch({ type: 'switchDrawDataType', payload: { activeDrawDataType: activeKey as LabDrawDataType } }); }} />
diff --git a/packages/design/src/modules/panel-layer/layer-tree.tsx b/packages/lab/src/modules/panel-layer/layer-tree.tsx similarity index 88% rename from packages/design/src/modules/panel-layer/layer-tree.tsx rename to packages/lab/src/modules/panel-layer/layer-tree.tsx index 93cfb2f..0ab49fc 100644 --- a/packages/design/src/modules/panel-layer/layer-tree.tsx +++ b/packages/lab/src/modules/panel-layer/layer-tree.tsx @@ -8,7 +8,7 @@ import { parseComponentViewTree } from '../../util/component'; import type { CSSProperties } from 'react'; import type { DataNode, TreeProps } from 'antd/es/tree'; -import type { DesignDrawDataType } from '../../types'; +import type { LabDrawDataType } from '../../types'; const { DirectoryTree } = Tree; const baseName = 'layer-tree'; @@ -16,7 +16,7 @@ const baseName = 'layer-tree'; export interface LayerTreeProps { className?: string; style?: CSSProperties; - type: DesignDrawDataType; + type: LabDrawDataType; } export const LayerTree = (props: LayerTreeProps) => { @@ -30,7 +30,7 @@ export const LayerTree = (props: LayerTreeProps) => { let treeData: DataNode[] = []; if (type === 'component') { - treeData = parseComponentViewTree(state?.designData || null); + treeData = parseComponentViewTree(state?.labData || null); } return ( diff --git a/packages/design/src/modules/sketch/index.tsx b/packages/lab/src/modules/sketch/index.tsx similarity index 100% rename from packages/design/src/modules/sketch/index.tsx rename to packages/lab/src/modules/sketch/index.tsx diff --git a/packages/design/src/modules/split-pane/index.tsx b/packages/lab/src/modules/split-pane/index.tsx similarity index 100% rename from packages/design/src/modules/split-pane/index.tsx rename to packages/lab/src/modules/split-pane/index.tsx diff --git a/packages/design/src/modules/split-pane/pane.tsx b/packages/lab/src/modules/split-pane/pane.tsx similarity index 100% rename from packages/design/src/modules/split-pane/pane.tsx rename to packages/lab/src/modules/split-pane/pane.tsx diff --git a/packages/design/src/modules/split-pane/resizer.tsx b/packages/lab/src/modules/split-pane/resizer.tsx similarity index 100% rename from packages/design/src/modules/split-pane/resizer.tsx rename to packages/lab/src/modules/split-pane/resizer.tsx diff --git a/packages/design/src/modules/split-pane/split-pane.tsx b/packages/lab/src/modules/split-pane/split-pane.tsx similarity index 100% rename from packages/design/src/modules/split-pane/split-pane.tsx rename to packages/lab/src/modules/split-pane/split-pane.tsx diff --git a/packages/design/src/modules/toolbar/index.tsx b/packages/lab/src/modules/toolbar/index.tsx similarity index 100% rename from packages/design/src/modules/toolbar/index.tsx rename to packages/lab/src/modules/toolbar/index.tsx diff --git a/packages/lab/src/types/context.ts b/packages/lab/src/types/context.ts new file mode 100644 index 0000000..a6c09d3 --- /dev/null +++ b/packages/lab/src/types/context.ts @@ -0,0 +1,25 @@ +import type { Dispatch } from 'react'; +import type { Data } from '@idraw/types'; +import { LabData, LabDrawDataType } from './data'; + +export interface LabState { + activeDrawDataType: LabDrawDataType; + labData: LabData; + viewDrawData: Data; + viewDrawUUID: string | null; + themeMode: 'light' | 'dark'; +} + +export type LabActionType = 'updateThemeMode' | 'updateLabData' | 'switchDrawDataType'; + +export type LabAction = { + type: LabActionType; + payload: Partial; +}; + +export type LabDispatch = Dispatch; + +export interface LabContext { + state: LabState; + dispatch: LabDispatch; +} diff --git a/packages/lab/src/types/data.ts b/packages/lab/src/types/data.ts new file mode 100644 index 0000000..e8f48aa --- /dev/null +++ b/packages/lab/src/types/data.ts @@ -0,0 +1,48 @@ +import type { Element, ElementType, ElementSize, ElementBaseDesc } from '@idraw/types'; + +export type LabItemType = 'component' | 'component-item' | 'module' | 'page'; + +export type LabDrawDataType = 'component' | 'module' | 'page'; + +export type LabComponentItem = ElementSize & { + uuid: string; + type: 'component-item'; + name: string; + detail?: ElementBaseDesc & { + children: Array | LabComponentItem>; + }; +}; + +export type LabComponent = ElementSize & { + uuid: string; + type: 'component'; + name: string; + detail?: ElementBaseDesc & { + default: LabComponentItem; + variants: LabComponentItem[]; + }; +}; + +export type LabModule = ElementSize & { + uuid: string; + type: 'module'; + name: string; + detail?: ElementBaseDesc & { + children: Array; + }; +}; + +export type LabPage = ElementSize & { + uuid: string; + type: 'page'; + name: string; + detail: ElementBaseDesc & { + children: Array; + }; +}; + +export interface LabData { + components: LabComponent[]; + modules: LabModule[]; + pages: LabPage[]; +} diff --git a/packages/design/src/types/index.ts b/packages/lab/src/types/index.ts similarity index 100% rename from packages/design/src/types/index.ts rename to packages/lab/src/types/index.ts diff --git a/packages/design/src/types/view.ts b/packages/lab/src/types/view.ts similarity index 63% rename from packages/design/src/types/view.ts rename to packages/lab/src/types/view.ts index 03e46aa..ecb5cf2 100644 --- a/packages/design/src/types/view.ts +++ b/packages/lab/src/types/view.ts @@ -1,9 +1,9 @@ import type { ElementType } from '@idraw/types'; -import type { DesignItemType } from './data'; +import type { LabItemType } from './data'; export interface ViewTreeNode { title: string; key: string; - type: DesignItemType | ElementType; + type: LabItemType | ElementType; children?: ViewTreeNode[]; } diff --git a/packages/lab/src/util/component.ts b/packages/lab/src/util/component.ts new file mode 100644 index 0000000..2a41fed --- /dev/null +++ b/packages/lab/src/util/component.ts @@ -0,0 +1,11 @@ +import { ViewTreeNode, LabData, LabComponent } from '../types'; +import { parseComponentToViewTreeNode } from './view-tree'; + +export function parseComponentViewTree(labData: LabData | null): ViewTreeNode[] { + const treeNodes: ViewTreeNode[] = []; + labData?.components?.forEach((comp: LabComponent) => { + const node = parseComponentToViewTreeNode(comp); + treeNodes.push(node); + }); + return treeNodes; +} diff --git a/packages/design/src/util/view-data.ts b/packages/lab/src/util/view-data.ts similarity index 80% rename from packages/design/src/util/view-data.ts rename to packages/lab/src/util/view-data.ts index 5dee51e..facd2ee 100644 --- a/packages/design/src/util/view-data.ts +++ b/packages/lab/src/util/view-data.ts @@ -1,10 +1,10 @@ import { deepClone } from '@idraw/util'; import type { Data, Element, ElementType, ElementBaseDesc } from '@idraw/types'; -import type { DesignComponent, DesignComponentItem } from '../types'; +import type { LabComponent, LabComponentItem } from '../types'; const baseDescKeys = ['borderWidth', 'borderColor', 'borderRadius', 'shadowColor', 'shadowOffsetX', 'shadowOffsetY', 'shadowBlur', 'color', 'bgColor']; -function parseElementBaseDesc(elem: DesignComponent | DesignComponentItem | Element): ElementBaseDesc { +function parseElementBaseDesc(elem: LabComponent | LabComponentItem | Element): ElementBaseDesc { const baseDesc: ElementBaseDesc = {}; if (elem?.detail) { Object.keys(elem.detail).forEach((name: string) => { @@ -16,7 +16,7 @@ function parseElementBaseDesc(elem: DesignComponent | DesignComponentItem | Elem return baseDesc; } -function parseComponentItemToElement(item: DesignComponentItem): Element<'group'> { +function parseComponentItemToElement(item: LabComponentItem): Element<'group'> { const elem: Element<'group'> = { uuid: item.uuid, name: item.name, @@ -45,7 +45,7 @@ function parseComponentItemToElement(item: DesignComponentItem): Element<'group' return elem; } -function parseComponentToElement(comp: DesignComponent): Element<'group'> { +function parseComponentToElement(comp: LabComponent): Element<'group'> { const elem: Element<'group'> = { uuid: comp.uuid, name: comp.name, @@ -75,11 +75,11 @@ function parseComponentToElement(comp: DesignComponent): Element<'group'> { return elem; } -export function parseComponentsToDrawData(components: DesignComponent[]): Data { +export function parseComponentsToDrawData(components: LabComponent[]): Data { const data: Data = { elements: [] }; - components.forEach((comp: DesignComponent) => { + components.forEach((comp: LabComponent) => { const elem = parseComponentToElement(comp); data.elements.push(elem); }); diff --git a/packages/design/src/util/view-tree.ts b/packages/lab/src/util/view-tree.ts similarity index 81% rename from packages/design/src/util/view-tree.ts rename to packages/lab/src/util/view-tree.ts index bb11357..f64eb54 100644 --- a/packages/design/src/util/view-tree.ts +++ b/packages/lab/src/util/view-tree.ts @@ -1,5 +1,5 @@ import type { Element, ElementType } from '@idraw/types'; -import { ViewTreeNode, DesignComponent, DesignComponentItem } from '../types'; +import { ViewTreeNode, LabComponent, LabComponentItem } from '../types'; function parseElementToViewTreeNode(elem: Element): ViewTreeNode | null { let treeNode: ViewTreeNode | null = null; @@ -22,7 +22,7 @@ function parseElementToViewTreeNode(elem: Element): ViewTreeNode | return treeNode; } -function parseComponentItemToViewTreeNode(comp: DesignComponentItem): ViewTreeNode { +function parseComponentItemToViewTreeNode(comp: LabComponentItem): ViewTreeNode { const treeNode: Required = { key: comp.uuid, title: comp.name || 'Unamed', @@ -34,7 +34,7 @@ function parseComponentItemToViewTreeNode(comp: DesignComponentItem): ViewTreeNo comp.detail.children.forEach((child) => { let childNode: ViewTreeNode | null = null; if (child.type === 'component') { - childNode = parseComponentToViewTreeNode(child as DesignComponent); + childNode = parseComponentToViewTreeNode(child as LabComponent); } else { childNode = parseElementToViewTreeNode(child as Element); } @@ -46,7 +46,7 @@ function parseComponentItemToViewTreeNode(comp: DesignComponentItem): ViewTreeNo return treeNode; } -export function parseComponentToViewTreeNode(comp: DesignComponent): ViewTreeNode { +export function parseComponentToViewTreeNode(comp: LabComponent): ViewTreeNode { const treeNode: Required = { key: comp.uuid, title: comp.name || 'Unamed', @@ -60,7 +60,7 @@ export function parseComponentToViewTreeNode(comp: DesignComponent): ViewTreeNod } if (Array.isArray(comp?.detail?.variants)) { - comp?.detail?.variants?.forEach((child: DesignComponentItem) => { + comp?.detail?.variants?.forEach((child: LabComponentItem) => { const node = parseComponentItemToViewTreeNode(child); treeNode.children.push(node); });