diff --git a/README.md b/README.md index b144f20..9ac76b3 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,11 @@ The preview of `@idraw/studo`.

- image - image + idraw-studio-light-theme + + idraw-studio-dark-theme +

## Usage diff --git a/package.json b/package.json index e066188..ae91c3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": false, - "version": "0.4.0-alpha.8", + "version": "0.4.0-alpha.9", "workspaces": [ "packages/*" ], @@ -19,7 +19,7 @@ "upgrade:version": "vite-node ./scripts/upgrade-version.ts && pnpm i" }, "dependencies": { - "idraw": "0.4.0-beta.7", + "idraw": "0.4.0-beta.9", "antd": "5.12.1" }, "devDependencies": { diff --git a/packages/studio-base/package.json b/packages/studio-base/package.json index de77d12..5552fe5 100644 --- a/packages/studio-base/package.json +++ b/packages/studio-base/package.json @@ -1,6 +1,6 @@ { "name": "@idraw/studio-base", - "version": "0.4.0-alpha.8", + "version": "0.4.0-alpha.9", "main": "dist/index.js", "module": "dist/index.js", "types": "dist/index.d.ts", @@ -22,7 +22,7 @@ "peerDependencies": { "antd": "^5.12.1", "classnames": "^2.3.2", - "idraw": "^0.4.0-beta.7", + "idraw": "^0.4.0-beta.9", "react": "^18.2.0", "react-color": "^2.19.3", "react-dom": "^18.2.0" diff --git a/packages/studio-base/src/icons/app-store.tsx b/packages/studio-base/src/icons/app-store.tsx new file mode 100644 index 0000000..a564702 --- /dev/null +++ b/packages/studio-base/src/icons/app-store.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/database.tsx b/packages/studio-base/src/icons/database.tsx new file mode 100644 index 0000000..7a8b7a9 --- /dev/null +++ b/packages/studio-base/src/icons/database.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/experiment.tsx b/packages/studio-base/src/icons/experiment.tsx new file mode 100644 index 0000000..8b48706 --- /dev/null +++ b/packages/studio-base/src/icons/experiment.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/home.tsx b/packages/studio-base/src/icons/home.tsx new file mode 100644 index 0000000..7569756 --- /dev/null +++ b/packages/studio-base/src/icons/home.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/indent.tsx b/packages/studio-base/src/icons/indent.tsx new file mode 100644 index 0000000..9ce997f --- /dev/null +++ b/packages/studio-base/src/icons/indent.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/index.ts b/packages/studio-base/src/icons/index.ts index 3eb1204..09de87d 100644 --- a/packages/studio-base/src/icons/index.ts +++ b/packages/studio-base/src/icons/index.ts @@ -3,6 +3,7 @@ import IconAlignLeft from './align-left'; import IconAlignRight from './align-right'; import IconArrowRight from './arrow-right'; import IconApp from './app'; +import IconAppStore from './app-store'; import IconBorderBottom from './border-bottom'; import IconBorderDash from './border-dash'; import IconBorderLeft from './border-left'; @@ -18,17 +19,21 @@ import IconCornerRadiusTopLeft from './corner-radius-top-left'; import IconCornerRadiusTopRight from './corner-radius-top-right'; import IconCornerRadius from './corner-radius'; import IconDark from './dark'; +import IconDatabase from './database'; import IconDelete from './delete'; import IconDoubleCircle from './double-circle'; import IconDoubleLeft from './double-left'; import IconDown from './down'; import IconDrag from './drag'; import IconEdit from './edit'; +import IconExperiment from './experiment'; import IconFile from './file'; import IconFullCornerRadius from './full-corner-radius'; import IconGroup from './group'; import IconHand from './hand'; +import IconHome from './home'; import IconHTML from './html'; +import IconIndent from './indent'; import IconImage from './image'; import IconInvisible from './invisible'; import IconLayer from './layer'; @@ -37,8 +42,10 @@ import IconLight from './light'; import IconLock from './lock'; import IconMore from './more'; import IconMouse from './mouse'; +import IconOutdent from './outdent'; import IconPath from './path'; import IconPen from './pen'; +import IconPlus from './plus'; import IconPosition from './position'; import IconRect from './rect'; import IconResize from './resize'; @@ -61,6 +68,7 @@ export { IconAlignLeft, IconAlignRight, IconApp, + IconAppStore, IconArrowRight, IconBorderBottom, IconBorderDash, @@ -77,17 +85,21 @@ export { IconCornerRadiusTopRight, IconCornerRadius, IconDark, + IconDatabase, IconDelete, IconDoubleCircle, IconDoubleLeft, IconDown, IconDrag, IconEdit, + IconExperiment, IconFile, IconFullCornerRadius, IconGroup, IconHand, + IconHome, IconHTML, + IconIndent, IconImage, IconInvisible, IconLayer, @@ -96,8 +108,10 @@ export { IconLock, IconMore, IconMouse, + IconOutdent, IconPath, IconPen, + IconPlus, IconPosition, IconRect, IconResize, diff --git a/packages/studio-base/src/icons/outdent.tsx b/packages/studio-base/src/icons/outdent.tsx new file mode 100644 index 0000000..a549643 --- /dev/null +++ b/packages/studio-base/src/icons/outdent.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/icons/plus.tsx b/packages/studio-base/src/icons/plus.tsx new file mode 100644 index 0000000..72f711b --- /dev/null +++ b/packages/studio-base/src/icons/plus.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { IconWrapper } from './util'; +import type { IconWrapperProps } from './util'; + +const Icon = (props: IconWrapperProps) => { + return ( + + + + + + + ); +}; + +export default Icon; diff --git a/packages/studio-base/src/index.ts b/packages/studio-base/src/index.ts index d8c8076..bd42dee 100644 --- a/packages/studio-base/src/index.ts +++ b/packages/studio-base/src/index.ts @@ -18,6 +18,7 @@ export { IconAlignLeft, IconAlignRight, IconApp, + IconAppStore, IconArrowRight, IconBorderBottom, IconBorderDash, @@ -34,17 +35,21 @@ export { IconCornerRadiusTopRight, IconCornerRadius, IconDark, + IconDatabase, IconDelete, IconDoubleCircle, IconDoubleLeft, IconDown, IconDrag, IconEdit, + IconExperiment, IconFile, IconFullCornerRadius, IconGroup, IconHand, + IconHome, IconHTML, + IconIndent, IconImage, IconInvisible, IconLayer, @@ -53,8 +58,10 @@ export { IconLock, IconMore, IconMouse, + IconOutdent, IconPath, IconPen, + IconPlus, IconPosition, IconRect, IconResize, diff --git a/packages/studio/README.md b/packages/studio/README.md index b144f20..9ac76b3 100644 --- a/packages/studio/README.md +++ b/packages/studio/README.md @@ -22,9 +22,11 @@ The preview of `@idraw/studo`.

- image - image + idraw-studio-light-theme + + idraw-studio-dark-theme +

## Usage diff --git a/packages/studio/package.json b/packages/studio/package.json index 1af5f27..4158866 100644 --- a/packages/studio/package.json +++ b/packages/studio/package.json @@ -1,6 +1,6 @@ { "name": "@idraw/studio", - "version": "0.4.0-alpha.8", + "version": "0.4.0-alpha.9", "main": "dist/index.js", "module": "dist/index.js", "types": "dist/index.d.ts", @@ -20,13 +20,13 @@ "author": "chenshenhai", "license": "MIT", "dependencies": { - "@idraw/studio-base": "^0.4.0-alpha.8", + "@idraw/studio-base": "^0.4.0-alpha.9", "classnames": "^2.3.2", "is-hotkey": "^0.2.0" }, "peerDependencies": { "antd": "^5.12.1", - "idraw": "^0.4.0-beta.7", + "idraw": "^0.4.0-beta.9", "react": "^18.2.0", "react-color": "^2.19.3", "react-dom": "^18.2.0" diff --git a/packages/studio/src/index.ts b/packages/studio/src/index.ts index 62904c2..a3d32b9 100644 --- a/packages/studio/src/index.ts +++ b/packages/studio/src/index.ts @@ -1,6 +1,6 @@ export * from '@idraw/studio-base'; export { Studio } from './studio'; -export { cloneEditingDataByPosition } from './util/data'; +export { cloneEditingDataByPosition, updateEditingDataChildrenToData } from './util/data'; export { pickJSONFile } from './util/file'; export type { StudioProps, StudioImperativeHandle, StudioActionType, StudioState, SharedStore, SharedEvent, StudioThemeMode } from './types'; export { ExportFile, exportFileDialogWidth } from './modules/export-image-file'; diff --git a/packages/studio/src/studio.tsx b/packages/studio/src/studio.tsx index 2fc2696..72b2cc7 100644 --- a/packages/studio/src/studio.tsx +++ b/packages/studio/src/studio.tsx @@ -103,6 +103,16 @@ export const Studio = React.forwardRef((props: StudioProps, ref: any) => { sharedEvent?.trigger('changeLocale', { locale: state.localeCode }); }, [state.localeCode]); + useEffect(() => { + const sharedEvent = refSharedEvent.current; + sharedEvent?.trigger('trackDataChange', { data: state.data }); + }, [state.data]); + + useEffect(() => { + const sharedEvent = refSharedEvent.current; + sharedEvent?.trigger('trackEditingDataChange', { editingData: state.editingData, editingDataPostion: state.editingDataPostion }); + }, [state.editingData, state.editingDataPostion]); + return useMemo(() => { return ( diff --git a/packages/studio/src/types/lib/shared.ts b/packages/studio/src/types/lib/shared.ts index 5dcde92..a384f49 100644 --- a/packages/studio/src/types/lib/shared.ts +++ b/packages/studio/src/types/lib/shared.ts @@ -47,6 +47,8 @@ export interface SharedEventMap { scrollToLayer: { uuid: string }; switchTheme: { theme: StudioThemeMode }; changeLocale: { locale: LocaleCode }; + trackDataChange: { data: Data }; + trackEditingDataChange: { editingData: Data; editingDataPostion: ElementPosition }; } export type SharedEvent = EventEmitter; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60e2c7c..68d201b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: 5.12.1 version: 5.12.1(react-dom@18.2.0)(react@18.2.0) idraw: - specifier: 0.4.0-beta.7 - version: 0.4.0-beta.7 + specifier: 0.4.0-beta.9 + version: 0.4.0-beta.9 devDependencies: '@ant-design/icons': specifier: ^5.2.6 @@ -160,7 +160,7 @@ importers: packages/studio: dependencies: '@idraw/studio-base': - specifier: ^0.4.0-alpha.8 + specifier: ^0.4.0-alpha.9 version: link:../studio-base antd: specifier: ^5.12.1 @@ -169,8 +169,8 @@ importers: specifier: ^2.3.2 version: 2.3.2 idraw: - specifier: ^0.4.0-beta.7 - version: 0.4.0-beta.7 + specifier: ^0.4.0-beta.9 + version: 0.4.0-beta.9 is-hotkey: specifier: ^0.2.0 version: 0.2.0 @@ -206,8 +206,8 @@ importers: specifier: ^2.3.2 version: 2.3.2 idraw: - specifier: ^0.4.0-beta.7 - version: 0.4.0-beta.7 + specifier: ^0.4.0-beta.9 + version: 0.4.0-beta.9 react: specifier: ^18.2.0 version: 18.2.0 @@ -2022,42 +2022,42 @@ packages: react: 18.2.0 dev: false - /@idraw/board@0.4.0-beta.7(@idraw/renderer@0.4.0-beta.7)(@idraw/util@0.4.0-beta.7): - resolution: {integrity: sha512-GOXdu1WxXY2/Hn+ztisi3Ti4cLnIlSVulmgyP0Ik5cg1OKAfNwmVBADUUuijO2PCeIsvWFynHshQIkanU6QfEQ==} + /@idraw/board@0.4.0-beta.9(@idraw/renderer@0.4.0-beta.9)(@idraw/util@0.4.0-beta.9): + resolution: {integrity: sha512-tKGvTvGQVOYJ0F4QTaRISyjA/D1ibgi0lT+bjdRzbFSpalk7nu/ZgzYMn5988Q9b6uogWBOZ/NKYgiZpaF3AAw==} peerDependencies: - '@idraw/renderer': ^0.4.0-beta.7 - '@idraw/util': ^0.4.0-beta.7 + '@idraw/renderer': ^0.4.0-beta.9 + '@idraw/util': ^0.4.0-beta.9 dependencies: - '@idraw/renderer': 0.4.0-beta.7(@idraw/util@0.4.0-beta.7) - '@idraw/util': 0.4.0-beta.7 + '@idraw/renderer': 0.4.0-beta.9(@idraw/util@0.4.0-beta.9) + '@idraw/util': 0.4.0-beta.9 dev: false - /@idraw/core@0.4.0-beta.7(@idraw/board@0.4.0-beta.7)(@idraw/renderer@0.4.0-beta.7)(@idraw/util@0.4.0-beta.7): - resolution: {integrity: sha512-TSxE2Hk7F8mq1DxZ6FGtF0Nx+rpVzn9IWkVrDsRVYS6FxeQVooqAEgS3BFPnYSUEySxQdqyXzT5bnpthfAqZeg==} + /@idraw/core@0.4.0-beta.9(@idraw/board@0.4.0-beta.9)(@idraw/renderer@0.4.0-beta.9)(@idraw/util@0.4.0-beta.9): + resolution: {integrity: sha512-5qdEGTuqwc5hgl46RO+QCgYw7ly+0mV1pf6cl2ebeb3spsPjbp9etnV5Gc751TTg7Mb/KEGNJzOnNaRgJxXO7g==} peerDependencies: - '@idraw/board': ^0.4.0-beta.7 - '@idraw/renderer': ^0.4.0-beta.7 - '@idraw/util': ^0.4.0-beta.7 + '@idraw/board': ^0.4.0-beta.9 + '@idraw/renderer': ^0.4.0-beta.9 + '@idraw/util': ^0.4.0-beta.9 dependencies: - '@idraw/board': 0.4.0-beta.7(@idraw/renderer@0.4.0-beta.7)(@idraw/util@0.4.0-beta.7) - '@idraw/renderer': 0.4.0-beta.7(@idraw/util@0.4.0-beta.7) - '@idraw/util': 0.4.0-beta.7 + '@idraw/board': 0.4.0-beta.9(@idraw/renderer@0.4.0-beta.9)(@idraw/util@0.4.0-beta.9) + '@idraw/renderer': 0.4.0-beta.9(@idraw/util@0.4.0-beta.9) + '@idraw/util': 0.4.0-beta.9 dev: false - /@idraw/renderer@0.4.0-beta.7(@idraw/util@0.4.0-beta.7): - resolution: {integrity: sha512-RxVn3KCdGjLUXQePXEn9NQL1vXD9q/UfPr7F9wbqRskaz+vseswbZh/tE4yuPI91Gupfgc5MaeQoboOuLJGqAw==} + /@idraw/renderer@0.4.0-beta.9(@idraw/util@0.4.0-beta.9): + resolution: {integrity: sha512-toZysIG1g6jSCHm+7yH4+VL6goHaxFa+vXfeXw/Mh6rDT7ITSv0IJxdNgeFprI0u4lf7MTP7F6GCDu/7/dkgBA==} peerDependencies: - '@idraw/util': ^0.4.0-beta.7 + '@idraw/util': ^0.4.0-beta.9 dependencies: - '@idraw/util': 0.4.0-beta.7 + '@idraw/util': 0.4.0-beta.9 dev: false - /@idraw/types@0.4.0-beta.7: - resolution: {integrity: sha512-WT20KbPXAZ4OoIycGVKu8TUOr0yV/zGrMFD/uBpXalM/KDXUeS7ciXc4DhVSeof7KZ/kNcC/hyu1LHO4S+2f1g==} + /@idraw/types@0.4.0-beta.9: + resolution: {integrity: sha512-GMkyvbBeXyaPyGFREB1rAtyzy/NmLd74G62R0AhpPput33fh923ZwvtMSlYyfX7P+XE0pbDAyn+jdReq0TBLmg==} dev: false - /@idraw/util@0.4.0-beta.7: - resolution: {integrity: sha512-lSdf3ZZl0BQ7CZ3NhvTlQNeF/r0Vat92lMPu/bExVgtvOD02Ylv4SZ1BXqNTsfyORcTOgQMNJJFPztItTib0PQ==} + /@idraw/util@0.4.0-beta.9: + resolution: {integrity: sha512-Tf9pi2cJ9YTjmRueGEgSqW29lt/eHJ64W7RohT0Yb7JI9MjB90jPUkVPzny/Pr04aVCTTsLOU7hB2MflOrDW8g==} dev: false /@isaacs/cliui@8.0.2: @@ -4877,14 +4877,14 @@ packages: safer-buffer: 2.1.2 dev: true - /idraw@0.4.0-beta.7: - resolution: {integrity: sha512-EVs7ggoPXOTGlXvBr1iBUIYjMtO4SRh8LxeOgaf+tn1k+nYLQXL3D5ydyT4b0AdvkC/dG0Bld+Q8tYguw65/Ew==} + /idraw@0.4.0-beta.9: + resolution: {integrity: sha512-T7z2nBmtoHopPboEBFdqwRM08QBKPSCsh3FA4Gi8wOctbFZrC9t8jpsnaYjn9/9u6H2var09Xk9mhPZYDLS8Qw==} dependencies: - '@idraw/board': 0.4.0-beta.7(@idraw/renderer@0.4.0-beta.7)(@idraw/util@0.4.0-beta.7) - '@idraw/core': 0.4.0-beta.7(@idraw/board@0.4.0-beta.7)(@idraw/renderer@0.4.0-beta.7)(@idraw/util@0.4.0-beta.7) - '@idraw/renderer': 0.4.0-beta.7(@idraw/util@0.4.0-beta.7) - '@idraw/types': 0.4.0-beta.7 - '@idraw/util': 0.4.0-beta.7 + '@idraw/board': 0.4.0-beta.9(@idraw/renderer@0.4.0-beta.9)(@idraw/util@0.4.0-beta.9) + '@idraw/core': 0.4.0-beta.9(@idraw/board@0.4.0-beta.9)(@idraw/renderer@0.4.0-beta.9)(@idraw/util@0.4.0-beta.9) + '@idraw/renderer': 0.4.0-beta.9(@idraw/util@0.4.0-beta.9) + '@idraw/types': 0.4.0-beta.9 + '@idraw/util': 0.4.0-beta.9 dev: false /ieee754@1.2.1: