@duxweb/dvha-pro 1.0.24 → 1.0.26

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 (244) hide show
  1. package/dist/cjs/component.cjs +1 -1
  2. package/dist/cjs/components/chart/echart.cjs +1 -1
  3. package/dist/cjs/components/crop/imageCrop.cjs +1 -1
  4. package/dist/cjs/components/data/dynamicSelect.cjs +1 -1
  5. package/dist/cjs/components/data/selectModal.cjs +1 -1
  6. package/dist/cjs/components/designEditor/components/grid.cjs +1 -0
  7. package/dist/cjs/components/designEditor/editor/hook.cjs +1 -0
  8. package/dist/cjs/components/designEditor/editor/preview.cjs +1 -0
  9. package/dist/cjs/components/designEditor/editor/setting.cjs +1 -0
  10. package/dist/cjs/components/designEditor/editor.cjs +1 -0
  11. package/dist/cjs/components/form/drawerForm.cjs +1 -1
  12. package/dist/cjs/components/form/formItem.cjs +1 -1
  13. package/dist/cjs/components/form/formLayout.cjs +1 -1
  14. package/dist/cjs/components/form/modalForm.cjs +1 -1
  15. package/dist/cjs/components/form/pageForm.cjs +1 -1
  16. package/dist/cjs/components/form/settingForm.cjs +1 -1
  17. package/dist/cjs/components/formEditor/base/base.cjs +1 -0
  18. package/dist/cjs/components/formEditor/base/json.cjs +1 -0
  19. package/dist/cjs/components/formEditor/base/options.cjs +1 -0
  20. package/dist/cjs/components/formEditor/base/setting.cjs +1 -0
  21. package/dist/cjs/components/formEditor/components/cascader.cjs +1 -0
  22. package/dist/cjs/components/formEditor/components/cascaderAsync.cjs +1 -0
  23. package/dist/cjs/components/formEditor/components/checkbox.cjs +1 -0
  24. package/dist/cjs/components/formEditor/components/color.cjs +1 -0
  25. package/dist/cjs/components/formEditor/components/date.cjs +1 -0
  26. package/dist/cjs/components/formEditor/components/dynamicInput.cjs +1 -0
  27. package/dist/cjs/components/formEditor/components/dynamicTags.cjs +1 -0
  28. package/dist/cjs/components/formEditor/components/editor.cjs +1 -0
  29. package/dist/cjs/components/formEditor/components/input.cjs +1 -0
  30. package/dist/cjs/components/formEditor/components/inputNumber.cjs +1 -0
  31. package/dist/cjs/components/formEditor/components/mentionAsync.cjs +1 -0
  32. package/dist/cjs/components/formEditor/components/radio.cjs +1 -0
  33. package/dist/cjs/components/formEditor/components/region.cjs +1 -0
  34. package/dist/cjs/components/formEditor/components/select.cjs +1 -0
  35. package/dist/cjs/components/formEditor/components/selectAsync.cjs +1 -0
  36. package/dist/cjs/components/formEditor/components/sider.cjs +1 -0
  37. package/dist/cjs/components/formEditor/components/switch.cjs +1 -0
  38. package/dist/cjs/components/formEditor/components/time.cjs +1 -0
  39. package/dist/cjs/components/formEditor/components/transferAsync.cjs +1 -0
  40. package/dist/cjs/components/formEditor/components/treeSelect.cjs +1 -0
  41. package/dist/cjs/components/formEditor/components/treeSelectAsync.cjs +1 -0
  42. package/dist/cjs/components/formEditor/editor.cjs +1 -0
  43. package/dist/cjs/components/formEditor/json.cjs +1 -0
  44. package/dist/cjs/components/formEditor/preview.cjs +1 -0
  45. package/dist/cjs/components/formEditor/renderer.cjs +1 -0
  46. package/dist/cjs/components/icon/icon.cjs +1 -1
  47. package/dist/cjs/components/layout/grid.cjs +1 -0
  48. package/dist/cjs/components/layout/list.cjs +1 -1
  49. package/dist/cjs/components/layout/table.cjs +1 -1
  50. package/dist/cjs/components/level/level.cjs +1 -1
  51. package/dist/cjs/components/posterEditor/components/CanvasRuler.cjs +1 -0
  52. package/dist/cjs/components/posterEditor/elements/circle.cjs +1 -0
  53. package/dist/cjs/components/posterEditor/elements/image.cjs +1 -0
  54. package/dist/cjs/components/posterEditor/elements/index.cjs +1 -0
  55. package/dist/cjs/components/posterEditor/elements/rect.cjs +1 -0
  56. package/dist/cjs/components/posterEditor/elements/text.cjs +1 -0
  57. package/dist/cjs/components/posterEditor/hooks/usePosterEditor.cjs +1 -0
  58. package/dist/cjs/components/posterEditor/pages/LeftToolbar.cjs +1 -0
  59. package/dist/cjs/components/posterEditor/pages/Panel.cjs +1 -0
  60. package/dist/cjs/components/posterEditor/pages/PanelItem.cjs +1 -0
  61. package/dist/cjs/components/posterEditor/pages/RightPanel.cjs +1 -0
  62. package/dist/cjs/components/posterEditor/posterEditor.cjs +1 -0
  63. package/dist/cjs/components/table/table.cjs +1 -1
  64. package/dist/cjs/components/upload/file.cjs +1 -1
  65. package/dist/cjs/components/upload/image.cjs +1 -1
  66. package/dist/cjs/components/upload/manage/item.cjs +1 -1
  67. package/dist/cjs/components/upload/manager.cjs +1 -1
  68. package/dist/cjs/hooks/dialog.cjs +1 -1
  69. package/dist/cjs/hooks/drawer.cjs +1 -1
  70. package/dist/cjs/hooks/modal.cjs +1 -1
  71. package/dist/cjs/hooks/table/image.cjs +1 -1
  72. package/dist/cjs/hooks/table/media.cjs +1 -1
  73. package/dist/cjs/index.cjs +1 -1
  74. package/dist/cjs/langs/en-US.json.cjs +1 -1
  75. package/dist/cjs/langs/zh-CN.json.cjs +1 -1
  76. package/dist/cjs/pages/authLayout.cjs +1 -1
  77. package/dist/cjs/pages/layout/page.cjs +1 -1
  78. package/dist/cjs/pages/layout.cjs +1 -1
  79. package/dist/cjs/pages/login.cjs +1 -1
  80. package/dist/cjs/pages/menu/avatar.cjs +1 -1
  81. package/dist/cjs/pages/menu/button.cjs +1 -1
  82. package/dist/cjs/pages/menu/cmd.cjs +1 -1
  83. package/dist/cjs/pages/menu/main.cjs +1 -1
  84. package/dist/cjs/pages/menu/mobile.cjs +1 -1
  85. package/dist/cjs/pages/page404.cjs +1 -1
  86. package/dist/cjs/pages/pageStatus.cjs +1 -1
  87. package/dist/cjs/theme/uno.css.cjs +58 -2
  88. package/dist/esm/component.js +52 -48
  89. package/dist/esm/components/chart/echart.js +18 -15
  90. package/dist/esm/components/crop/imageCrop.js +19 -16
  91. package/dist/esm/components/data/dynamicSelect.js +20 -17
  92. package/dist/esm/components/data/selectModal.js +23 -20
  93. package/dist/esm/components/designEditor/components/grid.js +175 -0
  94. package/dist/esm/components/designEditor/editor/hook.js +87 -0
  95. package/dist/esm/components/designEditor/editor/preview.js +65 -0
  96. package/dist/esm/components/designEditor/editor/setting.js +98 -0
  97. package/dist/esm/components/designEditor/editor.js +161 -0
  98. package/dist/esm/components/form/drawerForm.js +25 -22
  99. package/dist/esm/components/form/formItem.js +33 -33
  100. package/dist/esm/components/form/formLayout.js +11 -11
  101. package/dist/esm/components/form/modalForm.js +30 -27
  102. package/dist/esm/components/form/pageForm.js +21 -18
  103. package/dist/esm/components/form/settingForm.js +14 -11
  104. package/dist/esm/components/formEditor/base/base.js +117 -0
  105. package/dist/esm/components/formEditor/base/json.js +39 -0
  106. package/dist/esm/components/formEditor/base/options.js +48 -0
  107. package/dist/esm/components/formEditor/base/setting.js +108 -0
  108. package/dist/esm/components/formEditor/components/cascader.js +219 -0
  109. package/dist/esm/components/formEditor/components/cascaderAsync.js +213 -0
  110. package/dist/esm/components/formEditor/components/checkbox.js +212 -0
  111. package/dist/esm/components/formEditor/components/color.js +156 -0
  112. package/dist/esm/components/formEditor/components/date.js +197 -0
  113. package/dist/esm/components/formEditor/components/dynamicInput.js +227 -0
  114. package/dist/esm/components/formEditor/components/dynamicTags.js +150 -0
  115. package/dist/esm/components/formEditor/components/editor.js +139 -0
  116. package/dist/esm/components/formEditor/components/input.js +211 -0
  117. package/dist/esm/components/formEditor/components/inputNumber.js +188 -0
  118. package/dist/esm/components/formEditor/components/mentionAsync.js +180 -0
  119. package/dist/esm/components/formEditor/components/radio.js +212 -0
  120. package/dist/esm/components/formEditor/components/region.js +167 -0
  121. package/dist/esm/components/formEditor/components/select.js +203 -0
  122. package/dist/esm/components/formEditor/components/selectAsync.js +214 -0
  123. package/dist/esm/components/formEditor/components/sider.js +168 -0
  124. package/dist/esm/components/formEditor/components/switch.js +153 -0
  125. package/dist/esm/components/formEditor/components/time.js +171 -0
  126. package/dist/esm/components/formEditor/components/transferAsync.js +193 -0
  127. package/dist/esm/components/formEditor/components/treeSelect.js +207 -0
  128. package/dist/esm/components/formEditor/components/treeSelectAsync.js +179 -0
  129. package/dist/esm/components/formEditor/editor.js +162 -0
  130. package/dist/esm/components/formEditor/json.js +24 -0
  131. package/dist/esm/components/formEditor/preview.js +38 -0
  132. package/dist/esm/components/formEditor/renderer.js +151 -0
  133. package/dist/esm/components/icon/icon.js +19 -16
  134. package/dist/esm/components/layout/grid.js +24 -0
  135. package/dist/esm/components/layout/list.js +29 -26
  136. package/dist/esm/components/layout/table.js +27 -24
  137. package/dist/esm/components/level/level.js +18 -15
  138. package/dist/esm/components/posterEditor/components/CanvasRuler.js +113 -0
  139. package/dist/esm/components/posterEditor/elements/circle.js +127 -0
  140. package/dist/esm/components/posterEditor/elements/image.js +131 -0
  141. package/dist/esm/components/posterEditor/elements/index.js +46 -0
  142. package/dist/esm/components/posterEditor/elements/rect.js +171 -0
  143. package/dist/esm/components/posterEditor/elements/text.js +206 -0
  144. package/dist/esm/components/posterEditor/hooks/usePosterEditor.js +434 -0
  145. package/dist/esm/components/posterEditor/pages/LeftToolbar.js +40 -0
  146. package/dist/esm/components/posterEditor/pages/Panel.js +31 -0
  147. package/dist/esm/components/posterEditor/pages/PanelItem.js +22 -0
  148. package/dist/esm/components/posterEditor/pages/RightPanel.js +422 -0
  149. package/dist/esm/components/posterEditor/posterEditor.js +228 -0
  150. package/dist/esm/components/table/table.js +18 -15
  151. package/dist/esm/components/upload/file.js +101 -90
  152. package/dist/esm/components/upload/image.js +109 -96
  153. package/dist/esm/components/upload/manage/item.js +18 -15
  154. package/dist/esm/components/upload/manager.js +68 -65
  155. package/dist/esm/hooks/dialog.js +19 -16
  156. package/dist/esm/hooks/drawer.js +19 -16
  157. package/dist/esm/hooks/modal.js +18 -15
  158. package/dist/esm/hooks/table/image.js +18 -15
  159. package/dist/esm/hooks/table/media.js +18 -15
  160. package/dist/esm/index.js +230 -202
  161. package/dist/esm/langs/en-US.json.js +10 -10
  162. package/dist/esm/langs/zh-CN.json.js +8 -8
  163. package/dist/esm/pages/authLayout.js +19 -16
  164. package/dist/esm/pages/layout/page.js +18 -15
  165. package/dist/esm/pages/layout.js +7 -6
  166. package/dist/esm/pages/login.js +19 -17
  167. package/dist/esm/pages/menu/avatar.js +23 -20
  168. package/dist/esm/pages/menu/button.js +18 -15
  169. package/dist/esm/pages/menu/cmd.js +29 -26
  170. package/dist/esm/pages/menu/main.js +28 -25
  171. package/dist/esm/pages/menu/mobile.js +18 -15
  172. package/dist/esm/pages/page404.js +16 -13
  173. package/dist/esm/pages/pageStatus.js +21 -18
  174. package/dist/esm/theme/uno.css.js +58 -2
  175. package/dist/types/components/designEditor/components/grid.d.ts +2 -0
  176. package/dist/types/components/designEditor/components/index.d.ts +1 -0
  177. package/dist/types/components/designEditor/editor/hook.d.ts +57 -0
  178. package/dist/types/components/designEditor/editor/index.d.ts +3 -0
  179. package/dist/types/components/designEditor/editor/preview.d.ts +15 -0
  180. package/dist/types/components/designEditor/editor/setting.d.ts +14 -0
  181. package/dist/types/components/designEditor/editor.d.ts +19 -0
  182. package/dist/types/components/designEditor/index.d.ts +3 -0
  183. package/dist/types/components/form/drawerForm.d.ts +2 -2
  184. package/dist/types/components/form/formLayout.d.ts +2 -2
  185. package/dist/types/components/form/modalForm.d.ts +2 -2
  186. package/dist/types/components/formEditor/base/base.d.ts +26 -0
  187. package/dist/types/components/formEditor/base/index.d.ts +4 -0
  188. package/dist/types/components/formEditor/base/json.d.ts +18 -0
  189. package/dist/types/components/formEditor/base/options.d.ts +23 -0
  190. package/dist/types/components/formEditor/base/setting.d.ts +13 -0
  191. package/dist/types/components/formEditor/components/cascader.d.ts +2 -0
  192. package/dist/types/components/formEditor/components/cascaderAsync.d.ts +2 -0
  193. package/dist/types/components/formEditor/components/checkbox.d.ts +2 -0
  194. package/dist/types/components/formEditor/components/color.d.ts +2 -0
  195. package/dist/types/components/formEditor/components/date.d.ts +2 -0
  196. package/dist/types/components/formEditor/components/dynamicInput.d.ts +2 -0
  197. package/dist/types/components/formEditor/components/dynamicTags.d.ts +2 -0
  198. package/dist/types/components/formEditor/components/editor.d.ts +2 -0
  199. package/dist/types/components/formEditor/components/index.d.ts +21 -0
  200. package/dist/types/components/formEditor/components/input.d.ts +2 -0
  201. package/dist/types/components/formEditor/components/inputNumber.d.ts +2 -0
  202. package/dist/types/components/formEditor/components/mentionAsync.d.ts +2 -0
  203. package/dist/types/components/formEditor/components/radio.d.ts +2 -0
  204. package/dist/types/components/formEditor/components/region.d.ts +2 -0
  205. package/dist/types/components/formEditor/components/select.d.ts +2 -0
  206. package/dist/types/components/formEditor/components/selectAsync.d.ts +2 -0
  207. package/dist/types/components/formEditor/components/sider.d.ts +2 -0
  208. package/dist/types/components/formEditor/components/switch.d.ts +2 -0
  209. package/dist/types/components/formEditor/components/time.d.ts +2 -0
  210. package/dist/types/components/formEditor/components/transferAsync.d.ts +2 -0
  211. package/dist/types/components/formEditor/components/treeSelect.d.ts +2 -0
  212. package/dist/types/components/formEditor/components/treeSelectAsync.d.ts +2 -0
  213. package/dist/types/components/formEditor/editor.d.ts +22 -0
  214. package/dist/types/components/formEditor/index.d.ts +2 -0
  215. package/dist/types/components/formEditor/json.d.ts +14 -0
  216. package/dist/types/components/formEditor/preview.d.ts +25 -0
  217. package/dist/types/components/formEditor/renderer.d.ts +58 -0
  218. package/dist/types/components/index.d.ts +4 -2
  219. package/dist/types/components/layout/filterLayout.d.ts +1 -1
  220. package/dist/types/components/layout/grid.d.ts +22 -0
  221. package/dist/types/components/layout/index.d.ts +1 -0
  222. package/dist/types/components/posterEditor/components/CanvasRuler.d.ts +43 -0
  223. package/dist/types/components/posterEditor/components/index.d.ts +1 -0
  224. package/dist/types/components/posterEditor/elements/circle.d.ts +3 -0
  225. package/dist/types/components/posterEditor/elements/image.d.ts +3 -0
  226. package/dist/types/components/posterEditor/elements/index.d.ts +15 -0
  227. package/dist/types/components/posterEditor/elements/rect.d.ts +3 -0
  228. package/dist/types/components/posterEditor/elements/text.d.ts +3 -0
  229. package/dist/types/components/posterEditor/elements/types.d.ts +51 -0
  230. package/dist/types/components/posterEditor/hooks/index.d.ts +1 -0
  231. package/dist/types/components/posterEditor/hooks/usePosterEditor.d.ts +48 -0
  232. package/dist/types/components/posterEditor/index.d.ts +4 -0
  233. package/dist/types/components/posterEditor/pages/LeftToolbar.d.ts +33 -0
  234. package/dist/types/components/posterEditor/pages/Panel.d.ts +11 -0
  235. package/dist/types/components/posterEditor/pages/PanelItem.d.ts +11 -0
  236. package/dist/types/components/posterEditor/pages/RightPanel.d.ts +208 -0
  237. package/dist/types/components/posterEditor/pages/index.d.ts +4 -0
  238. package/dist/types/components/posterEditor/posterEditor.d.ts +61 -0
  239. package/dist/types/components/posterEditor/types/editor.d.ts +47 -0
  240. package/dist/types/components/stats/number.d.ts +1 -1
  241. package/dist/types/components/upload/file.d.ts +5 -3
  242. package/dist/types/index.d.ts +1 -0
  243. package/dist/types/pages/layout/global.d.ts +0 -1
  244. package/package.json +7 -3
@@ -0,0 +1,434 @@
1
+ import { useThrottleFn as fe } from "@vueuse/core";
2
+ import { Canvas as be, FabricImage as pe } from "fabric";
3
+ import { ref as f, computed as m, watch as Ie, nextTick as Y, markRaw as ke } from "vue";
4
+ import { getElementConfig as I } from "../elements/index.js";
5
+ function Me(k = {}) {
6
+ const n = f(null), P = f(null), l = f({
7
+ width: k.width || 750,
8
+ height: k.height || 1e3,
9
+ backgroundColor: k.backgroundColor || "#ffffff",
10
+ backgroundImage: k.backgroundImage || "",
11
+ elements: []
12
+ }), h = f([]), O = f(!1), B = f(1), y = f(0), A = f(0);
13
+ let M = null, D = () => {
14
+ }, F = 0;
15
+ const T = () => `element_${++F}`, b = () => {
16
+ O.value || (O.value = !0, Y(() => {
17
+ D(JSON.stringify(l.value)), O.value = !1;
18
+ }));
19
+ }, C = () => {
20
+ if (!n.value)
21
+ return;
22
+ const t = n.value.getObjects(), e = [];
23
+ t.forEach((o) => {
24
+ const a = o.elementId;
25
+ if (!a)
26
+ return;
27
+ const s = l.value.elements.find((i) => i.id === a);
28
+ if (!s)
29
+ return;
30
+ const u = I(s.type);
31
+ if (!u)
32
+ return;
33
+ const r = u.getPropsFromFabricObject(o);
34
+ e.push({
35
+ ...s,
36
+ ...r,
37
+ id: s.id,
38
+ type: s.type
39
+ });
40
+ }), l.value.elements = e;
41
+ }, g = fe(() => {
42
+ C(), b();
43
+ }, 100), w = () => {
44
+ if (!n.value)
45
+ return;
46
+ const t = n.value.getActiveObjects(), e = n.value.getActiveObject();
47
+ t.length > 0 ? h.value = [...t] : e ? h.value = [e] : h.value = [];
48
+ }, z = () => {
49
+ h.value = [];
50
+ }, L = (t) => {
51
+ if (!t.target)
52
+ return;
53
+ const e = t.target, o = e.elementId, s = l.value.elements.find((i) => i.id === o)?.type, u = e.scaleX || 1, r = e.scaleY || 1;
54
+ if (u !== 1 || r !== 1) {
55
+ if (s === "circle") {
56
+ const i = Math.max(u, r), d = Math.round((e.radius || 50) * i);
57
+ e.set({ radius: d, scaleX: 1, scaleY: 1 });
58
+ } else if (s !== "image") {
59
+ const i = Math.round(e.width * u), d = Math.round(e.height * r);
60
+ e.set({ width: i, height: d, scaleX: 1, scaleY: 1 });
61
+ }
62
+ e.setCoords();
63
+ }
64
+ g();
65
+ }, H = (t) => {
66
+ const e = t.target;
67
+ if (!e)
68
+ return;
69
+ const o = e.elementId;
70
+ if (!o)
71
+ return;
72
+ const a = l.value.elements.find((s) => s.id === o);
73
+ if (a) {
74
+ if (a.type === "circle") {
75
+ const s = Math.max(e.scaleX || 1, e.scaleY || 1);
76
+ e.set({ scaleX: s, scaleY: s }), e.setCoords();
77
+ }
78
+ if (a.type === "rect") {
79
+ const s = e.__corner;
80
+ if (s && ["tl", "tr", "bl", "br"].includes(s)) {
81
+ const r = Math.max(Math.abs(e.scaleX || 1), Math.abs(e.scaleY || 1));
82
+ e.set({
83
+ scaleX: e.scaleX >= 0 ? r : -r,
84
+ scaleY: e.scaleY >= 0 ? r : -r
85
+ }), e.setCoords();
86
+ }
87
+ }
88
+ if (a.type === "image") {
89
+ const s = e.__corner;
90
+ if (s && ["tl", "tr", "bl", "br"].includes(s)) {
91
+ const r = Math.max(Math.abs(e.scaleX || 1), Math.abs(e.scaleY || 1));
92
+ e.set({
93
+ scaleX: e.scaleX >= 0 ? r : -r,
94
+ scaleY: e.scaleY >= 0 ? r : -r
95
+ }), e.setCoords();
96
+ }
97
+ }
98
+ }
99
+ }, _ = () => {
100
+ n.value && (n.value.on("selection:created", w), n.value.on("selection:updated", w), n.value.on("selection:cleared", z), n.value.on("mouse:down", () => setTimeout(w, 10)), n.value.on("mouse:up", () => setTimeout(w, 10)), n.value.on("object:modified", L), n.value.on("object:scaling", H), n.value.on("path:created", g), n.value.on("object:moving", g), n.value.on("object:rotating", g), n.value.on("object:skewing", g), n.value.on("object:added", g), n.value.on("object:removed", g), n.value.on("custom:text:changed", (t) => {
101
+ t.target && t.newText !== void 0 && t.target.elementId && g();
102
+ }));
103
+ }, E = () => {
104
+ if (!n.value)
105
+ return;
106
+ const t = B.value || 1;
107
+ n.value.setZoom(t), n.value.setDimensions({
108
+ width: l.value.width * t,
109
+ height: l.value.height * t
110
+ }), n.value.backgroundColor = l.value.backgroundColor, n.value.renderAll(), n.value.getObjects().forEach((e) => e.setCoords());
111
+ }, x = () => {
112
+ if (!M)
113
+ return;
114
+ const t = M.getBoundingClientRect();
115
+ y.value = t.width - 40, A.value = t.height - 40;
116
+ const e = y.value / l.value.width, o = A.value / l.value.height, a = Math.min(e, o, 1);
117
+ B.value = a, n.value && (n.value.setZoom(a), n.value.setDimensions({
118
+ width: l.value.width * a,
119
+ height: l.value.height * a
120
+ }), n.value.renderAll(), n.value.getObjects().forEach((s) => s.setCoords()));
121
+ }, S = (t) => {
122
+ M = t, Y(x);
123
+ const e = new ResizeObserver(x);
124
+ return e.observe(t), () => e.disconnect();
125
+ }, J = (t, e) => {
126
+ const o = l.value.width, a = l.value.height, s = t.getBoundingRect();
127
+ switch (e) {
128
+ case "center-horizontal":
129
+ t.set("left", Math.round(t.left + (o / 2 - s.left - s.width / 2)));
130
+ break;
131
+ case "center-vertical":
132
+ t.set("top", Math.round(t.top + (a / 2 - s.top - s.height / 2)));
133
+ break;
134
+ case "center-both":
135
+ t.set({
136
+ left: Math.round(t.left + (o / 2 - s.left - s.width / 2)),
137
+ top: Math.round(t.top + (a / 2 - s.top - s.height / 2))
138
+ });
139
+ break;
140
+ case "move-up":
141
+ n.value?.bringObjectForward(t);
142
+ break;
143
+ case "move-down":
144
+ n.value?.sendObjectBackwards(t);
145
+ break;
146
+ case "move-to-front":
147
+ n.value?.bringObjectToFront(t);
148
+ break;
149
+ case "move-to-back":
150
+ n.value?.sendObjectToBack(t);
151
+ break;
152
+ }
153
+ t.setCoords(), n.value?.renderAll();
154
+ }, K = (t) => {
155
+ if (t.length < 3)
156
+ return;
157
+ const e = [...t].sort((d, c) => d.getBoundingRect().left - c.getBoundingRect().left), o = e[0].getBoundingRect(), a = e[e.length - 1].getBoundingRect(), s = a.left + a.width - o.left, u = e.reduce((d, c) => d + c.getBoundingRect().width, 0), r = (s - u) / (e.length - 1);
158
+ let i = o.left + o.width + r;
159
+ for (let d = 1; d < e.length - 1; d++) {
160
+ const c = e[d], v = c.getBoundingRect();
161
+ c.set("left", Math.round(c.left + (i - v.left))), i += v.width + r;
162
+ }
163
+ }, U = (t) => {
164
+ if (t.length < 3)
165
+ return;
166
+ const e = [...t].sort((d, c) => d.getBoundingRect().top - c.getBoundingRect().top), o = e[0].getBoundingRect(), a = e[e.length - 1].getBoundingRect(), s = a.top + a.height - o.top, u = e.reduce((d, c) => d + c.getBoundingRect().height, 0), r = (s - u) / (e.length - 1);
167
+ let i = o.top + o.height + r;
168
+ for (let d = 1; d < e.length - 1; d++) {
169
+ const c = e[d], v = c.getBoundingRect();
170
+ c.set("top", Math.round(c.top + (i - v.top))), i += v.height + r;
171
+ }
172
+ }, W = (t, e) => {
173
+ if (t.length < 2)
174
+ return;
175
+ const o = t.map((c) => c.getBoundingRect()), a = Math.min(...o.map((c) => c.left)), s = Math.max(...o.map((c) => c.left + c.width)), u = Math.min(...o.map((c) => c.top)), r = Math.max(...o.map((c) => c.top + c.height)), i = (a + s) / 2, d = (u + r) / 2;
176
+ switch (e) {
177
+ case "left":
178
+ t.forEach((c) => {
179
+ const v = c.getBoundingRect();
180
+ c.set("left", Math.round(c.left + (a - v.left)));
181
+ });
182
+ break;
183
+ case "right":
184
+ t.forEach((c) => {
185
+ const v = c.getBoundingRect();
186
+ c.set("left", Math.round(c.left + (s - v.left - v.width)));
187
+ });
188
+ break;
189
+ case "top":
190
+ t.forEach((c) => {
191
+ const v = c.getBoundingRect();
192
+ c.set("top", Math.round(c.top + (u - v.top)));
193
+ });
194
+ break;
195
+ case "bottom":
196
+ t.forEach((c) => {
197
+ const v = c.getBoundingRect();
198
+ c.set("top", Math.round(c.top + (r - v.top - v.height)));
199
+ });
200
+ break;
201
+ case "center-horizontal":
202
+ t.forEach((c) => {
203
+ const v = c.getBoundingRect(), j = v.left + v.width / 2;
204
+ c.set("left", Math.round(c.left + (i - j)));
205
+ });
206
+ break;
207
+ case "center-vertical":
208
+ t.forEach((c) => {
209
+ const v = c.getBoundingRect(), j = v.top + v.height / 2;
210
+ c.set("top", Math.round(c.top + (d - j)));
211
+ });
212
+ break;
213
+ case "distribute-horizontal":
214
+ K(t);
215
+ break;
216
+ case "distribute-vertical":
217
+ U(t);
218
+ break;
219
+ }
220
+ t.forEach((c) => c.setCoords()), n.value?.renderAll();
221
+ }, N = (t, e) => (P.value = t, n.value = ke(new be(t, {
222
+ selection: !0,
223
+ preserveObjectStacking: !0,
224
+ uniformScaling: !1,
225
+ uniScaleKey: "shiftKey",
226
+ altActionKey: "altKey"
227
+ })), _(), E(), e && S(e), n.value), Z = async (t, e = {}) => {
228
+ const o = I(t);
229
+ if (!o || !n.value)
230
+ return;
231
+ const a = T(), s = l.value.width / 2, u = l.value.height / 2, r = {
232
+ ...o.defaultProps,
233
+ left: Math.round(s - (o.defaultProps.width || 100) / 2),
234
+ top: Math.round(u - (o.defaultProps.height || 50) / 2),
235
+ ...e,
236
+ id: a
237
+ }, i = await o.createFabricObject(r);
238
+ if (!i)
239
+ return;
240
+ i.elementId = a, n.value.add(i), i.setCoords(), n.value.setActiveObject(i), n.value.renderAll();
241
+ const d = r;
242
+ return l.value.elements.push(d), a;
243
+ }, $ = () => {
244
+ if (!n.value || h.value.length === 0)
245
+ return;
246
+ n.value.getActiveObjects().forEach((e) => {
247
+ const o = e.elementId;
248
+ if (o) {
249
+ const a = l.value.elements.findIndex((s) => s.id === o);
250
+ a !== -1 && l.value.elements.splice(a, 1);
251
+ }
252
+ n.value?.remove(e);
253
+ }), n.value.discardActiveObject(), h.value = [], n.value.renderAll();
254
+ }, V = () => {
255
+ n.value?.discardActiveObject(), n.value?.renderAll();
256
+ }, q = (t, e, o) => {
257
+ const a = l.value.elements.findIndex((i) => i.id === t);
258
+ if (a === -1)
259
+ return;
260
+ const s = l.value.elements[a], u = I(s.type);
261
+ if (!u)
262
+ return;
263
+ l.value.elements[a] = {
264
+ ...s,
265
+ [e]: o
266
+ };
267
+ const r = n.value?.getObjects().find((i) => i.elementId === t);
268
+ r && u.onPropsChange && (u.onPropsChange(l.value.elements[a], r), r.setCoords(), n.value?.renderAll());
269
+ }, G = m(() => {
270
+ if (h.value.length !== 1 || l.value.elements.length <= 1)
271
+ return !1;
272
+ const e = h.value[0].elementId;
273
+ if (!e)
274
+ return !1;
275
+ const o = l.value.elements.findIndex((a) => a.id === e);
276
+ return o !== -1 && o < l.value.elements.length - 1;
277
+ }), Q = m(() => {
278
+ if (h.value.length !== 1 || l.value.elements.length <= 1)
279
+ return !1;
280
+ const e = h.value[0].elementId;
281
+ return e ? l.value.elements.findIndex((a) => a.id === e) > 0 : !1;
282
+ }), ee = m(() => {
283
+ if (h.value.length !== 1 || l.value.elements.length <= 1)
284
+ return !1;
285
+ const e = h.value[0].elementId;
286
+ if (!e)
287
+ return !1;
288
+ const o = l.value.elements.findIndex((a) => a.id === e);
289
+ return o !== -1 && o < l.value.elements.length - 1;
290
+ }), te = m(() => {
291
+ if (h.value.length !== 1 || l.value.elements.length <= 1)
292
+ return !1;
293
+ const e = h.value[0].elementId;
294
+ return e ? l.value.elements.findIndex((a) => a.id === e) > 0 : !1;
295
+ }), ne = (t) => {
296
+ const e = n.value?.getActiveObjects() || [];
297
+ if (e.length === 1) {
298
+ if (J(e[0], t), ["move-up", "move-down", "move-to-front", "move-to-back"].includes(t)) {
299
+ const o = e[0].elementId;
300
+ if (o) {
301
+ const a = l.value.elements.findIndex((s) => s.id === o);
302
+ if (a !== -1) {
303
+ const s = l.value.elements[a];
304
+ switch (l.value.elements.splice(a, 1), t) {
305
+ case "move-up":
306
+ l.value.elements.splice(Math.min(a + 1, l.value.elements.length), 0, s);
307
+ break;
308
+ case "move-down":
309
+ l.value.elements.splice(Math.max(a - 1, 0), 0, s);
310
+ break;
311
+ case "move-to-front":
312
+ l.value.elements.push(s);
313
+ break;
314
+ case "move-to-back":
315
+ l.value.elements.unshift(s);
316
+ break;
317
+ }
318
+ }
319
+ }
320
+ }
321
+ } else e.length > 1 && W(e, t);
322
+ }, ae = () => {
323
+ n.value && (n.value.clear(), l.value.elements = [], h.value = []);
324
+ }, le = async (t) => {
325
+ if (t)
326
+ try {
327
+ const e = JSON.parse(t);
328
+ if (l.value = {
329
+ width: e.width || 750,
330
+ height: e.height || 1e3,
331
+ backgroundColor: e.backgroundColor || "#ffffff",
332
+ backgroundImage: e.backgroundImage || "",
333
+ elements: e.elements || []
334
+ }, n.value) {
335
+ n.value.clear(), n.value.setDimensions({
336
+ width: l.value.width,
337
+ height: l.value.height
338
+ }), n.value.backgroundColor = l.value.backgroundColor, l.value.backgroundImage && X(l.value.backgroundImage);
339
+ const o = l.value.elements.map(async (a) => {
340
+ const s = I(a.type);
341
+ if (!s)
342
+ return;
343
+ const u = await s.createFabricObject(a);
344
+ u && (u.elementId = a.id, n.value?.add(u));
345
+ });
346
+ Promise.all(o).then(() => {
347
+ E(), n.value?.renderAll(), b();
348
+ });
349
+ }
350
+ } catch (e) {
351
+ console.error("Failed to load data:", e);
352
+ }
353
+ }, oe = (t) => {
354
+ D = t?.onDataChange || (() => {
355
+ });
356
+ }, se = () => {
357
+ n.value && (n.value.dispose(), n.value = null);
358
+ }, R = m(() => h.value.length === 1 ? h.value[0] : null), p = m(() => {
359
+ if (!R.value)
360
+ return null;
361
+ const t = R.value.elementId;
362
+ return l.value.elements.find((e) => e.id === t) || null;
363
+ }), ce = m(() => p.value ? I(p.value.type) : null), re = m(() => h.value.length > 1), ue = (t) => {
364
+ if (p.value)
365
+ return p.value[t];
366
+ }, ie = m(() => h.value.map((t) => {
367
+ const e = t.elementId;
368
+ return l.value.elements.find((o) => o.id === e);
369
+ }).filter((t) => !!t)), de = (t, e) => {
370
+ l.value.width = t, l.value.height = e, n.value && (n.value.setDimensions({ width: t, height: e }), x(), n.value.renderAll()), b();
371
+ }, ve = (t) => {
372
+ l.value.backgroundColor = t, n.value && (n.value.backgroundColor = t, n.value.renderAll()), b();
373
+ }, X = (t) => {
374
+ !n.value || !t || pe.fromURL(t, {
375
+ crossOrigin: "anonymous"
376
+ }).then((e) => {
377
+ n.value && (n.value.backgroundImage = e, n.value.renderAll());
378
+ }).catch((e) => {
379
+ console.error("Failed to load background image:", e);
380
+ });
381
+ }, he = (t) => {
382
+ l.value.backgroundImage = t, t ? X(t) : n.value && (n.value.backgroundImage = void 0, n.value.renderAll()), b();
383
+ }, ge = () => {
384
+ C(), b();
385
+ }, me = () => {
386
+ C();
387
+ const t = JSON.stringify(l.value, null, 2), e = new Blob([t], { type: "application/json" }), o = URL.createObjectURL(e), a = document.createElement("a");
388
+ a.href = o, a.download = `poster-${Date.now()}.json`, document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(o);
389
+ };
390
+ return Ie(
391
+ l,
392
+ () => {
393
+ g();
394
+ },
395
+ { deep: !0 }
396
+ ), {
397
+ initCanvas: N,
398
+ destroy: se,
399
+ setCallbacks: oe,
400
+ addElement: Z,
401
+ deleteSelectedElements: $,
402
+ updateElementProperty: q,
403
+ alignElements: ne,
404
+ canMoveUp: G,
405
+ canMoveDown: Q,
406
+ canMoveToFront: ee,
407
+ canMoveToBack: te,
408
+ clearCanvas: ae,
409
+ loadData: le,
410
+ updateData: b,
411
+ canvas: n,
412
+ canvasData: l,
413
+ selectedElements: h,
414
+ canvasScale: B,
415
+ currentElement: R,
416
+ currentElementData: p,
417
+ currentElementConfig: ce,
418
+ hasMultipleSelection: re,
419
+ clearSelection: V,
420
+ updateCanvasSize: E,
421
+ setupAutoResize: S,
422
+ getSelectedElementProperty: ue,
423
+ selectedElementsData: ie,
424
+ syncAllFabricObjectsToData: C,
425
+ updateCanvasSettings: de,
426
+ updateCanvasBackground: ve,
427
+ updateCanvasBackgroundImage: he,
428
+ saveData: ge,
429
+ exportJson: me
430
+ };
431
+ }
432
+ export {
433
+ Me as usePosterEditor
434
+ };
@@ -0,0 +1,40 @@
1
+ import { defineComponent as o, createVNode as t } from "vue";
2
+ import { NTooltip as l, NButton as n } from "naive-ui";
3
+ import { elementConfigs as u } from "../elements/index.js";
4
+ const i = /* @__PURE__ */ o({
5
+ name: "LeftToolbar",
6
+ props: {
7
+ onAddElement: {
8
+ type: Function,
9
+ required: !0
10
+ },
11
+ canvasWidth: {
12
+ type: Number,
13
+ required: !0
14
+ },
15
+ canvasHeight: {
16
+ type: Number,
17
+ required: !0
18
+ }
19
+ },
20
+ setup(r) {
21
+ return () => t("div", {
22
+ class: "p-4 bg-default border-r border-default flex flex-col gap-6"
23
+ }, [u.map((e) => t(l, null, {
24
+ default: () => e.name,
25
+ trigger: () => t(n, {
26
+ key: e.type,
27
+ text: !0,
28
+ size: "large",
29
+ onClick: () => r.onAddElement(e.type)
30
+ }, {
31
+ icon: () => t("div", {
32
+ class: e.icon
33
+ }, null)
34
+ })
35
+ }))]);
36
+ }
37
+ });
38
+ export {
39
+ i as LeftToolbar
40
+ };
@@ -0,0 +1,31 @@
1
+ import { defineComponent as t, createVNode as e } from "vue";
2
+ import { NScrollbar as o } from "naive-ui";
3
+ const a = /* @__PURE__ */ t({
4
+ name: "Panel",
5
+ props: {
6
+ title: {
7
+ type: String,
8
+ required: !0
9
+ }
10
+ },
11
+ setup(r, {
12
+ slots: l
13
+ }) {
14
+ return () => e("div", {
15
+ class: "flex flex-col h-full"
16
+ }, [e("div", {
17
+ class: "font-medium p-3 border-b border-default"
18
+ }, [r.title]), e("div", {
19
+ class: " flex-1 min-h-0"
20
+ }, [e(o, null, {
21
+ default: () => [e("div", {
22
+ class: "p-3 flex flex-col gap-2"
23
+ }, [l.default?.()])]
24
+ })]), e("div", {
25
+ class: "border-t border-default p-3 flex flex-col gap-2"
26
+ }, [l.footer?.()])]);
27
+ }
28
+ });
29
+ export {
30
+ a as Panel
31
+ };
@@ -0,0 +1,22 @@
1
+ import { defineComponent as r, createVNode as e } from "vue";
2
+ const i = /* @__PURE__ */ r({
3
+ name: "PanelItem",
4
+ props: {
5
+ title: {
6
+ type: String,
7
+ required: !0
8
+ }
9
+ },
10
+ setup(t, {
11
+ slots: l
12
+ }) {
13
+ return () => e("div", {
14
+ class: "flex flex-col gap-1"
15
+ }, [e("div", {
16
+ class: "text-muted text-sm"
17
+ }, [t.title]), e("div", null, [l.default?.()])]);
18
+ }
19
+ });
20
+ export {
21
+ i as PanelItem
22
+ };