@pie-element/categorize 13.1.11 → 13.2.0-next.9

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 (169) hide show
  1. package/configure.js +2 -0
  2. package/controller.js +1 -0
  3. package/dist/author/defaults.d.ts +222 -0
  4. package/dist/author/defaults.js +168 -0
  5. package/dist/author/design/builder.d.ts +10 -0
  6. package/dist/author/design/builder.js +24 -0
  7. package/dist/author/design/buttons.d.ts +28 -0
  8. package/dist/author/design/buttons.js +36 -0
  9. package/dist/author/design/categories/RowLabel.d.ts +23 -0
  10. package/dist/author/design/categories/RowLabel.js +47 -0
  11. package/dist/author/design/categories/alternateResponses.d.ts +31 -0
  12. package/dist/author/design/categories/alternateResponses.js +62 -0
  13. package/dist/author/design/categories/category.d.ts +44 -0
  14. package/dist/author/design/categories/category.js +98 -0
  15. package/dist/author/design/categories/choice-preview.d.ts +25 -0
  16. package/dist/author/design/categories/choice-preview.js +60 -0
  17. package/dist/author/design/categories/droppable-placeholder.d.ts +11 -0
  18. package/dist/author/design/categories/droppable-placeholder.js +71 -0
  19. package/dist/author/design/categories/index.d.ts +41 -0
  20. package/dist/author/design/categories/index.js +146 -0
  21. package/dist/author/design/choices/choice.d.ts +11 -0
  22. package/dist/author/design/choices/choice.js +129 -0
  23. package/dist/author/design/choices/config.d.ts +21 -0
  24. package/dist/author/design/choices/config.js +33 -0
  25. package/dist/author/design/choices/index.d.ts +41 -0
  26. package/dist/author/design/choices/index.js +110 -0
  27. package/dist/author/design/header.d.ts +24 -0
  28. package/dist/author/design/header.js +49 -0
  29. package/dist/author/design/index.d.ts +52 -0
  30. package/dist/author/design/index.js +427 -0
  31. package/dist/author/design/input-header.d.ts +39 -0
  32. package/dist/author/design/input-header.js +69 -0
  33. package/dist/author/design/utils.d.ts +9 -0
  34. package/dist/author/design/utils.js +7 -0
  35. package/dist/author/index.d.ts +50 -0
  36. package/dist/author/index.js +87 -0
  37. package/dist/author/main.d.ts +23 -0
  38. package/dist/author/main.js +30 -0
  39. package/dist/author/utils.d.ts +16 -0
  40. package/dist/author/utils.js +17 -0
  41. package/dist/browser/alert-dialog-BL9K_lnF.js +11511 -0
  42. package/dist/browser/alert-dialog-BL9K_lnF.js.map +1 -0
  43. package/dist/browser/author/index.js +43156 -0
  44. package/dist/browser/author/index.js.map +1 -0
  45. package/dist/browser/categorize.css +2 -0
  46. package/dist/browser/controller/index.js +372 -0
  47. package/dist/browser/controller/index.js.map +1 -0
  48. package/dist/browser/delivery/index.js +1205 -0
  49. package/dist/browser/delivery/index.js.map +1 -0
  50. package/dist/browser/dist-C11U2GIc.js +1871 -0
  51. package/dist/browser/dist-C11U2GIc.js.map +1 -0
  52. package/dist/browser/rolldown-runtime-CWhphoD1.js +32 -0
  53. package/dist/controller/defaults.d.ts +33 -0
  54. package/dist/controller/defaults.js +27 -0
  55. package/dist/controller/index.d.ts +62 -0
  56. package/dist/controller/index.js +168 -0
  57. package/dist/controller/utils.d.ts +20 -0
  58. package/dist/controller/utils.js +35 -0
  59. package/dist/delivery/categorize/__tests__/categories.test.d.ts +1 -0
  60. package/dist/delivery/categorize/__tests__/category.test.d.ts +1 -0
  61. package/dist/delivery/categorize/__tests__/choice.test.d.ts +1 -0
  62. package/dist/delivery/categorize/__tests__/choices.test.d.ts +1 -0
  63. package/dist/delivery/categorize/__tests__/droppable-placeholder.test.d.ts +1 -0
  64. package/dist/delivery/categorize/__tests__/grid-content.test.d.ts +1 -0
  65. package/dist/delivery/categorize/__tests__/index.test.d.ts +1 -0
  66. package/dist/delivery/categorize/__tests__/keyboard-coordinates.test.d.ts +1 -0
  67. package/dist/delivery/categorize/categories.d.ts +37 -0
  68. package/dist/delivery/categorize/categories.js +72 -0
  69. package/dist/delivery/categorize/category.d.ts +31 -0
  70. package/dist/delivery/categorize/category.js +55 -0
  71. package/dist/delivery/categorize/choice.d.ts +28 -0
  72. package/dist/delivery/categorize/choice.js +114 -0
  73. package/dist/delivery/categorize/choices.d.ts +42 -0
  74. package/dist/delivery/categorize/choices.js +58 -0
  75. package/dist/delivery/categorize/droppable-placeholder.d.ts +36 -0
  76. package/dist/delivery/categorize/droppable-placeholder.js +77 -0
  77. package/dist/delivery/categorize/grid-content.d.ts +25 -0
  78. package/dist/delivery/categorize/grid-content.js +39 -0
  79. package/dist/delivery/categorize/index.d.ts +70 -0
  80. package/dist/delivery/categorize/index.js +317 -0
  81. package/dist/delivery/categorize/keyboard-coordinates.d.ts +22 -0
  82. package/dist/delivery/categorize/keyboard-coordinates.js +49 -0
  83. package/dist/delivery/index.d.ts +27 -0
  84. package/dist/delivery/index.js +152 -0
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.iife.d.ts +8 -0
  87. package/dist/index.iife.js +152 -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 +97 -22
  92. package/CHANGELOG.json +0 -1637
  93. package/CHANGELOG.md +0 -2598
  94. package/LICENSE.md +0 -5
  95. package/README.md +0 -5
  96. package/configure/CHANGELOG.json +0 -1202
  97. package/configure/CHANGELOG.md +0 -2177
  98. package/configure/lib/defaults.js +0 -220
  99. package/configure/lib/defaults.js.map +0 -1
  100. package/configure/lib/design/builder.js +0 -55
  101. package/configure/lib/design/builder.js.map +0 -1
  102. package/configure/lib/design/buttons.js +0 -59
  103. package/configure/lib/design/buttons.js.map +0 -1
  104. package/configure/lib/design/categories/RowLabel.js +0 -66
  105. package/configure/lib/design/categories/RowLabel.js.map +0 -1
  106. package/configure/lib/design/categories/alternateResponses.js +0 -116
  107. package/configure/lib/design/categories/alternateResponses.js.map +0 -1
  108. package/configure/lib/design/categories/category.js +0 -153
  109. package/configure/lib/design/categories/category.js.map +0 -1
  110. package/configure/lib/design/categories/choice-preview.js +0 -79
  111. package/configure/lib/design/categories/choice-preview.js.map +0 -1
  112. package/configure/lib/design/categories/droppable-placeholder.js +0 -93
  113. package/configure/lib/design/categories/droppable-placeholder.js.map +0 -1
  114. package/configure/lib/design/categories/index.js +0 -256
  115. package/configure/lib/design/categories/index.js.map +0 -1
  116. package/configure/lib/design/choices/choice.js +0 -187
  117. package/configure/lib/design/choices/choice.js.map +0 -1
  118. package/configure/lib/design/choices/config.js +0 -58
  119. package/configure/lib/design/choices/config.js.map +0 -1
  120. package/configure/lib/design/choices/index.js +0 -197
  121. package/configure/lib/design/choices/index.js.map +0 -1
  122. package/configure/lib/design/header.js +0 -71
  123. package/configure/lib/design/header.js.map +0 -1
  124. package/configure/lib/design/index.js +0 -741
  125. package/configure/lib/design/index.js.map +0 -1
  126. package/configure/lib/design/input-header.js +0 -105
  127. package/configure/lib/design/input-header.js.map +0 -1
  128. package/configure/lib/design/utils.js +0 -12
  129. package/configure/lib/design/utils.js.map +0 -1
  130. package/configure/lib/index.js +0 -148
  131. package/configure/lib/index.js.map +0 -1
  132. package/configure/lib/main.js +0 -44
  133. package/configure/lib/main.js.map +0 -1
  134. package/configure/lib/utils.js +0 -43
  135. package/configure/lib/utils.js.map +0 -1
  136. package/configure/package.json +0 -32
  137. package/controller/CHANGELOG.json +0 -452
  138. package/controller/CHANGELOG.md +0 -1411
  139. package/controller/lib/defaults.js +0 -31
  140. package/controller/lib/defaults.js.map +0 -1
  141. package/controller/lib/index.js +0 -506
  142. package/controller/lib/index.js.map +0 -1
  143. package/controller/lib/utils.js +0 -69
  144. package/controller/lib/utils.js.map +0 -1
  145. package/controller/package.json +0 -18
  146. package/docs/config-schema.json +0 -2897
  147. package/docs/config-schema.json.md +0 -2138
  148. package/docs/demo/config.js +0 -8
  149. package/docs/demo/generate.js +0 -357
  150. package/docs/demo/index.html +0 -1
  151. package/docs/demo/session.js +0 -12
  152. package/docs/pie-schema.json +0 -1784
  153. package/docs/pie-schema.json.md +0 -1046
  154. package/lib/categorize/categories.js +0 -135
  155. package/lib/categorize/categories.js.map +0 -1
  156. package/lib/categorize/category.js +0 -67
  157. package/lib/categorize/category.js.map +0 -1
  158. package/lib/categorize/choice.js +0 -140
  159. package/lib/categorize/choice.js.map +0 -1
  160. package/lib/categorize/choices.js +0 -99
  161. package/lib/categorize/choices.js.map +0 -1
  162. package/lib/categorize/droppable-placeholder.js +0 -84
  163. package/lib/categorize/droppable-placeholder.js.map +0 -1
  164. package/lib/categorize/grid-content.js +0 -55
  165. package/lib/categorize/grid-content.js.map +0 -1
  166. package/lib/categorize/index.js +0 -450
  167. package/lib/categorize/index.js.map +0 -1
  168. package/lib/index.js +0 -316
  169. package/lib/index.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/src/categorize/keyboard-coordinates.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
+ /**
10
+ * Custom keyboard coordinate getter for categorize's Tab-based placement.
11
+ *
12
+ * Tab/Shift+Tab cycle the dragged choice directly onto the next/previous enabled
13
+ * category, sorted by on-screen position (top-to-bottom, then left-to-right, matching the
14
+ * category grid's reading order), followed by the choices pool as a fixed last stop.
15
+ *
16
+ * Arrow keys are delegated to dnd-kit's own `defaultKeyboardCoordinateGetter`, leaving the
17
+ * existing free-form arrow-key dragging behavior completely unchanged.
18
+ */
19
+ export declare const closestDroppableKeyboardCoordinates: (event: any, { context, currentCoordinates }: {
20
+ context: any;
21
+ currentCoordinates: any;
22
+ }) => any;
@@ -0,0 +1,49 @@
1
+ import { KeyboardCode as e, defaultKeyboardCoordinateGetter as t } from "@dnd-kit/core";
2
+ //#region src/delivery/categorize/keyboard-coordinates.ts
3
+ var n = "choices-board", r = (r, { context: a, currentCoordinates: o }) => {
4
+ let { code: s } = r, c = s === e.Tab, l = s === e.Down || s === e.Up || s === e.Left || s === e.Right;
5
+ if (!c && !l) return;
6
+ if (l) return t(r, {
7
+ context: a,
8
+ currentCoordinates: o
9
+ });
10
+ r.preventDefault();
11
+ let { droppableRects: u, droppableContainers: d, collisionRect: f } = a;
12
+ if (!u || u.size === 0) return o;
13
+ let p = [], m;
14
+ for (let [e, t] of d) {
15
+ if (t?.disabled) continue;
16
+ let r = t?.node?.current?.getBoundingClientRect() ?? u.get(e);
17
+ if (!r) continue;
18
+ let i = {
19
+ x: r.left + r.width / 2,
20
+ y: r.top + r.height / 2
21
+ }, a = f?.height ?? 0, o = {
22
+ id: e,
23
+ rect: r,
24
+ dropPosition: {
25
+ x: r.left,
26
+ y: r.top + r.height / 2 - a / 2
27
+ },
28
+ center: i
29
+ };
30
+ e === n ? m = o : p.push(o);
31
+ }
32
+ if (p.length === 0 && !m) return o;
33
+ let h = r.shiftKey;
34
+ p.sort((e, t) => Math.abs(e.center.y - t.center.y) > 10 ? e.center.y - t.center.y : e.center.x - t.center.x), m && p.push(m);
35
+ let g = f ? {
36
+ x: f.left + f.width / 2,
37
+ y: f.top + f.height / 2
38
+ } : o, _ = p.findIndex((e) => g.x >= e.rect.left && g.x <= e.rect.right && g.y >= e.rect.top && g.y <= e.rect.bottom);
39
+ if (_ === -1) {
40
+ let e = Infinity;
41
+ for (let t = 0; t < p.length; t++) {
42
+ let n = i(o, p[t].dropPosition);
43
+ n < e && (e = n, _ = t);
44
+ }
45
+ }
46
+ return p[h ? (_ - 1 + p.length) % p.length : (_ + 1) % p.length].dropPosition;
47
+ }, i = (e, t) => Math.sqrt((e.x - t.x) ** 2 + (e.y - t.y) ** 2);
48
+ //#endregion
49
+ export { r as closestDroppableKeyboardCoordinates };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @synced-from pie-elements/packages/categorize/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 Categorize extends HTMLElement {
10
+ constructor();
11
+ _scheduleMathRender: any;
12
+ _initMathObserver(): void;
13
+ _disconnectMathObserver(): void;
14
+ pauseMathObserver: any;
15
+ resumeMathObserver: any;
16
+ set model(m: any);
17
+ isComplete(): any;
18
+ set session(s: any);
19
+ get session(): any;
20
+ eliminateBlindAnswersFromSession(): void;
21
+ changeAnswers(answers: any): void;
22
+ onShowCorrectToggle(): void;
23
+ _createAudioInfoToast(): HTMLDivElement;
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ render(): void;
27
+ }
@@ -0,0 +1,152 @@
1
+ import e from "./categorize/index.js";
2
+ import t from "react";
3
+ import { createRoot as n } from "react-dom/client";
4
+ import { renderMath as r } from "@pie-element/shared-math-rendering-mathjax";
5
+ import * as i from "@pie-lib/render-ui";
6
+ import { EnableAudioAutoplayImage as a } from "@pie-lib/render-ui";
7
+ import { ModelSetEvent as o, SessionChangedEvent as s } from "@pie-element/shared-player-events";
8
+ //#region src/delivery/index.ts
9
+ function c(e) {
10
+ return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
11
+ }
12
+ function l(e, t) {
13
+ 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;
14
+ }
15
+ var u = l(a, "EnableAudioAutoplayImage") || l(p.EnableAudioAutoplayImage, "EnableAudioAutoplayImage"), d = i, f = d.default, p = f && typeof f == "object" ? f : d, m = class extends HTMLElement {
16
+ constructor() {
17
+ super(), this._root = null, this._mathObserver = null, this._mathRenderPending = !1;
18
+ }
19
+ _scheduleMathRender = () => {
20
+ this._mathRenderPending || (this._mathRenderPending = !0, requestAnimationFrame(() => {
21
+ this._mathObserver && !this._mathObserverPaused && this._mathObserver.disconnect(), r(this), this._mathRenderPending = !1, setTimeout(() => {
22
+ this._mathObserver && !this._mathObserverPaused && this._mathObserver.observe(this, {
23
+ childList: !0,
24
+ subtree: !0,
25
+ characterData: !1
26
+ });
27
+ }, 50);
28
+ }));
29
+ };
30
+ _initMathObserver() {
31
+ this._mathObserver || (this._mathObserver = new MutationObserver(() => {
32
+ this._scheduleMathRender();
33
+ }), this._mathObserver.observe(this, {
34
+ childList: !0,
35
+ subtree: !0,
36
+ characterData: !1
37
+ }));
38
+ }
39
+ _disconnectMathObserver() {
40
+ this._mathObserver &&= (this._mathObserver.disconnect(), null);
41
+ }
42
+ pauseMathObserver = () => {
43
+ this._mathObserver && (this._mathObserver.disconnect(), this._mathObserverPaused = !0);
44
+ };
45
+ resumeMathObserver = () => {
46
+ this._mathObserverPaused && (this._mathObserverPaused = !1, this._mathObserver && this._mathObserver.observe(this, {
47
+ childList: !0,
48
+ subtree: !0,
49
+ characterData: !1
50
+ }));
51
+ };
52
+ set model(e) {
53
+ this._model = e, this.eliminateBlindAnswersFromSession(), this.dispatchEvent(new o(this.tagName.toLowerCase(), this.isComplete(), !!this._model)), this._audioInitialized = !1, this.render();
54
+ }
55
+ isComplete() {
56
+ let { autoplayAudioEnabled: e, choices: t, completeAudioEnabled: n, hasUnplacedChoices: r, possibleResponses: i, responseAreasToBeFilled: a } = this._model || {}, o = this;
57
+ if (e && n && !this.audioComplete && o) {
58
+ let e = o.querySelector("audio"), t = e && e.closest(".preview-prompt");
59
+ if (e && t) return !1;
60
+ }
61
+ if (!this._session || !this._session.answers) return !1;
62
+ let { answers: s } = this._session;
63
+ if (!Array.isArray(s)) return !1;
64
+ let c = s.filter((e) => e.choices.length).length >= a;
65
+ if ((t || []).some((e) => e.categoryCount === 0) || r) return c;
66
+ let l = s.map((e) => e.choices).flat();
67
+ return (i || []).some((e) => e.every((e) => l.includes(e)));
68
+ }
69
+ set session(e) {
70
+ e && !e.answers && (e.answers = []), this._session = e, this.render();
71
+ }
72
+ get session() {
73
+ return this._session;
74
+ }
75
+ eliminateBlindAnswersFromSession() {
76
+ let { answers: e = [] } = this._session || {}, { choices: t = [] } = this._model || {}, n = t.map((e) => e.id) || [], r = e.map((e) => (e.choices = (e?.choices || []).filter((e) => n.includes(e)), e));
77
+ r.length > 0 && this.changeAnswers(r);
78
+ }
79
+ changeAnswers(e) {
80
+ this._session.answers = e, this._session.selector = "Mouse", this.dispatchEvent(new s(this.tagName.toLowerCase(), this.isComplete())), this.render();
81
+ }
82
+ onShowCorrectToggle() {
83
+ r(this);
84
+ }
85
+ _createAudioInfoToast() {
86
+ let e = document.createElement("div");
87
+ e.id = "play-audio-info", Object.assign(e.style, {
88
+ position: "absolute",
89
+ top: 0,
90
+ width: "100%",
91
+ height: "100%",
92
+ display: "flex",
93
+ justifyContent: "center",
94
+ alignItems: "center",
95
+ background: "white",
96
+ zIndex: "1000",
97
+ cursor: "pointer"
98
+ });
99
+ let t = document.createElement("img");
100
+ return t.src = u, t.alt = "Click anywhere to enable audio autoplay", t.width = 500, t.height = 300, e.appendChild(t), e;
101
+ }
102
+ connectedCallback() {
103
+ this._initMathObserver(), new MutationObserver((e, t) => {
104
+ e.forEach((e) => {
105
+ if (e.type === "childList") {
106
+ if (this._audioInitialized) return;
107
+ let e = this.querySelector("audio"), n = e && e.closest(".preview-prompt");
108
+ if (!this._model || !this._model.autoplayAudioEnabled || e && !n || !e) return;
109
+ let r = this._createAudioInfoToast(), i = this.querySelector("#main-container"), a = () => {
110
+ this.querySelector("#play-audio-info") && (e.play(), i.removeChild(r)), document.removeEventListener("click", a);
111
+ };
112
+ setTimeout(() => {
113
+ e.paused && !this.querySelector("#play-audio-info") ? (i.appendChild(r), document.addEventListener("click", a)) : document.removeEventListener("click", a);
114
+ }, 500);
115
+ let o = () => {
116
+ this._session.audioStartTime = this._session.audioStartTime || (/* @__PURE__ */ new Date()).getTime();
117
+ let t = this.querySelector("#play-audio-info");
118
+ t && i.removeChild(t), e.removeEventListener("playing", o);
119
+ };
120
+ e.addEventListener("playing", o);
121
+ let c = () => {
122
+ this._session.audioEndTime = this._session.audioEndTime || (/* @__PURE__ */ new Date()).getTime();
123
+ let { audioStartTime: t, audioEndTime: n, waitTime: r } = this._session;
124
+ !r && t && n && (this._session.waitTime = n - t), this.audioComplete = !0, this.dispatchEvent(new s(this.tagName.toLowerCase(), this.isComplete())), e.removeEventListener("ended", c);
125
+ };
126
+ e.addEventListener("ended", c), this._audio = e, this._handlePlaying = o, this._handleEnded = c, this._enableAudio = a, this._audioInitialized = !0, t.disconnect();
127
+ }
128
+ });
129
+ }).observe(this, {
130
+ childList: !0,
131
+ subtree: !0
132
+ });
133
+ }
134
+ disconnectedCallback() {
135
+ this._disconnectMathObserver(), 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();
136
+ }
137
+ render() {
138
+ if (this._model && this._session) {
139
+ let r = t.createElement(e, {
140
+ model: this._model,
141
+ session: this._session,
142
+ onAnswersChange: this.changeAnswers.bind(this),
143
+ onShowCorrectToggle: this.onShowCorrectToggle.bind(this),
144
+ pauseMathObserver: this.pauseMathObserver,
145
+ resumeMathObserver: this.resumeMathObserver
146
+ });
147
+ this._root ||= n(this), this._root.render(r);
148
+ }
149
+ }
150
+ };
151
+ //#endregion
152
+ export { m as default };
@@ -0,0 +1 @@
1
+ export { default } from './delivery/index.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * IIFE entry point for categorize element
3
+ * This file is only used for IIFE builds and includes auto-registration
4
+ *
5
+ * @sync-generated - Auto-generated during sync from pie-elements
6
+ */
7
+ import Element from './index.js';
8
+ export default Element;