@pie-element/hotspot 11.1.1 → 11.1.2-next.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 (234) hide show
  1. package/configure.js +2 -0
  2. package/controller.js +1 -0
  3. package/dist/author/DeleteWidget.d.ts +38 -0
  4. package/dist/author/DeleteWidget.js +46 -0
  5. package/dist/author/button.d.ts +31 -0
  6. package/dist/author/button.js +27 -0
  7. package/dist/author/buttons/circle.d.ts +18 -0
  8. package/dist/author/buttons/circle.js +25 -0
  9. package/dist/author/buttons/polygon.d.ts +18 -0
  10. package/dist/author/buttons/polygon.js +36 -0
  11. package/dist/author/buttons/rectangle.d.ts +18 -0
  12. package/dist/author/buttons/rectangle.js +36 -0
  13. package/dist/author/defaults.d.ts +157 -0
  14. package/dist/author/defaults.js +119 -0
  15. package/dist/author/hotspot-circle.d.ts +21 -0
  16. package/dist/author/hotspot-circle.js +124 -0
  17. package/dist/author/hotspot-container.d.ts +29 -0
  18. package/dist/author/hotspot-container.js +210 -0
  19. package/dist/author/hotspot-drawable.d.ts +31 -0
  20. package/dist/author/hotspot-drawable.js +312 -0
  21. package/dist/author/hotspot-palette.d.ts +14 -0
  22. package/dist/author/hotspot-palette.js +72 -0
  23. package/dist/author/hotspot-polygon.d.ts +38 -0
  24. package/dist/author/hotspot-polygon.js +200 -0
  25. package/dist/author/hotspot-rectangle.d.ts +20 -0
  26. package/dist/author/hotspot-rectangle.js +119 -0
  27. package/dist/author/icons.d.ts +9 -0
  28. package/dist/author/icons.js +4 -0
  29. package/dist/author/image-konva.d.ts +19 -0
  30. package/dist/author/image-konva.js +49 -0
  31. package/dist/author/index.d.ts +52 -0
  32. package/dist/author/index.js +143 -0
  33. package/dist/author/root.d.ts +15 -0
  34. package/dist/author/root.js +215 -0
  35. package/dist/author/shapes/circle.d.ts +18 -0
  36. package/dist/author/shapes/circle.js +47 -0
  37. package/dist/author/shapes/index.d.ts +12 -0
  38. package/dist/author/shapes/polygon.d.ts +19 -0
  39. package/dist/author/shapes/polygon.js +51 -0
  40. package/dist/author/shapes/rectagle.d.ts +18 -0
  41. package/dist/author/shapes/rectagle.js +57 -0
  42. package/dist/author/shapes/utils.d.ts +19 -0
  43. package/dist/author/shapes/utils.js +16 -0
  44. package/dist/author/upload-control.d.ts +29 -0
  45. package/dist/author/upload-control.js +28 -0
  46. package/dist/author/utils.d.ts +24 -0
  47. package/dist/author/utils.js +83 -0
  48. package/dist/browser/ReactKonva-Z9-1H-UZ.js +19329 -0
  49. package/dist/browser/ReactKonva-Z9-1H-UZ.js.map +1 -0
  50. package/dist/browser/author/index.js +41646 -0
  51. package/dist/browser/author/index.js.map +1 -0
  52. package/dist/browser/browser-CfnAFove.js +219 -0
  53. package/dist/browser/browser-CfnAFove.js.map +1 -0
  54. package/dist/browser/controller/index.js +198 -0
  55. package/dist/browser/controller/index.js.map +1 -0
  56. package/dist/browser/delivery/index.js +2460 -0
  57. package/dist/browser/delivery/index.js.map +1 -0
  58. package/dist/browser/dist-C78LDz6R.js +96 -0
  59. package/dist/browser/dist-C78LDz6R.js.map +1 -0
  60. package/dist/browser/hotspot.css +2 -0
  61. package/dist/controller/defaults.d.ts +35 -0
  62. package/dist/controller/defaults.js +29 -0
  63. package/dist/controller/index.d.ts +22 -0
  64. package/dist/controller/index.js +154 -0
  65. package/dist/controller/utils.d.ts +10 -0
  66. package/dist/controller/utils.js +12 -0
  67. package/dist/delivery/hotspot/circle.d.ts +19 -0
  68. package/dist/delivery/hotspot/circle.js +100 -0
  69. package/dist/delivery/hotspot/container.d.ts +16 -0
  70. package/dist/delivery/hotspot/container.js +150 -0
  71. package/dist/delivery/hotspot/icons.d.ts +10 -0
  72. package/dist/delivery/hotspot/icons.js +4 -0
  73. package/dist/delivery/hotspot/image-konva-tooltip.d.ts +19 -0
  74. package/dist/delivery/hotspot/image-konva-tooltip.js +66 -0
  75. package/dist/delivery/hotspot/index.d.ts +17 -0
  76. package/dist/delivery/hotspot/index.js +114 -0
  77. package/dist/delivery/hotspot/polygon.d.ts +21 -0
  78. package/dist/delivery/hotspot/polygon.js +108 -0
  79. package/dist/delivery/hotspot/rectangle.d.ts +19 -0
  80. package/dist/delivery/hotspot/rectangle.js +104 -0
  81. package/dist/delivery/index.d.ts +20 -0
  82. package/dist/delivery/index.js +107 -0
  83. package/dist/delivery/session-updater.d.ts +10 -0
  84. package/dist/delivery/session-updater.js +14 -0
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.iife.d.ts +8 -0
  87. package/dist/index.iife.js +169 -0
  88. package/dist/index.js +2 -0
  89. package/dist/runtime-support.d.ts +12 -0
  90. package/dist/runtime-support.js +12 -0
  91. package/package.json +84 -18
  92. package/CHANGELOG.json +0 -997
  93. package/CHANGELOG.md +0 -2214
  94. package/LICENSE.md +0 -5
  95. package/README.md +0 -1
  96. package/configure/CHANGELOG.json +0 -682
  97. package/configure/CHANGELOG.md +0 -1951
  98. package/configure/lib/DeleteWidget.js +0 -64
  99. package/configure/lib/DeleteWidget.js.map +0 -1
  100. package/configure/lib/button.js +0 -42
  101. package/configure/lib/button.js.map +0 -1
  102. package/configure/lib/buttons/circle.js +0 -33
  103. package/configure/lib/buttons/circle.js.map +0 -1
  104. package/configure/lib/buttons/polygon.js +0 -39
  105. package/configure/lib/buttons/polygon.js.map +0 -1
  106. package/configure/lib/buttons/rectangle.js +0 -39
  107. package/configure/lib/buttons/rectangle.js.map +0 -1
  108. package/configure/lib/defaults.js +0 -155
  109. package/configure/lib/defaults.js.map +0 -1
  110. package/configure/lib/hotspot-circle.js +0 -192
  111. package/configure/lib/hotspot-circle.js.map +0 -1
  112. package/configure/lib/hotspot-container.js +0 -320
  113. package/configure/lib/hotspot-container.js.map +0 -1
  114. package/configure/lib/hotspot-drawable.js +0 -519
  115. package/configure/lib/hotspot-drawable.js.map +0 -1
  116. package/configure/lib/hotspot-palette.js +0 -107
  117. package/configure/lib/hotspot-palette.js.map +0 -1
  118. package/configure/lib/hotspot-polygon.js +0 -293
  119. package/configure/lib/hotspot-polygon.js.map +0 -1
  120. package/configure/lib/hotspot-rectangle.js +0 -190
  121. package/configure/lib/hotspot-rectangle.js.map +0 -1
  122. package/configure/lib/icons.js +0 -7
  123. package/configure/lib/icons.js.map +0 -1
  124. package/configure/lib/image-konva.js +0 -66
  125. package/configure/lib/image-konva.js.map +0 -1
  126. package/configure/lib/index.js +0 -194
  127. package/configure/lib/index.js.map +0 -1
  128. package/configure/lib/root.js +0 -330
  129. package/configure/lib/root.js.map +0 -1
  130. package/configure/lib/shapes/circle.js +0 -84
  131. package/configure/lib/shapes/circle.js.map +0 -1
  132. package/configure/lib/shapes/index.js +0 -50
  133. package/configure/lib/shapes/index.js.map +0 -1
  134. package/configure/lib/shapes/polygon.js +0 -82
  135. package/configure/lib/shapes/polygon.js.map +0 -1
  136. package/configure/lib/shapes/rectagle.js +0 -84
  137. package/configure/lib/shapes/rectagle.js.map +0 -1
  138. package/configure/lib/shapes/utils.js +0 -21
  139. package/configure/lib/shapes/utils.js.map +0 -1
  140. package/configure/lib/upload-control.js +0 -41
  141. package/configure/lib/upload-control.js.map +0 -1
  142. package/configure/lib/utils.js +0 -185
  143. package/configure/lib/utils.js.map +0 -1
  144. package/configure/package.json +0 -26
  145. package/configure/src/DeleteWidget.jsx +0 -51
  146. package/configure/src/__tests__/DeleteWidget.test.jsx +0 -366
  147. package/configure/src/__tests__/button.test.jsx +0 -198
  148. package/configure/src/__tests__/hotspot-circle.test.jsx +0 -259
  149. package/configure/src/__tests__/hotspot-container.test.js +0 -366
  150. package/configure/src/__tests__/hotspot-drawable.test.js +0 -271
  151. package/configure/src/__tests__/hotspot-palette.test.jsx +0 -71
  152. package/configure/src/__tests__/image-konva.test.jsx +0 -226
  153. package/configure/src/__tests__/index.test.js +0 -329
  154. package/configure/src/__tests__/root.test.js +0 -400
  155. package/configure/src/__tests__/utils.test.js +0 -241
  156. package/configure/src/button.jsx +0 -35
  157. package/configure/src/buttons/circle.jsx +0 -18
  158. package/configure/src/buttons/polygon.jsx +0 -29
  159. package/configure/src/buttons/rectangle.jsx +0 -29
  160. package/configure/src/defaults.js +0 -109
  161. package/configure/src/hotspot-circle.jsx +0 -183
  162. package/configure/src/hotspot-container.jsx +0 -330
  163. package/configure/src/hotspot-drawable.jsx +0 -527
  164. package/configure/src/hotspot-palette.jsx +0 -90
  165. package/configure/src/hotspot-polygon.jsx +0 -294
  166. package/configure/src/hotspot-rectangle.jsx +0 -169
  167. package/configure/src/icons.js +0 -5
  168. package/configure/src/image-konva.jsx +0 -63
  169. package/configure/src/index.js +0 -208
  170. package/configure/src/root.jsx +0 -346
  171. package/configure/src/shapes/circle.js +0 -81
  172. package/configure/src/shapes/index.js +0 -4
  173. package/configure/src/shapes/polygon.js +0 -81
  174. package/configure/src/shapes/rectagle.js +0 -82
  175. package/configure/src/shapes/utils.js +0 -16
  176. package/configure/src/upload-control.jsx +0 -33
  177. package/configure/src/utils.js +0 -210
  178. package/controller/CHANGELOG.json +0 -362
  179. package/controller/CHANGELOG.md +0 -1304
  180. package/controller/lib/defaults.js +0 -33
  181. package/controller/lib/defaults.js.map +0 -1
  182. package/controller/lib/index.js +0 -341
  183. package/controller/lib/index.js.map +0 -1
  184. package/controller/lib/utils.js +0 -32
  185. package/controller/lib/utils.js.map +0 -1
  186. package/controller/package.json +0 -18
  187. package/controller/src/__tests__/index.test.js +0 -419
  188. package/controller/src/__tests__/utils.test.js +0 -5
  189. package/controller/src/defaults.js +0 -19
  190. package/controller/src/index.js +0 -328
  191. package/controller/src/utils.js +0 -29
  192. package/docs/config-schema.json +0 -2023
  193. package/docs/config-schema.json.md +0 -1495
  194. package/docs/demo/config.js +0 -8
  195. package/docs/demo/generate.js +0 -118
  196. package/docs/demo/index.html +0 -1
  197. package/docs/demo/session.js +0 -11
  198. package/docs/pie-schema.json +0 -1204
  199. package/docs/pie-schema.json.md +0 -851
  200. package/lib/hotspot/circle.js +0 -156
  201. package/lib/hotspot/circle.js.map +0 -1
  202. package/lib/hotspot/container.js +0 -206
  203. package/lib/hotspot/container.js.map +0 -1
  204. package/lib/hotspot/icons.js +0 -8
  205. package/lib/hotspot/icons.js.map +0 -1
  206. package/lib/hotspot/image-konva-tooltip.js +0 -86
  207. package/lib/hotspot/image-konva-tooltip.js.map +0 -1
  208. package/lib/hotspot/index.js +0 -163
  209. package/lib/hotspot/index.js.map +0 -1
  210. package/lib/hotspot/polygon.js +0 -203
  211. package/lib/hotspot/polygon.js.map +0 -1
  212. package/lib/hotspot/rectangle.js +0 -175
  213. package/lib/hotspot/rectangle.js.map +0 -1
  214. package/lib/index.js +0 -213
  215. package/lib/index.js.map +0 -1
  216. package/lib/session-updater.js +0 -42
  217. package/lib/session-updater.js.map +0 -1
  218. package/src/__tests__/container.test.jsx +0 -58
  219. package/src/__tests__/index.test.js +0 -123
  220. package/src/__tests__/session-updater.test.jsx +0 -69
  221. package/src/hotspot/__tests__/circle.test.jsx +0 -464
  222. package/src/hotspot/__tests__/container.test.jsx +0 -546
  223. package/src/hotspot/__tests__/image-konva-tooltip.test.jsx +0 -510
  224. package/src/hotspot/__tests__/polygon.test.jsx +0 -502
  225. package/src/hotspot/__tests__/rectangle.test.jsx +0 -418
  226. package/src/hotspot/circle.jsx +0 -152
  227. package/src/hotspot/container.jsx +0 -217
  228. package/src/hotspot/icons.js +0 -7
  229. package/src/hotspot/image-konva-tooltip.jsx +0 -76
  230. package/src/hotspot/index.jsx +0 -165
  231. package/src/hotspot/polygon.jsx +0 -195
  232. package/src/hotspot/rectangle.jsx +0 -171
  233. package/src/index.js +0 -226
  234. package/src/session-updater.js +0 -29
@@ -0,0 +1,124 @@
1
+ import e from "./DeleteWidget.js";
2
+ import t from "react";
3
+ import n from "prop-types";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ import { Circle as a, Group as o, Transformer as s } from "react-konva";
6
+ //#region src/author/hotspot-circle.tsx
7
+ function c(e) {
8
+ return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
9
+ }
10
+ function l(e, t) {
11
+ return !e || c(e) ? e : c(e.default) ? e.default : t && c(e[t]) ? e[t] : t && c(e[t]?.default) ? e[t].default : e;
12
+ }
13
+ var u = l(s, "Transformer"), d = l(o, "Group"), f = l(a, "Circle"), p = class extends t.Component {
14
+ constructor(e) {
15
+ super(e), this.state = {
16
+ hovered: !1,
17
+ isDragging: !1
18
+ }, this.shapeRef = t.createRef(), this.trRef = t.createRef();
19
+ }
20
+ handleClick = (e) => {
21
+ let { radius: t, isDrawing: n, onClick: r, id: i } = this.props;
22
+ t <= 0 && n || (e.cancelBubble = !0, r(i));
23
+ };
24
+ handleMouseEnter = () => {
25
+ document.body.style.cursor = "pointer", this.setState({ hovered: !0 }), this.trRef.current.setNode(this.shapeRef.current), this.trRef.current.getLayer().batchDraw();
26
+ };
27
+ handleMouseLeave = () => {
28
+ this.state.isDragging || this.setState({ hovered: !1 }), document.body.style.cursor = "default";
29
+ };
30
+ handleOnDragEnd = (e) => {
31
+ let { onDragEnd: t, id: n } = this.props;
32
+ this.setState({ isDragging: !1 }), t(n, {
33
+ x: e.target.x(),
34
+ y: e.target.y()
35
+ });
36
+ };
37
+ onResizeEnd = () => {
38
+ let { onDragEnd: e, id: t } = this.props, n = this.shapeRef.current, r = n.scaleX() === 1 ? n.scaleY() : n.scaleX(), i = Math.max(n.radius() * r, 5);
39
+ this.setState({ isDragging: !1 }), e(t, {
40
+ x: n.x(),
41
+ y: n.y(),
42
+ radius: i
43
+ }), n.scaleX(1), n.scaleY(1);
44
+ };
45
+ handleDelete = (e) => {
46
+ let { onDeleteShape: t } = this.props;
47
+ t(e);
48
+ };
49
+ onTransform = () => {
50
+ let e = this.shapeRef.current, t = (e.scaleX() + e.scaleY()) / 2;
51
+ e.scaleX(t), e.scaleY(t);
52
+ };
53
+ render() {
54
+ let { correct: t, radius: n, hotspotColor: a, id: o, outlineColor: s, x: c, y: l, strokeWidth: p = 5, selectedHotspotColor: m, hoverOutlineColor: h } = this.props, { hovered: g, isDragging: _ } = this.state, v = isNaN(n) || n <= 0 ? 5 : n;
55
+ return /* @__PURE__ */ i(d, {
56
+ onMouseLeave: this.handleMouseLeave,
57
+ onMouseEnter: this.handleMouseEnter,
58
+ padding: 12,
59
+ children: [
60
+ /* @__PURE__ */ r(f, {
61
+ ref: this.shapeRef,
62
+ radius: v,
63
+ fill: t && m ? m : a,
64
+ onClick: this.handleClick,
65
+ onTap: this.handleClick,
66
+ draggable: !0,
67
+ stroke: s,
68
+ strokeWidth: t ? p : 0,
69
+ onDragStart: () => this.setState({ isDragging: !0 }),
70
+ onDragEnd: this.handleOnDragEnd,
71
+ onTransformStart: () => this.setState({ isDragging: !0 }),
72
+ onTransformEnd: this.onResizeEnd,
73
+ x: c,
74
+ y: l,
75
+ cursor: "pointer"
76
+ }),
77
+ !_ && g && /* @__PURE__ */ r(e, {
78
+ id: o,
79
+ radius: v,
80
+ x: c,
81
+ y: l,
82
+ handleWidgetClick: this.handleDelete,
83
+ isCircle: !0
84
+ }),
85
+ this.state.hovered && /* @__PURE__ */ r(u, {
86
+ borderStroke: h || null,
87
+ ref: this.trRef,
88
+ rotateEnabled: !1,
89
+ keepRatio: !0,
90
+ onTransform: this.onTransform,
91
+ enabledAnchors: [
92
+ "middle-left",
93
+ "middle-right",
94
+ "top-center",
95
+ "bottom-center"
96
+ ],
97
+ boundBoxFunc: (e, t) => {
98
+ if (t.width < 10 || t.height < 10) return e;
99
+ let n = e.x + e.width / 2, r = e.y + e.height / 2, i = t.x + t.width / 2, a = t.y + t.height / 2, o = n - i, s = r - a;
100
+ return t.x += o, t.y += s, t;
101
+ }
102
+ })
103
+ ]
104
+ });
105
+ }
106
+ };
107
+ p.propTypes = {
108
+ correct: n.bool,
109
+ isDrawing: n.bool.isRequired,
110
+ id: n.string.isRequired,
111
+ radius: n.number.isRequired,
112
+ hotspotColor: n.string.isRequired,
113
+ selectedHotspotColor: n.string,
114
+ hoverOutlineColor: n.string,
115
+ onClick: n.func.isRequired,
116
+ onDeleteShape: n.func.isRequired,
117
+ onDragEnd: n.func.isRequired,
118
+ outlineColor: n.string.isRequired,
119
+ x: n.number.isRequired,
120
+ y: n.number.isRequired,
121
+ strokeWidth: n.number
122
+ }, p.defaultProps = { correct: !1 };
123
+ //#endregion
124
+ export { p as default };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/hotspot/configure/src/hotspot-container.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React, { Component } from 'react';
10
+ export declare class Container extends Component {
11
+ static getDerivedStateFromProps(nextProps: any, prevState: any): any;
12
+ constructor(props: any);
13
+ handleFileRead: any;
14
+ enableDropzone: () => void;
15
+ disableDropzone: () => void;
16
+ handleOnPaste: any;
17
+ handleOnDrop: any;
18
+ handleOnDragOver: any;
19
+ handleOnDragExit: any;
20
+ onUpdateShapes: any;
21
+ onDeleteShape: any;
22
+ handleClearAll: () => any;
23
+ handleEnableDrag: () => void;
24
+ handleDisableDrag: () => void;
25
+ handleInputClick: any;
26
+ handleFinishDrawing: any;
27
+ render(): React.JSX.Element;
28
+ }
29
+ export default Container;
@@ -0,0 +1,210 @@
1
+ import e from "./button.js";
2
+ import { CircleButton as t } from "./buttons/circle.js";
3
+ import { PolygonButton as n } from "./buttons/polygon.js";
4
+ import { RectangleButton as r } from "./buttons/rectangle.js";
5
+ import { SUPPORTED_SHAPES as i } from "./shapes/utils.js";
6
+ import { getAllShapes as a, groupShapes as o } from "./utils.js";
7
+ import s from "./hotspot-drawable.js";
8
+ import c from "./upload-control.js";
9
+ import { Component as l } from "react";
10
+ import u from "prop-types";
11
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
12
+ import { styled as p } from "@mui/material/styles";
13
+ //#region src/author/hotspot-container.tsx
14
+ var m = p("div")(({ theme: e }) => ({
15
+ marginTop: e.spacing(1.5),
16
+ marginBottom: e.spacing(2.5)
17
+ })), h = p("div")(({ theme: e, hasErrors: t, dropzoneActive: n }) => ({
18
+ border: "1px solid #E0E1E6",
19
+ borderRadius: "5px",
20
+ ...n && { border: "1px solid #0032C2" },
21
+ ...t && !n && { border: `1px solid ${e.palette.error.main}` }
22
+ })), g = p("div")({
23
+ marginRight: "5px",
24
+ "&:hover": { cursor: "pointer" }
25
+ }), _ = p("div")({
26
+ alignItems: "center",
27
+ display: "flex",
28
+ flexDirection: "column",
29
+ justifyContent: "center"
30
+ }), v = p("div")(({ theme: e }) => ({
31
+ minHeight: 350,
32
+ paddingBottom: e.spacing(5),
33
+ paddingRight: e.spacing(5)
34
+ })), y = p("div")(({ theme: e }) => ({
35
+ backgroundColor: "#FFF",
36
+ borderBottom: "1px solid #E0E1E6",
37
+ borderTopLeftRadius: "5px",
38
+ borderTopRightRadius: "5px",
39
+ display: "flex",
40
+ justifyContent: "flex-end",
41
+ padding: e.spacing(1)
42
+ })), b = p("div")({ marginRight: "auto" }), x = (e) => e.type.match(/image.*/), S = class extends l {
43
+ static getDerivedStateFromProps(e, t) {
44
+ return {
45
+ ...t,
46
+ shapes: a(e.shapes)
47
+ };
48
+ }
49
+ constructor(e) {
50
+ super(e), this.state = {
51
+ dragEnabled: !0,
52
+ shapes: a(e.shapes),
53
+ selectedShape: i.NONE
54
+ }, this.fakeImageHandler = {
55
+ cancel: () => {},
56
+ done: (e, t) => this.props.onImageUpload(t),
57
+ fileChosen: () => {},
58
+ progress: () => {}
59
+ };
60
+ }
61
+ handleFileRead = (e) => {
62
+ if (e instanceof Blob) {
63
+ let { onImageUpload: t, insertImage: n } = this.props, r = new FileReader();
64
+ r.onloadend = () => t(r.result), r.readAsDataURL(e), n && n({
65
+ ...this.fakeImageHandler,
66
+ getChosenFile: () => e,
67
+ isPasted: !0
68
+ });
69
+ }
70
+ };
71
+ enableDropzone = () => this.setState({ dropzoneActive: !0 });
72
+ disableDropzone = () => this.setState({ dropzoneActive: !1 });
73
+ handleOnPaste = (e) => {
74
+ let { files: t } = e.clipboardData;
75
+ t && x(t[0]) && this.handleFileRead(t[0]);
76
+ };
77
+ handleOnDrop = (e) => {
78
+ e.preventDefault();
79
+ let { items: t, files: n } = e.dataTransfer;
80
+ if (t && t[0].kind === "file") {
81
+ let e = t[0].getAsFile();
82
+ x(e) && this.handleFileRead(e);
83
+ } else x(n[0]) && this.handleFileRead(n[0]);
84
+ this.disableDropzone();
85
+ };
86
+ handleOnDragOver = (e) => {
87
+ e.preventDefault();
88
+ let { dropzoneActive: t } = this.state;
89
+ t || this.enableDropzone();
90
+ };
91
+ handleOnDragExit = (e) => {
92
+ e.preventDefault(), this.disableDropzone();
93
+ };
94
+ onUpdateShapes = (e) => {
95
+ let { onUpdateShapes: t } = this.props;
96
+ this.setState({ shapes: e }, () => t(o(e)));
97
+ };
98
+ onDeleteShape = (e) => {
99
+ let { shapes: t } = this.state;
100
+ if (t && t.length) {
101
+ let n = t.filter((t) => t.id !== e);
102
+ this.onUpdateShapes(n);
103
+ }
104
+ };
105
+ handleClearAll = () => this.onUpdateShapes([]);
106
+ handleEnableDrag = () => this.setState({ dragEnabled: !0 });
107
+ handleDisableDrag = () => this.setState({ dragEnabled: !1 });
108
+ handleInputClick = () => {
109
+ let { insertImage: e } = this.props;
110
+ e && e(this.fakeImageHandler);
111
+ };
112
+ handleFinishDrawing = () => {
113
+ this.setState({ selectedShape: i.NONE });
114
+ };
115
+ render() {
116
+ let { dimensions: a, hasErrors: o, hotspotColor: l, imageUrl: u, multipleCorrect: p, onUpdateImageDimension: x, outlineColor: S, strokeWidth: C, preserveAspectRatioEnabled: w, hoverOutlineColor: T, selectedHotspotColor: E } = this.props, { dropzoneActive: D, dragEnabled: O } = this.state, { shapes: k, selectedShape: A } = this.state;
117
+ return /* @__PURE__ */ d(m, { children: /* @__PURE__ */ f(h, {
118
+ hasErrors: o,
119
+ dropzoneActive: D,
120
+ ...O ? {
121
+ onDragExit: this.handleOnDragExit,
122
+ onDragLeave: this.handleOnDragExit,
123
+ onDragOver: this.handleOnDragOver,
124
+ onDrop: this.handleOnDrop,
125
+ onPaste: this.handleOnPaste
126
+ } : {},
127
+ children: [/* @__PURE__ */ f(y, { children: [
128
+ /* @__PURE__ */ d(g, {
129
+ onClick: () => this.setState({ selectedShape: A === i.RECTANGLE ? i.NONE : i.RECTANGLE }),
130
+ children: /* @__PURE__ */ d(r, { isActive: A === i.RECTANGLE })
131
+ }),
132
+ /* @__PURE__ */ d(g, {
133
+ onClick: () => this.setState({ selectedShape: A === i.POLYGON ? i.NONE : i.POLYGON }),
134
+ children: /* @__PURE__ */ d(n, { isActive: A === i.POLYGON })
135
+ }),
136
+ /* @__PURE__ */ d(g, {
137
+ onClick: () => this.setState({ selectedShape: A === i.CIRCLE ? i.NONE : i.CIRCLE }),
138
+ children: /* @__PURE__ */ d(t, { isActive: A === i.CIRCLE })
139
+ }),
140
+ u && /* @__PURE__ */ d(b, { children: /* @__PURE__ */ d(c, {
141
+ label: "Replace Image",
142
+ onInputClick: this.handleInputClick,
143
+ setRef: (e) => {
144
+ this.input = e;
145
+ }
146
+ }) }),
147
+ /* @__PURE__ */ d(e, {
148
+ disabled: !(k && k.length),
149
+ onClick: this.handleClearAll,
150
+ label: "Clear all"
151
+ })
152
+ ] }), /* @__PURE__ */ d(v, {
153
+ ref: (e) => {
154
+ this.imageSection = e;
155
+ },
156
+ children: u ? /* @__PURE__ */ d(s, {
157
+ dimensions: a,
158
+ disableDrag: this.handleDisableDrag,
159
+ enableDrag: this.handleEnableDrag,
160
+ shapeType: this.state.selectedShape,
161
+ handleFinishDrawing: this.handleFinishDrawing,
162
+ imageUrl: u,
163
+ hotspotColor: l,
164
+ selectedHotspotColor: E,
165
+ hoverOutlineColor: T,
166
+ multipleCorrect: p,
167
+ onUpdateImageDimension: x,
168
+ onUpdateShapes: this.onUpdateShapes,
169
+ onDeleteShape: this.onDeleteShape,
170
+ outlineColor: S,
171
+ shapes: k,
172
+ strokeWidth: C,
173
+ preserveAspectRatioEnabled: w
174
+ }) : /* @__PURE__ */ f(_, { children: [
175
+ /* @__PURE__ */ d("label", { children: "Drag and drop or upload image from computer" }),
176
+ /* @__PURE__ */ d("br", {}),
177
+ /* @__PURE__ */ d(c, {
178
+ label: "Upload Image",
179
+ onInputClick: this.handleInputClick,
180
+ setRef: (e) => {
181
+ this.input = e;
182
+ }
183
+ })
184
+ ] })
185
+ })]
186
+ }) });
187
+ }
188
+ };
189
+ S.propTypes = {
190
+ dimensions: u.object.isRequired,
191
+ imageUrl: u.string.isRequired,
192
+ hotspotColor: u.string.isRequired,
193
+ selectedHotspotColor: u.string,
194
+ hoverOutlineColor: u.string,
195
+ multipleCorrect: u.bool.isRequired,
196
+ onImageUpload: u.func.isRequired,
197
+ onUpdateImageDimension: u.func.isRequired,
198
+ insertImage: u.func,
199
+ onUpdateShapes: u.func.isRequired,
200
+ outlineColor: u.string.isRequired,
201
+ shapes: u.shape({
202
+ rectangles: u.array,
203
+ polygons: u.array
204
+ }).isRequired,
205
+ strokeWidth: u.number,
206
+ preserveAspectRatioEnabled: u.bool,
207
+ hasErrors: u.bool
208
+ }, S.defaultProps = { strokeWidth: 5 };
209
+ //#endregion
210
+ export { S as default };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/hotspot/configure/src/hotspot-drawable.jsx
3
+ * @auto-generated
4
+ *
5
+ * This file is automatically synced from pie-elements and converted to TypeScript.
6
+ * Manual edits will be overwritten on next sync.
7
+ * To make changes, edit the upstream JavaScript file and run sync again.
8
+ */
9
+ import React from 'react';
10
+ export declare class Drawable extends React.Component {
11
+ static getDerivedStateFromProps(nextProps: any, prevState: any): {
12
+ shapes: any;
13
+ } | null;
14
+ constructor(props: any);
15
+ handleOnMouseDown: any;
16
+ addPolygonPoint(e: any): any;
17
+ handleOnMouseUp: any;
18
+ handleMouseMove: any;
19
+ handleOnMouseOutOrLeave: any;
20
+ handleOnDragEnd: any;
21
+ closeInProgressPolygons: any;
22
+ handleOnSetAsCorrect: any;
23
+ handleOnImageLoad: any;
24
+ initialiseResize: any;
25
+ checkIfResizeValid(x: any, y: any): boolean;
26
+ startResizing: any;
27
+ stopResizing: any;
28
+ deleteShape: any;
29
+ render(): React.JSX.Element;
30
+ }
31
+ export default Drawable;
@@ -0,0 +1,312 @@
1
+ import { CircleShape as e } from "./shapes/circle.js";
2
+ import { RectangleShape as t } from "./shapes/rectagle.js";
3
+ import { PolygonShape as n } from "./shapes/polygon.js";
4
+ import { SHAPE_GROUPS as r, SUPPORTED_SHAPES as i } from "./shapes/utils.js";
5
+ import { getUpdatedShapes as a, updateImageDimensions as o } from "./utils.js";
6
+ import s from "./hotspot-rectangle.js";
7
+ import c from "./hotspot-polygon.js";
8
+ import l from "./hotspot-circle.js";
9
+ import u, { createElement as d } from "react";
10
+ import f from "prop-types";
11
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
12
+ import { styled as h } from "@mui/material/styles";
13
+ import { Layer as g, Stage as _ } from "react-konva";
14
+ import { cloneDeep as v } from "@pie-element/shared-lodash";
15
+ //#region src/author/hotspot-drawable.tsx
16
+ function y(e) {
17
+ return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
18
+ }
19
+ function b(e, t) {
20
+ return !e || y(e) ? e : y(e.default) ? e.default : t && y(e[t]) ? e[t] : t && y(e[t]?.default) ? e[t].default : e;
21
+ }
22
+ var x = b(_, "Stage"), S = b(g, "Layer"), C = h("div")({ position: "relative" }), w = h("div")({
23
+ position: "relative",
24
+ width: "fit-content"
25
+ }), T = h("img")({
26
+ alignItems: "center",
27
+ display: "flex",
28
+ justifyContent: "center"
29
+ }), E = h("div")({
30
+ borderBottom: "1px solid #727272",
31
+ borderRight: "1px solid #727272",
32
+ bottom: "-10px",
33
+ cursor: "se-resize",
34
+ height: "10px",
35
+ position: "absolute",
36
+ right: "-10px",
37
+ width: "10px"
38
+ }), D = h(x)({
39
+ left: 0,
40
+ top: 0,
41
+ position: "absolute"
42
+ }), O = 800, k = class extends u.Component {
43
+ static getDerivedStateFromProps(e, t) {
44
+ return e.shapes === t.shapes ? null : { shapes: e.shapes };
45
+ }
46
+ constructor(e) {
47
+ super(e), this.state = {
48
+ isDrawing: !1,
49
+ stateShapes: !1,
50
+ resizing: !1,
51
+ temporaryPolygon: null,
52
+ shapes: [],
53
+ dimensions: {
54
+ height: 0,
55
+ width: 0
56
+ }
57
+ };
58
+ }
59
+ handleOnMouseDown = (r) => {
60
+ let { shapeType: a, onUpdateShapes: o, shapes: s } = this.props, c, l;
61
+ if (r.target === r.currentTarget && Object.values(i).includes(a)) {
62
+ switch (a) {
63
+ case i.RECTANGLE:
64
+ c = t.create(s, r);
65
+ break;
66
+ case i.CIRCLE:
67
+ c = e.create(s, r);
68
+ break;
69
+ case i.POLYGON:
70
+ if (l = this.state.isDrawingShapeId, l) {
71
+ let e = this.addPolygonPoint(r);
72
+ c = {
73
+ isDrawing: !0,
74
+ isDrawingShapeId: l,
75
+ shapes: e
76
+ };
77
+ } else c = n.create(s, r);
78
+ break;
79
+ default: return;
80
+ }
81
+ this.setState({ ...c }), o(c.shapes);
82
+ }
83
+ };
84
+ addPolygonPoint(e) {
85
+ let { shapes: t } = n.addPoint(this.state, e, (e) => {
86
+ this.setState({
87
+ isDrawing: !1,
88
+ shapes: e,
89
+ isDrawingShapeId: void 0
90
+ }), this.props.onUpdateShapes(e);
91
+ });
92
+ return t;
93
+ }
94
+ handleOnMouseUp = () => {
95
+ let { shapeType: n, onUpdateShapes: r } = this.props, a;
96
+ if (n !== i.POLYGON) {
97
+ switch (n) {
98
+ case i.RECTANGLE:
99
+ a = t.finalizeCreation(this.state, this.props);
100
+ break;
101
+ case i.CIRCLE:
102
+ a = e.finalizeCreation(this.state, this.props);
103
+ break;
104
+ default: return;
105
+ }
106
+ this.setState({
107
+ ...a,
108
+ isDrawing: !1
109
+ }), r(a.shapes);
110
+ }
111
+ };
112
+ handleMouseMove = (r) => {
113
+ let { shapeType: a, onUpdateShapes: o } = this.props, s;
114
+ if (!(!this.state.isDrawing || !Object.values(i).includes(a))) {
115
+ switch (a) {
116
+ case i.RECTANGLE:
117
+ s = t.handleMouseMove(this.state, r);
118
+ break;
119
+ case i.CIRCLE:
120
+ s = e.handleMouseMove(this.state, r);
121
+ break;
122
+ case i.POLYGON:
123
+ s = n.handleMouseMove(this.state, r);
124
+ break;
125
+ default: return;
126
+ }
127
+ this.setState(s), o(s.shapes);
128
+ }
129
+ };
130
+ handleOnMouseOutOrLeave = (e) => {
131
+ this.state.isDrawing && this.handleOnMouseUp(e);
132
+ };
133
+ handleOnDragEnd = (e, t) => {
134
+ let { shapes: n, onUpdateShapes: r, dimensions: i } = this.props, { width: a, height: o } = i;
135
+ r(v(n.map((n) => {
136
+ if (n.id !== e) return n;
137
+ let r = t.x, i = t.y;
138
+ if (n.group === "rectangles") return r + n.width < 0 || r > a || i + n.height < 0 || i > o ? null : {
139
+ ...n,
140
+ ...t
141
+ };
142
+ if (n.group === "circles") {
143
+ let e = n.radius;
144
+ return r + e < 0 || r - e > a || i + e < 0 || i - e > o ? null : {
145
+ ...n,
146
+ ...t
147
+ };
148
+ }
149
+ if (n.group === "polygons") {
150
+ let e = n.points, r = e.map((e) => e.x), i = e.map((e) => e.y), s = Math.min(...r), c = Math.min(...i), l = Math.max(...r), u = Math.max(...i), d = t.points[0].x - e[0].x, f = t.points[0].y - e[0].y;
151
+ return s += d, l += d, c += f, u += f, l < 0 || s > a || u < 0 || c > o ? null : {
152
+ ...n,
153
+ ...t
154
+ };
155
+ }
156
+ return n;
157
+ }).filter((e) => e !== null)));
158
+ };
159
+ closeInProgressPolygons = (e) => {
160
+ let { shapes: t, onUpdateShapes: r } = this.props, i = (t || []).find((e) => e.id === "newPolygon");
161
+ (e === "newPolygon" || i && this.state.isDrawing) && n.finalizeCreation(this.state, (e) => {
162
+ this.setState({
163
+ isDrawing: !1,
164
+ shapes: e,
165
+ isDrawingShapeId: void 0
166
+ }), r(v(e));
167
+ });
168
+ };
169
+ handleOnSetAsCorrect = (e) => {
170
+ let { id: t } = e, { multipleCorrect: n, shapes: r, onUpdateShapes: i } = this.props, a;
171
+ a = n ? r.map((e) => (e.id === t && (e.correct = !e.correct), e)) : r.map((e) => (e.correct = e.id === t, e)), i(v(a)), this.closeInProgressPolygons(t);
172
+ };
173
+ handleOnImageLoad = ({ target: e }) => {
174
+ let { onUpdateImageDimension: t } = this.props, n = this.resize, r = getComputedStyle(e), i = parseFloat(r.height), a = parseFloat(r.width), o = a / O, s = a > O ? {
175
+ height: i / o,
176
+ width: O
177
+ } : {
178
+ height: i,
179
+ width: a
180
+ };
181
+ this.setState({ dimensions: s }, () => t(s)), n.addEventListener("mousedown", this.initialiseResize, !1);
182
+ };
183
+ initialiseResize = () => {
184
+ window.addEventListener("mousemove", this.startResizing, !1), window.addEventListener("mouseup", this.stopResizing, !1);
185
+ };
186
+ checkIfResizeValid(e, t) {
187
+ let { shapes: n } = this.state, r = !0;
188
+ return n && n.forEach((n) => {
189
+ let i = n.x + n.width + 5, a = n.y + n.height + 5;
190
+ (e <= i || t <= a) && (r = !1);
191
+ }), r;
192
+ }
193
+ startResizing = (e) => {
194
+ let t = e.target.getBoundingClientRect(), n = this.image, { disableDrag: r, preserveAspectRatioEnabled: i, dimensions: s, shapes: c } = this.props, { width: l, height: u } = o(s, {
195
+ width: e.clientX - t.left,
196
+ height: e.clientY - t.top
197
+ }, i);
198
+ this.checkIfResizeValid(l, u) && l > 150 && u > 150 && n && (n.style.width = `${l}px`, n.style.height = `${u}px`, this.setState({
199
+ resizing: !0,
200
+ dimensions: {
201
+ height: u,
202
+ width: l
203
+ },
204
+ stateShapes: a(s, {
205
+ width: l,
206
+ height: u
207
+ }, c)
208
+ })), r();
209
+ };
210
+ stopResizing = () => {
211
+ let { enableDrag: e, onUpdateImageDimension: t, onUpdateShapes: n } = this.props, { dimensions: r, stateShapes: i } = this.state;
212
+ e(), i && n(v(i)), t(r), window.removeEventListener("mousemove", this.startResizing, !1), window.removeEventListener("mouseup", this.stopResizing, !1), this.setState({
213
+ resizing: !1,
214
+ stateShapes: !1
215
+ });
216
+ };
217
+ deleteShape = (e) => {
218
+ this.setState({
219
+ isDrawing: !1,
220
+ isDrawingShapeId: void 0
221
+ }), this.props.onDeleteShape(e);
222
+ };
223
+ render() {
224
+ let { imageUrl: e, dimensions: { height: t, width: n }, hotspotColor: i, outlineColor: a, shapes: o, strokeWidth: u, hoverOutlineColor: f, selectedHotspotColor: h } = this.props, { stateShapes: g, isDrawing: _, dimensions: { height: v, width: y } } = this.state, b = g || o;
225
+ return /* @__PURE__ */ m(C, { children: [e && /* @__PURE__ */ m(w, { children: [/* @__PURE__ */ p(T, {
226
+ onLoad: this.handleOnImageLoad,
227
+ ref: (e) => {
228
+ this.image = e;
229
+ },
230
+ src: e,
231
+ ...t && n ? { style: {
232
+ height: t,
233
+ width: n
234
+ } } : {}
235
+ }), /* @__PURE__ */ p(E, { ref: (e) => {
236
+ this.resize = e;
237
+ } })] }), /* @__PURE__ */ p(D, {
238
+ height: v || t,
239
+ width: y || n,
240
+ onMouseDown: this.handleOnMouseDown,
241
+ onMouseUp: this.handleOnMouseUp,
242
+ onMouseMove: this.handleMouseMove,
243
+ onContentMouseOut: this.handleOnMouseOutOrLeave,
244
+ onContentMouseLeave: this.handleOnMouseOutOrLeave,
245
+ children: /* @__PURE__ */ p(S, { children: b.map((e, o) => {
246
+ let p;
247
+ switch (e.group) {
248
+ case r.RECTANGLES:
249
+ p = s;
250
+ break;
251
+ case r.CIRCLES:
252
+ p = l;
253
+ break;
254
+ case r.POLYGONS:
255
+ p = c;
256
+ break;
257
+ default: return null;
258
+ }
259
+ return /* @__PURE__ */ d(p, {
260
+ ...e.group === r.CIRCLES ? { radius: e.radius } : {},
261
+ ...e.group === r.RECTANGLES ? {
262
+ height: e.height,
263
+ width: e.width
264
+ } : {},
265
+ ...e.group === r.POLYGONS ? {
266
+ points: e.points,
267
+ addPolygonPoint: (e) => this.addPolygonPoint(e)
268
+ } : {},
269
+ correct: e.correct,
270
+ isDrawing: _,
271
+ hotspotColor: i,
272
+ hoverOutlineColor: f,
273
+ selectedHotspotColor: h,
274
+ id: e.id,
275
+ key: o,
276
+ onClick: () => this.handleOnSetAsCorrect(e),
277
+ onDragEnd: this.handleOnDragEnd,
278
+ onDeleteShape: this.deleteShape,
279
+ outlineColor: a,
280
+ width: e.width,
281
+ x: e.x,
282
+ y: e.y,
283
+ strokeWidth: u,
284
+ imageHeight: v || t,
285
+ imageWidth: y || n,
286
+ ...e.group === "polygons" ? { addPolygonPoint: (e) => this.addPolygonPoint(e) } : {}
287
+ });
288
+ }) })
289
+ })] });
290
+ }
291
+ };
292
+ k.propTypes = {
293
+ disableDrag: f.func.isRequired,
294
+ dimensions: f.object.isRequired,
295
+ enableDrag: f.func.isRequired,
296
+ shapeType: f.oneOf(Object.values(i)),
297
+ imageUrl: f.string.isRequired,
298
+ handleFinishDrawing: f.func.isRequired,
299
+ hotspotColor: f.string.isRequired,
300
+ selectedHotspotColor: f.string,
301
+ hoverOutlineColor: f.string,
302
+ multipleCorrect: f.bool.isRequired,
303
+ onUpdateImageDimension: f.func.isRequired,
304
+ onUpdateShapes: f.func.isRequired,
305
+ onDeleteShape: f.func.isRequired,
306
+ outlineColor: f.string.isRequired,
307
+ shapes: f.array.isRequired,
308
+ strokeWidth: f.number,
309
+ preserveAspectRatioEnabled: f.bool
310
+ };
311
+ //#endregion
312
+ export { k as default };