vkedit 2.8.5

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 (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +1173 -0
  3. package/README.md +1172 -0
  4. package/dist/commands/add-element-command.d.ts +13 -0
  5. package/dist/commands/align-elements-command.d.ts +13 -0
  6. package/dist/commands/base-command.d.ts +15 -0
  7. package/dist/commands/batch-command.d.ts +16 -0
  8. package/dist/commands/change-layer-order-command.d.ts +15 -0
  9. package/dist/commands/clear-selection-command.d.ts +11 -0
  10. package/dist/commands/i-command.d.ts +13 -0
  11. package/dist/commands/index.d.ts +16 -0
  12. package/dist/commands/remove-element-command.d.ts +12 -0
  13. package/dist/commands/transform-element-command.d.ts +18 -0
  14. package/dist/commands/update-property-command.d.ts +20 -0
  15. package/dist/components/BaseElementPropertyPanel.vue.d.ts +9 -0
  16. package/dist/components/CanvasPropertyPanel.vue.d.ts +9 -0
  17. package/dist/components/ContextMenuDelete.vue.d.ts +5 -0
  18. package/dist/components/TextProperty.vue.d.ts +15 -0
  19. package/dist/components/index.d.ts +4 -0
  20. package/dist/components/ui/button/Button.vue.d.ts +27 -0
  21. package/dist/components/ui/button/index.d.ts +7 -0
  22. package/dist/components/ui/button-group/ButtonGroup.vue.d.ts +23 -0
  23. package/dist/components/ui/button-group/ButtonGroupSeparator.vue.d.ts +9 -0
  24. package/dist/components/ui/button-group/ButtonGroupText.vue.d.ts +26 -0
  25. package/dist/components/ui/button-group/index.d.ts +8 -0
  26. package/dist/components/ui/dropdown-menu/DropdownMenu.vue.d.ts +22 -0
  27. package/dist/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue.d.ts +28 -0
  28. package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +36 -0
  29. package/dist/components/ui/dropdown-menu/DropdownMenuGroup.vue.d.ts +18 -0
  30. package/dist/components/ui/dropdown-menu/DropdownMenuItem.vue.d.ts +26 -0
  31. package/dist/components/ui/dropdown-menu/DropdownMenuLabel.vue.d.ts +23 -0
  32. package/dist/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue.d.ts +22 -0
  33. package/dist/components/ui/dropdown-menu/DropdownMenuRadioItem.vue.d.ts +26 -0
  34. package/dist/components/ui/dropdown-menu/DropdownMenuSeparator.vue.d.ts +7 -0
  35. package/dist/components/ui/dropdown-menu/DropdownMenuShortcut.vue.d.ts +21 -0
  36. package/dist/components/ui/dropdown-menu/DropdownMenuSub.vue.d.ts +22 -0
  37. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +38 -0
  38. package/dist/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +23 -0
  39. package/dist/components/ui/dropdown-menu/DropdownMenuTrigger.vue.d.ts +18 -0
  40. package/dist/components/ui/dropdown-menu/index.d.ts +15 -0
  41. package/dist/components/ui/index.d.ts +14 -0
  42. package/dist/components/ui/input/Input.vue.d.ts +12 -0
  43. package/dist/components/ui/input/index.d.ts +1 -0
  44. package/dist/components/ui/input-mm/InputMM.vue.d.ts +13 -0
  45. package/dist/components/ui/input-mm/InputNumberMM.vue.d.ts +14 -0
  46. package/dist/components/ui/input-mm/index.d.ts +2 -0
  47. package/dist/components/ui/input-number/VkInputNumber.vue.d.ts +9 -0
  48. package/dist/components/ui/input-number/index.d.ts +1 -0
  49. package/dist/components/ui/label/Label.vue.d.ts +22 -0
  50. package/dist/components/ui/label/index.d.ts +1 -0
  51. package/dist/components/ui/number-field/NumberField.vue.d.ts +26 -0
  52. package/dist/components/ui/number-field/NumberFieldContent.vue.d.ts +21 -0
  53. package/dist/components/ui/number-field/NumberFieldDecrement.vue.d.ts +22 -0
  54. package/dist/components/ui/number-field/NumberFieldIncrement.vue.d.ts +22 -0
  55. package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -0
  56. package/dist/components/ui/number-field/index.d.ts +5 -0
  57. package/dist/components/ui/scroll-area/ScrollArea.vue.d.ts +22 -0
  58. package/dist/components/ui/scroll-area/ScrollBar.vue.d.ts +9 -0
  59. package/dist/components/ui/scroll-area/index.d.ts +2 -0
  60. package/dist/components/ui/select/Select.vue.d.ts +25 -0
  61. package/dist/components/ui/select/SelectContent.vue.d.ts +32 -0
  62. package/dist/components/ui/select/SelectGroup.vue.d.ts +18 -0
  63. package/dist/components/ui/select/SelectItem.vue.d.ts +22 -0
  64. package/dist/components/ui/select/SelectItemText.vue.d.ts +18 -0
  65. package/dist/components/ui/select/SelectLabel.vue.d.ts +22 -0
  66. package/dist/components/ui/select/SelectScrollDownButton.vue.d.ts +22 -0
  67. package/dist/components/ui/select/SelectScrollUpButton.vue.d.ts +22 -0
  68. package/dist/components/ui/select/SelectSeparator.vue.d.ts +7 -0
  69. package/dist/components/ui/select/SelectTrigger.vue.d.ts +25 -0
  70. package/dist/components/ui/select/SelectValue.vue.d.ts +18 -0
  71. package/dist/components/ui/select/index.d.ts +11 -0
  72. package/dist/components/ui/separator/Separator.vue.d.ts +10 -0
  73. package/dist/components/ui/separator/index.d.ts +1 -0
  74. package/dist/components/ui/slider/Slider.vue.d.ts +13 -0
  75. package/dist/components/ui/slider/index.d.ts +1 -0
  76. package/dist/components/ui/switch/Switch.vue.d.ts +26 -0
  77. package/dist/components/ui/switch/index.d.ts +1 -0
  78. package/dist/components/ui/textarea/Textarea.vue.d.ts +12 -0
  79. package/dist/components/ui/textarea/index.d.ts +1 -0
  80. package/dist/components/ui/toggle/Toggle.vue.d.ts +33 -0
  81. package/dist/components/ui/toggle/index.d.ts +7 -0
  82. package/dist/core/BgLayer.vue.d.ts +8 -0
  83. package/dist/core/ContentLayer.vue.d.ts +29 -0
  84. package/dist/core/ContextMenu.vue.d.ts +6 -0
  85. package/dist/core/Editor.vue.d.ts +38 -0
  86. package/dist/core/PropertyPanel.vue.d.ts +23 -0
  87. package/dist/core/RulerLayer.vue.d.ts +10 -0
  88. package/dist/core/ScrollbarLayer.vue.d.ts +8 -0
  89. package/dist/core/SelectionLayer.vue.d.ts +6 -0
  90. package/dist/core/StageView.vue.d.ts +9 -0
  91. package/dist/core/Toolbar.vue.d.ts +29 -0
  92. package/dist/core/Toolbox.vue.d.ts +23 -0
  93. package/dist/core/Zoom.vue.d.ts +6 -0
  94. package/dist/core/editor-host.d.ts +34 -0
  95. package/dist/core/index.d.ts +2 -0
  96. package/dist/create-host.d.ts +9 -0
  97. package/dist/favicon.ico +0 -0
  98. package/dist/hooks/index.d.ts +10 -0
  99. package/dist/hooks/use-bg-layer.d.ts +22 -0
  100. package/dist/hooks/use-content-layer.d.ts +66 -0
  101. package/dist/hooks/use-host-state.d.ts +14 -0
  102. package/dist/hooks/use-property-command.d.ts +6 -0
  103. package/dist/hooks/use-ruler-layer.d.ts +24 -0
  104. package/dist/hooks/use-scrollbar-layer.d.ts +47 -0
  105. package/dist/hooks/use-selection-layer.d.ts +35 -0
  106. package/dist/hooks/use-stage-event.d.ts +33 -0
  107. package/dist/hooks/use-stage.d.ts +14 -0
  108. package/dist/hooks/use-zoom.d.ts +12 -0
  109. package/dist/html2canvas.esm-Dmi1NfiH.js +4871 -0
  110. package/dist/index-CjPgwxVC.js +82707 -0
  111. package/dist/index.d.ts +8 -0
  112. package/dist/index.es-DekiblxN.js +6674 -0
  113. package/dist/lib/utils.d.ts +2 -0
  114. package/dist/plugins/align/Align.vue.d.ts +6 -0
  115. package/dist/plugins/align/align.d.ts +11 -0
  116. package/dist/plugins/align/index.d.ts +2 -0
  117. package/dist/plugins/barcode/PropertyPanel.vue.d.ts +9 -0
  118. package/dist/plugins/barcode/Shape.vue.d.ts +8 -0
  119. package/dist/plugins/barcode/Tool.vue.d.ts +5 -0
  120. package/dist/plugins/barcode/barcode.d.ts +72 -0
  121. package/dist/plugins/barcode/index.d.ts +4 -0
  122. package/dist/plugins/chart/PropertyPanel.vue.d.ts +9 -0
  123. package/dist/plugins/chart/Shape.vue.d.ts +23 -0
  124. package/dist/plugins/chart/Tool.vue.d.ts +5 -0
  125. package/dist/plugins/chart/chart.d.ts +38 -0
  126. package/dist/plugins/chart/index.d.ts +4 -0
  127. package/dist/plugins/context-menu-manager/context-menu-manager.d.ts +28 -0
  128. package/dist/plugins/context-menu-manager/index.d.ts +1 -0
  129. package/dist/plugins/element-manager.d.ts +24 -0
  130. package/dist/plugins/export/Export.vue.d.ts +6 -0
  131. package/dist/plugins/export/export.d.ts +36 -0
  132. package/dist/plugins/export/index.d.ts +2 -0
  133. package/dist/plugins/graphic-manager/graphic-manager.d.ts +31 -0
  134. package/dist/plugins/graphic-manager/index.d.ts +1 -0
  135. package/dist/plugins/graphic-tool-manager.d.ts +16 -0
  136. package/dist/plugins/import/Import.vue.d.ts +6 -0
  137. package/dist/plugins/import/import.d.ts +33 -0
  138. package/dist/plugins/import/index.d.ts +2 -0
  139. package/dist/plugins/index.d.ts +19 -0
  140. package/dist/plugins/keydown.d.ts +15 -0
  141. package/dist/plugins/line/PropertyPanel.vue.d.ts +9 -0
  142. package/dist/plugins/line/Shape.vue.d.ts +6 -0
  143. package/dist/plugins/line/Tool.vue.d.ts +6 -0
  144. package/dist/plugins/line/index.d.ts +4 -0
  145. package/dist/plugins/line/line.d.ts +62 -0
  146. package/dist/plugins/preview/PreviewButton.vue.d.ts +5 -0
  147. package/dist/plugins/preview/index.d.ts +1 -0
  148. package/dist/plugins/preview/preview.d.ts +26 -0
  149. package/dist/plugins/property-panel-manager/index.d.ts +1 -0
  150. package/dist/plugins/property-panel-manager/property-panel-manager.d.ts +32 -0
  151. package/dist/plugins/qrcode/PropertyPanel.vue.d.ts +9 -0
  152. package/dist/plugins/qrcode/Shape.vue.d.ts +8 -0
  153. package/dist/plugins/qrcode/Tool.vue.d.ts +5 -0
  154. package/dist/plugins/qrcode/index.d.ts +4 -0
  155. package/dist/plugins/qrcode/qrcode.d.ts +75 -0
  156. package/dist/plugins/rect/PropertyPanel.vue.d.ts +9 -0
  157. package/dist/plugins/rect/Shape.vue.d.ts +6 -0
  158. package/dist/plugins/rect/Tool.vue.d.ts +6 -0
  159. package/dist/plugins/rect/index.d.ts +4 -0
  160. package/dist/plugins/rect/rect.d.ts +70 -0
  161. package/dist/plugins/selection.d.ts +35 -0
  162. package/dist/plugins/table/CellsBorder.vue.d.ts +6 -0
  163. package/dist/plugins/table/ContextMenu.vue.d.ts +9 -0
  164. package/dist/plugins/table/PropertyPanel.vue.d.ts +9 -0
  165. package/dist/plugins/table/Shape.vue.d.ts +26 -0
  166. package/dist/plugins/table/Tool.vue.d.ts +6 -0
  167. package/dist/plugins/table/cell.d.ts +61 -0
  168. package/dist/plugins/table/index.d.ts +6 -0
  169. package/dist/plugins/table/table.d.ts +93 -0
  170. package/dist/plugins/text/PropertyPanel.vue.d.ts +9 -0
  171. package/dist/plugins/text/Shape.vue.d.ts +6 -0
  172. package/dist/plugins/text/TextContextMenu.vue.d.ts +5 -0
  173. package/dist/plugins/text/Tool.vue.d.ts +5 -0
  174. package/dist/plugins/text/index.d.ts +5 -0
  175. package/dist/plugins/text/text.d.ts +75 -0
  176. package/dist/plugins/toolbar-manager.d.ts +16 -0
  177. package/dist/purify.es-8O7LIJdo.js +553 -0
  178. package/dist/stores/index.d.ts +1 -0
  179. package/dist/stores/use-stage-store.d.ts +40 -0
  180. package/dist/styles/index.css +144 -0
  181. package/dist/types/base-graphic-element.d.ts +82 -0
  182. package/dist/types/base-graphic-type.d.ts +9 -0
  183. package/dist/types/base-plugin.d.ts +17 -0
  184. package/dist/types/base.d.ts +81 -0
  185. package/dist/types/element-type-map.d.ts +12 -0
  186. package/dist/types/event-data.d.ts +116 -0
  187. package/dist/types/event-map.d.ts +146 -0
  188. package/dist/types/index.d.ts +9 -0
  189. package/dist/types/konva-text.d.ts +3 -0
  190. package/dist/types/plugin-map.d.ts +12 -0
  191. package/dist/vkedit.css +1 -0
  192. package/dist/vkedit.es.js +113 -0
  193. package/package.json +91 -0
@@ -0,0 +1,144 @@
1
+ @import 'tailwindcss';
2
+ @import 'tw-animate-css';
3
+
4
+ @custom-variant dark (&:is(.dark *));
5
+
6
+ :root {
7
+ --background: oklch(1 0 0);
8
+ --foreground: oklch(0.145 0 0);
9
+ --card: oklch(1 0 0);
10
+ --card-foreground: oklch(0.145 0 0);
11
+ --popover: oklch(1 0 0);
12
+ --popover-foreground: oklch(0.145 0 0);
13
+ --primary: oklch(0.205 0 0);
14
+ --primary-foreground: oklch(0.985 0 0);
15
+ --secondary: oklch(0.97 0 0);
16
+ --secondary-foreground: oklch(0.205 0 0);
17
+ --muted: oklch(0.97 0 0);
18
+ --muted-foreground: oklch(0.556 0 0);
19
+ --accent: oklch(0.97 0 0);
20
+ --accent-foreground: oklch(0.205 0 0);
21
+ --destructive: oklch(0.577 0.245 27.325);
22
+ --destructive-foreground: oklch(0.577 0.245 27.325);
23
+ --border: oklch(0.922 0 0);
24
+ --input: oklch(0.922 0 0);
25
+ --ring: oklch(0.708 0 0);
26
+ --chart-1: oklch(0.646 0.222 41.116);
27
+ --chart-2: oklch(0.6 0.118 184.704);
28
+ --chart-3: oklch(0.398 0.07 227.392);
29
+ --chart-4: oklch(0.828 0.189 84.429);
30
+ --chart-5: oklch(0.769 0.188 70.08);
31
+ --radius: 0.625rem;
32
+ --sidebar: oklch(0.985 0 0);
33
+ --sidebar-foreground: oklch(0.145 0 0);
34
+ --sidebar-primary: oklch(0.205 0 0);
35
+ --sidebar-primary-foreground: oklch(0.985 0 0);
36
+ --sidebar-accent: oklch(0.97 0 0);
37
+ --sidebar-accent-foreground: oklch(0.205 0 0);
38
+ --sidebar-border: oklch(0.922 0 0);
39
+ --sidebar-ring: oklch(0.708 0 0);
40
+ }
41
+
42
+ .dark {
43
+ --background: oklch(0.145 0 0);
44
+ --foreground: oklch(0.985 0 0);
45
+ --card: oklch(0.145 0 0);
46
+ --card-foreground: oklch(0.985 0 0);
47
+ --popover: oklch(0.145 0 0);
48
+ --popover-foreground: oklch(0.985 0 0);
49
+ --primary: oklch(0.985 0 0);
50
+ --primary-foreground: oklch(0.205 0 0);
51
+ --secondary: oklch(0.269 0 0);
52
+ --secondary-foreground: oklch(0.985 0 0);
53
+ --muted: oklch(0.269 0 0);
54
+ --muted-foreground: oklch(0.708 0 0);
55
+ --accent: oklch(0.269 0 0);
56
+ --accent-foreground: oklch(0.985 0 0);
57
+ --destructive: oklch(0.396 0.141 25.723);
58
+ --destructive-foreground: oklch(0.637 0.237 25.331);
59
+ --border: oklch(0.269 0 0);
60
+ --input: oklch(0.269 0 0);
61
+ --ring: oklch(0.439 0 0);
62
+ --chart-1: oklch(0.488 0.243 264.376);
63
+ --chart-2: oklch(0.696 0.17 162.48);
64
+ --chart-3: oklch(0.769 0.188 70.08);
65
+ --chart-4: oklch(0.627 0.265 303.9);
66
+ --chart-5: oklch(0.645 0.246 16.439);
67
+ --sidebar: oklch(0.205 0 0);
68
+ --sidebar-foreground: oklch(0.985 0 0);
69
+ --sidebar-primary: oklch(0.488 0.243 264.376);
70
+ --sidebar-primary-foreground: oklch(0.985 0 0);
71
+ --sidebar-accent: oklch(0.269 0 0);
72
+ --sidebar-accent-foreground: oklch(0.985 0 0);
73
+ --sidebar-border: oklch(0.269 0 0);
74
+ --sidebar-ring: oklch(0.439 0 0);
75
+ }
76
+
77
+ @theme inline {
78
+ --color-background: var(--background);
79
+ --color-foreground: var(--foreground);
80
+ --color-card: var(--card);
81
+ --color-card-foreground: var(--card-foreground);
82
+ --color-popover: var(--popover);
83
+ --color-popover-foreground: var(--popover-foreground);
84
+ --color-primary: var(--primary);
85
+ --color-primary-foreground: var(--primary-foreground);
86
+ --color-secondary: var(--secondary);
87
+ --color-secondary-foreground: var(--secondary-foreground);
88
+ --color-muted: var(--muted);
89
+ --color-muted-foreground: var(--muted-foreground);
90
+ --color-accent: var(--accent);
91
+ --color-accent-foreground: var(--accent-foreground);
92
+ --color-destructive: var(--destructive);
93
+ --color-destructive-foreground: var(--destructive-foreground);
94
+ --color-border: var(--border);
95
+ --color-input: var(--input);
96
+ --color-ring: var(--ring);
97
+ --color-chart-1: var(--chart-1);
98
+ --color-chart-2: var(--chart-2);
99
+ --color-chart-3: var(--chart-3);
100
+ --color-chart-4: var(--chart-4);
101
+ --color-chart-5: var(--chart-5);
102
+ --radius-sm: calc(var(--radius) - 4px);
103
+ --radius-md: calc(var(--radius) - 2px);
104
+ --radius-lg: var(--radius);
105
+ --radius-xl: calc(var(--radius) + 4px);
106
+ --color-sidebar: var(--sidebar);
107
+ --color-sidebar-foreground: var(--sidebar-foreground);
108
+ --color-sidebar-primary: var(--sidebar-primary);
109
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
110
+ --color-sidebar-accent: var(--sidebar-accent);
111
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
112
+ --color-sidebar-border: var(--sidebar-border);
113
+ --color-sidebar-ring: var(--sidebar-ring);
114
+
115
+ --animate-accordion-down: accordion-down 0.2s ease-out;
116
+ --animate-accordion-up: accordion-up 0.2s ease-out;
117
+
118
+ @keyframes accordion-down {
119
+ from {
120
+ height: 0;
121
+ }
122
+ to {
123
+ height: var(--reka-accordion-content-height);
124
+ }
125
+ }
126
+
127
+ @keyframes accordion-up {
128
+ from {
129
+ height: var(--reka-accordion-content-height);
130
+ }
131
+ to {
132
+ height: 0;
133
+ }
134
+ }
135
+ }
136
+
137
+ @layer base {
138
+ * {
139
+ @apply border-border outline-ring/50;
140
+ }
141
+ body {
142
+ @apply bg-background text-foreground;
143
+ }
144
+ }
@@ -0,0 +1,82 @@
1
+ import { IGraphicElement } from '.';
2
+ import { EditorHost } from '../core';
3
+ export interface BaseGraphicElementOptions {
4
+ xmm?: number;
5
+ ymm?: number;
6
+ wmm?: number;
7
+ hmm?: number;
8
+ rotation?: number;
9
+ scaleX?: number;
10
+ scaleY?: number;
11
+ visible?: boolean;
12
+ locked?: boolean;
13
+ draggable?: boolean;
14
+ transferable?: boolean;
15
+ }
16
+ export declare abstract class BaseGraphicElement implements IGraphicElement {
17
+ get x(): number;
18
+ set x(value: number);
19
+ get y(): number;
20
+ set y(value: number);
21
+ get height(): number;
22
+ set height(value: number);
23
+ get width(): number;
24
+ set width(value: number);
25
+ abstract type: string;
26
+ host: EditorHost;
27
+ id: string;
28
+ xmm: number;
29
+ ymm: number;
30
+ wmm: number;
31
+ hmm: number;
32
+ rotation: number;
33
+ scaleX: number;
34
+ scaleY: number;
35
+ visible: boolean;
36
+ locked: boolean;
37
+ draggable: boolean;
38
+ transferable: boolean;
39
+ constructor(host: EditorHost, options?: Partial<BaseGraphicElementOptions>);
40
+ updateProperty(host: EditorHost, property: string, oldValue: any, newValue: any): void;
41
+ clone(): IGraphicElement;
42
+ getBoundingBox(): {
43
+ x: number;
44
+ y: number;
45
+ width: number;
46
+ height: number;
47
+ };
48
+ deserialize(data: any): void;
49
+ serialize(): {
50
+ id: string;
51
+ type: string;
52
+ xmm: number;
53
+ ymm: number;
54
+ wmm: number;
55
+ hmm: number;
56
+ rotation: number;
57
+ scaleX: number;
58
+ scaleY: number;
59
+ visible: boolean;
60
+ locked: boolean;
61
+ draggable: boolean;
62
+ transferable: boolean;
63
+ [key: string]: any;
64
+ };
65
+ getTransformAttr(event: any): {
66
+ oldAttrs: any;
67
+ newAttrs: any;
68
+ };
69
+ get config(): {
70
+ id: string;
71
+ x: number;
72
+ y: number;
73
+ width: number;
74
+ height: number;
75
+ rotation: number;
76
+ scaleX: number;
77
+ scaleY: number;
78
+ visible: boolean;
79
+ draggable: boolean;
80
+ [key: string]: any;
81
+ };
82
+ }
@@ -0,0 +1,9 @@
1
+ import { Component } from 'vue';
2
+ import { IGraphicElement, IGraphicType } from '.';
3
+ export declare abstract class BaseGraphicType implements IGraphicType {
4
+ abstract readonly type: string;
5
+ abstract render(): Component;
6
+ abstract renderTool(): Component;
7
+ abstract renderPropertyPanel(): Component;
8
+ abstract createElement(x: number, y: number): IGraphicElement;
9
+ }
@@ -0,0 +1,17 @@
1
+ import { IEditorPlugin } from '.';
2
+ import { EditorHost } from '../core';
3
+ export declare abstract class BasePlugin implements IEditorPlugin {
4
+ abstract name: string;
5
+ abstract version: string;
6
+ protected host: EditorHost;
7
+ protected isActivate: boolean;
8
+ constructor(host: EditorHost);
9
+ install(): void;
10
+ uninstall(): void;
11
+ activate(): void;
12
+ deactivate(): void;
13
+ protected onInstall(): void;
14
+ protected onUninstall(): void;
15
+ protected onActivate(): void;
16
+ protected onDeactivate(): void;
17
+ }
@@ -0,0 +1,81 @@
1
+ import { Component } from 'vue';
2
+ import { EditorHost } from '../core';
3
+ export interface Point2D {
4
+ x: number;
5
+ y: number;
6
+ }
7
+ export interface Size2D {
8
+ width: number;
9
+ height: number;
10
+ }
11
+ export interface BoundingBox {
12
+ x: number;
13
+ y: number;
14
+ width: number;
15
+ height: number;
16
+ }
17
+ export interface IGraphicComponent {
18
+ component: any;
19
+ props?: any;
20
+ events?: any;
21
+ }
22
+ export interface IGraphicElement {
23
+ id: string;
24
+ type: string;
25
+ x: number;
26
+ y: number;
27
+ width: number;
28
+ height: number;
29
+ rotation: number;
30
+ scaleX: number;
31
+ scaleY: number;
32
+ visible: boolean;
33
+ locked: boolean;
34
+ draggable: boolean;
35
+ transferable: boolean;
36
+ getBoundingBox(): BoundingBox;
37
+ clone(): IGraphicElement;
38
+ serialize(): any;
39
+ deserialize(data: any): void;
40
+ updateProperty(host: EditorHost, property: string, oldValue: any, newValue: any): void;
41
+ getTransformAttr?(event: any): {
42
+ oldAttrs: any;
43
+ newAttrs: any;
44
+ };
45
+ }
46
+ export interface IEditorPlugin {
47
+ name: string;
48
+ version: string;
49
+ install(host: EditorHost): void;
50
+ uninstall(): void;
51
+ activate?(): void;
52
+ deactivate?(): void;
53
+ registerGraphicTypes?(): IGraphicType[];
54
+ getTools?(): IPluginTool[];
55
+ [key: string]: any;
56
+ }
57
+ export interface IPluginTool {
58
+ [key: string]: any;
59
+ }
60
+ export interface IGraphicType {
61
+ type: string;
62
+ render(): Component;
63
+ renderTool(): Component;
64
+ renderPropertyPanel(): Component;
65
+ createElement(x: number, y: number): IGraphicElement;
66
+ }
67
+ export interface IEditorState {
68
+ zoom: number;
69
+ currentTool: string;
70
+ snapToGrid: boolean;
71
+ showGrid: boolean;
72
+ width: number;
73
+ height: number;
74
+ wmm: number;
75
+ hmm: number;
76
+ dpm: number;
77
+ }
78
+ export interface IToolbar {
79
+ name: string;
80
+ getComponent(): Component;
81
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 可扩展的元素类型映射(插件可以通过模块声明合并来为此接口添加新类型)
3
+ * 示例:在某个插件中扩展`ElementTypeMap`
4
+ * - `declare module '@/types' {`
5
+ * - `interface ElementTypeMap {`
6
+ * - `yourType: YourElement}`
7
+ * - `}`
8
+ * - 然后你就可以这样使用它了:
9
+ * - const el = elementManager.createElement('yourType') // el 的类型被推断为 YourElement
10
+ */
11
+ export interface ElementTypeMap {
12
+ }
@@ -0,0 +1,116 @@
1
+ import { Component } from 'vue';
2
+ import { IEditorState, IGraphicElement, Point2D } from './base';
3
+ /**
4
+ * 事件数据接口定义
5
+ */
6
+ export interface BaseEventData {
7
+ timestamp?: number;
8
+ source?: string;
9
+ }
10
+ export interface ElementEventData extends BaseEventData {
11
+ element: any;
12
+ elementId: string;
13
+ }
14
+ export interface ElementRegisteredEventData extends BaseEventData {
15
+ createElement: () => IGraphicElement;
16
+ type: string;
17
+ }
18
+ export interface SelectionEventData extends BaseEventData {
19
+ selection: Array<IGraphicElement>;
20
+ }
21
+ export interface TransformEventData extends ElementEventData {
22
+ oldState: any;
23
+ newState: any;
24
+ transformType: 'move' | 'rotate' | 'scale' | 'skew' | 'resize' | 'transform';
25
+ }
26
+ export interface ElementUpdateEventData extends ElementEventData {
27
+ updatedProperties: string[];
28
+ }
29
+ export interface ToolEventData extends BaseEventData {
30
+ toolName: string;
31
+ render: () => Component;
32
+ }
33
+ export interface PluginEventData extends BaseEventData {
34
+ plugin: any;
35
+ }
36
+ export interface CommandEventData extends BaseEventData {
37
+ command: any;
38
+ }
39
+ export interface HistoryEventData extends BaseEventData {
40
+ canUndo: boolean;
41
+ canRedo: boolean;
42
+ undoDescription?: string;
43
+ redoDescription?: string;
44
+ }
45
+ export interface ViewEventData extends BaseEventData {
46
+ zoom: number;
47
+ previousZoom?: number;
48
+ viewport?: any;
49
+ }
50
+ export interface CreationEventData extends BaseEventData {
51
+ element: any;
52
+ toolName: string;
53
+ startPoint: any;
54
+ endPoint?: any;
55
+ }
56
+ export interface ErrorEventData extends BaseEventData {
57
+ error: any;
58
+ operation?: string;
59
+ context?: any;
60
+ }
61
+ export interface PerformanceEventData extends BaseEventData {
62
+ metric: string;
63
+ value: number;
64
+ threshold?: number;
65
+ }
66
+ export interface StateEventData extends BaseEventData {
67
+ state: IEditorState;
68
+ }
69
+ export interface AlignEventData extends BaseEventData {
70
+ alignment: 'left' | 'right' | 'top' | 'bottom' | 'centerX' | 'centerY';
71
+ elementIds: string[];
72
+ }
73
+ export interface LayerOrderEventData extends BaseEventData {
74
+ elementId: string;
75
+ direction: 'up' | 'down' | 'top' | 'bottom';
76
+ }
77
+ export interface BaseStageEventData extends BaseEventData {
78
+ point: Point2D;
79
+ target: any;
80
+ currentTarget: any;
81
+ pointerId: number;
82
+ type: string;
83
+ }
84
+ export interface StageMouseEventData extends BaseStageEventData {
85
+ evt: MouseEvent;
86
+ }
87
+ export interface StageKeyboardEventData extends BaseEventData {
88
+ evt: KeyboardEvent;
89
+ }
90
+ export interface StatusEventData extends BaseEventData {
91
+ status: IEditorState;
92
+ }
93
+ /**
94
+ * 事件工具函数
95
+ */
96
+ export declare class EventUtils {
97
+ /**
98
+ * 生成自定义事件名(供插件使用)
99
+ */
100
+ static createCustomEvent(pluginName: string, eventName: string): string;
101
+ /**
102
+ * 检查是否为自定义事件
103
+ */
104
+ static isCustomEvent(eventName: string): boolean;
105
+ /**
106
+ * 从自定义事件名解析插件名和事件名
107
+ */
108
+ static parseCustomEvent(eventName: string): {
109
+ pluginName: string;
110
+ eventName: string;
111
+ } | null;
112
+ /**
113
+ * 创建基础事件数据
114
+ */
115
+ static createBaseEventData(source?: string): BaseEventData;
116
+ }
@@ -0,0 +1,146 @@
1
+ import { BaseEventData, ElementEventData, SelectionEventData, TransformEventData, ToolEventData, PluginEventData, CommandEventData, HistoryEventData, ViewEventData, CreationEventData, ErrorEventData, PerformanceEventData, AlignEventData, LayerOrderEventData, ElementUpdateEventData, StageMouseEventData, StageKeyboardEventData, ElementRegisteredEventData, StatusEventData } from './event-data';
2
+ /**
3
+ * 编辑器事件映射接口
4
+ * @description 定义编辑器中所有可能的事件及其对应的负载类型。
5
+ * 每个事件名称映射到一个函数类型,该函数接受特定的事件数据作为参数。
6
+ * 通过使用此接口,可以实现类型安全的事件处理机制,确保在触发和监听事件时使用正确的数据类型。
7
+ * 拓展示例:
8
+ * @example
9
+ * ```typescript
10
+ * declare module '@/types' {
11
+ * interface EventMap {
12
+ * yourType: (payload: YourEventData) => void
13
+ * }}
14
+ * - 然后你就可以这样使用它了:
15
+ * - host.emit(yourType,(evt)=>{}) // evt 的类型被推断为 YourEventData
16
+ * ```
17
+ * */
18
+ export interface EventMap {
19
+ 'editor:ready': (payload: BaseEventData) => void;
20
+ 'editor:destroy': (payload: BaseEventData) => void;
21
+ 'editor:reset': (payload: BaseEventData) => void;
22
+ 'file:new': (payload: BaseEventData) => void;
23
+ 'file:open': (payload: BaseEventData) => void;
24
+ 'file:save': (payload: BaseEventData) => void;
25
+ 'file:save-as': (payload: BaseEventData) => void;
26
+ 'file:export': (payload: BaseEventData) => void;
27
+ 'file:import': (payload: BaseEventData) => void;
28
+ 'file:loaded': (payload: BaseEventData) => void;
29
+ 'file:saved': (payload: BaseEventData) => void;
30
+ 'file:modified-change': (payload: BaseEventData) => void;
31
+ 'stage:mousedown': (payload: StageMouseEventData) => void;
32
+ 'stage:mousemove': (payload: StageMouseEventData) => void;
33
+ 'stage:mouseup': (payload: StageMouseEventData) => void;
34
+ 'stage:click': (payload: StageMouseEventData) => void;
35
+ 'stage:dblclick': (payload: StageMouseEventData) => void;
36
+ 'stage:contextmenu': (payload: StageMouseEventData) => void;
37
+ 'stage:mouseenter': (payload: StageMouseEventData) => void;
38
+ 'stage:mouseleave': (payload: StageMouseEventData) => void;
39
+ 'stage:wheel': (payload: StageMouseEventData) => void;
40
+ 'stage:dragstart': (payload: StageMouseEventData) => void;
41
+ 'stage:dragend': (payload: StageMouseEventData) => void;
42
+ 'stage:keydown': (payload: StageKeyboardEventData) => void;
43
+ 'stage:keydown-delete': (payload: StageKeyboardEventData) => void;
44
+ 'stage:keydown-left': (payload: StageKeyboardEventData) => void;
45
+ 'stage:keydown-right': (payload: StageKeyboardEventData) => void;
46
+ 'stage:keydown-up': (payload: StageKeyboardEventData) => void;
47
+ 'stage:keydown-down': (payload: StageKeyboardEventData) => void;
48
+ 'stage:redraw': (payload: BaseEventData) => void;
49
+ 'tool:changed': (payload: ToolEventData) => void;
50
+ 'tool:activated': (payload: ToolEventData) => void;
51
+ 'tool:registered': (payload: ToolEventData) => void;
52
+ 'tool:unregistered': (payload: ToolEventData) => void;
53
+ 'element:registered': (payload: ElementRegisteredEventData) => void;
54
+ 'element:unregistered': (payload: ElementRegisteredEventData) => void;
55
+ 'element:added': (payload: ElementEventData) => void;
56
+ 'element:removed': (payload: ElementEventData) => void;
57
+ 'element:selected': (payload: ElementEventData) => void;
58
+ 'element:deselected': (payload: ElementEventData) => void;
59
+ 'element:transformed': (payload: TransformEventData) => void;
60
+ 'element:updated': (payload: ElementUpdateEventData) => void;
61
+ 'element:copied': (payload: ElementEventData) => void;
62
+ 'element:pasted': (payload: ElementEventData) => void;
63
+ 'element:cloned': (payload: ElementEventData) => void;
64
+ 'element:locked-change': (payload: ElementEventData) => void;
65
+ 'element:visibility-change': (payload: ElementEventData) => void;
66
+ 'element:zindex-change': (payload: ElementEventData) => void;
67
+ 'selection:changed': (payload: SelectionEventData) => void;
68
+ 'selection:cleared': (payload: SelectionEventData) => void;
69
+ 'selection:multi-change': (payload: SelectionEventData) => void;
70
+ 'creation:started': (payload: CreationEventData) => void;
71
+ 'creation:updated': (payload: CreationEventData) => void;
72
+ 'creation:completed': (payload: CreationEventData) => void;
73
+ 'creation:cancelled': (payload: CreationEventData) => void;
74
+ 'view:zoom-change': (payload: ViewEventData) => void;
75
+ 'view:pan': (payload: ViewEventData) => void;
76
+ 'view:zoom-to-fit': (payload: ViewEventData) => void;
77
+ 'view:reset': (payload: ViewEventData) => void;
78
+ 'view:grid-visibility-change': (payload: ViewEventData) => void;
79
+ 'view:snap-change': (payload: ViewEventData) => void;
80
+ 'view:ruler-visibility-change': (payload: ViewEventData) => void;
81
+ 'layer:added': (payload: BaseEventData) => void;
82
+ 'layer:removed': (payload: BaseEventData) => void;
83
+ 'layer:order-changed': (payload: LayerOrderEventData) => void;
84
+ 'layer:visibility-change': (payload: BaseEventData) => void;
85
+ 'layer:locked-change': (payload: BaseEventData) => void;
86
+ 'layer:active-change': (payload: BaseEventData) => void;
87
+ 'command:executed': (payload: CommandEventData) => void;
88
+ 'command:undone': (payload: CommandEventData) => void;
89
+ 'command:redone': (payload: CommandEventData) => void;
90
+ 'history:changed': (payload: HistoryEventData) => void;
91
+ 'history:cleared': (payload: HistoryEventData) => void;
92
+ 'plugin:registered': (payload: PluginEventData) => void;
93
+ 'plugin:unregistered': (payload: PluginEventData) => void;
94
+ 'plugin:activated': (payload: PluginEventData) => void;
95
+ 'plugin:deactivated': (payload: PluginEventData) => void;
96
+ 'plugin:loaded': (payload: PluginEventData) => void;
97
+ 'plugin:error': (payload: ErrorEventData) => void;
98
+ 'create-strategy:registered': (payload: BaseEventData) => void;
99
+ 'create-strategy:unregistered': (payload: BaseEventData) => void;
100
+ 'create-strategy:needs-register': (payload: BaseEventData) => void;
101
+ 'property:value-change': (payload: BaseEventData) => void;
102
+ 'property:batch-update-start': (payload: BaseEventData) => void;
103
+ 'property:batch-update-end': (payload: BaseEventData) => void;
104
+ 'elements:align': (payload: AlignEventData) => void;
105
+ 'elements:distribute': (payload: BaseEventData) => void;
106
+ 'elements:group': (payload: BaseEventData) => void;
107
+ 'elements:ungroup': (payload: BaseEventData) => void;
108
+ 'elements:layer': (payload: LayerOrderEventData) => void;
109
+ 'shortcut:triggered': (payload: BaseEventData) => void;
110
+ 'shortcut:registered': (payload: BaseEventData) => void;
111
+ 'shortcut:conflict': (payload: BaseEventData) => void;
112
+ 'clipboard:copy': (payload: BaseEventData) => void;
113
+ 'clipboard:paste': (payload: BaseEventData) => void;
114
+ 'clipboard:cut': (payload: BaseEventData) => void;
115
+ 'clipboard:clear': (payload: BaseEventData) => void;
116
+ 'host:status-changed': (payload: StatusEventData) => void;
117
+ 'host:status-saved': (payload: StatusEventData) => void;
118
+ 'host:status-restored': (payload: StatusEventData) => void;
119
+ 'editor:error': (payload: ErrorEventData) => void;
120
+ 'operation:error': (payload: ErrorEventData) => void;
121
+ 'resource:load-error': (payload: ErrorEventData) => void;
122
+ 'plugin:load-error': (payload: ErrorEventData) => void;
123
+ 'performance:warning': (payload: PerformanceEventData) => void;
124
+ 'memory:warning': (payload: PerformanceEventData) => void;
125
+ 'render:performance': (payload: PerformanceEventData) => void;
126
+ 'host:load-json:start': (payload: BaseEventData) => void;
127
+ 'host:load-json:complete': (payload: BaseEventData) => void;
128
+ 'host:load-json:error': (payload: ErrorEventData) => void;
129
+ 'host:to-json:start': (payload: BaseEventData) => void;
130
+ 'host:to-json:complete': (payload: BaseEventData) => void;
131
+ 'host:to-json:error': (payload: ErrorEventData) => void;
132
+ 'collab:connected': (payload: BaseEventData) => void;
133
+ 'collab:disconnected': (payload: BaseEventData) => void;
134
+ 'collab:data-received': (payload: BaseEventData) => void;
135
+ 'collab:operation-sync': (payload: BaseEventData) => void;
136
+ 'custom:': (...args: any[]) => any;
137
+ }
138
+ /** 类型安全的事件总线实现示例,基于上面的 EventMap */
139
+ export declare class EventBus<T extends {
140
+ [K in keyof T]: (payload: any) => void;
141
+ }> {
142
+ private events;
143
+ on<K extends keyof T>(event: K, callback: T[K]): void;
144
+ emit<K extends keyof T>(event: K, payload: Parameters<T[K]>[0]): void;
145
+ off<K extends keyof T>(event: K, callback?: T[K]): void;
146
+ }
@@ -0,0 +1,9 @@
1
+ export * from './base-graphic-element';
2
+ export * from './base-graphic-type';
3
+ export * from './base-plugin';
4
+ export * from './base';
5
+ export * from './event-data';
6
+ export * from './event-map';
7
+ export * from './konva-text';
8
+ export * from './plugin-map';
9
+ export * from './element-type-map';
@@ -0,0 +1,3 @@
1
+ export type IFontStyle = 'normal' | 'italic' | 'bold' | '500' | 'italic bold';
2
+ export type IAlign = 'left' | 'center' | 'right' | 'justify';
3
+ export type IVerticalAlign = 'top' | 'middle' | 'bottom';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * PluginMap 保持为空接口,具体插件应在各自实现文件中用模块声明合并(declare module '@/types')来扩展。
3
+ * 例如在 `src/plugins/rect/rect.ts` 中添加:
4
+ *
5
+ * declare module '@/types' {
6
+ * interface PluginMap {
7
+ * 'rect-plugin': RectPlugin
8
+ * }
9
+ * }
10
+ */
11
+ export interface PluginMap {
12
+ }