@guodun/antdv 1.4.1 → 1.4.3

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 (135) hide show
  1. package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +304 -293
  2. package/dist/es/components/contract-signing-location/src/coordinates.mjs +23 -23
  3. package/dist/es/components/contract-signing-location/src/location-rules.mjs +20 -10
  4. package/dist/es/components/contract-signing-location/src/page-layout.mjs +12 -9
  5. package/dist/es/components/contract-signing-location/src/template-source.mjs +2 -0
  6. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.mjs +208 -180
  7. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerSidebar.vue.mjs +2 -1
  8. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.mjs +5 -0
  9. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.vue.mjs +690 -0
  10. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.mjs +5 -0
  11. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.mjs +253 -0
  12. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateImageContextMenu.mjs +5 -0
  13. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateImageContextMenu.vue.mjs +87 -0
  14. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorations.mjs +5 -0
  15. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorations.vue.mjs +98 -0
  16. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsInspector.mjs +5 -0
  17. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsInspector.vue.mjs +550 -0
  18. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsStudio.mjs +5 -0
  19. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsStudio.vue.mjs +117 -0
  20. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.mjs +5 -0
  21. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.mjs +96 -0
  22. package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +51 -26
  23. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.mjs +56 -33
  24. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSubmitDataModal.mjs +5 -0
  25. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSubmitDataModal.vue.mjs +29 -0
  26. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.mjs +5 -0
  27. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.mjs +179 -0
  28. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextContextMenu.mjs +5 -0
  29. package/dist/es/components/pro-contract-template-designer/src/ContractTemplateTextContextMenu.vue.mjs +390 -0
  30. package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +332 -263
  31. package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +1442 -2287
  32. package/dist/es/components/pro-contract-template-designer/src/composables/use-auto-pagination.mjs +71 -0
  33. package/dist/es/components/pro-contract-template-designer/src/composables/use-designer-files.mjs +11 -0
  34. package/dist/es/components/pro-contract-template-designer/src/composables/use-draft-cache-session.mjs +111 -0
  35. package/dist/es/components/pro-contract-template-designer/src/composables/use-signing-placement-editor.mjs +79 -0
  36. package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +189 -160
  37. package/dist/es/components/pro-contract-template-designer/src/composables/use-template-files.mjs +35 -22
  38. package/dist/es/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.mjs +71 -0
  39. package/dist/es/components/pro-contract-template-designer/src/constants.mjs +71 -10
  40. package/dist/es/components/pro-contract-template-designer/src/extensions/editor-extensions.mjs +1 -0
  41. package/dist/es/components/pro-contract-template-designer/src/utils/block-style.mjs +43 -0
  42. package/dist/es/components/pro-contract-template-designer/src/utils/context-menu-viewport.mjs +13 -0
  43. package/dist/es/components/pro-contract-template-designer/src/utils/editor-state.mjs +7 -0
  44. package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +398 -0
  45. package/dist/es/components/pro-contract-template-designer/src/utils/serialize-fingerprint.mjs +6 -0
  46. package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +88 -72
  47. package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
  48. package/dist/es/index.mjs +20 -20
  49. package/dist/lib/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.cjs +1 -1
  50. package/dist/lib/components/contract-signing-location/src/coordinates.cjs +1 -1
  51. package/dist/lib/components/contract-signing-location/src/location-rules.cjs +1 -1
  52. package/dist/lib/components/contract-signing-location/src/page-layout.cjs +1 -1
  53. package/dist/lib/components/contract-signing-location/src/template-source.cjs +1 -1
  54. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.cjs +1 -1
  55. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerSidebar.vue.cjs +1 -1
  56. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.cjs +1 -0
  57. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.vue.cjs +1 -0
  58. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.cjs +1 -0
  59. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.cjs +1 -0
  60. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateImageContextMenu.cjs +1 -0
  61. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateImageContextMenu.vue.cjs +1 -0
  62. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorations.cjs +1 -0
  63. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorations.vue.cjs +1 -0
  64. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsInspector.cjs +1 -0
  65. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsInspector.vue.cjs +1 -0
  66. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsStudio.cjs +1 -0
  67. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsStudio.vue.cjs +1 -0
  68. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.cjs +1 -0
  69. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.cjs +1 -0
  70. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.cjs +1 -1
  71. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.cjs +1 -1
  72. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSubmitDataModal.cjs +1 -0
  73. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSubmitDataModal.vue.cjs +1 -0
  74. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.cjs +1 -0
  75. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.cjs +1 -0
  76. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextContextMenu.cjs +1 -0
  77. package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateTextContextMenu.vue.cjs +1 -0
  78. package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
  79. package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
  80. package/dist/lib/components/pro-contract-template-designer/src/composables/use-auto-pagination.cjs +1 -0
  81. package/dist/lib/components/pro-contract-template-designer/src/composables/use-designer-files.cjs +1 -0
  82. package/dist/lib/components/pro-contract-template-designer/src/composables/use-draft-cache-session.cjs +1 -0
  83. package/dist/lib/components/pro-contract-template-designer/src/composables/use-signing-placement-editor.cjs +1 -0
  84. package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +4 -4
  85. package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-files.cjs +2 -2
  86. package/dist/lib/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.cjs +1 -0
  87. package/dist/lib/components/pro-contract-template-designer/src/constants.cjs +1 -1
  88. package/dist/lib/components/pro-contract-template-designer/src/extensions/editor-extensions.cjs +1 -1
  89. package/dist/lib/components/pro-contract-template-designer/src/utils/block-style.cjs +1 -0
  90. package/dist/lib/components/pro-contract-template-designer/src/utils/context-menu-viewport.cjs +1 -0
  91. package/dist/lib/components/pro-contract-template-designer/src/utils/editor-state.cjs +1 -0
  92. package/dist/lib/components/pro-contract-template-designer/src/utils/page-decorations.cjs +1 -0
  93. package/dist/lib/components/pro-contract-template-designer/src/utils/serialize-fingerprint.cjs +1 -0
  94. package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +3 -3
  95. package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
  96. package/dist/lib/index.cjs +1 -1
  97. package/dist/theme/icon.css +1 -1
  98. package/dist/theme/index.css +1 -1
  99. package/dist/types/components/contract-signing-location/src/coordinates.d.ts +2 -2
  100. package/dist/types/components/contract-signing-location/src/page-layout.d.ts +2 -2
  101. package/dist/types/components/contract-signing-location/src/template-source.d.ts +2 -0
  102. package/dist/types/components/contract-signing-location/src/types.d.ts +3 -0
  103. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerInspector.vue.d.ts +3 -0
  104. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerSidebar.vue.d.ts +1 -0
  105. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.vue.d.ts +104 -0
  106. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerWorkspaceHeader.vue.d.ts +60 -0
  107. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateImageContextMenu.vue.d.ts +27 -0
  108. package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePageDecorations.vue.d.ts +13 -0
  109. package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsInspector.vue.d.ts +28 -0
  110. package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePageDecorationsStudio.vue.d.ts +77 -0
  111. package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.d.ts +36 -0
  112. package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.d.ts +5 -1
  113. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateRendererHeader.vue.d.ts +4 -4
  114. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateRendererToolbar.vue.d.ts +4 -4
  115. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateSubmitDataModal.vue.d.ts +12 -0
  116. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateTextBubbleMenu.vue.d.ts +43 -0
  117. package/dist/types/components/pro-contract-template-designer/src/ContractTemplateTextContextMenu.vue.d.ts +77 -0
  118. package/dist/types/components/pro-contract-template-designer/src/DesignerPage.vue.d.ts +30 -32
  119. package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +456 -12
  120. package/dist/types/components/pro-contract-template-designer/src/composables/use-auto-pagination.d.ts +43 -0
  121. package/dist/types/components/pro-contract-template-designer/src/composables/use-designer-files.d.ts +22 -0
  122. package/dist/types/components/pro-contract-template-designer/src/composables/use-draft-cache-session.d.ts +41 -0
  123. package/dist/types/components/pro-contract-template-designer/src/composables/use-signing-placement-editor.d.ts +49 -0
  124. package/dist/types/components/pro-contract-template-designer/src/composables/use-template-designer.d.ts +15 -1
  125. package/dist/types/components/pro-contract-template-designer/src/composables/use-template-files.d.ts +13 -0
  126. package/dist/types/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.d.ts +19 -0
  127. package/dist/types/components/pro-contract-template-designer/src/constants.d.ts +7 -1
  128. package/dist/types/components/pro-contract-template-designer/src/types.d.ts +89 -0
  129. package/dist/types/components/pro-contract-template-designer/src/utils/block-style.d.ts +4 -0
  130. package/dist/types/components/pro-contract-template-designer/src/utils/context-menu-viewport.d.ts +25 -0
  131. package/dist/types/components/pro-contract-template-designer/src/utils/editor-state.d.ts +8 -0
  132. package/dist/types/components/pro-contract-template-designer/src/utils/page-decorations.d.ts +90 -0
  133. package/dist/types/components/pro-contract-template-designer/src/utils/serialize-fingerprint.d.ts +8 -0
  134. package/dist/types/components/pro-contract-template-designer/src/utils/template-renderer.d.ts +4 -1
  135. package/package.json +3 -3
@@ -0,0 +1,22 @@
1
+ export interface SetActiveFileIdOptions {
2
+ /** 切换前是否把当前编辑器快照写回文件数组。 */
3
+ syncCurrent?: boolean;
4
+ /** 是否向外抛 `update:activeFileId`。 */
5
+ shouldEmit?: boolean;
6
+ /** 即使 fileId 没变也强制重装当前文件(外部 files 整体替换时用)。 */
7
+ forceRefresh?: boolean;
8
+ /** 切换前是否把当前文件的签署入参错误快照留下来。 */
9
+ persistCurrentErrors?: boolean;
10
+ }
11
+ /**
12
+ * 文件切换选项。
13
+ *
14
+ * 以前五个布尔参数排队,调用点几乎读不懂;收成具名 options 后默认值仍保持
15
+ * 「同步当前文件、向外抛事件、保留错误」。
16
+ */
17
+ export declare function resolveSetActiveFileIdOptions(options?: SetActiveFileIdOptions): {
18
+ syncCurrent: boolean;
19
+ shouldEmit: boolean;
20
+ forceRefresh: boolean;
21
+ persistCurrentErrors: boolean;
22
+ };
@@ -0,0 +1,41 @@
1
+ import { ComputedRef, Ref } from 'vue';
2
+ import { ContractTemplateData, ContractTemplateDraftCacheStatus, ContractTemplateFile, ContractTemplatePageSize, ContractTemplateValidationError } from '../types';
3
+ import { SetActiveFileIdOptions } from './use-designer-files';
4
+ /**
5
+ * 草稿缓存会话:定时写入、空白才恢复、卸载时停表。
6
+ *
7
+ * 宿主已有正文时不得用本地草稿覆盖;指纹用来跳过内容没变的重复写入。
8
+ */
9
+ export declare function useDraftCacheSession(options: {
10
+ draftCacheWritable: ComputedRef<boolean>;
11
+ multipleFilesMode: ComputedRef<boolean>;
12
+ filesValue: Ref<ContractTemplateFile[]>;
13
+ activeFileIdValue: Ref<string>;
14
+ templateValue: Ref<ContractTemplateData>;
15
+ draftCacheKey: ComputedRef<string | undefined>;
16
+ draftCacheInterval: () => number | undefined;
17
+ draftCacheMaxBytes: () => number | undefined;
18
+ pageSize: () => ContractTemplatePageSize | undefined;
19
+ pageSizeOptions: () => ContractTemplatePageSize[] | undefined;
20
+ syncActiveFileSnapshot: (shouldEmit?: boolean) => ContractTemplateData;
21
+ syncPageEditors: () => ContractTemplateData;
22
+ setActiveFileId: (fileId: string, opts?: SetActiveFileIdOptions) => void;
23
+ emitFilesChange: (files: ContractTemplateFile[], changedFileId?: string) => void;
24
+ commit: (value: ContractTemplateData) => ContractTemplateData;
25
+ setSigningPlacementInputErrorsByFile: (value: Record<string, ContractTemplateValidationError[]>) => void;
26
+ buildSigningPlacementInputErrorsByFile: (files: ContractTemplateFile[], rawFiles?: Array<{
27
+ template?: ContractTemplateData;
28
+ }>) => Record<string, ContractTemplateValidationError[]>;
29
+ updateDraftCacheStatus: (status: ContractTemplateDraftCacheStatus, shouldEmit?: boolean) => void;
30
+ scheduleAutoPaginate: (pageId?: string) => void;
31
+ activePageId: Ref<string>;
32
+ selectedVariableKey: Ref<string>;
33
+ }): {
34
+ saveDraftCache: () => ContractTemplateDraftCacheStatus;
35
+ loadDraftCache: () => ContractTemplateData | undefined;
36
+ clearDraftCache: () => void;
37
+ restoreDraftCacheIfNeeded: () => void;
38
+ stopDraftCacheTimer: () => void;
39
+ restartDraftCacheTimer: () => void;
40
+ resetDraftFingerprint: () => void;
41
+ };
@@ -0,0 +1,49 @@
1
+ import { ComputedRef, Ref } from 'vue';
2
+ import { ContractTemplateData, ContractTemplatePage, ContractTemplatePageSize, ContractTemplateSigningPlacement, ContractTemplateSigningPlacementType } from '../types';
3
+ import { ContractTemplateSigningPlacementDragPayload, ContractTemplateSigningPlacementToolItem } from '../utils/signing-placement';
4
+ /**
5
+ * 深克隆签署位置。
6
+ *
7
+ * 位置对象会通过事件抛给宿主,`sealTypes` 是数组,直接透传会让宿主拿到内部引用;
8
+ * 这里只需要复制这一层数组,其余字段都是原始值。
9
+ */
10
+ export declare function cloneSigningPlacement(placement: ContractTemplateSigningPlacement): ContractTemplateSigningPlacement;
11
+ /**
12
+ * 签署位置 CRUD 与拖放。
13
+ *
14
+ * `showSigningPlacementTools === false` 时 drop 必须短路,不能只藏 UI。
15
+ */
16
+ export declare function useSigningPlacementEditor(options: {
17
+ templateValue: Ref<ContractTemplateData>;
18
+ signingPlacements: ComputedRef<ContractTemplateSigningPlacement[]>;
19
+ selectedSigningPlacement: ComputedRef<ContractTemplateSigningPlacement | undefined>;
20
+ selectedSigningPlacementId: Ref<string>;
21
+ selectedPage: ComputedRef<ContractTemplatePage | undefined>;
22
+ activePageId: Ref<string>;
23
+ readonly: () => boolean;
24
+ disabled: () => boolean;
25
+ showSigningPlacementTools: () => boolean;
26
+ getPageSize: (page?: ContractTemplatePage) => ContractTemplatePageSize;
27
+ getVisiblePosition: (pageId: string, type: ContractTemplateSigningPlacementType) => {
28
+ x: number;
29
+ y: number;
30
+ } | undefined;
31
+ commitSigningPlacements: (placements: ContractTemplateSigningPlacement[], resolvedPlacementIds?: Iterable<string>) => ContractTemplateData;
32
+ selectSigningPlacement: (id?: string) => void;
33
+ emitAdd: (placement: ContractTemplateSigningPlacement) => void;
34
+ emitChange: (placement: ContractTemplateSigningPlacement) => void;
35
+ emitRemove: (placement: ContractTemplateSigningPlacement) => void;
36
+ }): {
37
+ insertSigningPlacement: (type: ContractTemplateSigningPlacementType, pageId?: string, position?: {
38
+ x: number;
39
+ y: number;
40
+ }) => ContractTemplateSigningPlacement | undefined;
41
+ handleSigningPlacementDrop: (pageId: string, payload: ContractTemplateSigningPlacementDragPayload, centerX: number, centerY: number) => void;
42
+ insertSigningPlacementTool: (item: ContractTemplateSigningPlacementDragPayload) => ContractTemplateSigningPlacement | undefined;
43
+ handleSigningPlacementDragStart: (event: DragEvent, item: ContractTemplateSigningPlacementToolItem) => void;
44
+ updateSigningPlacement: (nextPlacement: ContractTemplateSigningPlacement) => void;
45
+ patchSelectedSigningPlacement: (patch: Partial<ContractTemplateSigningPlacement>) => void;
46
+ duplicateSigningPlacement: (placement?: ContractTemplateSigningPlacement | undefined) => void;
47
+ removeSigningPlacement: (placement?: ContractTemplateSigningPlacement | undefined) => void;
48
+ cloneSigningPlacement: typeof cloneSigningPlacement;
49
+ };
@@ -14,6 +14,11 @@ export declare const DEFAULT_MULTILINE_LINE_HEIGHT = 28;
14
14
  export declare const CONTRACT_TEMPLATE_RENDERER_VERSION = "contract-template-renderer-1.0.0";
15
15
  /** 合同渲染 CSS 版本快照,用于服务端 PDF 复现。 */
16
16
  export declare const CONTRACT_TEMPLATE_STYLE_VERSION = "contract-render-css-1.0.0";
17
+ /** 与 PDF 模板填值服务保持一致,避免设计器允许保存但服务端拒绝的变量标识。 */
18
+ export declare const CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN: RegExp;
19
+ export declare const CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS: Set<string>;
20
+ /** 属性面板和模板全量校验共用的变量标识规则。 */
21
+ export declare function validateContractTemplateVariableKey(key: unknown, variables: ContractTemplateVariable[], currentVariableId?: string): string;
17
22
  /** 页数配置只接受正整数;非法值回落到默认 20 页。 */
18
23
  export declare function normalizeContractTemplateMaxPages(value: unknown): number;
19
24
  /** 正文可插入的变量类型及其默认尺寸。 */
@@ -111,6 +116,10 @@ export declare function buildTemplatePreviewPages(value: ContractTemplateData):
111
116
  * 先深拷贝再附加渲染器/样式版本号和表达式 HTML,保证导出快照与设计态数据解耦,
112
117
  * 宿主后续改动设计态不会污染已经拿到的导出对象。
113
118
  */
119
+ export declare class ContractTemplatePageDecorationValidationError extends Error {
120
+ readonly errors: ContractTemplateValidationError[];
121
+ constructor(errors: ContractTemplateValidationError[]);
122
+ }
114
123
  export declare function exportTemplateValue(value: ContractTemplateData): ContractTemplateExportResult;
115
124
  /**
116
125
  * 全量校验模板结构,返回可定位到具体节点的错误列表。
@@ -131,7 +140,12 @@ export declare function validateTemplateValue(value: ContractTemplateData, optio
131
140
  export declare function collectTemplateVariableKeys(page: ContractTemplatePage): Set<string>;
132
141
  /** 汇总整份模板引用到的变量 key。 */
133
142
  export declare function collectTemplateValueVariableKeys(value: Pick<ContractTemplateData, 'pages'>): Set<string>;
134
- /** 删除正文里已经不存在的变量配置,让 `variables` 与正文节点保持一致。 */
143
+ /**
144
+ * 删除正文和页面装饰里已经不存在的合法变量配置。
145
+ *
146
+ * 空 key、非法 key、保留字和重复声明必须继续留到校验层;若在这里按“无引用”
147
+ * 一并裁掉,外部脏模板会在首次正文同步后静默变成合法数据,用户反而看不到可定位错误。
148
+ */
135
149
  export declare function syncTemplateVariablesWithPages(value: ContractTemplateData): ContractTemplateData;
136
150
  /** 自动分页用的单个顶层块测量结果,坐标相对正文容器顶部。 */
137
151
  export interface ContractTemplateBlockMeasurement {
@@ -11,6 +11,19 @@ export declare function createContractTemplateFile(name?: string, pageSize?: Con
11
11
  * 重复/空 id 只在编辑态补成稳定新 id,外部数据不会被原地改写。
12
12
  */
13
13
  export declare function normalizeContractTemplateFiles(input: ContractTemplateFile[] | undefined, fallbackTemplate?: ContractTemplateData, pageSize?: ContractTemplatePageSize): ContractTemplateFile[];
14
+ /**
15
+ * 对每份文件独立套用页面尺寸白名单。
16
+ *
17
+ * 导入超页数上限时不在这里截断;被回退的签署位置 id 按文件分组,便于宿主同步坐标。
18
+ */
19
+ export declare function constrainContractTemplateFiles(files: ContractTemplateFile[], pageSizeOptions: ContractTemplatePageSize[] | undefined): {
20
+ files: {
21
+ template: ContractTemplateData;
22
+ id: string;
23
+ name: string;
24
+ }[];
25
+ resizedSigningPlacementIds: Map<string, string[]>;
26
+ };
14
27
  /** 当前 id 不可用时稳定回退第一份文件,空数组返回空字符串。 */
15
28
  export declare function resolveContractTemplateActiveFileId(files: ContractTemplateFile[], activeFileId?: string): string;
16
29
  /** 不可变替换一份文件的模板;找不到 id 时保持原数组内容。 */
@@ -0,0 +1,19 @@
1
+ import { Ref } from 'vue';
2
+ import { ContractTemplateToolbarOverflowKey } from '../utils/toolbar-overflow';
3
+ /**
4
+ * 工具栏按组收纳进「更多」面板。
5
+ *
6
+ * 组宽只在该组仍是主行子元素时缓存;进面板后量到的是竖排宽度,不能拿去算主行。
7
+ */
8
+ export declare function useToolbarOverflow(options: {
9
+ toolbarMainElement: Ref<HTMLElement | undefined>;
10
+ toolbarMoreElement: Ref<HTMLElement | undefined>;
11
+ toolbarMoreOpen: Ref<boolean>;
12
+ measureDependencies: () => unknown;
13
+ isDisposed: () => boolean;
14
+ }): {
15
+ toolbarOverflowKeys: Ref<("table" | "insert" | "cleanup" | "typography")[], ("table" | "insert" | "cleanup" | "typography")[]>;
16
+ toolbarHasOverflow: import('vue').ComputedRef<boolean>;
17
+ isToolbarGroupOverflowed: (key: ContractTemplateToolbarOverflowKey) => boolean;
18
+ measureToolbarOverflow: (settlePass?: number) => void;
19
+ };
@@ -1,4 +1,4 @@
1
- import { ContractTemplateEditorCommand, ContractTemplateEditorTextAlign, ContractTemplateFontFamilyMode, ContractTemplateFontFamilyOption, ContractTemplateTextStylePreset, ContractTemplateTextStylePresetKey } from './types';
1
+ import { ContractTemplateEditorCommand, ContractTemplateEditorTextAlign, ContractTemplateBlockStyle, ContractTemplateFontFamilyMode, ContractTemplateFontFamilyOption, ContractTemplateTextStylePreset, ContractTemplateTextStylePresetKey } from './types';
2
2
  /**
3
3
  * 合同正文默认字体。
4
4
  *
@@ -17,6 +17,9 @@ export declare const DEFAULT_TEXT_ALIGN_OPTIONS: Array<{
17
17
  label: string;
18
18
  value: ContractTemplateEditorTextAlign;
19
19
  }>;
20
+ /** Word 式段落样式;只统一结构、字号、粗体和段距,其余人工格式继续保留。 */
21
+ export declare const CONTRACT_BLOCK_STYLES: ContractTemplateBlockStyle[];
22
+ export declare function getContractBlockStyle(format: ContractTemplateBlockStyle['format']): ContractTemplateBlockStyle | undefined;
20
23
  /**
21
24
  * 合同文本样式预设。
22
25
  *
@@ -39,6 +42,9 @@ export declare function resolveContractTextStylePresetCommands(key: ContractTemp
39
42
  } | {
40
43
  type: "set-heading";
41
44
  level: import('./types').ContractTemplateHeadingLevel;
45
+ } | {
46
+ type: "apply-block-style";
47
+ format: import('./types').ContractTemplateBlockFormat;
42
48
  } | {
43
49
  type: "toggle-heading";
44
50
  level: import('./types').ContractTemplateHeadingLevel;
@@ -11,6 +11,52 @@ export interface ContractTemplatePageSize {
11
11
  height: number;
12
12
  label?: string;
13
13
  }
14
+ export type ContractTemplateDecorationTextAlign = 'left' | 'center' | 'right';
15
+ export interface ContractTemplateHeaderFooterSlots {
16
+ left: string;
17
+ center: string;
18
+ right: string;
19
+ }
20
+ /** 页眉或页脚的纯文本配置;支持 {pageNumber} / {totalPages} 页码令牌。 */
21
+ export interface ContractTemplateHeaderFooterConfig {
22
+ enabled: boolean;
23
+ text: string;
24
+ textAlign: ContractTemplateDecorationTextAlign;
25
+ fontSize: number;
26
+ color: string;
27
+ /** 新渲染器的三栏权威内容;缺省时由 text/textAlign 迁移。 */
28
+ slots?: ContractTemplateHeaderFooterSlots;
29
+ showOnFirstPage?: boolean;
30
+ fontFamily?: string;
31
+ fontWeight?: 400 | 600;
32
+ /** 距对应页面边缘的距离,单位 px。 */
33
+ offset?: number;
34
+ divider?: {
35
+ enabled: boolean;
36
+ color: string;
37
+ };
38
+ }
39
+ /** 每页居中的文字水印配置。 */
40
+ export interface ContractTemplateWatermarkConfig {
41
+ enabled: boolean;
42
+ text: string;
43
+ fontSize: number;
44
+ color: string;
45
+ opacity: number;
46
+ rotation: number;
47
+ showOnFirstPage?: boolean;
48
+ layout?: 'single' | 'tiled';
49
+ density?: 'sparse' | 'normal' | 'dense';
50
+ }
51
+ /** 模板级页面装饰;所有页面共享同一份页眉、页脚和水印配置。 */
52
+ export interface ContractTemplatePageDecorations {
53
+ header: ContractTemplateHeaderFooterConfig;
54
+ footer: ContractTemplateHeaderFooterConfig;
55
+ watermark: ContractTemplateWatermarkConfig;
56
+ pageNumbering?: {
57
+ countFirstPage: boolean;
58
+ };
59
+ }
14
60
  export interface ContractTemplateFieldStyle {
15
61
  border?: boolean;
16
62
  underline?: boolean;
@@ -118,6 +164,8 @@ export interface ContractTemplateData {
118
164
  pageSize: ContractTemplatePageSize;
119
165
  /** 旧模板可缺省;归一化后的模板始终带空数组。 */
120
166
  signingPlacements?: ContractTemplateSigningPlacement[];
167
+ /** 旧模板可缺省;配置后由设计器预览、填写渲染器和 PDF 服务共同消费。 */
168
+ pageDecorations?: ContractTemplatePageDecorations;
121
169
  }
122
170
  /** 多文件设计器中的一份独立合同文件;正文、变量和签署位置均在文件内隔离。 */
123
171
  export interface ContractTemplateFile {
@@ -138,6 +186,15 @@ export interface ContractTemplateFontFamilyOption {
138
186
  export type ContractTemplateFontFamilyMode = 'append' | 'replace';
139
187
  export type ContractTemplateEditorTextAlign = 'left' | 'center' | 'right';
140
188
  export type ContractTemplateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
189
+ export type ContractTemplateBlockFormat = 'paragraph' | ContractTemplateHeadingLevel;
190
+ export interface ContractTemplateBlockStyle {
191
+ format: ContractTemplateBlockFormat;
192
+ label: string;
193
+ fontSize: number;
194
+ bold: boolean;
195
+ marginTop: number;
196
+ marginBottom: number;
197
+ }
141
198
  export type ContractTemplateTextStylePresetKey = 'contractTitle' | 'clauseTitle' | 'bodyClause' | 'appendixTitle';
142
199
  export interface ContractTemplateTextStylePreset {
143
200
  key: ContractTemplateTextStylePresetKey;
@@ -162,6 +219,8 @@ export interface ContractTemplateEditorState {
162
219
  isOrderedList: boolean;
163
220
  isTableActive: boolean;
164
221
  currentHeadingLevel?: ContractTemplateHeadingLevel;
222
+ /** 选区内同时包含正文与标题或多个标题层级。 */
223
+ hasMixedBlockFormats?: boolean;
165
224
  textAlign: ContractTemplateEditorTextAlign;
166
225
  fontFamily?: string;
167
226
  fontSize?: number;
@@ -203,6 +262,9 @@ export type ContractTemplateEditorCommand = {
203
262
  } | {
204
263
  type: 'set-heading';
205
264
  level: ContractTemplateHeadingLevel;
265
+ } | {
266
+ type: 'apply-block-style';
267
+ format: ContractTemplateBlockFormat;
206
268
  } | {
207
269
  type: 'toggle-heading';
208
270
  level: ContractTemplateHeadingLevel;
@@ -678,3 +740,30 @@ export interface ContractTemplateDesignerExpose {
678
740
  /** 将当前模板签署位置投影为 packages/contract 使用的严格 DTO。 */
679
741
  buildContractLocationRules: (options: ContractTemplateLocationRuleOptions) => ContractLocationRule[];
680
742
  }
743
+ export type ContractTemplateEditorContextMenuPayload = {
744
+ type: 'text';
745
+ pageId: string;
746
+ clientX: number;
747
+ clientY: number;
748
+ hasSelection: boolean;
749
+ selectionWidth?: number;
750
+ leadingText?: string;
751
+ } | {
752
+ type: 'table';
753
+ pageId: string;
754
+ clientX: number;
755
+ clientY: number;
756
+ capabilities: ContractTemplateTableCommandCapabilities;
757
+ activeAlignment: ContractTemplateEditorTextAlign | 'mixed';
758
+ affectedVariableCounts: {
759
+ deleteRow: number;
760
+ deleteColumn: number;
761
+ deleteTable: number;
762
+ };
763
+ } | {
764
+ type: 'image';
765
+ pageId: string;
766
+ clientX: number;
767
+ clientY: number;
768
+ image: ContractTemplateSelectedContentImage;
769
+ };
@@ -0,0 +1,4 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import { ContractTemplateBlockFormat } from '../types';
3
+ /** 将段落样式应用到当前选区覆盖的完整块,保留字体、颜色、对齐和装饰等其它格式。 */
4
+ export declare function applyContractTemplateBlockStyle(editor: Editor, format: ContractTemplateBlockFormat): boolean;
@@ -0,0 +1,25 @@
1
+ /** 右键菜单贴边时的视口内边距;正文/图片/表格共用,避免各写一套魔法数。 */
2
+ export declare const CONTEXT_MENU_VIEWPORT_PADDING = 12;
3
+ export declare const TEXT_CONTEXT_MENU_ESTIMATED_WIDTH = 304;
4
+ export declare const TEXT_CONTEXT_MENU_ESTIMATED_HEIGHT = 300;
5
+ export declare const IMAGE_CONTEXT_MENU_ESTIMATED_WIDTH = 288;
6
+ export declare const IMAGE_CONTEXT_MENU_ESTIMATED_HEIGHT = 196;
7
+ export declare const TABLE_CONTEXT_MENU_ESTIMATED_WIDTH = 248;
8
+ export declare const TABLE_CONTEXT_MENU_ESTIMATED_HEIGHT = 400;
9
+ /** 选区气泡是紧凑单行工具条,首帧按这组估算值夹位,渲染后再按实测尺寸校正。 */
10
+ export declare const TEXT_BUBBLE_MENU_ESTIMATED_WIDTH = 380;
11
+ export declare const TEXT_BUBBLE_MENU_ESTIMATED_HEIGHT = 40;
12
+ /**
13
+ * 把菜单左上角夹进视口。
14
+ *
15
+ * 首帧常用估算宽高,渲染后再用 {@link clampContextMenuToElement} 按实测尺寸校正。
16
+ */
17
+ export declare function clampContextMenuPosition(clientX: number, clientY: number, width: number, height: number, padding?: number): {
18
+ x: number;
19
+ y: number;
20
+ };
21
+ /** 按菜单真实包围盒再夹一次,避免估算尺寸和实测不一致时贴边被裁。 */
22
+ export declare function clampContextMenuToElement(x: number, y: number, element: HTMLElement, padding?: number): {
23
+ x: number;
24
+ y: number;
25
+ };
@@ -0,0 +1,8 @@
1
+ import { ContractTemplateEditorState } from '../types';
2
+ /**
3
+ * 比较两份工具栏编辑器状态是否等价。
4
+ *
5
+ * Tiptap 每次 transaction 都会上报状态;工具栏按钮激活态往往没变。
6
+ * 只比较扁平字段和当前选中图片,避免对整份 state 做 JSON.stringify。
7
+ */
8
+ export declare function isSameEditorState(previous: ContractTemplateEditorState, next: ContractTemplateEditorState): boolean;
@@ -0,0 +1,90 @@
1
+ import { ContractTemplateHeaderFooterConfig, ContractTemplateHeaderFooterSlots, ContractTemplatePageDecorations, ContractTemplateRenderValues, ContractTemplateValidationError, ContractTemplateVariable, ContractTemplateWatermarkConfig } from '../types';
2
+ export declare const CONTRACT_PAGE_BASE_PADDING: {
3
+ readonly top: 54;
4
+ readonly right: 64;
5
+ readonly bottom: 54;
6
+ readonly left: 64;
7
+ };
8
+ export declare const CONTRACT_PAGE_DECORATED_PADDING = 80;
9
+ export declare const CONTRACT_PAGE_DECORATION_TOKEN_LIMIT = 240;
10
+ export type ContractTemplatePageDecorationPresetKey = 'none' | 'page-number' | 'internal-review' | 'draft' | 'custom';
11
+ export type ContractTemplateWatermarkDensity = 'sparse' | 'normal' | 'dense';
12
+ export type ContractTemplatePageDecorationFieldPath = `header.slots.${keyof ContractTemplateHeaderFooterSlots}` | `footer.slots.${keyof ContractTemplateHeaderFooterSlots}` | 'watermark.text';
13
+ export interface NormalizedContractTemplateHeaderFooterConfig extends ContractTemplateHeaderFooterConfig {
14
+ slots: ContractTemplateHeaderFooterSlots;
15
+ showOnFirstPage: boolean;
16
+ fontFamily: string;
17
+ fontWeight: 400 | 600;
18
+ offset: number;
19
+ divider: {
20
+ enabled: boolean;
21
+ color: string;
22
+ };
23
+ }
24
+ export interface NormalizedContractTemplateWatermarkConfig extends ContractTemplateWatermarkConfig {
25
+ showOnFirstPage: boolean;
26
+ layout: 'single' | 'tiled';
27
+ density: ContractTemplateWatermarkDensity;
28
+ }
29
+ export interface NormalizedContractTemplatePageDecorations extends ContractTemplatePageDecorations {
30
+ header: NormalizedContractTemplateHeaderFooterConfig;
31
+ footer: NormalizedContractTemplateHeaderFooterConfig;
32
+ watermark: NormalizedContractTemplateWatermarkConfig;
33
+ pageNumbering: {
34
+ countFirstPage: boolean;
35
+ };
36
+ }
37
+ export type PageDecorationToken = {
38
+ type: 'text';
39
+ value: string;
40
+ } | {
41
+ type: 'pageNumber';
42
+ } | {
43
+ type: 'totalPages';
44
+ } | {
45
+ type: 'variable';
46
+ key: string;
47
+ raw: string;
48
+ };
49
+ export interface PageDecorationTokenIssue {
50
+ code: 'DECORATION_TOKEN_MALFORMED' | 'DECORATION_VARIABLE_UNKNOWN' | 'DECORATION_VARIABLE_IMAGE_UNSUPPORTED';
51
+ message: string;
52
+ token: string;
53
+ offset: number;
54
+ }
55
+ export declare const WATERMARK_DENSITY_GRID: Record<ContractTemplateWatermarkDensity, {
56
+ columns: number;
57
+ rows: number;
58
+ }>;
59
+ export declare const DEFAULT_PAGE_DECORATIONS: NormalizedContractTemplatePageDecorations;
60
+ /** 旧 text/textAlign 在这里一次性迁移,后续所有调用方只消费完整三栏模型。 */
61
+ export declare function normalizePageDecorations(value?: Partial<ContractTemplatePageDecorations>): NormalizedContractTemplatePageDecorations;
62
+ export declare function createPageDecorationPreset(key: Exclude<ContractTemplatePageDecorationPresetKey, 'custom'>): NormalizedContractTemplatePageDecorations;
63
+ export declare function resolvePageDecorationPreset(value?: Partial<ContractTemplatePageDecorations>): ContractTemplatePageDecorationPresetKey;
64
+ export declare function hasEnabledPageHeader(value?: Partial<ContractTemplatePageDecorations>, physicalPageNumber?: number): boolean;
65
+ export declare function hasEnabledPageFooter(value?: Partial<ContractTemplatePageDecorations>, physicalPageNumber?: number): boolean;
66
+ export declare function hasEnabledPageWatermark(value?: Partial<ContractTemplatePageDecorations>, physicalPageNumber?: number): boolean;
67
+ export declare function getPageDecorationNumbers(physicalPageNumber: number, physicalTotalPages: number, countFirstPage?: boolean): {
68
+ pageNumber: string;
69
+ totalPages: string;
70
+ };
71
+ export declare function interpolatePageDecorationText(text: string, physicalPageNumber: number, physicalTotalPages: number, countFirstPage?: boolean): string;
72
+ export declare function parsePageDecorationText(text: string, variables?: readonly ContractTemplateVariable[], validateReferences?: boolean): {
73
+ tokens: PageDecorationToken[];
74
+ issues: PageDecorationTokenIssue[];
75
+ };
76
+ export declare function collectPageDecorationVariableKeys(value?: Partial<ContractTemplatePageDecorations>): Set<string>;
77
+ export declare function validatePageDecorations(value: Partial<ContractTemplatePageDecorations> | undefined, variables: readonly ContractTemplateVariable[]): ContractTemplateValidationError[];
78
+ /** 从页面装饰校验错误中还原可聚焦的表单字段路径。 */
79
+ export declare function resolvePageDecorationValidationPath(error: Pick<ContractTemplateValidationError, 'code' | 'id'>): ContractTemplatePageDecorationFieldPath | undefined;
80
+ /** 重命名与显式删除只改变量令牌,固定正文中相同字样不会被误改。 */
81
+ export declare function rewritePageDecorationVariableTokens(value: Partial<ContractTemplatePageDecorations> | undefined, previousKey: string, nextKey?: string): NormalizedContractTemplatePageDecorations;
82
+ export declare function resolvePageDecorationTokenText(token: PageDecorationToken, variables: readonly ContractTemplateVariable[], values: ContractTemplateRenderValues | undefined, physicalPageNumber: number, physicalTotalPages: number, countFirstPage: boolean): string;
83
+ export declare function getWatermarkDensityGrid(density: ContractTemplateWatermarkDensity): {
84
+ columns: number;
85
+ rows: number;
86
+ };
87
+ export declare function getPageDecorationSafePadding(config: ContractTemplateHeaderFooterConfig): number;
88
+ export declare function buildPageDecorationClassNames(value?: Partial<ContractTemplatePageDecorations>, physicalPageNumber?: number): string;
89
+ /** 导出 HTML 只输出转义文本、白名单样式和静态平铺节点,不依赖运行时脚本。 */
90
+ export declare function buildPageDecorationsHtml(value: Partial<ContractTemplatePageDecorations> | undefined, physicalPageNumber: number, physicalTotalPages: number, variables?: readonly ContractTemplateVariable[], values?: ContractTemplateRenderValues): string;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 模板 / 文件快照指纹。
3
+ *
4
+ * 设计器用序列化字符串判断「是不是自己 emit 回去的同一份数据」,
5
+ * 避免 v-model 回流把光标和选中态清掉。各处必须走同一套算法,不能有的
6
+ * stringify、有的手写比较,否则指纹对不上就会误重置编辑器。
7
+ */
8
+ export declare function serializeFingerprint(value: unknown): string;
@@ -1,4 +1,4 @@
1
- import { ContractTemplateData, ContractTemplatePageFormat, ContractTemplateRenderValue, ContractTemplateRenderValues, ContractTemplateValidationError } from '../types';
1
+ import { ContractTemplateData, ContractTemplatePageFormat, ContractTemplatePageDecorations, ContractTemplateRenderValue, ContractTemplateRenderValues, ContractTemplateValidationError, ContractTemplateVariable } from '../types';
2
2
  import { isSafeContractImageUrl } from './image-url';
3
3
  export { isSafeContractImageUrl };
4
4
  export type ContractTemplateRenderHtmlMode = 'control' | 'display';
@@ -15,6 +15,9 @@ export interface ContractTemplateRenderPage {
15
15
  width: number;
16
16
  height: number;
17
17
  contentHtml: string;
18
+ pageDecorations?: ContractTemplatePageDecorations;
19
+ decorationVariables: ContractTemplateVariable[];
20
+ decorationValues: ContractTemplateRenderValues;
18
21
  }
19
22
  /** 按变量默认值生成初始填写值,供渲染器首次挂载和 resetValues 共用。 */
20
23
  export declare function buildInitialRenderValues(template: ContractTemplateData | undefined): ContractTemplateRenderValues;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guodun/antdv",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "CHANGELOG.md",
@@ -52,8 +52,8 @@
52
52
  "vite": "^8.0.1",
53
53
  "vite-plugin-dts": "^4.5.4",
54
54
  "vue-tsc": "^3.2.5",
55
- "@guodun/tsconfig": "^1.0.0",
56
- "@guodun/theme": "^1.0.1"
55
+ "@guodun/theme": "^1.0.1",
56
+ "@guodun/tsconfig": "^1.0.0"
57
57
  },
58
58
  "dependencies": {
59
59
  "@ant-design/icons-vue": "^7.0.1",