@printstack/print-studio 0.1.0 → 0.1.2

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.
Files changed (72) hide show
  1. package/README.md +122 -154
  2. package/assets/render.worker-DkH7TepL.js +109 -0
  3. package/{cloneDeep-C5UZRjbH.js → cloneDeep-waBDTGc3.js} +10 -4
  4. package/components/print-s-logo/print-s-logo.vue.d.ts +1 -1
  5. package/components/s-form/types.d.ts +1 -1
  6. package/core/coordinate-space.d.ts +16 -0
  7. package/core/document-model.d.ts +1 -1
  8. package/core/element-registry.d.ts +3 -8
  9. package/core/page-extensions.d.ts +1 -1
  10. package/core/types.d.ts +8 -0
  11. package/core.js +2 -2
  12. package/designer/commands/menu-adapter.d.ts +3 -3
  13. package/designer/commands/menu-types.d.ts +8 -1
  14. package/designer/commands/types.d.ts +2 -0
  15. package/designer/components/dialogs/preview-dialog.vue.d.ts +10 -1
  16. package/designer/components/dialogs/print-preview-dialog.vue.d.ts +14 -0
  17. package/designer/components/dialogs/print-preview-source.d.ts +22 -0
  18. package/designer/components/dialogs/use-document-preview.d.ts +5 -1
  19. package/designer/components/dialogs/use-preview-renderer.d.ts +2 -0
  20. package/designer/components/dialogs/use-print-preview.d.ts +33 -0
  21. package/designer/components/fields/use-table-draft.d.ts +0 -4
  22. package/designer/components/panels/layer-row-types.d.ts +37 -0
  23. package/designer/components/panels/layer-row.vue.d.ts +17 -0
  24. package/designer/components/stage/marquee-overlay.vue.d.ts +8 -0
  25. package/designer/components/stage/node-style.d.ts +3 -0
  26. package/designer/components/stage/selection-member.vue.d.ts +14 -0
  27. package/designer/composables/use-theme.d.ts +3 -0
  28. package/designer/facade/editing.d.ts +2 -2
  29. package/designer/facade/entities.d.ts +1156 -22
  30. package/designer/facade/output.d.ts +2 -2
  31. package/designer/frame/print-designer-frame.vue.d.ts +2 -2
  32. package/designer/frame/shared.d.ts +2 -0
  33. package/designer/frame/view.d.ts +9 -0
  34. package/designer/interactions/marquee.d.ts +1 -1
  35. package/designer/interactions/move.d.ts +3 -1
  36. package/designer/mount-print-designer.d.ts +1 -1
  37. package/designer/mount-print-preview.d.ts +5 -0
  38. package/designer/plugins/plugin-manager.d.ts +3 -3
  39. package/designer/plugins/types.d.ts +1 -1
  40. package/designer/print-designer.vue.d.ts +2 -2
  41. package/designer/print-preview.vue.d.ts +4 -0
  42. package/designer/stores/document-store.d.ts +72 -0
  43. package/designer/stores/editor-store.d.ts +770 -14
  44. package/designer/stores/page-store.d.ts +25 -1
  45. package/designer/stores/template-store.d.ts +52 -4
  46. package/designer/stores/types.d.ts +1 -0
  47. package/designer/stores/ui-store.d.ts +232 -3
  48. package/designer/stores/view-store.d.ts +10 -1
  49. package/designer.d.ts +1 -1
  50. package/designer.js +3 -3
  51. package/{document-model-DC9sn2WV.js → document-model-Cc5RoO4j.js} +160 -179
  52. package/elements/table/table-style.d.ts +3 -10
  53. package/host-OAp3gFDx.js +123 -0
  54. package/index.js +5 -5
  55. package/locales/runtime.d.ts +8 -2
  56. package/locales/translations/zh-CN/app.json.d.ts +1 -0
  57. package/locales/translations/zh-CN/designer.json.d.ts +9 -4
  58. package/{mount-print-designer-BzHLGlv-.js → mount-print-designer-DnHTrBE9.js} +4 -3
  59. package/mount-print-preview-Bcb08lJ-.js +66 -0
  60. package/package.json +1 -1
  61. package/presets-BunYODhE.js +13 -0
  62. package/{registries-BOU8RLim.js → registries-sg39PGF1.js} +793 -790
  63. package/runtime/browser-output.d.ts +2 -0
  64. package/runtime.js +4 -4
  65. package/{saas-B3fJOgHX.js → saas-D-q51uTz.js} +1 -1
  66. package/saas.js +1 -1
  67. package/{studio-C_rqbJ9q.js → studio-B3B6zI06.js} +830 -754
  68. package/studio-types.d.ts +3 -2
  69. package/style.css +1 -1
  70. package/vue.js +1035 -941
  71. package/assets/render.worker-Cfbk18NW.js +0 -109
  72. package/presets-Cwp20ef6.js +0 -133
@@ -13,6 +13,7 @@ var n = {
13
13
  },
14
14
  app: {
15
15
  browserTitle: "Print Studio · Web 打印设计器",
16
+ logoAccessibleLabel: "Print S:Print Studio、Print Scape、Print Style",
16
17
  reloadButton: "重新加载",
17
18
  fatalErrorTitle: "设计器暂时无法使用",
18
19
  resetInterfaceButton: "重置界面"
@@ -184,6 +185,12 @@ var n = {
184
185
  numberedName: "图层组 {groupNumber}"
185
186
  }
186
187
  }, a = {
188
+ theme: {
189
+ groupLabel: "主题",
190
+ light: "浅色",
191
+ dark: "深色",
192
+ system: "系统"
193
+ },
187
194
  tutorialPlayback: {
188
195
  detailedSteps: "逐项操作演示",
189
196
  demonstrate: "知道了,下一步",
@@ -820,7 +827,7 @@ var n = {
820
827
  columnsLabel: "列数",
821
828
  columnUnit: "列",
822
829
  columnsHint: "超出页面宽度时自动减少列数",
823
- columnGapLabel: "列间距",
830
+ columnGapLabel: "水平间距",
824
831
  numberedGroupName: "循环区块 {groupNumber}",
825
832
  selectMembersMessage: "请先选中要组合的元素",
826
833
  ungroupedMessage: "已解除循环区块,元素已保留",
@@ -1247,6 +1254,7 @@ var n = {
1247
1254
  panelTitle: "页面",
1248
1255
  templatesSection: "模板",
1249
1256
  pagesSection: "页面列表",
1257
+ moreActionsTitle: "更多操作",
1250
1258
  addTemplateTitle: "新建模板",
1251
1259
  addTemplateFromPageTitle: "从当前页新建模板",
1252
1260
  editTemplateTitle: "编辑模板",
@@ -1283,11 +1291,9 @@ var n = {
1283
1291
  pageName: "页面名称"
1284
1292
  },
1285
1293
  templateBanner: {
1286
- resetBackgroundTitle: "清除模板背景,继承基础模板或页面背景",
1287
- resetBackgroundLabel: "继承背景",
1288
1294
  baseTemplateLabel: "基于模板",
1289
1295
  noTemplateLabel: "无模板",
1290
- detachTitle: "分离模板内容为页面元素",
1296
+ detachTitle: "分离模板内容",
1291
1297
  oddPages: "单数页",
1292
1298
  facingPages: "单双页控制",
1293
1299
  evenPages: "双数页",
@@ -4,9 +4,9 @@ interface Props {
4
4
  variant?: 'dark' | 'light';
5
5
  }
6
6
  declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
7
- variant: "dark" | "light";
8
7
  holdMs: number;
9
8
  transitionMs: number;
9
+ variant: "light" | "dark";
10
10
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
11
  declare const _default: typeof __VLS_export;
12
12
  export default _default;
@@ -467,7 +467,7 @@ export interface SFormProps {
467
467
  /**
468
468
  * getValues / update:modelValue / submit 输出的快照是否剔除当前隐藏字段的值
469
469
  * (含隐藏分组下的全部子字段,剔除后变空的父级对象级联删除)。
470
- * 默认 false:隐藏字段值保留输出(向后兼容);
470
+ * 默认 false:隐藏字段值保留输出;
471
471
  * 内部状态始终保留隐藏字段的值,字段重新显示时原值不丢失
472
472
  */
473
473
  omitHiddenValues?: boolean;
@@ -0,0 +1,16 @@
1
+ import { Point } from './geometry';
2
+ /** 页面左上角在全局(画布内容)空间的位置,mm */
3
+ export type SpaceOrigin = Point;
4
+ /** 全局坐标 → 页面局部坐标 */
5
+ export declare function globalToLocal(origin: SpaceOrigin, point: Point): Point;
6
+ /** 页面局部坐标 → 全局坐标 */
7
+ export declare function localToGlobal(origin: SpaceOrigin, point: Point): Point;
8
+ /**
9
+ * 屏幕坐标 → 全局坐标。
10
+ * `contentRect` 为内容容器的 getBoundingClientRect(已含滚动偏移),`pxPerMm` 为当前缩放后的像素密度。
11
+ */
12
+ export declare function clientToGlobal(contentRect: Pick<DOMRect, 'left' | 'top'>, client: Point, pxPerMm: number): Point;
13
+ /** 屏幕坐标 → 页面局部坐标 */
14
+ export declare function clientToLocal(contentRect: Pick<DOMRect, 'left' | 'top'>, origin: SpaceOrigin, client: Point, pxPerMm: number): Point;
15
+ /** 页面局部坐标 → 屏幕坐标 */
16
+ export declare function localToClient(contentRect: Pick<DOMRect, 'left' | 'top'>, origin: SpaceOrigin, point: Point, pxPerMm: number): Point;
@@ -18,7 +18,7 @@ export declare function createTemplate(name?: string, reference?: PageLayout): P
18
18
  export declare function createElement(type: string, overrides?: Partial<ElementNode>, elements?: ElementRegistry): ElementNode;
19
19
  /** 声明 measureSize 的元素按内容修正节点尺寸;未声明或返回空时保持不变 */
20
20
  export declare function applyMeasureSize(node: ElementNode, definition?: import('./element-registry').ElementDefinition | undefined): void;
21
- /** 点驱动节点缺 points 时按定义的 migrateRect 补齐并同步包围盒;其余节点原样返回 */
21
+ /** 点驱动节点缺 points 时创建默认点集并同步包围盒。 */
22
22
  export declare function normalizeNodePoints(node: ElementNode, definition?: import('./element-registry').ElementDefinition | undefined): ElementNode;
23
23
  export declare function cloneElement(node: ElementNode): ElementNode;
24
24
  export declare function findElement(doc: PrintDocument, id: string): null | {
@@ -79,11 +79,6 @@ export interface PointBasedCapability {
79
79
  point: Point;
80
80
  points: Point[];
81
81
  }) => boolean;
82
- /**
83
- * 旧版定界框数据迁移为点集:仅历史文档(无 points 字段)加载时调用,
84
- * 返回的点集会重新派生包围盒并把 rotation 归零。
85
- */
86
- migrateRect?: (node: ElementNode) => Point[];
87
82
  }
88
83
  export interface InlineEditCapability {
89
84
  read: (node: ElementNode) => string;
@@ -135,14 +130,14 @@ export interface ElementDefinition {
135
130
  */
136
131
  measureSize?: (ctx: ElementMeasureContext) => Partial<Pick<ElementNode, 'height' | 'width'>>;
137
132
  /**
138
- * 旧文档属性归一化:反序列化与创建实例时调用(幂等)。
139
- * 用于数据模型演进(如旧版边框字段迁移到新模型),元素自行声明迁移逻辑。
133
+ * 属性归一化:反序列化与创建实例时调用(幂等)。
134
+ * 元素自行补全默认值并校验配置。
140
135
  */
141
136
  normalizeProps?: (props: Record<string, unknown>) => Record<string, unknown>;
142
137
  /** 工具栏排序,越小越靠前 */
143
138
  order: number;
144
139
  overflow?: (ctx: ElementOverflowContext) => ElementOverflowResult | null;
145
- /** 声明元素持有的页面扩展资源,供迁移、复制及生命周期管理复用。 */
140
+ /** 声明元素持有的页面扩展资源,供复制及生命周期管理复用。 */
146
141
  pageExtensions?: {
147
142
  rebind: (node: ElementNode, purpose: string, templateId: string, elementId: string) => void;
148
143
  reconcile?: (document: PrintDocument, node: ElementNode) => void;
@@ -20,7 +20,7 @@ export declare function resolvePageExtensionNode(document: PrintDocument, node:
20
20
  export declare function reconcilePageExtensions(document: PrintDocument, node: ElementNode, registry: ElementRegistry): void;
21
21
  export declare function assertRequiredElementMutation(document: PrintDocument, node: ElementNode, patch?: Partial<ElementNode>): void;
22
22
  export declare function validateTemplateDependencies(template: PageTemplate): void;
23
- /** 复制内部资源并重新绑定引用,避免副本与原元素共享可编辑资源。也迁移旧版引用。 */
23
+ /** 复制内部资源并重新绑定引用,避免副本与原元素共享可编辑资源。 */
24
24
  export declare function copyPageExtensions(document: PrintDocument, source: ElementNode, target: ElementNode, registry: ElementRegistry, resources?: PrintDocument): void;
25
25
  export declare function prunePageExtensions(document: PrintDocument, registry?: ElementRegistry): void;
26
26
  export declare function assertPageExtensionReferences(document: PrintDocument, node: ElementNode, registry: ElementRegistry): void;
package/core/types.d.ts CHANGED
@@ -79,6 +79,14 @@ export interface PageNode {
79
79
  id: string;
80
80
  margins?: PageMargins;
81
81
  name: string;
82
+ /**
83
+ * 页面(画板)左上角在画布全局空间的位置,mm;缺省 = 按排列方式自动布局。
84
+ * 仅决定页面放置位置,元素 / 参考线坐标始终相对页面左上角,不随之改变。
85
+ */
86
+ position?: {
87
+ x: number;
88
+ y: number;
89
+ };
82
90
  /** 页面模板(PageTemplate,作用同 InDesign 主页)id;缺省 = 内置空白模板 */
83
91
  templateId?: string;
84
92
  width: number;
package/core.js CHANGED
@@ -1,5 +1,5 @@
1
- import { G as e, U as t, W as n, c as r, f as i, n as a, p as o, u as s } from "./document-model-DC9sn2WV.js";
2
- import { A as c, B as l } from "./cloneDeep-C5UZRjbH.js";
1
+ import { G as e, U as t, W as n, c as r, f as i, n as a, p as o, u as s } from "./document-model-Cc5RoO4j.js";
2
+ import { A as c, B as l } from "./cloneDeep-waBDTGc3.js";
3
3
  // src/core/types.ts
4
4
  var u = [
5
5
  {
@@ -1,11 +1,11 @@
1
- import { ContextMenuItem } from './menu-types';
1
+ import { ContextMenuItem, MenuItemAction } from './menu-types';
2
2
  import { CommandRegistry } from './command-registry';
3
3
  import { CommandDefinition, CommandMenuEntry } from './types';
4
4
  /** 取主快捷键(用于菜单右侧提示文案) */
5
5
  export declare function primaryShortcut(command: CommandDefinition): string | undefined;
6
6
  /** 把命令渲染为菜单条目;勾选/禁用/动态文案在求值时读取(响应式菜单 computed 内调用即自动追踪) */
7
- export declare function toMenuItem(command: CommandDefinition, execute: (id: string, ...args: unknown[]) => void, entry?: CommandMenuEntry): ContextMenuItem;
8
- export declare function toMenuItems(command: CommandDefinition, execute: (id: string, ...args: unknown[]) => void): ContextMenuItem[];
7
+ export declare function toMenuItem(command: CommandDefinition, execute: (id: string, ...args: unknown[]) => void, entry?: CommandMenuEntry): MenuItemAction;
8
+ export declare function toMenuItems(command: CommandDefinition, execute: (id: string, ...args: unknown[]) => void): MenuItemAction[];
9
9
  export declare function commandMenuItems(registry: CommandRegistry, entries: ((CommandMenuEntry & {
10
10
  id: string;
11
11
  }) | string)[], execute: (id: string, ...args: unknown[]) => void): ContextMenuItem[];
@@ -10,6 +10,7 @@ export interface MenuItemAction {
10
10
  /** 悬停提示:解释该菜单项的作用(帮助不熟悉的概念,如循环区块) */
11
11
  help?: string;
12
12
  icon?: string;
13
+ keepOpen?: boolean;
13
14
  label: string;
14
15
  shortcut?: string;
15
16
  type: 'item';
@@ -23,6 +24,12 @@ export interface MenuSubmenu {
23
24
  label: string;
24
25
  type: 'submenu';
25
26
  }
26
- export type ContextMenuItem = MenuDivider | MenuItemAction | MenuSubmenu;
27
+ export interface MenuSegment {
28
+ icon?: string;
29
+ items: MenuItemAction[];
30
+ label: string;
31
+ type: 'segment';
32
+ }
33
+ export type ContextMenuItem = MenuDivider | MenuItemAction | MenuSegment | MenuSubmenu;
27
34
  export declare function divider(): MenuDivider;
28
35
  export declare function menuItem(label: string, action: () => void, extra?: Partial<Omit<MenuItemAction, 'action' | 'label' | 'type'>>): MenuItemAction;
@@ -45,6 +45,8 @@ export interface CommandDefinition {
45
45
  * args 为 execute() 透传的参数(如带参命令的 groupId、触发时的键盘事件)。
46
46
  */
47
47
  run: (ctx: EditorContext, ...args: unknown[]) => unknown;
48
+ /** 将相关命令合并为一行分段选择器。 */
49
+ segment?: CommandSubmenu;
48
50
  /**
49
51
  * 规范化快捷键字符串(Ctrl/Shift/Alt + key),可多个。
50
52
  * 声明后自动获得键盘触发能力,与菜单解耦。
@@ -1,3 +1,12 @@
1
- declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1
+ type __VLS_Props = {
2
+ timeoutMs?: number;
3
+ };
4
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
+ ready: (element: HTMLIFrameElement, warnings: string[]) => any;
6
+ error: (error: unknown) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
8
+ onReady?: ((element: HTMLIFrameElement, warnings: string[]) => any) | undefined;
9
+ onError?: ((error: unknown) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
2
11
  declare const _default: typeof __VLS_export;
3
12
  export default _default;
@@ -0,0 +1,14 @@
1
+ import { PrintPreviewSource } from './print-preview-source';
2
+ type __VLS_Props = {
3
+ source: PrintPreviewSource;
4
+ timeoutMs?: number;
5
+ };
6
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
7
+ ready: (element: HTMLIFrameElement, warnings: string[]) => any;
8
+ error: (error: unknown) => any;
9
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ onReady?: ((element: HTMLIFrameElement, warnings: string[]) => any) | undefined;
11
+ onError?: ((error: unknown) => any) | undefined;
12
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { PrintDocument } from '../../../core/types';
2
+ import { RenderExecutionOptions } from '../../../parser';
3
+ export interface PrintPreviewSnapshot {
4
+ document: PrintDocument;
5
+ input: Record<string, unknown>;
6
+ }
7
+ /** 打印预览所需的状态与操作;界面不依赖编辑器 store。 */
8
+ export interface PrintPreviewSource {
9
+ capture(error: unknown): unknown;
10
+ close(): void;
11
+ getSampleInput(): Record<string, unknown>;
12
+ readonly name: string;
13
+ print(target: Window): void;
14
+ render(input: Record<string, unknown>, execution?: RenderExecutionOptions): Promise<{
15
+ html: string;
16
+ warnings: string[];
17
+ }>;
18
+ readonly request: undefined | {
19
+ previewInput?: Record<string, unknown>;
20
+ };
21
+ readonly revision: number;
22
+ }
@@ -1,5 +1,9 @@
1
1
  import { EditorContext } from '../../context/editor-context';
2
- export declare function useDocumentPreview(ctx: EditorContext): {
2
+ import { PrintPreviewSource } from './print-preview-source';
3
+ import { usePrintPreview } from './use-print-preview';
4
+ /** 将设计器的文档和弹窗状态适配到共用打印预览。 */
5
+ export declare function createDocumentPreviewSource(ctx: EditorContext): PrintPreviewSource;
6
+ export declare function useDocumentPreview(ctx: EditorContext, options?: Parameters<typeof usePrintPreview>[1]): {
3
7
  dataPanelOpen: import('vue').Ref<boolean, boolean>;
4
8
  formatInput: () => void;
5
9
  frameRef: import('vue').Ref<HTMLIFrameElement | null, HTMLIFrameElement | null>;
@@ -4,10 +4,12 @@ import { RenderExecutionOptions } from '../../../parser';
4
4
  export declare function usePreviewRenderer(options: {
5
5
  capture: (error: unknown) => unknown;
6
6
  frame: Ref<HTMLIFrameElement | null>;
7
+ onReady?(frame: HTMLIFrameElement, warnings: string[]): void;
7
8
  render: (input: Record<string, unknown>, execution?: RenderExecutionOptions) => Promise<{
8
9
  html: string;
9
10
  warnings: string[];
10
11
  }>;
12
+ timeoutMs?: number;
11
13
  }): {
12
14
  invalidate: () => void;
13
15
  loading: Ref<boolean, boolean>;
@@ -0,0 +1,33 @@
1
+ import { PrintPreviewSource } from './print-preview-source';
2
+ export declare function usePrintPreview(source: PrintPreviewSource, options?: {
3
+ onError?(error: unknown): void;
4
+ onReady?(frame: HTMLIFrameElement, warnings: string[]): void;
5
+ timeoutMs?: number;
6
+ }): {
7
+ dataPanelOpen: import('vue').Ref<boolean, boolean>;
8
+ formatInput: () => void;
9
+ frameRef: import('vue').Ref<HTMLIFrameElement | null, HTMLIFrameElement | null>;
10
+ inputJson: import('vue').Ref<string, string>;
11
+ inputPending: import('vue').Ref<boolean, boolean>;
12
+ jsonErrorDetail: import('vue').Ref<string, string>;
13
+ jsonErrorKey: import('vue').Ref<string, string>;
14
+ loading: import('vue').Ref<boolean, boolean>;
15
+ printFrame: () => void;
16
+ refreshPreview: () => void;
17
+ renderError: import('vue').Ref<{
18
+ detail: string;
19
+ } | null, {
20
+ detail: string;
21
+ } | {
22
+ detail: string;
23
+ } | null>;
24
+ resetToSample: () => void;
25
+ resourceProgress: import('vue').Ref<{
26
+ loaded: number;
27
+ total: number;
28
+ } | null, import('../../../core/render/frame').FrameResourceProgress | {
29
+ loaded: number;
30
+ total: number;
31
+ } | null>;
32
+ warnings: import('vue').Ref<string[], string[]>;
33
+ };
@@ -26,7 +26,6 @@ export declare function useTableDraft(getProps: () => Record<string, unknown>, o
26
26
  commit: () => void;
27
27
  draft: import('vue').Ref<{
28
28
  background: string;
29
- borderColor?: string | undefined;
30
29
  borders: {
31
30
  bottom?: {
32
31
  color: string;
@@ -65,7 +64,6 @@ export declare function useTableDraft(getProps: () => Record<string, unknown>, o
65
64
  width: number;
66
65
  } | undefined;
67
66
  };
68
- borderWidth?: number | undefined;
69
67
  boxHeightMm?: number | undefined;
70
68
  cellOverrides?: Record<string, import('../../../elements/table/table-style').TableCellOverride> | undefined;
71
69
  color: string;
@@ -260,7 +258,6 @@ export declare function useTableDraft(getProps: () => Record<string, unknown>, o
260
258
  };
261
259
  }, TableProps | {
262
260
  background: string;
263
- borderColor?: string | undefined;
264
261
  borders: {
265
262
  bottom?: {
266
263
  color: string;
@@ -299,7 +296,6 @@ export declare function useTableDraft(getProps: () => Record<string, unknown>, o
299
296
  width: number;
300
297
  } | undefined;
301
298
  };
302
- borderWidth?: number | undefined;
303
299
  boxHeightMm?: number | undefined;
304
300
  cellOverrides?: Record<string, import('../../../elements/table/table-style').TableCellOverride> | undefined;
305
301
  color: string;
@@ -0,0 +1,37 @@
1
+ import { ElementGroup, ElementNode, RepeatGroup } from '../../../core/types';
2
+ /** 图层面板行数据:图层组行或元素行(与 layers-panel 的 displayList 条目一致) */
3
+ export type LayerRowData = {
4
+ depth: number;
5
+ group: ElementGroup;
6
+ key: string;
7
+ kind: 'group';
8
+ } | {
9
+ depth: number;
10
+ group: null | RepeatGroup;
11
+ key: string;
12
+ kind: 'element';
13
+ node: ElementNode;
14
+ };
15
+ /**
16
+ * 行交互处理器集合:由 layers-panel 注入(拖拽 / 重命名状态在面板内),
17
+ * 使用稳定引用,减少父组件更新引起的行渲染。
18
+ */
19
+ export interface LayerRowApi {
20
+ clearDragState(): void;
21
+ commitRename(): void;
22
+ execute(id: string, ...args: unknown[]): void;
23
+ isGroupSelected(group: ElementGroup): boolean;
24
+ onDragOver(event: DragEvent, row: LayerRowData): void;
25
+ onDragStart(row: LayerRowData): void;
26
+ onGroupClick(event: MouseEvent, group: ElementGroup): void;
27
+ onGroupContextMenu(event: MouseEvent, group: ElementGroup): void;
28
+ onRenameClick(context: {
29
+ e: MouseEvent;
30
+ }): void;
31
+ onRowClick(event: MouseEvent, node: ElementNode): void;
32
+ onRowContextMenu(event: MouseEvent, node: ElementNode): void;
33
+ setRenameInput(element: unknown): void;
34
+ startRename(node: ElementNode): void;
35
+ startRenameGroup(group: ElementGroup): void;
36
+ updateRenameText(value: string): void;
37
+ }
@@ -0,0 +1,17 @@
1
+ import { LayerRowApi, LayerRowData } from './layer-row-types';
2
+ /**
3
+ * 图层面板单行:图层组行与元素行。
4
+ * 选中 / 悬停 / 重命名等状态在行内以 computed 细粒度读取 store,
5
+ * 将选区依赖隔离到行组件,减少选区变化时的列表渲染。
6
+ * 交互处理器(点击 / 拖拽 / 重命名提交)由面板经 api 注入,逻辑保持单一来源。
7
+ */
8
+ type __VLS_Props = {
9
+ api: LayerRowApi;
10
+ dropIndicator: Record<string, string>;
11
+ renameText: string;
12
+ renamingGroupId: null | string;
13
+ row: LayerRowData;
14
+ };
15
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { PageNode } from '../../../core/types';
2
+ type __VLS_Props = {
3
+ page: PageNode;
4
+ pxPerMm: number;
5
+ };
6
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { ElementNode } from '../../../core/types';
2
+ /** 元素毫米几何 → 页面像素定位样式(选中框 / 成员高亮等覆盖层共用) */
3
+ export declare function nodeBoxStyle(node: ElementNode, pxPerMm: number): Record<string, string>;
@@ -0,0 +1,14 @@
1
+ import { ElementNode, PageNode } from '../../../core/types';
2
+ /**
3
+ * 多选成员高亮:点驱动元素画线高亮,其余画细边框。
4
+ * 按节点隔离渲染,成员几何和关键对象标记变化时仍保持响应。
5
+ */
6
+ type __VLS_Props = {
7
+ isKey: boolean;
8
+ node: ElementNode;
9
+ page: PageNode;
10
+ pxPerMm: number;
11
+ };
12
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { ThemeMode } from '../stores/types';
2
+ /** 所有弹层挂载在当前文档中,与设计器共享 TDesign 的主题基线。 */
3
+ export declare function useTheme(mode: () => ThemeMode, capture: (error: unknown) => unknown): void;
@@ -6,8 +6,8 @@ export declare function createEditingFacade(access: FacadeAccess): {
6
6
  copy: () => void;
7
7
  cut: () => void;
8
8
  delete: () => void;
9
- /** 分布对象;'h' / 'v' 为旧版按中心点分布的简写 */
10
- distribute: (mode: "h" | "v" | AlignMode, options?: AlignOptions) => void;
9
+ /** 按指定边缘或中心点分布对象。 */
10
+ distribute: (mode: AlignMode, options?: AlignOptions) => void;
11
11
  distributeSpacing: (direction: SpacingDirection, options?: DistributeSpacingOptions) => void;
12
12
  duplicate: () => void;
13
13
  nudge: (dx: number, dy: number) => void;