@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.
- package/configure.js +2 -0
- package/controller.js +1 -0
- package/dist/author/DeleteWidget.d.ts +38 -0
- package/dist/author/DeleteWidget.js +46 -0
- package/dist/author/button.d.ts +31 -0
- package/dist/author/button.js +27 -0
- package/dist/author/buttons/circle.d.ts +18 -0
- package/dist/author/buttons/circle.js +25 -0
- package/dist/author/buttons/polygon.d.ts +18 -0
- package/dist/author/buttons/polygon.js +36 -0
- package/dist/author/buttons/rectangle.d.ts +18 -0
- package/dist/author/buttons/rectangle.js +36 -0
- package/dist/author/defaults.d.ts +157 -0
- package/dist/author/defaults.js +119 -0
- package/dist/author/hotspot-circle.d.ts +21 -0
- package/dist/author/hotspot-circle.js +124 -0
- package/dist/author/hotspot-container.d.ts +29 -0
- package/dist/author/hotspot-container.js +210 -0
- package/dist/author/hotspot-drawable.d.ts +31 -0
- package/dist/author/hotspot-drawable.js +312 -0
- package/dist/author/hotspot-palette.d.ts +14 -0
- package/dist/author/hotspot-palette.js +72 -0
- package/dist/author/hotspot-polygon.d.ts +38 -0
- package/dist/author/hotspot-polygon.js +200 -0
- package/dist/author/hotspot-rectangle.d.ts +20 -0
- package/dist/author/hotspot-rectangle.js +119 -0
- package/dist/author/icons.d.ts +9 -0
- package/dist/author/icons.js +4 -0
- package/dist/author/image-konva.d.ts +19 -0
- package/dist/author/image-konva.js +49 -0
- package/dist/author/index.d.ts +52 -0
- package/dist/author/index.js +143 -0
- package/dist/author/root.d.ts +15 -0
- package/dist/author/root.js +215 -0
- package/dist/author/shapes/circle.d.ts +18 -0
- package/dist/author/shapes/circle.js +47 -0
- package/dist/author/shapes/index.d.ts +12 -0
- package/dist/author/shapes/polygon.d.ts +19 -0
- package/dist/author/shapes/polygon.js +51 -0
- package/dist/author/shapes/rectagle.d.ts +18 -0
- package/dist/author/shapes/rectagle.js +57 -0
- package/dist/author/shapes/utils.d.ts +19 -0
- package/dist/author/shapes/utils.js +16 -0
- package/dist/author/upload-control.d.ts +29 -0
- package/dist/author/upload-control.js +28 -0
- package/dist/author/utils.d.ts +24 -0
- package/dist/author/utils.js +83 -0
- package/dist/browser/ReactKonva-Z9-1H-UZ.js +19329 -0
- package/dist/browser/ReactKonva-Z9-1H-UZ.js.map +1 -0
- package/dist/browser/author/index.js +41646 -0
- package/dist/browser/author/index.js.map +1 -0
- package/dist/browser/browser-CfnAFove.js +219 -0
- package/dist/browser/browser-CfnAFove.js.map +1 -0
- package/dist/browser/controller/index.js +198 -0
- package/dist/browser/controller/index.js.map +1 -0
- package/dist/browser/delivery/index.js +2460 -0
- package/dist/browser/delivery/index.js.map +1 -0
- package/dist/browser/dist-C78LDz6R.js +96 -0
- package/dist/browser/dist-C78LDz6R.js.map +1 -0
- package/dist/browser/hotspot.css +2 -0
- package/dist/controller/defaults.d.ts +35 -0
- package/dist/controller/defaults.js +29 -0
- package/dist/controller/index.d.ts +22 -0
- package/dist/controller/index.js +154 -0
- package/dist/controller/utils.d.ts +10 -0
- package/dist/controller/utils.js +12 -0
- package/dist/delivery/hotspot/circle.d.ts +19 -0
- package/dist/delivery/hotspot/circle.js +100 -0
- package/dist/delivery/hotspot/container.d.ts +16 -0
- package/dist/delivery/hotspot/container.js +150 -0
- package/dist/delivery/hotspot/icons.d.ts +10 -0
- package/dist/delivery/hotspot/icons.js +4 -0
- package/dist/delivery/hotspot/image-konva-tooltip.d.ts +19 -0
- package/dist/delivery/hotspot/image-konva-tooltip.js +66 -0
- package/dist/delivery/hotspot/index.d.ts +17 -0
- package/dist/delivery/hotspot/index.js +114 -0
- package/dist/delivery/hotspot/polygon.d.ts +21 -0
- package/dist/delivery/hotspot/polygon.js +108 -0
- package/dist/delivery/hotspot/rectangle.d.ts +19 -0
- package/dist/delivery/hotspot/rectangle.js +104 -0
- package/dist/delivery/index.d.ts +20 -0
- package/dist/delivery/index.js +107 -0
- package/dist/delivery/session-updater.d.ts +10 -0
- package/dist/delivery/session-updater.js +14 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.iife.d.ts +8 -0
- package/dist/index.iife.js +169 -0
- package/dist/index.js +2 -0
- package/dist/runtime-support.d.ts +12 -0
- package/dist/runtime-support.js +12 -0
- package/package.json +84 -18
- package/CHANGELOG.json +0 -997
- package/CHANGELOG.md +0 -2214
- package/LICENSE.md +0 -5
- package/README.md +0 -1
- package/configure/CHANGELOG.json +0 -682
- package/configure/CHANGELOG.md +0 -1951
- package/configure/lib/DeleteWidget.js +0 -64
- package/configure/lib/DeleteWidget.js.map +0 -1
- package/configure/lib/button.js +0 -42
- package/configure/lib/button.js.map +0 -1
- package/configure/lib/buttons/circle.js +0 -33
- package/configure/lib/buttons/circle.js.map +0 -1
- package/configure/lib/buttons/polygon.js +0 -39
- package/configure/lib/buttons/polygon.js.map +0 -1
- package/configure/lib/buttons/rectangle.js +0 -39
- package/configure/lib/buttons/rectangle.js.map +0 -1
- package/configure/lib/defaults.js +0 -155
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/hotspot-circle.js +0 -192
- package/configure/lib/hotspot-circle.js.map +0 -1
- package/configure/lib/hotspot-container.js +0 -320
- package/configure/lib/hotspot-container.js.map +0 -1
- package/configure/lib/hotspot-drawable.js +0 -519
- package/configure/lib/hotspot-drawable.js.map +0 -1
- package/configure/lib/hotspot-palette.js +0 -107
- package/configure/lib/hotspot-palette.js.map +0 -1
- package/configure/lib/hotspot-polygon.js +0 -293
- package/configure/lib/hotspot-polygon.js.map +0 -1
- package/configure/lib/hotspot-rectangle.js +0 -190
- package/configure/lib/hotspot-rectangle.js.map +0 -1
- package/configure/lib/icons.js +0 -7
- package/configure/lib/icons.js.map +0 -1
- package/configure/lib/image-konva.js +0 -66
- package/configure/lib/image-konva.js.map +0 -1
- package/configure/lib/index.js +0 -194
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/root.js +0 -330
- package/configure/lib/root.js.map +0 -1
- package/configure/lib/shapes/circle.js +0 -84
- package/configure/lib/shapes/circle.js.map +0 -1
- package/configure/lib/shapes/index.js +0 -50
- package/configure/lib/shapes/index.js.map +0 -1
- package/configure/lib/shapes/polygon.js +0 -82
- package/configure/lib/shapes/polygon.js.map +0 -1
- package/configure/lib/shapes/rectagle.js +0 -84
- package/configure/lib/shapes/rectagle.js.map +0 -1
- package/configure/lib/shapes/utils.js +0 -21
- package/configure/lib/shapes/utils.js.map +0 -1
- package/configure/lib/upload-control.js +0 -41
- package/configure/lib/upload-control.js.map +0 -1
- package/configure/lib/utils.js +0 -185
- package/configure/lib/utils.js.map +0 -1
- package/configure/package.json +0 -26
- package/configure/src/DeleteWidget.jsx +0 -51
- package/configure/src/__tests__/DeleteWidget.test.jsx +0 -366
- package/configure/src/__tests__/button.test.jsx +0 -198
- package/configure/src/__tests__/hotspot-circle.test.jsx +0 -259
- package/configure/src/__tests__/hotspot-container.test.js +0 -366
- package/configure/src/__tests__/hotspot-drawable.test.js +0 -271
- package/configure/src/__tests__/hotspot-palette.test.jsx +0 -71
- package/configure/src/__tests__/image-konva.test.jsx +0 -226
- package/configure/src/__tests__/index.test.js +0 -329
- package/configure/src/__tests__/root.test.js +0 -400
- package/configure/src/__tests__/utils.test.js +0 -241
- package/configure/src/button.jsx +0 -35
- package/configure/src/buttons/circle.jsx +0 -18
- package/configure/src/buttons/polygon.jsx +0 -29
- package/configure/src/buttons/rectangle.jsx +0 -29
- package/configure/src/defaults.js +0 -109
- package/configure/src/hotspot-circle.jsx +0 -183
- package/configure/src/hotspot-container.jsx +0 -330
- package/configure/src/hotspot-drawable.jsx +0 -527
- package/configure/src/hotspot-palette.jsx +0 -90
- package/configure/src/hotspot-polygon.jsx +0 -294
- package/configure/src/hotspot-rectangle.jsx +0 -169
- package/configure/src/icons.js +0 -5
- package/configure/src/image-konva.jsx +0 -63
- package/configure/src/index.js +0 -208
- package/configure/src/root.jsx +0 -346
- package/configure/src/shapes/circle.js +0 -81
- package/configure/src/shapes/index.js +0 -4
- package/configure/src/shapes/polygon.js +0 -81
- package/configure/src/shapes/rectagle.js +0 -82
- package/configure/src/shapes/utils.js +0 -16
- package/configure/src/upload-control.jsx +0 -33
- package/configure/src/utils.js +0 -210
- package/controller/CHANGELOG.json +0 -362
- package/controller/CHANGELOG.md +0 -1304
- package/controller/lib/defaults.js +0 -33
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -341
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -32
- package/controller/lib/utils.js.map +0 -1
- package/controller/package.json +0 -18
- package/controller/src/__tests__/index.test.js +0 -419
- package/controller/src/__tests__/utils.test.js +0 -5
- package/controller/src/defaults.js +0 -19
- package/controller/src/index.js +0 -328
- package/controller/src/utils.js +0 -29
- package/docs/config-schema.json +0 -2023
- package/docs/config-schema.json.md +0 -1495
- package/docs/demo/config.js +0 -8
- package/docs/demo/generate.js +0 -118
- package/docs/demo/index.html +0 -1
- package/docs/demo/session.js +0 -11
- package/docs/pie-schema.json +0 -1204
- package/docs/pie-schema.json.md +0 -851
- package/lib/hotspot/circle.js +0 -156
- package/lib/hotspot/circle.js.map +0 -1
- package/lib/hotspot/container.js +0 -206
- package/lib/hotspot/container.js.map +0 -1
- package/lib/hotspot/icons.js +0 -8
- package/lib/hotspot/icons.js.map +0 -1
- package/lib/hotspot/image-konva-tooltip.js +0 -86
- package/lib/hotspot/image-konva-tooltip.js.map +0 -1
- package/lib/hotspot/index.js +0 -163
- package/lib/hotspot/index.js.map +0 -1
- package/lib/hotspot/polygon.js +0 -203
- package/lib/hotspot/polygon.js.map +0 -1
- package/lib/hotspot/rectangle.js +0 -175
- package/lib/hotspot/rectangle.js.map +0 -1
- package/lib/index.js +0 -213
- package/lib/index.js.map +0 -1
- package/lib/session-updater.js +0 -42
- package/lib/session-updater.js.map +0 -1
- package/src/__tests__/container.test.jsx +0 -58
- package/src/__tests__/index.test.js +0 -123
- package/src/__tests__/session-updater.test.jsx +0 -69
- package/src/hotspot/__tests__/circle.test.jsx +0 -464
- package/src/hotspot/__tests__/container.test.jsx +0 -546
- package/src/hotspot/__tests__/image-konva-tooltip.test.jsx +0 -510
- package/src/hotspot/__tests__/polygon.test.jsx +0 -502
- package/src/hotspot/__tests__/rectangle.test.jsx +0 -418
- package/src/hotspot/circle.jsx +0 -152
- package/src/hotspot/container.jsx +0 -217
- package/src/hotspot/icons.js +0 -7
- package/src/hotspot/image-konva-tooltip.jsx +0 -76
- package/src/hotspot/index.jsx +0 -165
- package/src/hotspot/polygon.jsx +0 -195
- package/src/hotspot/rectangle.jsx +0 -171
- package/src/index.js +0 -226
- package/src/session-updater.js +0 -29
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synced-from pie-elements/packages/hotspot/src/hotspot/polygon.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
|
+
declare class PolygonComponent extends React.Component {
|
|
11
|
+
constructor(props: any);
|
|
12
|
+
getPolygonCenter: any;
|
|
13
|
+
parsePointsForKonva: any;
|
|
14
|
+
handleClick: any;
|
|
15
|
+
handleMouseEnter: any;
|
|
16
|
+
handleMouseLeave: any;
|
|
17
|
+
getEvaluateOutlineColor: (isCorrect: any, markAsCorrect: any, outlineColor: any) => any;
|
|
18
|
+
getOutlineWidth: (showCorrectEnabled: any, selected: any, markAsCorrect: any, strokeWidth: any) => any;
|
|
19
|
+
render(): React.JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
export default PolygonComponent;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import e from "./image-konva-tooltip.js";
|
|
2
|
+
import { faCorrect as t, faWrong as n } from "./icons.js";
|
|
3
|
+
import r from "react";
|
|
4
|
+
import i from "prop-types";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import { Group as s, Line as c, Rect as l } from "react-konva";
|
|
7
|
+
//#region src/delivery/hotspot/polygon.tsx
|
|
8
|
+
function u(e) {
|
|
9
|
+
return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
|
|
10
|
+
}
|
|
11
|
+
function d(e, t) {
|
|
12
|
+
return !e || u(e) ? e : u(e.default) ? e.default : t && u(e[t]) ? e[t] : t && u(e[t]?.default) ? e[t].default : e;
|
|
13
|
+
}
|
|
14
|
+
var f = d(l, "Rect"), p = d(s, "Group"), m = d(c, "Line"), h = class extends r.Component {
|
|
15
|
+
constructor(e) {
|
|
16
|
+
super(e), this.state = { hovered: !1 };
|
|
17
|
+
}
|
|
18
|
+
getPolygonCenter = (e) => {
|
|
19
|
+
let t = e.map(({ x: e }) => e), n = e.map(({ y: e }) => e), r = Math.min.apply(null, t), i = Math.max.apply(null, t), a = Math.min.apply(null, n), o = Math.max.apply(null, n);
|
|
20
|
+
return [(r + i) / 2, (a + o) / 2];
|
|
21
|
+
};
|
|
22
|
+
parsePointsForKonva = (e) => {
|
|
23
|
+
let t = [];
|
|
24
|
+
return e.forEach(({ x: e, y: n }) => {
|
|
25
|
+
t.push(e), t.push(n);
|
|
26
|
+
}), t;
|
|
27
|
+
};
|
|
28
|
+
handleClick = (e) => {
|
|
29
|
+
let { onClick: t, id: n, selected: r, disabled: i } = this.props;
|
|
30
|
+
i || (e.cancelBubble = !0, t({
|
|
31
|
+
id: n,
|
|
32
|
+
selected: !r,
|
|
33
|
+
selector: "Mouse"
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
36
|
+
handleMouseEnter = () => {
|
|
37
|
+
let { disabled: e } = this.props;
|
|
38
|
+
e || (document.body.style.cursor = "pointer"), this.setState({ hovered: !0 });
|
|
39
|
+
};
|
|
40
|
+
handleMouseLeave = () => {
|
|
41
|
+
document.body.style.cursor = "default", this.setState({ hovered: !1 });
|
|
42
|
+
};
|
|
43
|
+
getEvaluateOutlineColor = (e, t, n) => t ? "green" : e ? n : "red";
|
|
44
|
+
getOutlineWidth = (e, t, n, r) => n || !n && !e && t ? r : 0;
|
|
45
|
+
render() {
|
|
46
|
+
let { hotspotColor: r, isCorrect: i, isEvaluateMode: s, hoverOutlineColor: c, outlineColor: l, selected: u, points: d, evaluateText: h, strokeWidth: g, scale: _, markAsCorrect: v, selectedHotspotColor: y, showCorrectEnabled: b } = this.props, { hovered: x } = this.state, S = s ? this.getEvaluateOutlineColor(i, v, l) : l, C = this.getOutlineWidth(b, u, v, g), w = this.parsePointsForKonva(d), T = this.getPolygonCenter(d), E = T[0], D = T[1], O;
|
|
47
|
+
b ? (u && i || !u && !i) && (O = t) : u ? O = i ? t : n : i || (O = n);
|
|
48
|
+
let k = x && c, A = w.filter((e, t) => t % 2 == 0), j = w.filter((e, t) => t % 2 != 0), M = Math.min(...A), N = Math.max(...A), P = Math.min(...j), F = Math.max(...j), I = M, L = P, R = N - M, z = F - P;
|
|
49
|
+
return /* @__PURE__ */ o(p, {
|
|
50
|
+
scaleX: _,
|
|
51
|
+
scaleY: _,
|
|
52
|
+
children: [
|
|
53
|
+
k && /* @__PURE__ */ a(f, {
|
|
54
|
+
x: I,
|
|
55
|
+
y: L,
|
|
56
|
+
width: R,
|
|
57
|
+
height: z,
|
|
58
|
+
stroke: u ? "transparent" : c,
|
|
59
|
+
strokeWidth: g
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ a(m, {
|
|
62
|
+
points: w,
|
|
63
|
+
closed: !0,
|
|
64
|
+
fill: u && y ? y : r,
|
|
65
|
+
onClick: this.handleClick,
|
|
66
|
+
onTap: this.handleClick,
|
|
67
|
+
draggable: !1,
|
|
68
|
+
stroke: k && !u ? "transparent" : S,
|
|
69
|
+
strokeWidth: k && !u ? 0 : C,
|
|
70
|
+
onMouseLeave: this.handleMouseLeave,
|
|
71
|
+
onMouseEnter: this.handleMouseEnter,
|
|
72
|
+
cursor: "pointer",
|
|
73
|
+
position: "relative"
|
|
74
|
+
}),
|
|
75
|
+
s && O ? /* @__PURE__ */ a(e, {
|
|
76
|
+
src: O,
|
|
77
|
+
x: E,
|
|
78
|
+
y: D,
|
|
79
|
+
tooltip: h
|
|
80
|
+
}) : null
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
h.propTypes = {
|
|
86
|
+
hotspotColor: i.string.isRequired,
|
|
87
|
+
id: i.string.isRequired,
|
|
88
|
+
isCorrect: i.bool.isRequired,
|
|
89
|
+
isEvaluateMode: i.bool.isRequired,
|
|
90
|
+
hoverOutlineColor: i.string,
|
|
91
|
+
disabled: i.bool.isRequired,
|
|
92
|
+
onClick: i.func.isRequired,
|
|
93
|
+
outlineColor: i.string.isRequired,
|
|
94
|
+
points: i.array.isRequired,
|
|
95
|
+
selected: i.bool.isRequired,
|
|
96
|
+
evaluateText: i.string,
|
|
97
|
+
selectedHotspotColor: i.string,
|
|
98
|
+
strokeWidth: i.number,
|
|
99
|
+
scale: i.number,
|
|
100
|
+
markAsCorrect: i.bool.isRequired,
|
|
101
|
+
showCorrectEnabled: i.bool.isRequired
|
|
102
|
+
}, h.defaultProps = {
|
|
103
|
+
evaluateText: null,
|
|
104
|
+
strokeWidth: 5,
|
|
105
|
+
scale: 1
|
|
106
|
+
};
|
|
107
|
+
//#endregion
|
|
108
|
+
export { h as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synced-from pie-elements/packages/hotspot/src/hotspot/rectangle.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
|
+
declare class RectComponent extends React.Component {
|
|
11
|
+
constructor(props: any);
|
|
12
|
+
handleClick: any;
|
|
13
|
+
handleMouseEnter: any;
|
|
14
|
+
handleMouseLeave: any;
|
|
15
|
+
getEvaluateOutlineColor: (isCorrect: any, markAsCorrect: any, outlineColor: any) => any;
|
|
16
|
+
getOutlineWidth: (showCorrectEnabled: any, selected: any, markAsCorrect: any, strokeWidth: any) => any;
|
|
17
|
+
render(): React.JSX.Element;
|
|
18
|
+
}
|
|
19
|
+
export default RectComponent;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import e from "./image-konva-tooltip.js";
|
|
2
|
+
import { faCorrect as t, faWrong as n } from "./icons.js";
|
|
3
|
+
import r from "react";
|
|
4
|
+
import i from "prop-types";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import { Group as s, Rect as c } from "react-konva";
|
|
7
|
+
//#region src/delivery/hotspot/rectangle.tsx
|
|
8
|
+
function l(e) {
|
|
9
|
+
return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
|
|
10
|
+
}
|
|
11
|
+
function u(e, t) {
|
|
12
|
+
return !e || l(e) ? e : l(e.default) ? e.default : t && l(e[t]) ? e[t] : t && l(e[t]?.default) ? e[t].default : e;
|
|
13
|
+
}
|
|
14
|
+
var d = u(s, "Group"), f = u(c, "Rect"), p = class extends r.Component {
|
|
15
|
+
constructor(e) {
|
|
16
|
+
super(e), this.state = { hovered: !1 };
|
|
17
|
+
}
|
|
18
|
+
handleClick = (e) => {
|
|
19
|
+
let { onClick: t, id: n, selected: r, disabled: i } = this.props;
|
|
20
|
+
i || (e.cancelBubble = !0, t({
|
|
21
|
+
id: n,
|
|
22
|
+
selected: !r,
|
|
23
|
+
selector: "Mouse"
|
|
24
|
+
}));
|
|
25
|
+
};
|
|
26
|
+
handleMouseEnter = () => {
|
|
27
|
+
let { disabled: e } = this.props;
|
|
28
|
+
e || (document.body.style.cursor = "pointer"), this.setState({ hovered: !0 });
|
|
29
|
+
};
|
|
30
|
+
handleMouseLeave = () => {
|
|
31
|
+
document.body.style.cursor = "default", this.setState({ hovered: !1 });
|
|
32
|
+
};
|
|
33
|
+
getEvaluateOutlineColor = (e, t, n) => t ? "green" : e ? n : "red";
|
|
34
|
+
getOutlineWidth = (e, t, n, r) => n || !n && !e && t ? r : 0;
|
|
35
|
+
render() {
|
|
36
|
+
let { height: r, hotspotColor: i, hoverOutlineColor: s, selectedHotspotColor: c, isCorrect: l, isEvaluateMode: u, outlineColor: p, selected: m, width: h, x: g, y: _, evaluateText: v, strokeWidth: y, scale: b, markAsCorrect: x, showCorrectEnabled: S } = this.props, C = u ? this.getEvaluateOutlineColor(l, x, p) : p, w = this.getOutlineWidth(S, m, x, y), T = g + h / 2 - 10, E = _ + r / 2 - 10, D;
|
|
37
|
+
S ? (m && l || !m && !l) && (D = t) : m ? D = l ? t : n : l || (D = n);
|
|
38
|
+
let { hovered: O } = this.state, k = O && s;
|
|
39
|
+
return /* @__PURE__ */ o(d, {
|
|
40
|
+
scaleX: b,
|
|
41
|
+
scaleY: b,
|
|
42
|
+
children: [
|
|
43
|
+
k && /* @__PURE__ */ a(f, {
|
|
44
|
+
x: g,
|
|
45
|
+
y: _,
|
|
46
|
+
width: h,
|
|
47
|
+
height: r,
|
|
48
|
+
stroke: m ? "transparent" : s,
|
|
49
|
+
strokeWidth: y,
|
|
50
|
+
listening: !1
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ a(f, {
|
|
53
|
+
x: g,
|
|
54
|
+
y: _,
|
|
55
|
+
width: h,
|
|
56
|
+
height: r,
|
|
57
|
+
fill: m && c ? c : i,
|
|
58
|
+
onClick: this.handleClick,
|
|
59
|
+
onTap: this.handleClick,
|
|
60
|
+
draggable: !1,
|
|
61
|
+
stroke: k && !m ? "transparent" : C,
|
|
62
|
+
strokeWidth: k && !m ? 0 : w,
|
|
63
|
+
onMouseLeave: this.handleMouseLeave,
|
|
64
|
+
onMouseEnter: this.handleMouseEnter,
|
|
65
|
+
cursor: "pointer"
|
|
66
|
+
}),
|
|
67
|
+
u && D ? /* @__PURE__ */ a(e, {
|
|
68
|
+
src: D,
|
|
69
|
+
x: T,
|
|
70
|
+
y: E,
|
|
71
|
+
tooltip: v
|
|
72
|
+
}) : null
|
|
73
|
+
]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
p.propTypes = {
|
|
78
|
+
height: i.number.isRequired,
|
|
79
|
+
hotspotColor: i.string.isRequired,
|
|
80
|
+
id: i.string.isRequired,
|
|
81
|
+
isCorrect: i.oneOfType([i.bool, i.string]),
|
|
82
|
+
isEvaluateMode: i.bool.isRequired,
|
|
83
|
+
hoverOutlineColor: i.string,
|
|
84
|
+
disabled: i.bool.isRequired,
|
|
85
|
+
onClick: i.func.isRequired,
|
|
86
|
+
outlineColor: i.string.isRequired,
|
|
87
|
+
selected: i.bool.isRequired,
|
|
88
|
+
width: i.number.isRequired,
|
|
89
|
+
x: i.number.isRequired,
|
|
90
|
+
y: i.number.isRequired,
|
|
91
|
+
evaluateText: i.string,
|
|
92
|
+
strokeWidth: i.number,
|
|
93
|
+
scale: i.number,
|
|
94
|
+
selectedHotspotColor: i.string,
|
|
95
|
+
markAsCorrect: i.bool.isRequired,
|
|
96
|
+
showCorrectEnabled: i.bool.isRequired
|
|
97
|
+
}, p.defaultProps = {
|
|
98
|
+
isCorrect: !1,
|
|
99
|
+
evaluateText: null,
|
|
100
|
+
strokeWidth: 5,
|
|
101
|
+
scale: 1
|
|
102
|
+
};
|
|
103
|
+
//#endregion
|
|
104
|
+
export { p as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synced-from pie-elements/packages/hotspot/src/index.js
|
|
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
|
+
export default class Hotspot extends HTMLElement {
|
|
10
|
+
constructor();
|
|
11
|
+
set model(m: any);
|
|
12
|
+
isComplete(): boolean;
|
|
13
|
+
set session(s: any);
|
|
14
|
+
get session(): any;
|
|
15
|
+
onSelectChoice(data: any): void;
|
|
16
|
+
_createAudioInfoToast(): HTMLDivElement;
|
|
17
|
+
connectedCallback(): void;
|
|
18
|
+
_render(): void;
|
|
19
|
+
disconnectedCallback(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import e from "./hotspot/index.js";
|
|
2
|
+
import { updateSessionMetadata as t, updateSessionValue as n } from "./session-updater.js";
|
|
3
|
+
import r from "react";
|
|
4
|
+
import { createRoot as i } from "react-dom/client";
|
|
5
|
+
import { renderMath as a } from "@pie-element/shared-math-rendering-mathjax";
|
|
6
|
+
import * as o from "@pie-lib/render-ui";
|
|
7
|
+
import { EnableAudioAutoplayImage as s } from "@pie-lib/render-ui";
|
|
8
|
+
import { ModelSetEvent as c, SessionChangedEvent as l } from "@pie-element/shared-player-events";
|
|
9
|
+
//#region src/delivery/index.ts
|
|
10
|
+
function u(e) {
|
|
11
|
+
return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
|
|
12
|
+
}
|
|
13
|
+
function d(e, t) {
|
|
14
|
+
return !e || u(e) ? e : u(e.default) ? e.default : t && u(e[t]) ? e[t] : t && u(e[t]?.default) ? e[t].default : e;
|
|
15
|
+
}
|
|
16
|
+
var f = d(s, "EnableAudioAutoplayImage") || d(h.EnableAudioAutoplayImage, "EnableAudioAutoplayImage"), p = o, m = p.default, h = m && typeof m == "object" ? m : p, g = class extends HTMLElement {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(), this._model = null, this._session = null, this._audioInitialized = !1, this.audioComplete = !1, this._root = null;
|
|
19
|
+
}
|
|
20
|
+
set model(e) {
|
|
21
|
+
this._model = e, this.dispatchEvent(new c(this.tagName.toLowerCase(), this.isComplete(), !!this._model)), this._audioInitialized = !1, this._render();
|
|
22
|
+
}
|
|
23
|
+
isComplete() {
|
|
24
|
+
if (!this._session || !this._session.answers) return !1;
|
|
25
|
+
let { autoplayAudioEnabled: e, completeAudioEnabled: t } = this._model || {}, n = this;
|
|
26
|
+
if (e && t && !this.audioComplete && n) {
|
|
27
|
+
let e = n.querySelector("audio"), t = e && e.closest("#preview-prompt");
|
|
28
|
+
if (e && t) return !1;
|
|
29
|
+
}
|
|
30
|
+
return Array.isArray(this._session.answers) ? this._session.answers.length > 0 : !1;
|
|
31
|
+
}
|
|
32
|
+
set session(e) {
|
|
33
|
+
e && !e.answers && (e.answers = []), this._session = e, this._render();
|
|
34
|
+
}
|
|
35
|
+
get session() {
|
|
36
|
+
return this._session;
|
|
37
|
+
}
|
|
38
|
+
onSelectChoice(e) {
|
|
39
|
+
n(this._session, this._model, e), this.dispatchEvent(new l(this.tagName.toLowerCase(), this.isComplete())), this._render();
|
|
40
|
+
}
|
|
41
|
+
_createAudioInfoToast() {
|
|
42
|
+
let e = document.createElement("div");
|
|
43
|
+
e.id = "play-audio-info", Object.assign(e.style, {
|
|
44
|
+
position: "absolute",
|
|
45
|
+
top: 0,
|
|
46
|
+
width: "100%",
|
|
47
|
+
height: "100%",
|
|
48
|
+
display: "flex",
|
|
49
|
+
justifyContent: "center",
|
|
50
|
+
alignItems: "center",
|
|
51
|
+
background: "white",
|
|
52
|
+
zIndex: "1000",
|
|
53
|
+
cursor: "pointer"
|
|
54
|
+
});
|
|
55
|
+
let t = document.createElement("img");
|
|
56
|
+
return t.src = f, t.alt = "Click anywhere to enable audio autoplay", t.width = 500, t.height = 300, e.appendChild(t), e;
|
|
57
|
+
}
|
|
58
|
+
connectedCallback() {
|
|
59
|
+
this._render(), new MutationObserver((e, n) => {
|
|
60
|
+
e.forEach((e) => {
|
|
61
|
+
if (e.type === "childList") {
|
|
62
|
+
if (this._audioInitialized) return;
|
|
63
|
+
let e = this.querySelector("audio"), r = e && e.closest("#preview-prompt");
|
|
64
|
+
if (!this._model || !this._model.autoplayAudioEnabled || e && !r || !e) return;
|
|
65
|
+
let i = this._createAudioInfoToast(), a = this.querySelector("#main-container"), o = () => {
|
|
66
|
+
this.querySelector("#play-audio-info") && (e.play(), a.removeChild(i)), document.removeEventListener("click", o);
|
|
67
|
+
};
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
e.paused && !this.querySelector("#play-audio-info") ? (a.appendChild(i), document.addEventListener("click", o)) : document.removeEventListener("click", o);
|
|
70
|
+
}, 500);
|
|
71
|
+
let s = () => {
|
|
72
|
+
t(this._session, { audioStartTime: (/* @__PURE__ */ new Date()).getTime() });
|
|
73
|
+
let n = this.querySelector("#play-audio-info");
|
|
74
|
+
n && a.removeChild(n), e.removeEventListener("playing", s);
|
|
75
|
+
};
|
|
76
|
+
e.addEventListener("playing", s);
|
|
77
|
+
let c = () => {
|
|
78
|
+
t(this._session, { audioEndTime: (/* @__PURE__ */ new Date()).getTime() });
|
|
79
|
+
let { audioStartTime: n, audioEndTime: r, waitTime: i } = this._session;
|
|
80
|
+
!i && n && r && (this._session.waitTime = r - n), this.audioComplete = !0, this.dispatchEvent(new l(this.tagName.toLowerCase(), this.isComplete())), e.removeEventListener("ended", c);
|
|
81
|
+
};
|
|
82
|
+
e.addEventListener("ended", c), this._audio = e, this._handlePlaying = s, this._handleEnded = c, this._enableAudio = o, this._audioInitialized = !0, n.disconnect();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}).observe(this, {
|
|
86
|
+
childList: !0,
|
|
87
|
+
subtree: !0
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
_render() {
|
|
91
|
+
if (this._model && this._session) {
|
|
92
|
+
let t = r.createElement(e, {
|
|
93
|
+
model: this._model,
|
|
94
|
+
session: this._session,
|
|
95
|
+
onSelectChoice: this.onSelectChoice.bind(this)
|
|
96
|
+
});
|
|
97
|
+
this._root ||= i(this), this._root.render(t), queueMicrotask(() => {
|
|
98
|
+
a(this);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
disconnectedCallback() {
|
|
103
|
+
document.removeEventListener("click", this._enableAudio), this._audio &&= (this._audio.removeEventListener("playing", this._handlePlaying), this._audio.removeEventListener("ended", this._handleEnded), null), this._root && this._root.unmount();
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
export { g as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @synced-from pie-elements/packages/hotspot/src/session-updater.js
|
|
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
|
+
export declare function updateSessionValue(session: any, model: any, data: any): void;
|
|
10
|
+
export declare function updateSessionMetadata(session: any, metadata: any): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/delivery/session-updater.ts
|
|
2
|
+
function e(e, t, n) {
|
|
3
|
+
let { id: r, selected: i } = n, { multipleCorrect: a } = t || {};
|
|
4
|
+
if (e.answers = e.answers || [], !i) e.answers = e.answers.filter((e) => e.id !== r);
|
|
5
|
+
else {
|
|
6
|
+
let t = { id: r };
|
|
7
|
+
a ? e.answers.push(t) : e.answers = [t], e.selector = n.selector;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function t(e, t) {
|
|
11
|
+
e.audioStartTime = e.audioStartTime || t.audioStartTime, e.audioEndTime = e.audioEndTime || t.audioEndTime, !e.waitTime && e.audioStartTime && e.audioEndTime && (e.waitTime = e.audioEndTime - e.audioStartTime);
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { t as updateSessionMetadata, e as updateSessionValue };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './delivery/index.js';
|