@hankchen/canvas-editor 0.1.0 → 0.2.0

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/dist/index.d.ts CHANGED
@@ -932,6 +932,35 @@ interface EditorShortcutInput {
932
932
  */
933
933
  declare function classifyEditorShortcut(input: EditorShortcutInput, bindings?: readonly EditorShortcutBinding[]): EditorShortcutAction | null;
934
934
 
935
+ /**
936
+ * 编辑器状态切片与偏好(project-data 工单 01,spec §3/§5):内核导出的「单画布
937
+ * 切片 + 偏好 + schemaVersion 常量」三件,EditorSession 实例方法(editor.ts)消费。
938
+ *
939
+ * 分层纪律(内核帧盲):帧名/帧缓冲/文档是宿主领域——frames 容器(帧名 → 切片)
940
+ * 与完整快照聚合类型(schemaVersion/frames/prefs)归宿主拼装,宿主只透传切片
941
+ * 内容、不解释 guides/lockedPaths 语义;本模块只出两型 + 版本常量 + restore 的
942
+ * 轻结构校验。零契约面:切片不进 wire、不进历史栈、不是第二种文档格式——graph
943
+ * 仍是内核唯一保存物。
944
+ */
945
+
946
+ /** 快照格式版本:随格式演化单调递增;v1 = 1(宽容读贯彻,restore 不分支此值) */
947
+ declare const EDITOR_STATE_SCHEMA_VERSION = 1;
948
+ /** 帧作用域切片:当前打开画布的编辑器状态(工程数据快照的 frames[帧名] 值) */
949
+ interface CanvasEditorState {
950
+ /**
951
+ * 参考线(场景坐标):id 是会话内自增值、无持久语义——export 原样带出,
952
+ * restore 端清空后逐条 addGuide 重取号,快照 id 出方向即失效。
953
+ */
954
+ guides: readonly Guide[];
955
+ /** 锁定根层路径集合(随工程数据持久化,仍零 wire 面) */
956
+ lockedPaths: readonly LayerPath[];
957
+ }
958
+ /** 编辑器级偏好:跨文档、跨会话内核自持(工程数据快照的 prefs 桶,分类学终裁两项) */
959
+ interface EditorPrefsState {
960
+ rulersVisible: boolean;
961
+ anchorExpanded: boolean;
962
+ }
963
+
935
964
  /**
936
965
  * 字体清单(工单 13):编辑会话级的字体可选清单——「清单 ≠ 物化」,core 只持有
937
966
  * 引用与展示名,字体的加载仍走渲染端物化管线(FontFace 注册),本模块零 I/O。
@@ -1144,8 +1173,13 @@ declare class EditorSession {
1144
1173
  setDevicePixelRatio(dpr: number): void;
1145
1174
  setSurfaceSize(width: number, height: number): void;
1146
1175
  getSurfaceSize(): Readonly<Size>;
1147
- /** 打开/替换文档(转发 store;解码在宿主侧完成,内核只消费领域结构) */
1148
- openDocument(canvas: Canvas): void;
1176
+ /**
1177
+ * 打开/替换文档(转发 store;解码在宿主侧完成,内核只消费领域结构)。
1178
+ * state 传切片即按 restoreEditorState 同一管线原子应用(reset → apply 切片 →
1179
+ * prune)——「开了就恢复」,宿主切帧处不可能忘记重放;切片形状不合法整体拒
1180
+ * (画布照常以默认态打开),现网单参调用零破坏。
1181
+ */
1182
+ openDocument(canvas: Canvas, state?: CanvasEditorState): void;
1149
1183
  /**
1150
1184
  * 预览视图(只读衍生):模板态表格在视图中获得一行预览行(文本格 = 表达式
1151
1185
  * 原文、标记图片/二维码格走占位盒),渲染/命中/导出据此呈现「一行输出效果」;
@@ -1422,6 +1456,13 @@ declare class EditorSession {
1422
1456
  }): Guide | null;
1423
1457
  /** 删除参考线(拖回标尺语义):按 id 移除;未知 id 空转返回 false */
1424
1458
  removeGuide(id: number): boolean;
1459
+ /**
1460
+ * 移动参考线(抓取拖动再定位的写入口):按 id 原地改位(取向不变),
1461
+ * ui 分支同门——不进历史、不写 graph(ADR 0012),广播 guides 分支通知
1462
+ * (覆盖层失效重绘)。非有限坐标/未知 id 空转返回 false(不产生通知);
1463
+ * 同位空转返回 true(无变化不惊动订阅方——抓取未动的松手路径)。
1464
+ */
1465
+ updateGuide(id: number, position: number): boolean;
1425
1466
  /**
1426
1467
  * 清空全部参考线(工具栏「清空参考线」写入口,工单 03 消费):ui 分支整体置空,
1427
1468
  * 与 removeGuide 同型广播 guides 分支通知(覆盖层失效重绘)。会话级语义同门——
@@ -1432,6 +1473,34 @@ declare class EditorSession {
1432
1473
  listGuides(): readonly Guide[];
1433
1474
  /** 标尺显隐开关(⇧R 分派口):翻转 ui 偏好,不进历史 */
1434
1475
  toggleRulers(): void;
1476
+ /**
1477
+ * 导出当前打开画布的编辑器状态切片:guides 原样带出(id 是会话内自增值,
1478
+ * 宿主不持久化其语义——restore 端重排重取号)、lockedPaths 原样。无文档也可
1479
+ * 导出(ui 分支自成事实,addGuide 无 doc 守卫同门)。内核帧盲:宿主把各帧
1480
+ * 切片按帧名组装成 frames 容器,加上 schemaVersion(EDITOR_STATE_SCHEMA_VERSION)
1481
+ * 与 getEditorPrefs() 才是完整工程数据快照,经宿主层存储——容器不进内核。
1482
+ */
1483
+ exportEditorState(): CanvasEditorState;
1484
+ /**
1485
+ * 恢复当前画布的状态切片(prefs 不在此——内核跨 openDocument 自持):轻结构
1486
+ * 校验(形状不合法整体拒,返 false 宿主记因)→ 整体替换 lockedPaths →
1487
+ * pruneDanglingPaths(悬空锁路径剔除——合法但内容悬空不算拒,prune 兜底)→
1488
+ * guide id 重排(清空后逐条 addGuide 重取号:快照 id 无持久语义,原样入栈必
1489
+ * 与新会话 guideIdSeq 撞号致 removeGuide 误删)。不进历史、不写 graph(红线
1490
+ * 同门)。
1491
+ */
1492
+ restoreEditorState(state: CanvasEditorState): boolean;
1493
+ /**
1494
+ * 只读偏好(保存 prefs 的读取口):与 store.ui 同源,给宿主一个不用下钻
1495
+ * store 的口。读 = getEditorPrefs,写 = applyEditorPrefs,对称成对;帧切片
1496
+ * 走 restoreEditorState,两不相混。
1497
+ */
1498
+ getEditorPrefs(): EditorPrefsState;
1499
+ /**
1500
+ * 应用偏好(会话建立时一次性,跨会话恢复 prefs 的写入口):整体替换
1501
+ * rulersVisible/anchorExpanded,不进历史;值等写入经 store 短路零通知。
1502
+ */
1503
+ applyEditorPrefs(prefs: EditorPrefsState): void;
1435
1504
  /**
1436
1505
  * 对齐画布 action 族(对齐画布/贴边/贴角,ADR 0011):把 path 处图层盒整体
1437
1506
  * 对齐到画布几何——mode 十种:贴边 left/right/top/bottom(零边距)、居中
@@ -2675,4 +2744,4 @@ declare function memoizeTextPolicies(policies?: TextLayoutPolicies, options?: Me
2675
2744
  */
2676
2745
  declare const PACKAGE_NAME: "@hankchen/canvas-editor";
2677
2746
 
2678
- export { ALIGN_CORNER_MARGIN_PX, ALT_DRAG_DEAD_ZONE_SCREEN_PX, ARM_CREATE_LAYER_TYPES, type AlignBoxGeometry, type AlignToCanvasMode, type AlignToCanvasOptions, type ArmCreateShortcutAction, CREATE_DEAD_ZONE_SCREEN_PX, type CreateGesture, type CreateRectResult, DEFAULT_EDITOR_SHORTCUTS, DEFAULT_ZOOM_BOUNDS, type DeletedLayerRef, type DocRecipe, type DragGesture, type EditorChange, EditorSession, type EditorSessionOptions, type EditorShortcutAction, type EditorShortcutBinding, type EditorShortcutGroup, type EditorShortcutInput, EditorStore, type EditorUi, type ExpressionCandidate, type ExpressionCandidateQuery, type ExpressionCandidateResult, type ExpressionContextKind, type ExpressionPathHead, type ExpressionPathParse, type ExpressionScan, type ExpressionScanFragment, type ExpressionScanLiteral, type ExpressionScanOpen, type ExpressionScanPart, type ExpressionSchemaChildEntry, type ExpressionSchemaChildView, type ExpressionSchemaDiagnostic, type ExpressionSchemaDiagnosticCode, type ExpressionSchemaNode, type ExpressionSchemaParse, type ExpressionSchemaRejectReason, type ExpressionSyntaxError, type FindSession, type FindTextHit, FontCatalog, type FontCatalogEntry, type FrameScheduler, type Guide, type GuideOrientation, type HistoryStep, type HitTestOptions, type InvalidateTarget, type LayerOutlineNode, type LayerOutlineRole, type LayerPath, MAX_HISTORY_STEPS, type MemoTextPoliciesOptions, type MovedSubtreeRef, type OverlayPaintArgs, type OverlayPainter, PACKAGE_NAME, PAN_TO_BOX_MARGIN_PX, PASTE_OFFSET_PX, PHP_TRIM_CHARS, type Point, RESIZE_HANDLES, RESIZE_HANDLE_HIT_PX, RESIZE_MIN_SIZE_PX, type Rect, type ResizeAxes, type ResizeBoxGeometry, type ResizeBoxResult, type ResizeHandle, type ResourceStatus, type ResourceStatusMap, type RowsPathCandidate, type RowsPathCandidateResult, SNAP_THRESHOLD_SCREEN_PX, STYLE_FIELD_KEYS_BY_TYPE, type ShortcutCombo, type Size, type SnapAxis, type SnapAxisSource, type SnapBoxGeometry, type SnapPoints, type SnapResolution, type StyleSnapshot, type TextEditLayout, type TextEditingSession, type TransactOptions, type UploadFile, type UploadHandler, UploadHandlerMissingError, type UploadImagePlacement, type Viewport, WHEEL_ZOOM_STEP, type WheelInput, type WheelIntent, type ZoomBounds, addRootLayerInDraft, addTableCellInDraft, addTableRowInDraft, addTemplateCellInDraft, alignToCanvasTarget, applyStyleFieldsInDraft, buildLayerOutline, canCopyLayerAt, canonicalizeTableSyncInDraft, captureStyleSnapshot, clampZoom, classifyEditorShortcut, classifyWheel, cloneLayerSubtree, convertTableToRowsInDraft, convertTableToTemplateInDraft, createDefaultLayer, createRubberBandRect, createTemplateTable, deleteLayerInDraft, enumerateExpressionCandidates, enumerateRowsPathCandidates, expressionFragmentAtCursor, fitRect, fitViewport, growRowToCellInDraft, handleResizesHeight, handleResizesWidth, hitTest, insertRootLayerAdjacentInDraft, insertRootLayerInDraft, isImageContentUndrawn, isLayerPath, isLockedPath, isRootLayerPath, isRootPasteableType, isTemplateSubtreePath, layerBoxByPath, memoizeTextPolicies, moveGuard, moveRootLayerInDraft, moveTableCellInDraft, moveTableCellToRowInDraft, moveTableRowInDraft, moveTableRowToTableInDraft, nextZoomByWheel, normalizeExpressionSchemaSource, panBy, panToBox, parseExpressionPath, parseExpressionSchema, pastePosition, pathStartsWith, pathsEqual, prepareRootPaste, readSpecField, remapPathAfterSplice, replaceHitsInDraft, resizableAxesAt, resizeBox, resizeHandleAt, resizeHandlePoint, resizeHandlesAt, resizeSnapPoints, resolveLayer, resolveRowSchema, resolveRowsPathStartSchema, resolveSnap, resolveSnapPoints, rootLayerOf, scanExpressionFragments, scanTextMatches, sceneToScreen, schemaChildEntries, schemaNodeAtPath, screenToScene, selectionParentPath, setCellAutoHeightInDraft, snapAxesFromBoxes, snapThresholdScene, snapViewportToPhysicalPixels, syncContentIntoCellInDraft, syncRowWidthInDraft, uploadDisplayName, visibleRootBoxes, writeSpecField, zoomAtPoint };
2747
+ export { ALIGN_CORNER_MARGIN_PX, ALT_DRAG_DEAD_ZONE_SCREEN_PX, ARM_CREATE_LAYER_TYPES, type AlignBoxGeometry, type AlignToCanvasMode, type AlignToCanvasOptions, type ArmCreateShortcutAction, CREATE_DEAD_ZONE_SCREEN_PX, type CanvasEditorState, type CreateGesture, type CreateRectResult, DEFAULT_EDITOR_SHORTCUTS, DEFAULT_ZOOM_BOUNDS, type DeletedLayerRef, type DocRecipe, type DragGesture, EDITOR_STATE_SCHEMA_VERSION, type EditorChange, type EditorPrefsState, EditorSession, type EditorSessionOptions, type EditorShortcutAction, type EditorShortcutBinding, type EditorShortcutGroup, type EditorShortcutInput, EditorStore, type EditorUi, type ExpressionCandidate, type ExpressionCandidateQuery, type ExpressionCandidateResult, type ExpressionContextKind, type ExpressionPathHead, type ExpressionPathParse, type ExpressionScan, type ExpressionScanFragment, type ExpressionScanLiteral, type ExpressionScanOpen, type ExpressionScanPart, type ExpressionSchemaChildEntry, type ExpressionSchemaChildView, type ExpressionSchemaDiagnostic, type ExpressionSchemaDiagnosticCode, type ExpressionSchemaNode, type ExpressionSchemaParse, type ExpressionSchemaRejectReason, type ExpressionSyntaxError, type FindSession, type FindTextHit, FontCatalog, type FontCatalogEntry, type FrameScheduler, type Guide, type GuideOrientation, type HistoryStep, type HitTestOptions, type InvalidateTarget, type LayerOutlineNode, type LayerOutlineRole, type LayerPath, MAX_HISTORY_STEPS, type MemoTextPoliciesOptions, type MovedSubtreeRef, type OverlayPaintArgs, type OverlayPainter, PACKAGE_NAME, PAN_TO_BOX_MARGIN_PX, PASTE_OFFSET_PX, PHP_TRIM_CHARS, type Point, RESIZE_HANDLES, RESIZE_HANDLE_HIT_PX, RESIZE_MIN_SIZE_PX, type Rect, type ResizeAxes, type ResizeBoxGeometry, type ResizeBoxResult, type ResizeHandle, type ResourceStatus, type ResourceStatusMap, type RowsPathCandidate, type RowsPathCandidateResult, SNAP_THRESHOLD_SCREEN_PX, STYLE_FIELD_KEYS_BY_TYPE, type ShortcutCombo, type Size, type SnapAxis, type SnapAxisSource, type SnapBoxGeometry, type SnapPoints, type SnapResolution, type StyleSnapshot, type TextEditLayout, type TextEditingSession, type TransactOptions, type UploadFile, type UploadHandler, UploadHandlerMissingError, type UploadImagePlacement, type Viewport, WHEEL_ZOOM_STEP, type WheelInput, type WheelIntent, type ZoomBounds, addRootLayerInDraft, addTableCellInDraft, addTableRowInDraft, addTemplateCellInDraft, alignToCanvasTarget, applyStyleFieldsInDraft, buildLayerOutline, canCopyLayerAt, canonicalizeTableSyncInDraft, captureStyleSnapshot, clampZoom, classifyEditorShortcut, classifyWheel, cloneLayerSubtree, convertTableToRowsInDraft, convertTableToTemplateInDraft, createDefaultLayer, createRubberBandRect, createTemplateTable, deleteLayerInDraft, enumerateExpressionCandidates, enumerateRowsPathCandidates, expressionFragmentAtCursor, fitRect, fitViewport, growRowToCellInDraft, handleResizesHeight, handleResizesWidth, hitTest, insertRootLayerAdjacentInDraft, insertRootLayerInDraft, isImageContentUndrawn, isLayerPath, isLockedPath, isRootLayerPath, isRootPasteableType, isTemplateSubtreePath, layerBoxByPath, memoizeTextPolicies, moveGuard, moveRootLayerInDraft, moveTableCellInDraft, moveTableCellToRowInDraft, moveTableRowInDraft, moveTableRowToTableInDraft, nextZoomByWheel, normalizeExpressionSchemaSource, panBy, panToBox, parseExpressionPath, parseExpressionSchema, pastePosition, pathStartsWith, pathsEqual, prepareRootPaste, readSpecField, remapPathAfterSplice, replaceHitsInDraft, resizableAxesAt, resizeBox, resizeHandleAt, resizeHandlePoint, resizeHandlesAt, resizeSnapPoints, resolveLayer, resolveRowSchema, resolveRowsPathStartSchema, resolveSnap, resolveSnapPoints, rootLayerOf, scanExpressionFragments, scanTextMatches, sceneToScreen, schemaChildEntries, schemaNodeAtPath, screenToScene, selectionParentPath, setCellAutoHeightInDraft, snapAxesFromBoxes, snapThresholdScene, snapViewportToPhysicalPixels, syncContentIntoCellInDraft, syncRowWidthInDraft, uploadDisplayName, visibleRootBoxes, writeSpecField, zoomAtPoint };
package/dist/index.js CHANGED
@@ -1797,6 +1797,27 @@ function classifyEditorShortcut(input, bindings = DEFAULT_EDITOR_SHORTCUTS) {
1797
1797
  return null;
1798
1798
  }
1799
1799
 
1800
+ // src/session/editorState.ts
1801
+ var EDITOR_STATE_SCHEMA_VERSION = 1;
1802
+ function parseCanvasEditorState(state) {
1803
+ const raw = state;
1804
+ if (raw === null || typeof raw !== "object") return null;
1805
+ const source = raw;
1806
+ if (!Array.isArray(source.guides) || !Array.isArray(source.lockedPaths)) return null;
1807
+ const guides = [];
1808
+ for (const entry of source.guides) {
1809
+ if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return null;
1810
+ const { orientation, position } = entry;
1811
+ if (orientation !== "horizontal" && orientation !== "vertical") return null;
1812
+ if (typeof position !== "number" || !Number.isFinite(position)) return null;
1813
+ guides.push({ orientation, position });
1814
+ }
1815
+ for (const path of source.lockedPaths) {
1816
+ if (!Array.isArray(path)) return null;
1817
+ }
1818
+ return { guides, lockedPaths: source.lockedPaths };
1819
+ }
1820
+
1800
1821
  // src/editing/fontCatalog.ts
1801
1822
  var FontCatalog = class {
1802
1823
  builtin;
@@ -2024,9 +2045,16 @@ var EditorSession = class {
2024
2045
  return this.surfaceSize;
2025
2046
  }
2026
2047
  // ---- 相机动作(视口 {x, y, zoom} 走 ui 分支,不进历史) ----
2027
- /** 打开/替换文档(转发 store;解码在宿主侧完成,内核只消费领域结构) */
2028
- openDocument(canvas) {
2048
+ /**
2049
+ * 打开/替换文档(转发 store;解码在宿主侧完成,内核只消费领域结构)。
2050
+ * state 传切片即按 restoreEditorState 同一管线原子应用(reset → apply 切片 →
2051
+ * prune)——「开了就恢复」,宿主切帧处不可能忘记重放;切片形状不合法整体拒
2052
+ * (画布照常以默认态打开),现网单参调用零破坏。
2053
+ */
2054
+ openDocument(canvas, state) {
2029
2055
  this.store.openDocument(canvas);
2056
+ if (state === void 0) return;
2057
+ this.restoreEditorState(state);
2030
2058
  }
2031
2059
  /**
2032
2060
  * 预览视图(只读衍生):模板态表格在视图中获得一行预览行(文本格 = 表达式
@@ -2705,6 +2733,21 @@ var EditorSession = class {
2705
2733
  this.store.setGuides(next);
2706
2734
  return true;
2707
2735
  }
2736
+ /**
2737
+ * 移动参考线(抓取拖动再定位的写入口):按 id 原地改位(取向不变),
2738
+ * ui 分支同门——不进历史、不写 graph(ADR 0012),广播 guides 分支通知
2739
+ * (覆盖层失效重绘)。非有限坐标/未知 id 空转返回 false(不产生通知);
2740
+ * 同位空转返回 true(无变化不惊动订阅方——抓取未动的松手路径)。
2741
+ */
2742
+ updateGuide(id, position) {
2743
+ if (!Number.isFinite(position)) return false;
2744
+ const guides = this.store.ui.guides;
2745
+ const target = guides.find((guide) => guide.id === id);
2746
+ if (target === void 0) return false;
2747
+ if (target.position === position) return true;
2748
+ this.store.setGuides(guides.map((guide) => guide.id === id ? { ...guide, position } : guide));
2749
+ return true;
2750
+ }
2708
2751
  /**
2709
2752
  * 清空全部参考线(工具栏「清空参考线」写入口,工单 03 消费):ui 分支整体置空,
2710
2753
  * 与 removeGuide 同型广播 guides 分支通知(覆盖层失效重绘)。会话级语义同门——
@@ -2723,6 +2766,51 @@ var EditorSession = class {
2723
2766
  toggleRulers() {
2724
2767
  this.store.setRulersVisible(!this.store.ui.rulersVisible);
2725
2768
  }
2769
+ // ---- 编辑器状态导出与恢复(project-data 工单 01,spec §5):与 addGuide/toggleLayerLock 同门——ui 分支写、不进历史、不写 graph ----
2770
+ /**
2771
+ * 导出当前打开画布的编辑器状态切片:guides 原样带出(id 是会话内自增值,
2772
+ * 宿主不持久化其语义——restore 端重排重取号)、lockedPaths 原样。无文档也可
2773
+ * 导出(ui 分支自成事实,addGuide 无 doc 守卫同门)。内核帧盲:宿主把各帧
2774
+ * 切片按帧名组装成 frames 容器,加上 schemaVersion(EDITOR_STATE_SCHEMA_VERSION)
2775
+ * 与 getEditorPrefs() 才是完整工程数据快照,经宿主层存储——容器不进内核。
2776
+ */
2777
+ exportEditorState() {
2778
+ return { guides: this.store.ui.guides, lockedPaths: this.store.ui.lockedPaths };
2779
+ }
2780
+ /**
2781
+ * 恢复当前画布的状态切片(prefs 不在此——内核跨 openDocument 自持):轻结构
2782
+ * 校验(形状不合法整体拒,返 false 宿主记因)→ 整体替换 lockedPaths →
2783
+ * pruneDanglingPaths(悬空锁路径剔除——合法但内容悬空不算拒,prune 兜底)→
2784
+ * guide id 重排(清空后逐条 addGuide 重取号:快照 id 无持久语义,原样入栈必
2785
+ * 与新会话 guideIdSeq 撞号致 removeGuide 误删)。不进历史、不写 graph(红线
2786
+ * 同门)。
2787
+ */
2788
+ restoreEditorState(state) {
2789
+ const slice = parseCanvasEditorState(state);
2790
+ if (slice === null) return false;
2791
+ this.store.setLockedPaths(slice.lockedPaths);
2792
+ this.pruneDanglingPaths();
2793
+ if (this.store.ui.guides.length > 0) this.store.setGuides([]);
2794
+ for (const guide of slice.guides) this.addGuide(guide);
2795
+ return true;
2796
+ }
2797
+ /**
2798
+ * 只读偏好(保存 prefs 的读取口):与 store.ui 同源,给宿主一个不用下钻
2799
+ * store 的口。读 = getEditorPrefs,写 = applyEditorPrefs,对称成对;帧切片
2800
+ * 走 restoreEditorState,两不相混。
2801
+ */
2802
+ getEditorPrefs() {
2803
+ const ui = this.store.ui;
2804
+ return { rulersVisible: ui.rulersVisible, anchorExpanded: ui.anchorExpanded };
2805
+ }
2806
+ /**
2807
+ * 应用偏好(会话建立时一次性,跨会话恢复 prefs 的写入口):整体替换
2808
+ * rulersVisible/anchorExpanded,不进历史;值等写入经 store 短路零通知。
2809
+ */
2810
+ applyEditorPrefs(prefs) {
2811
+ this.store.setRulersVisible(prefs.rulersVisible);
2812
+ this.store.setAnchorExpanded(prefs.anchorExpanded);
2813
+ }
2726
2814
  // ---- 对齐画布(layer-align-snap 工单 01):图层盒整体对齐画布几何 ----
2727
2815
  /**
2728
2816
  * 对齐画布 action 族(对齐画布/贴边/贴角,ADR 0011):把 path 处图层盒整体
@@ -4146,6 +4234,7 @@ export {
4146
4234
  CREATE_DEAD_ZONE_SCREEN_PX,
4147
4235
  DEFAULT_EDITOR_SHORTCUTS,
4148
4236
  DEFAULT_ZOOM_BOUNDS,
4237
+ EDITOR_STATE_SCHEMA_VERSION,
4149
4238
  EditorSession,
4150
4239
  EditorStore,
4151
4240
  FontCatalog,