@worm-vue3-print/canvas 1.0.1

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 (83) hide show
  1. package/README.md +54 -0
  2. package/dist/canvas.css +1 -0
  3. package/dist/components/CanvasArea.vue.d.ts +102 -0
  4. package/dist/components/CanvasPaper.vue.d.ts +50 -0
  5. package/dist/components/DesignerToolbar.vue.d.ts +59 -0
  6. package/dist/components/ExpressionEditor.vue.d.ts +16 -0
  7. package/dist/components/FieldTreePanel.vue.d.ts +11 -0
  8. package/dist/components/LayerPanel.vue.d.ts +14 -0
  9. package/dist/components/LeftPanel.vue.d.ts +24 -0
  10. package/dist/components/PresetColorPicker.vue.d.ts +10 -0
  11. package/dist/components/PrintDesigner.vue.d.ts +27 -0
  12. package/dist/components/PrintHtmlPreview.vue.d.ts +23 -0
  13. package/dist/components/PropertyPanel.vue.d.ts +23 -0
  14. package/dist/components/Ruler.vue.d.ts +12 -0
  15. package/dist/components/StatusBar.vue.d.ts +14 -0
  16. package/dist/components/WatermarkConfig.vue.d.ts +12 -0
  17. package/dist/components/elements/BarcodeElement.vue.d.ts +9 -0
  18. package/dist/components/elements/BaseElement.vue.d.ts +45 -0
  19. package/dist/components/elements/CellBarcode.vue.d.ts +10 -0
  20. package/dist/components/elements/HtmlElement.vue.d.ts +9 -0
  21. package/dist/components/elements/ImageElement.vue.d.ts +9 -0
  22. package/dist/components/elements/LineElement.vue.d.ts +7 -0
  23. package/dist/components/elements/LongTextElement.vue.d.ts +9 -0
  24. package/dist/components/elements/PageNumberElement.vue.d.ts +9 -0
  25. package/dist/components/elements/QrcodeElement.vue.d.ts +9 -0
  26. package/dist/components/elements/ShapeElement.vue.d.ts +7 -0
  27. package/dist/components/elements/TableContextMenu.vue.d.ts +19 -0
  28. package/dist/components/elements/TableElement.vue.d.ts +17 -0
  29. package/dist/components/elements/TextElement.vue.d.ts +9 -0
  30. package/dist/components/property/AdvancedGroup.vue.d.ts +13 -0
  31. package/dist/components/property/AppearanceGroup.vue.d.ts +10 -0
  32. package/dist/components/property/BindingControl.vue.d.ts +13 -0
  33. package/dist/components/property/BorderBgGroup.vue.d.ts +9 -0
  34. package/dist/components/property/CodeGroup.vue.d.ts +13 -0
  35. package/dist/components/property/ImageContentUpload.vue.d.ts +10 -0
  36. package/dist/components/property/PaginationGroup.vue.d.ts +9 -0
  37. package/dist/components/property/PositionSizeGroup.vue.d.ts +9 -0
  38. package/dist/components/property/PropertyGroup.vue.d.ts +19 -0
  39. package/dist/components/property/PropertySearch.vue.d.ts +7 -0
  40. package/dist/components/property/TableCellGroup.vue.d.ts +12 -0
  41. package/dist/components/property/TableRowGroup.vue.d.ts +8 -0
  42. package/dist/components/property/TableSettingsGroup.vue.d.ts +8 -0
  43. package/dist/composables/useAdsorb.d.ts +26 -0
  44. package/dist/composables/useAdsorbManager.d.ts +31 -0
  45. package/dist/composables/useAlign.d.ts +5 -0
  46. package/dist/composables/useBindingDisplay.d.ts +11 -0
  47. package/dist/composables/useClipboard.d.ts +251 -0
  48. package/dist/composables/useDesignerState.d.ts +1149 -0
  49. package/dist/composables/useDrag.d.ts +51 -0
  50. package/dist/composables/useGroup.d.ts +7 -0
  51. package/dist/composables/useGuides.d.ts +12 -0
  52. package/dist/composables/useHistory.d.ts +31 -0
  53. package/dist/composables/useHostAdapter.d.ts +4 -0
  54. package/dist/composables/useKeyboard.d.ts +22 -0
  55. package/dist/composables/useResize.d.ts +26 -0
  56. package/dist/composables/useSelection.d.ts +26 -0
  57. package/dist/composables/useStudioChrome.d.ts +8 -0
  58. package/dist/composables/useTableSelection.d.ts +10 -0
  59. package/dist/index.cjs +4 -0
  60. package/dist/index.cjs.map +1 -0
  61. package/dist/index.d.ts +9 -0
  62. package/dist/index.js +6444 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/render/browser-code-renderer.d.ts +3 -0
  65. package/dist/render/browser-pagination.d.ts +17 -0
  66. package/dist/types.d.ts +282 -0
  67. package/dist/utils/binding-registry.d.ts +8 -0
  68. package/dist/utils/binding.d.ts +16 -0
  69. package/dist/utils/default-config.d.ts +13 -0
  70. package/dist/utils/demo-data.d.ts +2 -0
  71. package/dist/utils/element-factory.d.ts +4 -0
  72. package/dist/utils/engine.d.ts +2 -0
  73. package/dist/utils/expression-eval.d.ts +30 -0
  74. package/dist/utils/field-groups.d.ts +21 -0
  75. package/dist/utils/migrate.d.ts +2 -0
  76. package/dist/utils/preset-colors.d.ts +2 -0
  77. package/dist/utils/property-search.d.ts +18 -0
  78. package/dist/utils/ruler.d.ts +7 -0
  79. package/dist/utils/scale.d.ts +2 -0
  80. package/dist/utils/table-matrix.d.ts +61 -0
  81. package/dist/utils/units.d.ts +4 -0
  82. package/dist/utils/zone-layout.d.ts +27 -0
  83. package/package.json +55 -0
@@ -0,0 +1,51 @@
1
+ import type { AdsorbResult } from '../types';
2
+ export interface DragOptions {
3
+ axis?: 'x' | 'y';
4
+ disabled?: boolean;
5
+ getScale?: () => number;
6
+ /** 拖拽过程中每帧回调,提供修正后的绝对坐标(调用方用 transform 做视觉跟随) */
7
+ onDrag: (pos: {
8
+ left: number;
9
+ top: number;
10
+ }) => void;
11
+ /** 拖拽结束回调,提供最终坐标与修饰符信息(调用方一次性写入响应式数据) */
12
+ onDragEnd?: (pos: {
13
+ left: number;
14
+ top: number;
15
+ }, info: {
16
+ altKey: boolean;
17
+ }) => void;
18
+ onStart?: (info: {
19
+ altKey: boolean;
20
+ }) => void;
21
+ onStop?: () => void;
22
+ onAdsorb?: (pos: {
23
+ left: number;
24
+ top: number;
25
+ width: number;
26
+ height: number;
27
+ }) => AdsorbResult;
28
+ }
29
+ export declare function useDrag(target: {
30
+ value: HTMLElement | null;
31
+ }, options: DragOptions): {
32
+ isDragging: import("vue").Ref<boolean, boolean>;
33
+ dragPreview: import("vue").Ref<{
34
+ left: number;
35
+ top: number;
36
+ width: number;
37
+ height: number;
38
+ } | null, {
39
+ left: number;
40
+ top: number;
41
+ width: number;
42
+ height: number;
43
+ } | {
44
+ left: number;
45
+ top: number;
46
+ width: number;
47
+ height: number;
48
+ } | null>;
49
+ setup: () => void;
50
+ cleanup: () => void;
51
+ };
@@ -0,0 +1,7 @@
1
+ import type { RuntimeElement } from '../types';
2
+ export declare function generateGroupId(): string;
3
+ export declare function useGroup(): {
4
+ group: (elements: RuntimeElement[], selectedIds: Set<string>) => RuntimeElement[];
5
+ ungroup: (elements: RuntimeElement[], selectedIds: Set<string>) => RuntimeElement[];
6
+ getGroupedIds: (elements: RuntimeElement[], selectedId: string) => Set<string>;
7
+ };
@@ -0,0 +1,12 @@
1
+ import { type Ref } from 'vue';
2
+ import type { TemplateData, AlignLine } from '../types';
3
+ export declare function useGuides(templateData: Ref<TemplateData>, recordHistory: () => void): {
4
+ guides: import("vue").ComputedRef<AlignLine[]>;
5
+ addGuide: (type: "vertical" | "horizontal", position: number) => void;
6
+ moveGuide: (id: string, position: number) => void;
7
+ removeGuide: (id: string) => void;
8
+ getGuidePositions: () => {
9
+ vertical: number[];
10
+ horizontal: number[];
11
+ };
12
+ };
@@ -0,0 +1,31 @@
1
+ import type { TemplateData } from '../types';
2
+ export interface HistoryState {
3
+ elements: any[];
4
+ templateData?: TemplateData;
5
+ }
6
+ export interface UseHistoryOptions {
7
+ /** 历史记录上限,默认 50 步 */
8
+ maxSteps?: number;
9
+ /** 是否启用增量快照(减少内存占用),默认 false */
10
+ useIncremental?: boolean;
11
+ }
12
+ /**
13
+ * 撤销/重做历史管理(操作级快照粒度)。
14
+ *
15
+ * 语义说明:
16
+ * - `push(state)` 记录一次操作后的快照(检查点),并清空 redo 栈。
17
+ * - `undo(currentState?)` 弹出栈顶检查点(当前状态)压入 redo 栈,
18
+ * 返回新的栈顶(即上一个待恢复状态);栈空时返回 null。
19
+ * - `redo(currentState?)` 弹出 redo 栈顶(待重做状态)压回 undo 栈并返回。
20
+ * - 所有快照均做 JSON 深拷贝,避免外部对象突变污染历史。
21
+ *
22
+ * 调用约定:若希望"撤销到初始状态",应在首次操作前先 `push(initialState)`。
23
+ */
24
+ export declare function useHistory(options?: UseHistoryOptions): {
25
+ push: (state: HistoryState) => void;
26
+ undo: (currentState?: HistoryState) => HistoryState | null;
27
+ redo: (currentState?: HistoryState) => HistoryState | null;
28
+ canUndo: import("vue").Ref<boolean, boolean>;
29
+ canRedo: import("vue").Ref<boolean, boolean>;
30
+ clear: () => void;
31
+ };
@@ -0,0 +1,4 @@
1
+ import type { ComputedRef, InjectionKey } from 'vue';
2
+ import type { UploadImageFn } from '../types';
3
+ /** 图片上传适配器:PrintDesigner provide,ImageContentUpload inject */
4
+ export declare const UPLOAD_IMAGE_KEY: InjectionKey<ComputedRef<UploadImageFn | undefined>>;
@@ -0,0 +1,22 @@
1
+ export interface KeyboardHandlers {
2
+ onMove?: (dx: number, dy: number) => void;
3
+ onDelete?: () => void;
4
+ onCopy?: () => void;
5
+ onPaste?: () => void;
6
+ onSelectAll?: () => void;
7
+ onUndo?: () => void;
8
+ onRedo?: () => void;
9
+ onDuplicate?: () => void;
10
+ onResetZoom?: () => void;
11
+ onAlignLeft?: () => void;
12
+ onAlignRight?: () => void;
13
+ onAlignCenterH?: () => void;
14
+ onAlignTop?: () => void;
15
+ onAlignBottom?: () => void;
16
+ onGroup?: () => void;
17
+ onUngroup?: () => void;
18
+ }
19
+ export declare function useKeyboard(handlers: KeyboardHandlers): {
20
+ setup: () => void;
21
+ cleanup: () => void;
22
+ };
@@ -0,0 +1,26 @@
1
+ import type { ResizePoint } from '../types';
2
+ export interface ResizeRect {
3
+ left: number;
4
+ top: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ export interface ResizeOptions {
9
+ minWidth?: number;
10
+ minHeight?: number;
11
+ getScale?: () => number;
12
+ /** 缩放起始时读取元素当前矩形(mm) */
13
+ getRect: () => ResizeRect;
14
+ onResize: (rect: ResizeRect) => void;
15
+ onStart?: () => void;
16
+ onStop?: () => void;
17
+ }
18
+ /** 8 方位缩放手柄,供模板 v-for 渲染 */
19
+ export declare const RESIZE_POINTS: ResizePoint[];
20
+ /** 根据方位与位移计算缩放后矩形(纯函数) */
21
+ export declare function calcResizeRect(point: ResizePoint, startRect: ResizeRect, dx: number, dy: number, minW: number, minH: number): ResizeRect;
22
+ /** 缩放交互逻辑:手柄由组件模板渲染,mousedown 时调用 startResize */
23
+ export declare function useResize(options: ResizeOptions): {
24
+ startResize: (point: ResizePoint, e: MouseEvent) => void;
25
+ cleanup: () => void;
26
+ };
@@ -0,0 +1,26 @@
1
+ import { type InjectionKey, type Ref } from 'vue';
2
+ import type { RuntimeElement } from '../types';
3
+ /** 通过 provide/inject 共享选中状态,每个 BaseElement 精确追踪自身是否被选中 */
4
+ export declare const SELECTED_IDS_KEY: InjectionKey<Ref<Set<string>>>;
5
+ /** 框选实时预选状态:拖拽过程中高亮即将选中的元素,提交后转为正式选中 */
6
+ export declare const PREVIEW_IDS_KEY: InjectionKey<Ref<Set<string>>>;
7
+ export declare function useSelection(elements: {
8
+ value: RuntimeElement[];
9
+ }): {
10
+ selectedIds: Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
11
+ selectedElements: import("vue").ComputedRef<RuntimeElement[]>;
12
+ hasSelection: import("vue").ComputedRef<boolean>;
13
+ select: (id: string, multiple?: boolean) => void;
14
+ clearSelection: () => void;
15
+ selectAll: (allIds: string[]) => void;
16
+ getSelectionBounds: () => {
17
+ left: number;
18
+ top: number;
19
+ width: number;
20
+ height: number;
21
+ } | null;
22
+ previewIds: Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
23
+ setPreview: (ids: string[]) => void;
24
+ clearPreview: () => void;
25
+ commitPreview: () => void;
26
+ };
@@ -0,0 +1,8 @@
1
+ export declare function useStudioChrome(): {
2
+ leftCollapsed: import("vue").Ref<boolean, boolean>;
3
+ rightCollapsed: import("vue").Ref<boolean, boolean>;
4
+ toggleLeft: () => void;
5
+ toggleRight: () => void;
6
+ dirty: import("vue").Ref<boolean, boolean>;
7
+ markSaved: () => void;
8
+ };
@@ -0,0 +1,10 @@
1
+ import type { InjectionKey, Ref } from 'vue';
2
+ import type { TableSelection } from '../types';
3
+ export interface TableEditContext {
4
+ tableSelection: Ref<TableSelection | null>;
5
+ setTableSelection: (s: TableSelection | null) => void;
6
+ recordHistory: () => void;
7
+ /** 页面打印范围宽度(mm)= 纸宽 - 左右边距,表格总列宽不得超过 */
8
+ maxTableWidth: Ref<number>;
9
+ }
10
+ export declare const TABLE_EDIT_KEY: InjectionKey<TableEditContext>;