@pie-element/image-cloze-association 10.1.2-next.2 → 10.1.2

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 (130) hide show
  1. package/CHANGELOG.json +437 -0
  2. package/CHANGELOG.md +1997 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +197 -0
  6. package/configure/CHANGELOG.md +1600 -0
  7. package/configure/lib/defaults.js +86 -0
  8. package/configure/lib/defaults.js.map +1 -0
  9. package/configure/lib/index.js +99 -0
  10. package/configure/lib/index.js.map +1 -0
  11. package/configure/lib/root.js +135 -0
  12. package/configure/lib/root.js.map +1 -0
  13. package/configure/package.json +23 -0
  14. package/configure/src/__tests__/index.test.js +155 -0
  15. package/configure/src/defaults.js +59 -0
  16. package/configure/src/index.js +114 -0
  17. package/configure/src/root.jsx +116 -0
  18. package/controller/CHANGELOG.json +137 -0
  19. package/controller/CHANGELOG.md +1149 -0
  20. package/controller/lib/defaults.js +14 -0
  21. package/controller/lib/defaults.js.map +1 -0
  22. package/controller/lib/index.js +304 -0
  23. package/controller/lib/index.js.map +1 -0
  24. package/controller/lib/utils.js +70 -0
  25. package/controller/lib/utils.js.map +1 -0
  26. package/controller/package.json +19 -0
  27. package/controller/src/__tests__/index.test.js +711 -0
  28. package/controller/src/defaults.js +7 -0
  29. package/controller/src/index.js +322 -0
  30. package/controller/src/utils.js +72 -0
  31. package/docs/config-schema.json +1382 -0
  32. package/docs/config-schema.json.md +1021 -0
  33. package/docs/demo/config.js +8 -0
  34. package/docs/demo/generate.js +74 -0
  35. package/docs/demo/index.html +1 -0
  36. package/docs/demo/session.js +16 -0
  37. package/docs/pie-schema.json +1085 -0
  38. package/docs/pie-schema.json.md +810 -0
  39. package/lib/constants.js +12 -0
  40. package/lib/constants.js.map +1 -0
  41. package/lib/evaluation-icon.js +60 -0
  42. package/lib/evaluation-icon.js.map +1 -0
  43. package/lib/image-container.js +94 -0
  44. package/lib/image-container.js.map +1 -0
  45. package/lib/image-drop-target.js +130 -0
  46. package/lib/image-drop-target.js.map +1 -0
  47. package/lib/index.js +220 -0
  48. package/lib/index.js.map +1 -0
  49. package/lib/interactive-section.js +104 -0
  50. package/lib/interactive-section.js.map +1 -0
  51. package/lib/possible-response.js +161 -0
  52. package/lib/possible-response.js.map +1 -0
  53. package/lib/possible-responses.js +58 -0
  54. package/lib/possible-responses.js.map +1 -0
  55. package/lib/root.js +491 -0
  56. package/lib/root.js.map +1 -0
  57. package/lib/static-html-span.js +35 -0
  58. package/lib/static-html-span.js.map +1 -0
  59. package/lib/utils-correctness.js +89 -0
  60. package/lib/utils-correctness.js.map +1 -0
  61. package/package.json +21 -86
  62. package/src/__tests__/index.test.js +174 -0
  63. package/src/__tests__/root.test.jsx +99 -0
  64. package/src/__tests__/utils.test.js +207 -0
  65. package/src/constants.js +5 -0
  66. package/src/evaluation-icon.jsx +54 -0
  67. package/src/image-container.jsx +90 -0
  68. package/src/image-drop-target.jsx +140 -0
  69. package/src/index.js +245 -0
  70. package/src/interactive-section.jsx +94 -0
  71. package/src/possible-response.jsx +152 -0
  72. package/src/possible-responses.jsx +52 -0
  73. package/src/root.jsx +490 -0
  74. package/src/static-html-span.jsx +30 -0
  75. package/src/utils-correctness.js +95 -0
  76. package/configure.js +0 -2
  77. package/controller.js +0 -1
  78. package/dist/author/defaults.d.ts +0 -88
  79. package/dist/author/defaults.js +0 -58
  80. package/dist/author/index.d.ts +0 -34
  81. package/dist/author/index.js +0 -71
  82. package/dist/author/root.d.ts +0 -14
  83. package/dist/author/root.js +0 -80
  84. package/dist/browser/Check-DL1c-mLM.js +0 -10708
  85. package/dist/browser/Check-DL1c-mLM.js.map +0 -1
  86. package/dist/browser/author/index.js +0 -38597
  87. package/dist/browser/author/index.js.map +0 -1
  88. package/dist/browser/controller/index.js +0 -171
  89. package/dist/browser/controller/index.js.map +0 -1
  90. package/dist/browser/delivery/index.js +0 -2699
  91. package/dist/browser/delivery/index.js.map +0 -1
  92. package/dist/browser/dist-BphSS14E.js +0 -346
  93. package/dist/browser/dist-BphSS14E.js.map +0 -1
  94. package/dist/browser/humps-CZ4RCLab.js +0 -67
  95. package/dist/browser/humps-CZ4RCLab.js.map +0 -1
  96. package/dist/browser/image-cloze-association.css +0 -2
  97. package/dist/controller/defaults.d.ts +0 -16
  98. package/dist/controller/defaults.js +0 -10
  99. package/dist/controller/index.d.ts +0 -23
  100. package/dist/controller/index.js +0 -122
  101. package/dist/controller/utils.d.ts +0 -14
  102. package/dist/controller/utils.js +0 -36
  103. package/dist/delivery/constants.d.ts +0 -14
  104. package/dist/delivery/evaluation-icon.d.ts +0 -28
  105. package/dist/delivery/evaluation-icon.js +0 -38
  106. package/dist/delivery/image-container.d.ts +0 -13
  107. package/dist/delivery/image-container.js +0 -61
  108. package/dist/delivery/image-drop-target.d.ts +0 -45
  109. package/dist/delivery/image-drop-target.js +0 -90
  110. package/dist/delivery/index.d.ts +0 -20
  111. package/dist/delivery/index.js +0 -110
  112. package/dist/delivery/interactive-section.d.ts +0 -15
  113. package/dist/delivery/interactive-section.js +0 -72
  114. package/dist/delivery/possible-response.d.ts +0 -34
  115. package/dist/delivery/possible-response.js +0 -100
  116. package/dist/delivery/possible-responses.d.ts +0 -31
  117. package/dist/delivery/possible-responses.js +0 -41
  118. package/dist/delivery/root.d.ts +0 -21
  119. package/dist/delivery/root.js +0 -278
  120. package/dist/delivery/static-html-span.d.ts +0 -14
  121. package/dist/delivery/static-html-span.js +0 -22
  122. package/dist/delivery/utils-correctness.d.ts +0 -10
  123. package/dist/delivery/utils-correctness.js +0 -43
  124. package/dist/index.d.ts +0 -1
  125. package/dist/index.iife.d.ts +0 -8
  126. package/dist/index.iife.js +0 -152
  127. package/dist/index.js +0 -2
  128. package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
  129. package/dist/runtime-support.d.ts +0 -12
  130. package/dist/runtime-support.js +0 -12
@@ -1,2699 +0,0 @@
1
- import { a as e, b as t, f as n } from "../dist-BphSS14E.js";
2
- import { B as r, D as i, Et as a, It as o, Mt as s, N as c, Nt as l, Pt as u, _ as d, a as f, c as p, ft as m, g as h, ht as g, i as _, l as v, n as y, o as b, pt as x, r as ee, s as S, t as C, u as w, v as T, y as te } from "../Check-DL1c-mLM.js";
3
- import { t as E } from "../humps-CZ4RCLab.js";
4
- import D, { Component as ne, useEffect as O, useRef as k, useState as A } from "react";
5
- import { createRoot as re } from "react-dom/client";
6
- import { jsx as j, jsxs as M } from "react/jsx-runtime";
7
- //#region ../../lib-react/icons/dist/correct-response-icon.js
8
- var N = /* @__PURE__ */ t(s(), 1), P = ({ bgFill: e, fgFill: t }) => /* @__PURE__ */ M("svg", {
9
- preserveAspectRatio: "xMinYMin meet",
10
- version: "1.1",
11
- viewBox: "-283 359 34 35",
12
- style: { enableBackground: "new -283 359 34 35" },
13
- children: [
14
- /* @__PURE__ */ j("circle", {
15
- cx: "-266",
16
- cy: "375.9",
17
- r: "14",
18
- fill: e
19
- }),
20
- /* @__PURE__ */ j("path", {
21
- d: "M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z\n M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z",
22
- fill: e
23
- }),
24
- /* @__PURE__ */ j("polygon", {
25
- points: "-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6",
26
- fill: t
27
- })
28
- ]
29
- });
30
- P.propTypes = {
31
- bgFill: N.default.string.isRequired,
32
- fgFill: N.default.string.isRequired
33
- };
34
- var F = ({ bgFill: e, fgFill: t, borderFill: n }) => /* @__PURE__ */ M("svg", {
35
- preserveAspectRatio: "xMinYMin meet",
36
- version: "1.1",
37
- viewBox: "-129.5 127 34 35",
38
- style: { enableBackground: "new -129.5 127 34 35" },
39
- children: [
40
- /* @__PURE__ */ j("path", {
41
- style: {
42
- fill: "#D0CAC5",
43
- stroke: "#E6E3E0",
44
- strokeWidth: .75,
45
- strokeMiterlimit: 10
46
- },
47
- d: "M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5\n C-97.4,153.5-104.3,160.4-112.9,160.4z"
48
- }),
49
- /* @__PURE__ */ j("path", {
50
- style: {
51
- fill: "#B3ABA4",
52
- stroke: "#CDC7C2",
53
- strokeWidth: .5,
54
- strokeMiterlimit: 10
55
- },
56
- d: "M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z"
57
- }),
58
- /* @__PURE__ */ j("circle", {
59
- cx: "-114.2",
60
- cy: "143.5",
61
- r: "14",
62
- fill: e
63
- }),
64
- /* @__PURE__ */ j("path", {
65
- d: "M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z\n M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z",
66
- fill: n
67
- }),
68
- /* @__PURE__ */ j("polygon", {
69
- points: "-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2",
70
- fill: t
71
- })
72
- ]
73
- });
74
- F.propTypes = {
75
- bgFill: N.default.string.isRequired,
76
- fgFill: N.default.string.isRequired,
77
- borderFill: N.default.string.isRequired
78
- };
79
- var ie = g("div")(({ size: e }) => ({
80
- width: e || "25px",
81
- height: e || "25px"
82
- })), I = ({ open: e, size: t }) => /* @__PURE__ */ j(ie, {
83
- size: t,
84
- children: e ? /* @__PURE__ */ j(P, {
85
- bgFill: "#bce2ff",
86
- fgFill: "#1a9cff"
87
- }) : /* @__PURE__ */ j(F, {
88
- bgFill: "white",
89
- fgFill: "#1a9cff",
90
- borderFill: "#bce2ff"
91
- })
92
- });
93
- I.propTypes = {
94
- open: N.default.bool,
95
- size: N.default.string
96
- }, I.defaultProps = { open: !1 };
97
- //#endregion
98
- //#region ../../shared/player-events/dist/index.js
99
- var ae = class e extends CustomEvent {
100
- static {
101
- this.TYPE = "model-set";
102
- }
103
- constructor(t, n, r) {
104
- super(e.TYPE, {
105
- bubbles: !0,
106
- composed: !0,
107
- detail: {
108
- complete: n,
109
- component: t,
110
- hasModel: r
111
- }
112
- }), this.component = t, this.complete = n;
113
- }
114
- }, L = class e extends CustomEvent {
115
- static {
116
- this.TYPE = "session-changed";
117
- }
118
- constructor(t, n) {
119
- super(e.TYPE, {
120
- bubbles: !0,
121
- composed: !0,
122
- detail: {
123
- complete: n,
124
- component: t
125
- }
126
- }), this.component = t, this.complete = n;
127
- }
128
- };
129
- //#endregion
130
- //#region ../../lib-react/drag/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js
131
- function oe(e) {
132
- var t, n, r = "";
133
- if (typeof e == "string" || typeof e == "number") r += e;
134
- else if (typeof e == "object") if (Array.isArray(e)) {
135
- var i = e.length;
136
- for (t = 0; t < i; t++) e[t] && (n = oe(e[t])) && (r && (r += " "), r += n);
137
- } else for (n in e) e[n] && (r && (r += " "), r += n);
138
- return r;
139
- }
140
- function se() {
141
- for (var e, t, n = 0, r = "", i = arguments.length; n < i; n++) (e = arguments[n]) && (t = oe(e)) && (r && (r += " "), r += t);
142
- return r;
143
- }
144
- //#endregion
145
- //#region ../../lib-react/drag/dist/placeholder.js
146
- var ce = g("div")(({ theme: e }) => ({
147
- "&.placeholder": {
148
- WebkitTouchCallout: "none",
149
- WebkitUserSelect: "none",
150
- KhtmlUserSelect: "none",
151
- MozUserSelect: "none",
152
- MsUserSelect: "none",
153
- userSelect: "none",
154
- width: "100%",
155
- height: "100%",
156
- background: l.white(),
157
- transition: "background-color 200ms linear, border-color 200ms linear",
158
- boxSizing: "border-box",
159
- display: "grid",
160
- gridRowGap: e.spacing(1),
161
- gridColumnGap: e.spacing(1),
162
- padding: e.spacing(1),
163
- border: `2px dashed ${l.black()}`
164
- },
165
- "&.disabled": {
166
- boxShadow: "none",
167
- background: e.palette.background.paper
168
- },
169
- "&.over": {
170
- border: `1px solid ${u[500]}`,
171
- backgroundColor: `${u[300]}`
172
- },
173
- "&.board": {
174
- padding: e.spacing(1),
175
- display: "flex",
176
- flexWrap: "wrap",
177
- alignItems: "center",
178
- minHeight: "100px",
179
- justifyContent: "center",
180
- overflow: "hidden",
181
- touchAction: "none",
182
- backgroundColor: l.backgroundDark()
183
- },
184
- "&.categorizeBoard": {
185
- padding: e.spacing(.5),
186
- display: "flex",
187
- flexWrap: "wrap",
188
- alignItems: "center",
189
- minHeight: "100px",
190
- justifyContent: "center",
191
- overflow: "hidden",
192
- touchAction: "none",
193
- backgroundColor: l.backgroundDark()
194
- },
195
- "&.verticalPool": {
196
- display: "flex",
197
- flexFlow: "column wrap"
198
- }
199
- })), le = (e) => {
200
- let { children: t, className: n, isOver: r, type: i, grid: a, disabled: o, choiceBoard: s, isCategorize: c, isVerticalPool: u, minHeight: d, extraStyles: f } = e, p = se("placeholder", o && "disabled", r && "over", i, n), m = {};
201
- if (a && a.columns && (m.gridTemplateColumns = `repeat(${a.columns}, 1fr)`), a && a.rows) {
202
- let e = a.rowsRepeatValue || "1fr";
203
- m.gridTemplateRows = `repeat(${a.rows}, ${e})`;
204
- }
205
- i === "choice" && (m.border = `1px solid ${l.borderLight()}`, m.background = l.backgroundDark());
206
- let h = c ? "categorizeBoard" : "board";
207
- return /* @__PURE__ */ j(ce, {
208
- style: {
209
- ...m,
210
- minHeight: d,
211
- ...f
212
- },
213
- className: se(s ? h : p, u && "verticalPool"),
214
- children: t
215
- });
216
- };
217
- le.propTypes = {
218
- choiceBoard: N.default.bool,
219
- grid: N.default.shape({
220
- columns: N.default.number,
221
- rows: N.default.number,
222
- rowsRepeatValue: N.default.string
223
- }),
224
- children: N.default.oneOfType([N.default.arrayOf(N.default.node), N.default.node]).isRequired,
225
- className: N.default.string,
226
- isOver: N.default.bool,
227
- index: N.default.number,
228
- type: N.default.string,
229
- disabled: N.default.bool,
230
- isCategorize: N.default.bool,
231
- isVerticalPool: N.default.bool,
232
- minHeight: N.default.number
233
- };
234
- //#endregion
235
- //#region ../../lib-react/drag/dist/drag-provider.js
236
- function ue({ children: e, onDragEnd: t, onDragStart: n, collisionDetection: r, modifiers: i, autoScroll: a }) {
237
- let [o, s] = A(null);
238
- return /* @__PURE__ */ j(y, {
239
- sensors: v(p(f, { activationConstraint: { distance: 8 } }), p(_)),
240
- onDragStart: (e) => {
241
- s(e.active.id), n && n(e);
242
- },
243
- onDragEnd: (e) => {
244
- s(null), t && t(e);
245
- },
246
- collisionDetection: r,
247
- modifiers: i,
248
- autoScroll: a,
249
- children: e
250
- });
251
- }
252
- ue.propTypes = {
253
- children: N.default.node.isRequired,
254
- onDragEnd: N.default.func,
255
- onDragStart: N.default.func,
256
- collisionDetection: N.default.func,
257
- modifiers: N.default.arrayOf(N.default.func),
258
- autoScroll: N.default.object
259
- };
260
- //#endregion
261
- //#region ../../lib-react/drag/dist/droppable-placeholder.js
262
- var de = { flex: 1 };
263
- function fe({ id: e, children: t, disabled: n, classes: r, isVerticalPool: i, minHeight: a }) {
264
- let { setNodeRef: o, isOver: s } = S({
265
- id: e,
266
- disabled: n
267
- });
268
- return /* @__PURE__ */ j("div", {
269
- ref: o,
270
- style: de,
271
- children: /* @__PURE__ */ j(le, {
272
- disabled: n,
273
- isOver: s,
274
- choiceBoard: !0,
275
- className: r,
276
- isVerticalPool: i,
277
- minHeight: a,
278
- children: t
279
- })
280
- });
281
- }
282
- fe.propTypes = {
283
- id: N.default.oneOfType([N.default.string, N.default.number]).isRequired,
284
- children: N.default.oneOfType([N.default.arrayOf(N.default.node), N.default.node]).isRequired,
285
- disabled: N.default.bool,
286
- classes: N.default.object,
287
- isVerticalPool: N.default.bool,
288
- minHeight: N.default.number
289
- };
290
- //#endregion
291
- //#region ../../lib-react/drag/dist/ica-dp.js
292
- function pe({ id: e, children: t, disabled: n, ...r }) {
293
- return /* @__PURE__ */ j(fe, {
294
- id: e,
295
- disabled: n,
296
- ...r,
297
- children: t
298
- });
299
- }
300
- pe.propTypes = {
301
- id: N.default.oneOfType([N.default.string, N.default.number]).isRequired,
302
- children: N.default.node,
303
- disabled: N.default.bool
304
- };
305
- //#endregion
306
- //#region ../../../node_modules/.bun/@mui+icons-material@7.3.11+44ccb211c00abd9d/node_modules/@mui/icons-material/esm/NotInterested.js
307
- var me = r(/*#__PURE__*/ j("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20m6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9" }), "NotInterested"), he = "height ease-in 300ms, opacity ease-in 300ms", ge = g("div")(() => ({
308
- position: "relative",
309
- height: 0,
310
- overflow: "hidden",
311
- display: "flex",
312
- visibility: "hidden",
313
- width: 0,
314
- "&.enter": {
315
- transition: he,
316
- opacity: 1,
317
- height: "auto",
318
- width: "auto",
319
- visibility: "visible",
320
- minHeight: "25px"
321
- },
322
- "&.enter-done": {
323
- height: "auto",
324
- visibility: "visible",
325
- width: "auto",
326
- minHeight: "25px"
327
- },
328
- "&.exit": {
329
- transition: he,
330
- opacity: 0,
331
- height: 0,
332
- visibility: "visible",
333
- width: 0
334
- },
335
- "&.exit-done": {
336
- opacity: 0,
337
- visibility: "hidden",
338
- height: 0,
339
- width: 0
340
- }
341
- })), _e = (e) => {
342
- let { show: t, children: n, className: r } = e, i = k(null);
343
- return /* @__PURE__ */ j(x, {
344
- nodeRef: i,
345
- in: t,
346
- appear: !0,
347
- mountOnEnter: !1,
348
- timeout: 300,
349
- classNames: {
350
- enter: "enter",
351
- enterDone: "enter-done",
352
- exit: "exit",
353
- exitDone: "exit-done"
354
- },
355
- children: /* @__PURE__ */ j(ge, {
356
- ref: i,
357
- className: r,
358
- children: n
359
- })
360
- });
361
- };
362
- _e.propTypes = {
363
- show: N.default.bool.isRequired,
364
- className: N.default.string,
365
- children: N.default.oneOfType([N.default.arrayOf(N.default.node), N.default.node]).isRequired
366
- };
367
- //#endregion
368
- //#region ../../lib-react/translator/dist/en.js
369
- var ve = {
370
- translation: {
371
- categorize: {
372
- limitMaxChoicesPerCategory: "You've reached the limit of {{maxChoicesPerCategory}} responses per area. To add another response, one must first be removed.",
373
- maxChoicesPerCategoryRestriction: "To change this value to {{maxChoicesPerCategory}}, each category must have {{maxChoicesPerCategory}} or fewer answer choice[s]."
374
- },
375
- ebsr: { part: "Part {{index}}" },
376
- numberLine: {
377
- addElementLimit_one: "You can only add {{count}} element",
378
- addElementLimit_other: "You can only add {{count}} elements",
379
- clearAll: "Clear all"
380
- },
381
- imageClozeAssociation: {
382
- reachedLimit_one: "You’ve reached the limit of {{count}} response per area. To add another response, one must first be removed.",
383
- reachedLimit_other: "Full"
384
- },
385
- drawingResponse: {
386
- fillColor: "Fill color",
387
- outlineColor: "Outline color",
388
- noFill: "No fill",
389
- lightblue: "Light blue",
390
- lightyellow: "Light yellow",
391
- red: "Red",
392
- orange: "Orange",
393
- yellow: "Yellow",
394
- violet: "Violet",
395
- blue: "Blue",
396
- green: "Green",
397
- white: "White",
398
- black: "Black",
399
- onDoubleClick: "Double click to edit this text. Press Enter to submit."
400
- },
401
- charting: {
402
- addCategory: "Add category",
403
- actions: "Actions",
404
- add: "Add",
405
- delete: "Delete",
406
- newLabel: "New label",
407
- reachedLimit_other: "There can't be more than {{count}} categories.",
408
- keyLegend: {
409
- incorrectAnswer: "Student incorrect answer",
410
- correctAnswer: "Student correct answer",
411
- correctKeyAnswer: "Answer key correct"
412
- }
413
- },
414
- graphing: {
415
- point: "Point",
416
- circle: "Circle",
417
- line: "Line",
418
- parabola: "Parabola",
419
- absolute: "Absolute Value",
420
- exponential: "Exponential",
421
- polygon: "Polygon",
422
- ray: "Ray",
423
- segment: "Segment",
424
- sine: "Sine",
425
- vector: "Vector",
426
- label: "Label",
427
- redo: "Redo",
428
- reset: "Reset"
429
- },
430
- mathInline: { primaryCorrectWithAlternates: "Note: The answer shown above is the primary correct answer specified by the author for this item, but other answers may also be recognized as correct." },
431
- multipleChoice: {
432
- minSelections: "Select at least {{minSelections}}.",
433
- maxSelections_one: "Only {{maxSelections}} answer is allowed.",
434
- maxSelections_other: "Only {{maxSelections}} answers are allowed.",
435
- minmaxSelections_equal: "Select {{minSelections}}.",
436
- minmaxSelections_range: "Select between {{minSelections}} and {{maxSelections}}."
437
- },
438
- selectText: {
439
- correctAnswerSelected: "Correct",
440
- correctAnswerNotSelected: "Correct Answer Not Selected",
441
- incorrectSelection: "Incorrect Selection",
442
- key: "Key"
443
- }
444
- },
445
- common: {
446
- undo: "Undo",
447
- clearAll: "Clear all",
448
- correct: "Correct",
449
- incorrect: "Incorrect",
450
- showCorrectAnswer: "Show correct answer",
451
- hideCorrectAnswer: "Hide correct answer",
452
- commonCorrectAnswerWithAlternates: "Note: The answer shown above is the most common correct answer for this item. One or more additional correct answers are also defined, and will also be recognized as correct.",
453
- warning: "Warning",
454
- showNote: "Show Note",
455
- hideNote: "Hide Note",
456
- cancel: "Cancel"
457
- }
458
- }, ye = {
459
- translation: {
460
- categorize: {
461
- limitMaxChoicesPerCategory: "Has alcanzado el límite de {{maxChoicesPerCategory}} respuestas por área. Para agregar otra respuesta, primero se debe eliminar una respuesta.",
462
- maxChoicesPerCategoryRestriction: "Para cambiar este valor a {{maxChoicesPerCategory}}, cada categoría debe tener {{maxChoicesPerCategory}} o menos opciones de respuesta"
463
- },
464
- ebsr: { part: "Parte {{index}}" },
465
- numberLine: {
466
- addElementLimit_one: "Solo puedes agregar {{count}} elemento",
467
- addElementLimit_other: "Solo puedes agregar {{count}} elementos",
468
- clearAll: "Borrar todo"
469
- },
470
- imageClozeAssociation: {
471
- reachedLimit_one: "Has alcanzado el límite de {{count}} respuesta por área. Para agregar otra respuesta, primero se debe eliminar una respuesta.",
472
- reachedLimit_other: "Lleno"
473
- },
474
- drawingResponse: {
475
- fillColor: "Color de relleno",
476
- outlineColor: "Color del contorno",
477
- noFill: "Sin relleno",
478
- lightblue: "Azul claro",
479
- lightyellow: "Amarillo claro",
480
- red: "Rojo",
481
- orange: "Naranja",
482
- yellow: "Amarillo",
483
- violet: "Violeta",
484
- blue: "Azul",
485
- green: "Verde",
486
- white: "Blanco",
487
- black: "Negro",
488
- onDoubleClick: "Haz doble clic para revisar este texto. Presiona el botón de ingreso para enviar"
489
- },
490
- charting: {
491
- addCategory: "Añadir categoría",
492
- actions: "Acciones",
493
- add: "Añadir",
494
- delete: "Eliminar",
495
- newLabel: "Nueva etiqueta",
496
- reachedLimit_other: "No puede haber más de {{count}} categorías.",
497
- keyLegend: {
498
- incorrectAnswer: "Respuesta incorrecta del estudiante",
499
- correctAnswer: "Respuesta correcta del estudiante",
500
- correctKeyAnswer: "Clave de respuesta correcta"
501
- }
502
- },
503
- graphing: {
504
- point: "Punto",
505
- circle: "Circulo",
506
- line: "Línea",
507
- parabola: "Parábola",
508
- absolute: "Valor absoluto",
509
- exponential: "Exponencial",
510
- polygon: "Polígono",
511
- ray: "Semirrecta",
512
- segment: "Segmento ",
513
- sine: "Seno",
514
- vector: "Vector",
515
- label: "Etiqueta",
516
- redo: "Rehacer",
517
- reset: "Reiniciar"
518
- },
519
- mathInline: { primaryCorrectWithAlternates: "Nota: La respuesta que se muestra arriba es la respuesta correcta principal especificada por el autor para esta pregunta, pero también se pueden reconocer otras respuestas como correctas." },
520
- multipleChoice: {
521
- minSelections: "Seleccione al menos {{minSelections}}.",
522
- maxSelections_one: "Sólo se permite {{maxSelections}} respuesta.",
523
- maxSelections_other: "Sólo se permiten {{maxSelections}} respuestas.",
524
- minmaxSelections_equal: "Seleccione {{minSelections}}.",
525
- minmaxSelections_range: "Seleccione entre {{minSelections}} y {{maxSelections}}."
526
- },
527
- selectText: {
528
- correctAnswerSelected: "Respuesta Correcta",
529
- correctAnswerNotSelected: "Respuesta Correcta No Seleccionada",
530
- incorrectSelection: "Selección Incorrecta",
531
- key: "Clave"
532
- }
533
- },
534
- common: {
535
- undo: "Deshacer",
536
- clearAll: "Borrar todo",
537
- correct: "Correct",
538
- incorrect: "Incorrect",
539
- showCorrectAnswer: "Mostrar respuesta correcta",
540
- hideCorrectAnswer: "Ocultar respuesta correcta",
541
- commonCorrectAnswerWithAlternates: "Nota: La respuesta que se muestra arriba es la respuesta correcta más común para esta pregunta. También se definen una o más respuestas correctas adicionales, y también se reconocerán como correctas.",
542
- warning: "Advertencia",
543
- showNote: "Mostrar Nota",
544
- hideNote: "Ocultar Nota",
545
- cancel: "Cancelar"
546
- }
547
- }, R = (e) => typeof e == "string", z = () => {
548
- let e, t, n = new Promise((n, r) => {
549
- e = n, t = r;
550
- });
551
- return n.resolve = e, n.reject = t, n;
552
- }, be = (e) => e == null ? "" : "" + e, xe = (e, t, n) => {
553
- e.forEach((e) => {
554
- t[e] && (n[e] = t[e]);
555
- });
556
- }, Se = /###/g, Ce = (e) => e && e.indexOf("###") > -1 ? e.replace(Se, ".") : e, we = (e) => !e || R(e), B = (e, t, n) => {
557
- let r = R(t) ? t.split(".") : t, i = 0;
558
- for (; i < r.length - 1;) {
559
- if (we(e)) return {};
560
- let t = Ce(r[i]);
561
- !e[t] && n && (e[t] = new n()), e = Object.prototype.hasOwnProperty.call(e, t) ? e[t] : {}, ++i;
562
- }
563
- return we(e) ? {} : {
564
- obj: e,
565
- k: Ce(r[i])
566
- };
567
- }, Te = (e, t, n) => {
568
- let { obj: r, k: i } = B(e, t, Object);
569
- if (r !== void 0 || t.length === 1) {
570
- r[i] = n;
571
- return;
572
- }
573
- let a = t[t.length - 1], o = t.slice(0, t.length - 1), s = B(e, o, Object);
574
- for (; s.obj === void 0 && o.length;) a = `${o[o.length - 1]}.${a}`, o = o.slice(0, o.length - 1), s = B(e, o, Object), s?.obj && s.obj[`${s.k}.${a}`] !== void 0 && (s.obj = void 0);
575
- s.obj[`${s.k}.${a}`] = n;
576
- }, Ee = (e, t, n, r) => {
577
- let { obj: i, k: a } = B(e, t, Object);
578
- i[a] = i[a] || [], i[a].push(n);
579
- }, V = (e, t) => {
580
- let { obj: n, k: r } = B(e, t);
581
- if (n && Object.prototype.hasOwnProperty.call(n, r)) return n[r];
582
- }, De = (e, t, n) => {
583
- let r = V(e, n);
584
- return r === void 0 ? V(t, n) : r;
585
- }, Oe = (e, t, n) => {
586
- for (let r in t) r !== "__proto__" && r !== "constructor" && (r in e ? R(e[r]) || e[r] instanceof String || R(t[r]) || t[r] instanceof String ? n && (e[r] = t[r]) : Oe(e[r], t[r], n) : e[r] = t[r]);
587
- return e;
588
- }, H = (e) => e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), ke = {
589
- "&": "&amp;",
590
- "<": "&lt;",
591
- ">": "&gt;",
592
- "\"": "&quot;",
593
- "'": "&#39;",
594
- "/": "&#x2F;"
595
- }, Ae = (e) => R(e) ? e.replace(/[&<>"'\/]/g, (e) => ke[e]) : e, je = class {
596
- constructor(e) {
597
- this.capacity = e, this.regExpMap = /* @__PURE__ */ new Map(), this.regExpQueue = [];
598
- }
599
- getRegExp(e) {
600
- let t = this.regExpMap.get(e);
601
- if (t !== void 0) return t;
602
- let n = new RegExp(e);
603
- return this.regExpQueue.length === this.capacity && this.regExpMap.delete(this.regExpQueue.shift()), this.regExpMap.set(e, n), this.regExpQueue.push(e), n;
604
- }
605
- }, Me = [
606
- " ",
607
- ",",
608
- "?",
609
- "!",
610
- ";"
611
- ], Ne = new je(20), Pe = (e, t, n) => {
612
- t ||= "", n ||= "";
613
- let r = Me.filter((e) => t.indexOf(e) < 0 && n.indexOf(e) < 0);
614
- if (r.length === 0) return !0;
615
- let i = Ne.getRegExp(`(${r.map((e) => e === "?" ? "\\?" : e).join("|")})`), a = !i.test(e);
616
- if (!a) {
617
- let t = e.indexOf(n);
618
- t > 0 && !i.test(e.substring(0, t)) && (a = !0);
619
- }
620
- return a;
621
- }, Fe = (e, t, n = ".") => {
622
- if (!e) return;
623
- if (e[t]) return Object.prototype.hasOwnProperty.call(e, t) ? e[t] : void 0;
624
- let r = t.split(n), i = e;
625
- for (let e = 0; e < r.length;) {
626
- if (!i || typeof i != "object") return;
627
- let t, a = "";
628
- for (let o = e; o < r.length; ++o) if (o !== e && (a += n), a += r[o], t = i[a], t !== void 0) {
629
- if ([
630
- "string",
631
- "number",
632
- "boolean"
633
- ].indexOf(typeof t) > -1 && o < r.length - 1) continue;
634
- e += o - e + 1;
635
- break;
636
- }
637
- i = t;
638
- }
639
- return i;
640
- }, U = (e) => e?.replace(/_/g, "-"), Ie = {
641
- type: "logger",
642
- log(e) {
643
- this.output("log", e);
644
- },
645
- warn(e) {
646
- this.output("warn", e);
647
- },
648
- error(e) {
649
- this.output("error", e);
650
- },
651
- output(e, t) {
652
- console?.[e]?.apply?.(console, t);
653
- }
654
- }, W = new class e {
655
- constructor(e, t = {}) {
656
- this.init(e, t);
657
- }
658
- init(e, t = {}) {
659
- this.prefix = t.prefix || "i18next:", this.logger = e || Ie, this.options = t, this.debug = t.debug;
660
- }
661
- log(...e) {
662
- return this.forward(e, "log", "", !0);
663
- }
664
- warn(...e) {
665
- return this.forward(e, "warn", "", !0);
666
- }
667
- error(...e) {
668
- return this.forward(e, "error", "");
669
- }
670
- deprecate(...e) {
671
- return this.forward(e, "warn", "WARNING DEPRECATED: ", !0);
672
- }
673
- forward(e, t, n, r) {
674
- return r && !this.debug ? null : (R(e[0]) && (e[0] = `${n}${this.prefix} ${e[0]}`), this.logger[t](e));
675
- }
676
- create(t) {
677
- return new e(this.logger, {
678
- prefix: `${this.prefix}:${t}:`,
679
- ...this.options
680
- });
681
- }
682
- clone(t) {
683
- return t ||= this.options, t.prefix = t.prefix || this.prefix, new e(this.logger, t);
684
- }
685
- }(), G = class {
686
- constructor() {
687
- this.observers = {};
688
- }
689
- on(e, t) {
690
- return e.split(" ").forEach((e) => {
691
- this.observers[e] || (this.observers[e] = /* @__PURE__ */ new Map());
692
- let n = this.observers[e].get(t) || 0;
693
- this.observers[e].set(t, n + 1);
694
- }), this;
695
- }
696
- off(e, t) {
697
- if (this.observers[e]) {
698
- if (!t) {
699
- delete this.observers[e];
700
- return;
701
- }
702
- this.observers[e].delete(t);
703
- }
704
- }
705
- emit(e, ...t) {
706
- this.observers[e] && Array.from(this.observers[e].entries()).forEach(([e, n]) => {
707
- for (let r = 0; r < n; r++) e(...t);
708
- }), this.observers["*"] && Array.from(this.observers["*"].entries()).forEach(([n, r]) => {
709
- for (let i = 0; i < r; i++) n.apply(n, [e, ...t]);
710
- });
711
- }
712
- }, Le = class extends G {
713
- constructor(e, t = {
714
- ns: ["translation"],
715
- defaultNS: "translation"
716
- }) {
717
- super(), this.data = e || {}, this.options = t, this.options.keySeparator === void 0 && (this.options.keySeparator = "."), this.options.ignoreJSONStructure === void 0 && (this.options.ignoreJSONStructure = !0);
718
- }
719
- addNamespaces(e) {
720
- this.options.ns.indexOf(e) < 0 && this.options.ns.push(e);
721
- }
722
- removeNamespaces(e) {
723
- let t = this.options.ns.indexOf(e);
724
- t > -1 && this.options.ns.splice(t, 1);
725
- }
726
- getResource(e, t, n, r = {}) {
727
- let i = r.keySeparator === void 0 ? this.options.keySeparator : r.keySeparator, a = r.ignoreJSONStructure === void 0 ? this.options.ignoreJSONStructure : r.ignoreJSONStructure, o;
728
- e.indexOf(".") > -1 ? o = e.split(".") : (o = [e, t], n && (Array.isArray(n) ? o.push(...n) : R(n) && i ? o.push(...n.split(i)) : o.push(n)));
729
- let s = V(this.data, o);
730
- return !s && !t && !n && e.indexOf(".") > -1 && (e = o[0], t = o[1], n = o.slice(2).join(".")), s || !a || !R(n) ? s : Fe(this.data?.[e]?.[t], n, i);
731
- }
732
- addResource(e, t, n, r, i = { silent: !1 }) {
733
- let a = i.keySeparator === void 0 ? this.options.keySeparator : i.keySeparator, o = [e, t];
734
- n && (o = o.concat(a ? n.split(a) : n)), e.indexOf(".") > -1 && (o = e.split("."), r = t, t = o[1]), this.addNamespaces(t), Te(this.data, o, r), i.silent || this.emit("added", e, t, n, r);
735
- }
736
- addResources(e, t, n, r = { silent: !1 }) {
737
- for (let r in n) (R(n[r]) || Array.isArray(n[r])) && this.addResource(e, t, r, n[r], { silent: !0 });
738
- r.silent || this.emit("added", e, t, n);
739
- }
740
- addResourceBundle(e, t, n, r, i, a = {
741
- silent: !1,
742
- skipCopy: !1
743
- }) {
744
- let o = [e, t];
745
- e.indexOf(".") > -1 && (o = e.split("."), r = n, n = t, t = o[1]), this.addNamespaces(t);
746
- let s = V(this.data, o) || {};
747
- a.skipCopy || (n = JSON.parse(JSON.stringify(n))), r ? Oe(s, n, i) : s = {
748
- ...s,
749
- ...n
750
- }, Te(this.data, o, s), a.silent || this.emit("added", e, t, n);
751
- }
752
- removeResourceBundle(e, t) {
753
- this.hasResourceBundle(e, t) && delete this.data[e][t], this.removeNamespaces(t), this.emit("removed", e, t);
754
- }
755
- hasResourceBundle(e, t) {
756
- return this.getResource(e, t) !== void 0;
757
- }
758
- getResourceBundle(e, t) {
759
- return t ||= this.options.defaultNS, this.getResource(e, t);
760
- }
761
- getDataByLanguage(e) {
762
- return this.data[e];
763
- }
764
- hasLanguageSomeTranslations(e) {
765
- let t = this.getDataByLanguage(e);
766
- return !!(t && Object.keys(t) || []).find((e) => t[e] && Object.keys(t[e]).length > 0);
767
- }
768
- toJSON() {
769
- return this.data;
770
- }
771
- }, Re = {
772
- processors: {},
773
- addPostProcessor(e) {
774
- this.processors[e.name] = e;
775
- },
776
- handle(e, t, n, r, i) {
777
- return e.forEach((e) => {
778
- t = this.processors[e]?.process(t, n, r, i) ?? t;
779
- }), t;
780
- }
781
- }, ze = Symbol("i18next/PATH_KEY");
782
- function Be() {
783
- let e = [], t = Object.create(null), n;
784
- return t.get = (r, i) => (n?.revoke?.(), i === ze ? e : (e.push(i), n = Proxy.revocable(r, t), n.proxy)), Proxy.revocable(Object.create(null), t).proxy;
785
- }
786
- function K(e, t) {
787
- let { [ze]: n } = e(Be()), r = t?.keySeparator ?? ".", i = t?.nsSeparator ?? ":";
788
- if (n.length > 1 && i) {
789
- let e = t?.ns, a = Array.isArray(e) ? e : null;
790
- if (a && a.length > 1 && a.slice(1).includes(n[0])) return `${n[0]}${i}${n.slice(1).join(r)}`;
791
- }
792
- return n.join(r);
793
- }
794
- var Ve = {}, He = (e) => !R(e) && typeof e != "boolean" && typeof e != "number", Ue = class e extends G {
795
- constructor(e, t = {}) {
796
- super(), xe([
797
- "resourceStore",
798
- "languageUtils",
799
- "pluralResolver",
800
- "interpolator",
801
- "backendConnector",
802
- "i18nFormat",
803
- "utils"
804
- ], e, this), this.options = t, this.options.keySeparator === void 0 && (this.options.keySeparator = "."), this.logger = W.create("translator");
805
- }
806
- changeLanguage(e) {
807
- e && (this.language = e);
808
- }
809
- exists(e, t = { interpolation: {} }) {
810
- let n = { ...t };
811
- if (e == null) return !1;
812
- let r = this.resolve(e, n);
813
- if (r?.res === void 0) return !1;
814
- let i = He(r.res);
815
- return !(n.returnObjects === !1 && i);
816
- }
817
- extractFromKey(e, t) {
818
- let n = t.nsSeparator === void 0 ? this.options.nsSeparator : t.nsSeparator;
819
- n === void 0 && (n = ":");
820
- let r = t.keySeparator === void 0 ? this.options.keySeparator : t.keySeparator, i = t.ns || this.options.defaultNS || [], a = n && e.indexOf(n) > -1, o = !this.options.userDefinedKeySeparator && !t.keySeparator && !this.options.userDefinedNsSeparator && !t.nsSeparator && !Pe(e, n, r);
821
- if (a && !o) {
822
- let t = e.match(this.interpolator.nestingRegexp);
823
- if (t && t.length > 0) return {
824
- key: e,
825
- namespaces: R(i) ? [i] : i
826
- };
827
- let a = e.split(n);
828
- (n !== r || n === r && this.options.ns.indexOf(a[0]) > -1) && (i = a.shift()), e = a.join(r);
829
- }
830
- return {
831
- key: e,
832
- namespaces: R(i) ? [i] : i
833
- };
834
- }
835
- translate(t, n, r) {
836
- let i = typeof n == "object" ? { ...n } : n;
837
- if (typeof i != "object" && this.options.overloadTranslationOptionHandler && (i = this.options.overloadTranslationOptionHandler(arguments)), typeof i == "object" && (i = { ...i }), i ||= {}, t == null) return "";
838
- typeof t == "function" && (t = K(t, {
839
- ...this.options,
840
- ...i
841
- })), Array.isArray(t) || (t = [String(t)]), t = t.map((e) => typeof e == "function" ? K(e, {
842
- ...this.options,
843
- ...i
844
- }) : String(e));
845
- let a = i.returnDetails === void 0 ? this.options.returnDetails : i.returnDetails, o = i.keySeparator === void 0 ? this.options.keySeparator : i.keySeparator, { key: s, namespaces: c } = this.extractFromKey(t[t.length - 1], i), l = c[c.length - 1], u = i.nsSeparator === void 0 ? this.options.nsSeparator : i.nsSeparator;
846
- u === void 0 && (u = ":");
847
- let d = i.lng || this.language, f = i.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;
848
- if (d?.toLowerCase() === "cimode") return f ? a ? {
849
- res: `${l}${u}${s}`,
850
- usedKey: s,
851
- exactUsedKey: s,
852
- usedLng: d,
853
- usedNS: l,
854
- usedParams: this.getUsedParamsDetails(i)
855
- } : `${l}${u}${s}` : a ? {
856
- res: s,
857
- usedKey: s,
858
- exactUsedKey: s,
859
- usedLng: d,
860
- usedNS: l,
861
- usedParams: this.getUsedParamsDetails(i)
862
- } : s;
863
- let p = this.resolve(t, i), m = p?.res, h = p?.usedKey || s, g = p?.exactUsedKey || s, _ = [
864
- "[object Number]",
865
- "[object Function]",
866
- "[object RegExp]"
867
- ], v = i.joinArrays === void 0 ? this.options.joinArrays : i.joinArrays, y = !this.i18nFormat || this.i18nFormat.handleAsObject, b = i.count !== void 0 && !R(i.count), x = e.hasDefaultValue(i), ee = b ? this.pluralResolver.getSuffix(d, i.count, i) : "", S = i.ordinal && b ? this.pluralResolver.getSuffix(d, i.count, { ordinal: !1 }) : "", C = b && !i.ordinal && i.count === 0, w = C && i[`defaultValue${this.options.pluralSeparator}zero`] || i[`defaultValue${ee}`] || i[`defaultValue${S}`] || i.defaultValue, T = m;
868
- y && !m && x && (T = w);
869
- let te = He(T), E = Object.prototype.toString.apply(T);
870
- if (y && T && te && _.indexOf(E) < 0 && !(R(v) && Array.isArray(T))) {
871
- if (!i.returnObjects && !this.options.returnObjects) {
872
- this.options.returnedObjectHandler || this.logger.warn("accessing an object - but returnObjects options is not enabled!");
873
- let e = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(h, T, {
874
- ...i,
875
- ns: c
876
- }) : `key '${s} (${this.language})' returned an object instead of string.`;
877
- return a ? (p.res = e, p.usedParams = this.getUsedParamsDetails(i), p) : e;
878
- }
879
- if (o) {
880
- let e = Array.isArray(T), t = e ? [] : {}, n = e ? g : h;
881
- for (let e in T) if (Object.prototype.hasOwnProperty.call(T, e)) {
882
- let r = `${n}${o}${e}`;
883
- x && !m ? t[e] = this.translate(r, {
884
- ...i,
885
- defaultValue: He(w) ? w[e] : void 0,
886
- joinArrays: !1,
887
- ns: c
888
- }) : t[e] = this.translate(r, {
889
- ...i,
890
- joinArrays: !1,
891
- ns: c
892
- }), t[e] === r && (t[e] = T[e]);
893
- }
894
- m = t;
895
- }
896
- } else if (y && R(v) && Array.isArray(m)) m = m.join(v), m &&= this.extendTranslation(m, t, i, r);
897
- else {
898
- let e = !1, n = !1;
899
- !this.isValidLookup(m) && x && (e = !0, m = w), this.isValidLookup(m) || (n = !0, m = s);
900
- let a = (i.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey) && n ? void 0 : m, c = x && w !== m && this.options.updateMissing;
901
- if (n || e || c) {
902
- if (this.logger.log(c ? "updateKey" : "missingKey", d, l, s, c ? w : m), o) {
903
- let e = this.resolve(s, {
904
- ...i,
905
- keySeparator: !1
906
- });
907
- e && e.res && this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.");
908
- }
909
- let e = [], t = this.languageUtils.getFallbackCodes(this.options.fallbackLng, i.lng || this.language);
910
- if (this.options.saveMissingTo === "fallback" && t && t[0]) for (let n = 0; n < t.length; n++) e.push(t[n]);
911
- else this.options.saveMissingTo === "all" ? e = this.languageUtils.toResolveHierarchy(i.lng || this.language) : e.push(i.lng || this.language);
912
- let n = (e, t, n) => {
913
- let r = x && n !== m ? n : a;
914
- this.options.missingKeyHandler ? this.options.missingKeyHandler(e, l, t, r, c, i) : this.backendConnector?.saveMissing && this.backendConnector.saveMissing(e, l, t, r, c, i), this.emit("missingKey", e, l, t, m);
915
- };
916
- this.options.saveMissing && (this.options.saveMissingPlurals && b ? e.forEach((e) => {
917
- let t = this.pluralResolver.getSuffixes(e, i);
918
- C && i[`defaultValue${this.options.pluralSeparator}zero`] && t.indexOf(`${this.options.pluralSeparator}zero`) < 0 && t.push(`${this.options.pluralSeparator}zero`), t.forEach((t) => {
919
- n([e], s + t, i[`defaultValue${t}`] || w);
920
- });
921
- }) : n(e, s, w));
922
- }
923
- m = this.extendTranslation(m, t, i, p, r), n && m === s && this.options.appendNamespaceToMissingKey && (m = `${l}${u}${s}`), (n || e) && this.options.parseMissingKeyHandler && (m = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${l}${u}${s}` : s, e ? m : void 0, i));
924
- }
925
- return a ? (p.res = m, p.usedParams = this.getUsedParamsDetails(i), p) : m;
926
- }
927
- extendTranslation(e, t, n, r, i) {
928
- if (this.i18nFormat?.parse) e = this.i18nFormat.parse(e, {
929
- ...this.options.interpolation.defaultVariables,
930
- ...n
931
- }, n.lng || this.language || r.usedLng, r.usedNS, r.usedKey, { resolved: r });
932
- else if (!n.skipInterpolation) {
933
- n.interpolation && this.interpolator.init({
934
- ...n,
935
- interpolation: {
936
- ...this.options.interpolation,
937
- ...n.interpolation
938
- }
939
- });
940
- let a = R(e) && (n?.interpolation?.skipOnVariables === void 0 ? this.options.interpolation.skipOnVariables : n.interpolation.skipOnVariables), o;
941
- if (a) {
942
- let t = e.match(this.interpolator.nestingRegexp);
943
- o = t && t.length;
944
- }
945
- let s = n.replace && !R(n.replace) ? n.replace : n;
946
- if (this.options.interpolation.defaultVariables && (s = {
947
- ...this.options.interpolation.defaultVariables,
948
- ...s
949
- }), e = this.interpolator.interpolate(e, s, n.lng || this.language || r.usedLng, n), a) {
950
- let t = e.match(this.interpolator.nestingRegexp), r = t && t.length;
951
- o < r && (n.nest = !1);
952
- }
953
- !n.lng && r && r.res && (n.lng = this.language || r.usedLng), n.nest !== !1 && (e = this.interpolator.nest(e, (...e) => i?.[0] === e[0] && !n.context ? (this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`), null) : this.translate(...e, t), n)), n.interpolation && this.interpolator.reset();
954
- }
955
- let a = n.postProcess || this.options.postProcess, o = R(a) ? [a] : a;
956
- return e != null && o?.length && n.applyPostProcessor !== !1 && (e = Re.handle(o, e, t, this.options && this.options.postProcessPassResolved ? {
957
- i18nResolved: {
958
- ...r,
959
- usedParams: this.getUsedParamsDetails(n)
960
- },
961
- ...n
962
- } : n, this)), e;
963
- }
964
- resolve(e, t = {}) {
965
- let n, r, i, a, o;
966
- return R(e) && (e = [e]), Array.isArray(e) && (e = e.map((e) => typeof e == "function" ? K(e, {
967
- ...this.options,
968
- ...t
969
- }) : e)), e.forEach((e) => {
970
- if (this.isValidLookup(n)) return;
971
- let s = this.extractFromKey(e, t), c = s.key;
972
- r = c;
973
- let l = s.namespaces;
974
- this.options.fallbackNS && (l = l.concat(this.options.fallbackNS));
975
- let u = t.count !== void 0 && !R(t.count), d = u && !t.ordinal && t.count === 0, f = t.context !== void 0 && (R(t.context) || typeof t.context == "number") && t.context !== "", p = t.lngs ? t.lngs : this.languageUtils.toResolveHierarchy(t.lng || this.language, t.fallbackLng);
976
- l.forEach((e) => {
977
- this.isValidLookup(n) || (o = e, !Ve[`${p[0]}-${e}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(o) && (Ve[`${p[0]}-${e}`] = !0, this.logger.warn(`key "${r}" for languages "${p.join(", ")}" won't get resolved as namespace "${o}" was not yet loaded`, "This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")), p.forEach((r) => {
978
- if (this.isValidLookup(n)) return;
979
- a = r;
980
- let o = [c];
981
- if (this.i18nFormat?.addLookupKeys) this.i18nFormat.addLookupKeys(o, c, r, e, t);
982
- else {
983
- let e;
984
- u && (e = this.pluralResolver.getSuffix(r, t.count, t));
985
- let n = `${this.options.pluralSeparator}zero`, i = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;
986
- if (u && (t.ordinal && e.indexOf(i) === 0 && o.push(c + e.replace(i, this.options.pluralSeparator)), o.push(c + e), d && o.push(c + n)), f) {
987
- let r = `${c}${this.options.contextSeparator || "_"}${t.context}`;
988
- o.push(r), u && (t.ordinal && e.indexOf(i) === 0 && o.push(r + e.replace(i, this.options.pluralSeparator)), o.push(r + e), d && o.push(r + n));
989
- }
990
- }
991
- let s;
992
- for (; s = o.pop();) this.isValidLookup(n) || (i = s, n = this.getResource(r, e, s, t));
993
- }));
994
- });
995
- }), {
996
- res: n,
997
- usedKey: r,
998
- exactUsedKey: i,
999
- usedLng: a,
1000
- usedNS: o
1001
- };
1002
- }
1003
- isValidLookup(e) {
1004
- return e !== void 0 && !(!this.options.returnNull && e === null) && !(!this.options.returnEmptyString && e === "");
1005
- }
1006
- getResource(e, t, n, r = {}) {
1007
- return this.i18nFormat?.getResource ? this.i18nFormat.getResource(e, t, n, r) : this.resourceStore.getResource(e, t, n, r);
1008
- }
1009
- getUsedParamsDetails(e = {}) {
1010
- let t = [
1011
- "defaultValue",
1012
- "ordinal",
1013
- "context",
1014
- "replace",
1015
- "lng",
1016
- "lngs",
1017
- "fallbackLng",
1018
- "ns",
1019
- "keySeparator",
1020
- "nsSeparator",
1021
- "returnObjects",
1022
- "returnDetails",
1023
- "joinArrays",
1024
- "postProcess",
1025
- "interpolation"
1026
- ], n = e.replace && !R(e.replace), r = n ? e.replace : e;
1027
- if (n && e.count !== void 0 && (r.count = e.count), this.options.interpolation.defaultVariables && (r = {
1028
- ...this.options.interpolation.defaultVariables,
1029
- ...r
1030
- }), !n) {
1031
- r = { ...r };
1032
- for (let e of t) delete r[e];
1033
- }
1034
- return r;
1035
- }
1036
- static hasDefaultValue(e) {
1037
- for (let t in e) if (Object.prototype.hasOwnProperty.call(e, t) && t.substring(0, 12) === "defaultValue" && e[t] !== void 0) return !0;
1038
- return !1;
1039
- }
1040
- }, We = class {
1041
- constructor(e) {
1042
- this.options = e, this.supportedLngs = this.options.supportedLngs || !1, this.logger = W.create("languageUtils");
1043
- }
1044
- getScriptPartFromCode(e) {
1045
- if (e = U(e), !e || e.indexOf("-") < 0) return null;
1046
- let t = e.split("-");
1047
- return t.length === 2 || (t.pop(), t[t.length - 1].toLowerCase() === "x") ? null : this.formatLanguageCode(t.join("-"));
1048
- }
1049
- getLanguagePartFromCode(e) {
1050
- if (e = U(e), !e || e.indexOf("-") < 0) return e;
1051
- let t = e.split("-");
1052
- return this.formatLanguageCode(t[0]);
1053
- }
1054
- formatLanguageCode(e) {
1055
- if (R(e) && e.indexOf("-") > -1) {
1056
- let t;
1057
- try {
1058
- t = Intl.getCanonicalLocales(e)[0];
1059
- } catch {}
1060
- return t && this.options.lowerCaseLng && (t = t.toLowerCase()), t || (this.options.lowerCaseLng ? e.toLowerCase() : e);
1061
- }
1062
- return this.options.cleanCode || this.options.lowerCaseLng ? e.toLowerCase() : e;
1063
- }
1064
- isSupportedCode(e) {
1065
- return (this.options.load === "languageOnly" || this.options.nonExplicitSupportedLngs) && (e = this.getLanguagePartFromCode(e)), !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(e) > -1;
1066
- }
1067
- getBestMatchFromCodes(e) {
1068
- if (!e) return null;
1069
- let t;
1070
- return e.forEach((e) => {
1071
- if (t) return;
1072
- let n = this.formatLanguageCode(e);
1073
- (!this.options.supportedLngs || this.isSupportedCode(n)) && (t = n);
1074
- }), !t && this.options.supportedLngs && e.forEach((e) => {
1075
- if (t) return;
1076
- let n = this.getScriptPartFromCode(e);
1077
- if (this.isSupportedCode(n)) return t = n;
1078
- let r = this.getLanguagePartFromCode(e);
1079
- if (this.isSupportedCode(r)) return t = r;
1080
- t = this.options.supportedLngs.find((e) => {
1081
- if (e === r || !(e.indexOf("-") < 0 && r.indexOf("-") < 0) && (e.indexOf("-") > 0 && r.indexOf("-") < 0 && e.substring(0, e.indexOf("-")) === r || e.indexOf(r) === 0 && r.length > 1)) return e;
1082
- });
1083
- }), t ||= this.getFallbackCodes(this.options.fallbackLng)[0], t;
1084
- }
1085
- getFallbackCodes(e, t) {
1086
- if (!e) return [];
1087
- if (typeof e == "function" && (e = e(t)), R(e) && (e = [e]), Array.isArray(e)) return e;
1088
- if (!t) return e.default || [];
1089
- let n = e[t];
1090
- return n ||= e[this.getScriptPartFromCode(t)], n ||= e[this.formatLanguageCode(t)], n ||= e[this.getLanguagePartFromCode(t)], n ||= e.default, n || [];
1091
- }
1092
- toResolveHierarchy(e, t) {
1093
- let n = this.getFallbackCodes((t === !1 ? [] : t) || this.options.fallbackLng || [], e), r = [], i = (e) => {
1094
- e && (this.isSupportedCode(e) ? r.push(e) : this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`));
1095
- };
1096
- return R(e) && (e.indexOf("-") > -1 || e.indexOf("_") > -1) ? (this.options.load !== "languageOnly" && i(this.formatLanguageCode(e)), this.options.load !== "languageOnly" && this.options.load !== "currentOnly" && i(this.getScriptPartFromCode(e)), this.options.load !== "currentOnly" && i(this.getLanguagePartFromCode(e))) : R(e) && i(this.formatLanguageCode(e)), n.forEach((e) => {
1097
- r.indexOf(e) < 0 && i(this.formatLanguageCode(e));
1098
- }), r;
1099
- }
1100
- }, Ge = {
1101
- zero: 0,
1102
- one: 1,
1103
- two: 2,
1104
- few: 3,
1105
- many: 4,
1106
- other: 5
1107
- }, Ke = {
1108
- select: (e) => e === 1 ? "one" : "other",
1109
- resolvedOptions: () => ({ pluralCategories: ["one", "other"] })
1110
- }, qe = class {
1111
- constructor(e, t = {}) {
1112
- this.languageUtils = e, this.options = t, this.logger = W.create("pluralResolver"), this.pluralRulesCache = {};
1113
- }
1114
- clearCache() {
1115
- this.pluralRulesCache = {};
1116
- }
1117
- getRule(e, t = {}) {
1118
- let n = U(e === "dev" ? "en" : e), r = t.ordinal ? "ordinal" : "cardinal", i = JSON.stringify({
1119
- cleanedCode: n,
1120
- type: r
1121
- });
1122
- if (i in this.pluralRulesCache) return this.pluralRulesCache[i];
1123
- let a;
1124
- try {
1125
- a = new Intl.PluralRules(n, { type: r });
1126
- } catch {
1127
- if (typeof Intl > "u") return this.logger.error("No Intl support, please use an Intl polyfill!"), Ke;
1128
- if (!e.match(/-|_/)) return Ke;
1129
- let n = this.languageUtils.getLanguagePartFromCode(e);
1130
- a = this.getRule(n, t);
1131
- }
1132
- return this.pluralRulesCache[i] = a, a;
1133
- }
1134
- needsPlural(e, t = {}) {
1135
- let n = this.getRule(e, t);
1136
- return n ||= this.getRule("dev", t), n?.resolvedOptions().pluralCategories.length > 1;
1137
- }
1138
- getPluralFormsOfKey(e, t, n = {}) {
1139
- return this.getSuffixes(e, n).map((e) => `${t}${e}`);
1140
- }
1141
- getSuffixes(e, t = {}) {
1142
- let n = this.getRule(e, t);
1143
- return n ||= this.getRule("dev", t), n ? n.resolvedOptions().pluralCategories.sort((e, t) => Ge[e] - Ge[t]).map((e) => `${this.options.prepend}${t.ordinal ? `ordinal${this.options.prepend}` : ""}${e}`) : [];
1144
- }
1145
- getSuffix(e, t, n = {}) {
1146
- let r = this.getRule(e, n);
1147
- return r ? `${this.options.prepend}${n.ordinal ? `ordinal${this.options.prepend}` : ""}${r.select(t)}` : (this.logger.warn(`no plural rule found for: ${e}`), this.getSuffix("dev", t, n));
1148
- }
1149
- }, Je = (e, t, n, r = ".", i = !0) => {
1150
- let a = De(e, t, n);
1151
- return !a && i && R(n) && (a = Fe(e, n, r), a === void 0 && (a = Fe(t, n, r))), a;
1152
- }, Ye = (e) => e.replace(/\$/g, "$$$$"), Xe = class {
1153
- constructor(e = {}) {
1154
- this.logger = W.create("interpolator"), this.options = e, this.format = e?.interpolation?.format || ((e) => e), this.init(e);
1155
- }
1156
- init(e = {}) {
1157
- e.interpolation ||= { escapeValue: !0 };
1158
- let { escape: t, escapeValue: n, useRawValueToEscape: r, prefix: i, prefixEscaped: a, suffix: o, suffixEscaped: s, formatSeparator: c, unescapeSuffix: l, unescapePrefix: u, nestingPrefix: d, nestingPrefixEscaped: f, nestingSuffix: p, nestingSuffixEscaped: m, nestingOptionsSeparator: h, maxReplaces: g, alwaysFormat: _ } = e.interpolation;
1159
- this.escape = t === void 0 ? Ae : t, this.escapeValue = n === void 0 ? !0 : n, this.useRawValueToEscape = r === void 0 ? !1 : r, this.prefix = i ? H(i) : a || "{{", this.suffix = o ? H(o) : s || "}}", this.formatSeparator = c || ",", this.unescapePrefix = l ? "" : u || "-", this.unescapeSuffix = this.unescapePrefix ? "" : l || "", this.nestingPrefix = d ? H(d) : f || H("$t("), this.nestingSuffix = p ? H(p) : m || H(")"), this.nestingOptionsSeparator = h || ",", this.maxReplaces = g || 1e3, this.alwaysFormat = _ === void 0 ? !1 : _, this.resetRegExp();
1160
- }
1161
- reset() {
1162
- this.options && this.init(this.options);
1163
- }
1164
- resetRegExp() {
1165
- let e = (e, t) => e?.source === t ? (e.lastIndex = 0, e) : new RegExp(t, "g");
1166
- this.regexp = e(this.regexp, `${this.prefix}(.+?)${this.suffix}`), this.regexpUnescape = e(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`), this.nestingRegexp = e(this.nestingRegexp, `${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`);
1167
- }
1168
- interpolate(e, t, n, r) {
1169
- let i, a, o, s = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {}, c = (e) => {
1170
- if (e.indexOf(this.formatSeparator) < 0) {
1171
- let i = Je(t, s, e, this.options.keySeparator, this.options.ignoreJSONStructure);
1172
- return this.alwaysFormat ? this.format(i, void 0, n, {
1173
- ...r,
1174
- ...t,
1175
- interpolationkey: e
1176
- }) : i;
1177
- }
1178
- let i = e.split(this.formatSeparator), a = i.shift().trim(), o = i.join(this.formatSeparator).trim();
1179
- return this.format(Je(t, s, a, this.options.keySeparator, this.options.ignoreJSONStructure), o, n, {
1180
- ...r,
1181
- ...t,
1182
- interpolationkey: a
1183
- });
1184
- };
1185
- this.resetRegExp();
1186
- let l = r?.missingInterpolationHandler || this.options.missingInterpolationHandler, u = r?.interpolation?.skipOnVariables === void 0 ? this.options.interpolation.skipOnVariables : r.interpolation.skipOnVariables;
1187
- return [{
1188
- regex: this.regexpUnescape,
1189
- safeValue: (e) => Ye(e)
1190
- }, {
1191
- regex: this.regexp,
1192
- safeValue: (e) => this.escapeValue ? Ye(this.escape(e)) : Ye(e)
1193
- }].forEach((t) => {
1194
- for (o = 0; i = t.regex.exec(e);) {
1195
- let n = i[1].trim();
1196
- if (a = c(n), a === void 0) if (typeof l == "function") {
1197
- let t = l(e, i, r);
1198
- a = R(t) ? t : "";
1199
- } else if (r && Object.prototype.hasOwnProperty.call(r, n)) a = "";
1200
- else if (u) {
1201
- a = i[0];
1202
- continue;
1203
- } else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`), a = "";
1204
- else !R(a) && !this.useRawValueToEscape && (a = be(a));
1205
- let s = t.safeValue(a);
1206
- if (e = e.replace(i[0], s), u ? (t.regex.lastIndex += a.length, t.regex.lastIndex -= i[0].length) : t.regex.lastIndex = 0, o++, o >= this.maxReplaces) break;
1207
- }
1208
- }), e;
1209
- }
1210
- nest(e, t, n = {}) {
1211
- let r, i, a, o = (e, t) => {
1212
- let n = this.nestingOptionsSeparator;
1213
- if (e.indexOf(n) < 0) return e;
1214
- let r = e.split(RegExp(`${H(n)}[ ]*{`)), i = `{${r[1]}`;
1215
- e = r[0], i = this.interpolate(i, a);
1216
- let o = i.match(/'/g), s = i.match(/"/g);
1217
- ((o?.length ?? 0) % 2 == 0 && !s || (s?.length ?? 0) % 2 != 0) && (i = i.replace(/'/g, "\""));
1218
- try {
1219
- a = JSON.parse(i), t && (a = {
1220
- ...t,
1221
- ...a
1222
- });
1223
- } catch (t) {
1224
- return this.logger.warn(`failed parsing options string in nesting for key ${e}`, t), `${e}${n}${i}`;
1225
- }
1226
- return a.defaultValue && a.defaultValue.indexOf(this.prefix) > -1 && delete a.defaultValue, e;
1227
- };
1228
- for (; r = this.nestingRegexp.exec(e);) {
1229
- let s = [];
1230
- a = { ...n }, a = a.replace && !R(a.replace) ? a.replace : a, a.applyPostProcessor = !1, delete a.defaultValue;
1231
- let c = /{.*}/.test(r[1]) ? r[1].lastIndexOf("}") + 1 : r[1].indexOf(this.formatSeparator);
1232
- if (c !== -1 && (s = r[1].slice(c).split(this.formatSeparator).map((e) => e.trim()).filter(Boolean), r[1] = r[1].slice(0, c)), i = t(o.call(this, r[1].trim(), a), a), i && r[0] === e && !R(i)) return i;
1233
- R(i) || (i = be(i)), i ||= (this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`), ""), s.length && (i = s.reduce((e, t) => this.format(e, t, n.lng, {
1234
- ...n,
1235
- interpolationkey: r[1].trim()
1236
- }), i.trim())), e = e.replace(r[0], i), this.regexp.lastIndex = 0;
1237
- }
1238
- return e;
1239
- }
1240
- }, Ze = (e) => {
1241
- let t = e.toLowerCase().trim(), n = {};
1242
- if (e.indexOf("(") > -1) {
1243
- let r = e.split("(");
1244
- t = r[0].toLowerCase().trim();
1245
- let i = r[1].substring(0, r[1].length - 1);
1246
- t === "currency" && i.indexOf(":") < 0 ? n.currency ||= i.trim() : t === "relativetime" && i.indexOf(":") < 0 ? n.range ||= i.trim() : i.split(";").forEach((e) => {
1247
- if (e) {
1248
- let [t, ...r] = e.split(":"), i = r.join(":").trim().replace(/^'+|'+$/g, ""), a = t.trim();
1249
- n[a] || (n[a] = i), i === "false" && (n[a] = !1), i === "true" && (n[a] = !0), isNaN(i) || (n[a] = parseInt(i, 10));
1250
- }
1251
- });
1252
- }
1253
- return {
1254
- formatName: t,
1255
- formatOptions: n
1256
- };
1257
- }, Qe = (e) => {
1258
- let t = {};
1259
- return (n, r, i) => {
1260
- let a = i;
1261
- i && i.interpolationkey && i.formatParams && i.formatParams[i.interpolationkey] && i[i.interpolationkey] && (a = {
1262
- ...a,
1263
- [i.interpolationkey]: void 0
1264
- });
1265
- let o = r + JSON.stringify(a), s = t[o];
1266
- return s || (s = e(U(r), i), t[o] = s), s(n);
1267
- };
1268
- }, $e = (e) => (t, n, r) => e(U(n), r)(t), et = class {
1269
- constructor(e = {}) {
1270
- this.logger = W.create("formatter"), this.options = e, this.init(e);
1271
- }
1272
- init(e, t = { interpolation: {} }) {
1273
- this.formatSeparator = t.interpolation.formatSeparator || ",";
1274
- let n = t.cacheInBuiltFormats ? Qe : $e;
1275
- this.formats = {
1276
- number: n((e, t) => {
1277
- let n = new Intl.NumberFormat(e, { ...t });
1278
- return (e) => n.format(e);
1279
- }),
1280
- currency: n((e, t) => {
1281
- let n = new Intl.NumberFormat(e, {
1282
- ...t,
1283
- style: "currency"
1284
- });
1285
- return (e) => n.format(e);
1286
- }),
1287
- datetime: n((e, t) => {
1288
- let n = new Intl.DateTimeFormat(e, { ...t });
1289
- return (e) => n.format(e);
1290
- }),
1291
- relativetime: n((e, t) => {
1292
- let n = new Intl.RelativeTimeFormat(e, { ...t });
1293
- return (e) => n.format(e, t.range || "day");
1294
- }),
1295
- list: n((e, t) => {
1296
- let n = new Intl.ListFormat(e, { ...t });
1297
- return (e) => n.format(e);
1298
- })
1299
- };
1300
- }
1301
- add(e, t) {
1302
- this.formats[e.toLowerCase().trim()] = t;
1303
- }
1304
- addCached(e, t) {
1305
- this.formats[e.toLowerCase().trim()] = Qe(t);
1306
- }
1307
- format(e, t, n, r = {}) {
1308
- let i = t.split(this.formatSeparator);
1309
- if (i.length > 1 && i[0].indexOf("(") > 1 && i[0].indexOf(")") < 0 && i.find((e) => e.indexOf(")") > -1)) {
1310
- let e = i.findIndex((e) => e.indexOf(")") > -1);
1311
- i[0] = [i[0], ...i.splice(1, e)].join(this.formatSeparator);
1312
- }
1313
- return i.reduce((e, t) => {
1314
- let { formatName: i, formatOptions: a } = Ze(t);
1315
- if (this.formats[i]) {
1316
- let t = e;
1317
- try {
1318
- let o = r?.formatParams?.[r.interpolationkey] || {}, s = o.locale || o.lng || r.locale || r.lng || n;
1319
- t = this.formats[i](e, s, {
1320
- ...a,
1321
- ...r,
1322
- ...o
1323
- });
1324
- } catch (e) {
1325
- this.logger.warn(e);
1326
- }
1327
- return t;
1328
- } else this.logger.warn(`there was no format function for ${i}`);
1329
- return e;
1330
- }, e);
1331
- }
1332
- }, tt = (e, t) => {
1333
- e.pending[t] !== void 0 && (delete e.pending[t], e.pendingCount--);
1334
- }, nt = class extends G {
1335
- constructor(e, t, n, r = {}) {
1336
- super(), this.backend = e, this.store = t, this.services = n, this.languageUtils = n.languageUtils, this.options = r, this.logger = W.create("backendConnector"), this.waitingReads = [], this.maxParallelReads = r.maxParallelReads || 10, this.readingCalls = 0, this.maxRetries = r.maxRetries >= 0 ? r.maxRetries : 5, this.retryTimeout = r.retryTimeout >= 1 ? r.retryTimeout : 350, this.state = {}, this.queue = [], this.backend?.init?.(n, r.backend, r);
1337
- }
1338
- queueLoad(e, t, n, r) {
1339
- let i = {}, a = {}, o = {}, s = {};
1340
- return e.forEach((e) => {
1341
- let r = !0;
1342
- t.forEach((t) => {
1343
- let o = `${e}|${t}`;
1344
- !n.reload && this.store.hasResourceBundle(e, t) ? this.state[o] = 2 : this.state[o] < 0 || (this.state[o] === 1 ? a[o] === void 0 && (a[o] = !0) : (this.state[o] = 1, r = !1, a[o] === void 0 && (a[o] = !0), i[o] === void 0 && (i[o] = !0), s[t] === void 0 && (s[t] = !0)));
1345
- }), r || (o[e] = !0);
1346
- }), (Object.keys(i).length || Object.keys(a).length) && this.queue.push({
1347
- pending: a,
1348
- pendingCount: Object.keys(a).length,
1349
- loaded: {},
1350
- errors: [],
1351
- callback: r
1352
- }), {
1353
- toLoad: Object.keys(i),
1354
- pending: Object.keys(a),
1355
- toLoadLanguages: Object.keys(o),
1356
- toLoadNamespaces: Object.keys(s)
1357
- };
1358
- }
1359
- loaded(e, t, n) {
1360
- let r = e.split("|"), i = r[0], a = r[1];
1361
- t && this.emit("failedLoading", i, a, t), !t && n && this.store.addResourceBundle(i, a, n, void 0, void 0, { skipCopy: !0 }), this.state[e] = t ? -1 : 2, t && n && (this.state[e] = 0);
1362
- let o = {};
1363
- this.queue.forEach((n) => {
1364
- Ee(n.loaded, [i], a), tt(n, e), t && n.errors.push(t), n.pendingCount === 0 && !n.done && (Object.keys(n.loaded).forEach((e) => {
1365
- o[e] || (o[e] = {});
1366
- let t = n.loaded[e];
1367
- t.length && t.forEach((t) => {
1368
- o[e][t] === void 0 && (o[e][t] = !0);
1369
- });
1370
- }), n.done = !0, n.errors.length ? n.callback(n.errors) : n.callback());
1371
- }), this.emit("loaded", o), this.queue = this.queue.filter((e) => !e.done);
1372
- }
1373
- read(e, t, n, r = 0, i = this.retryTimeout, a) {
1374
- if (!e.length) return a(null, {});
1375
- if (this.readingCalls >= this.maxParallelReads) {
1376
- this.waitingReads.push({
1377
- lng: e,
1378
- ns: t,
1379
- fcName: n,
1380
- tried: r,
1381
- wait: i,
1382
- callback: a
1383
- });
1384
- return;
1385
- }
1386
- this.readingCalls++;
1387
- let o = (o, s) => {
1388
- if (this.readingCalls--, this.waitingReads.length > 0) {
1389
- let e = this.waitingReads.shift();
1390
- this.read(e.lng, e.ns, e.fcName, e.tried, e.wait, e.callback);
1391
- }
1392
- if (o && s && r < this.maxRetries) {
1393
- setTimeout(() => {
1394
- this.read.call(this, e, t, n, r + 1, i * 2, a);
1395
- }, i);
1396
- return;
1397
- }
1398
- a(o, s);
1399
- }, s = this.backend[n].bind(this.backend);
1400
- if (s.length === 2) {
1401
- try {
1402
- let n = s(e, t);
1403
- n && typeof n.then == "function" ? n.then((e) => o(null, e)).catch(o) : o(null, n);
1404
- } catch (e) {
1405
- o(e);
1406
- }
1407
- return;
1408
- }
1409
- return s(e, t, o);
1410
- }
1411
- prepareLoading(e, t, n = {}, r) {
1412
- if (!this.backend) return this.logger.warn("No backend was added via i18next.use. Will not load resources."), r && r();
1413
- R(e) && (e = this.languageUtils.toResolveHierarchy(e)), R(t) && (t = [t]);
1414
- let i = this.queueLoad(e, t, n, r);
1415
- if (!i.toLoad.length) return i.pending.length || r(), null;
1416
- i.toLoad.forEach((e) => {
1417
- this.loadOne(e);
1418
- });
1419
- }
1420
- load(e, t, n) {
1421
- this.prepareLoading(e, t, {}, n);
1422
- }
1423
- reload(e, t, n) {
1424
- this.prepareLoading(e, t, { reload: !0 }, n);
1425
- }
1426
- loadOne(e, t = "") {
1427
- let n = e.split("|"), r = n[0], i = n[1];
1428
- this.read(r, i, "read", void 0, void 0, (n, a) => {
1429
- n && this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`, n), !n && a && this.logger.log(`${t}loaded namespace ${i} for language ${r}`, a), this.loaded(e, n, a);
1430
- });
1431
- }
1432
- saveMissing(e, t, n, r, i, a = {}, o = () => {}) {
1433
- if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(t)) {
1434
- this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`, "This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");
1435
- return;
1436
- }
1437
- if (!(n == null || n === "")) {
1438
- if (this.backend?.create) {
1439
- let s = {
1440
- ...a,
1441
- isUpdate: i
1442
- }, c = this.backend.create.bind(this.backend);
1443
- if (c.length < 6) try {
1444
- let i;
1445
- i = c.length === 5 ? c(e, t, n, r, s) : c(e, t, n, r), i && typeof i.then == "function" ? i.then((e) => o(null, e)).catch(o) : o(null, i);
1446
- } catch (e) {
1447
- o(e);
1448
- }
1449
- else c(e, t, n, r, o, s);
1450
- }
1451
- !e || !e[0] || this.store.addResource(e[0], t, n, r);
1452
- }
1453
- }
1454
- }, rt = () => ({
1455
- debug: !1,
1456
- initAsync: !0,
1457
- ns: ["translation"],
1458
- defaultNS: ["translation"],
1459
- fallbackLng: ["dev"],
1460
- fallbackNS: !1,
1461
- supportedLngs: !1,
1462
- nonExplicitSupportedLngs: !1,
1463
- load: "all",
1464
- preload: !1,
1465
- simplifyPluralSuffix: !0,
1466
- keySeparator: ".",
1467
- nsSeparator: ":",
1468
- pluralSeparator: "_",
1469
- contextSeparator: "_",
1470
- partialBundledLanguages: !1,
1471
- saveMissing: !1,
1472
- updateMissing: !1,
1473
- saveMissingTo: "fallback",
1474
- saveMissingPlurals: !0,
1475
- missingKeyHandler: !1,
1476
- missingInterpolationHandler: !1,
1477
- postProcess: !1,
1478
- postProcessPassResolved: !1,
1479
- returnNull: !1,
1480
- returnEmptyString: !0,
1481
- returnObjects: !1,
1482
- joinArrays: !1,
1483
- returnedObjectHandler: !1,
1484
- parseMissingKeyHandler: !1,
1485
- appendNamespaceToMissingKey: !1,
1486
- appendNamespaceToCIMode: !1,
1487
- overloadTranslationOptionHandler: (e) => {
1488
- let t = {};
1489
- if (typeof e[1] == "object" && (t = e[1]), R(e[1]) && (t.defaultValue = e[1]), R(e[2]) && (t.tDescription = e[2]), typeof e[2] == "object" || typeof e[3] == "object") {
1490
- let n = e[3] || e[2];
1491
- Object.keys(n).forEach((e) => {
1492
- t[e] = n[e];
1493
- });
1494
- }
1495
- return t;
1496
- },
1497
- interpolation: {
1498
- escapeValue: !0,
1499
- format: (e) => e,
1500
- prefix: "{{",
1501
- suffix: "}}",
1502
- formatSeparator: ",",
1503
- unescapePrefix: "-",
1504
- nestingPrefix: "$t(",
1505
- nestingSuffix: ")",
1506
- nestingOptionsSeparator: ",",
1507
- maxReplaces: 1e3,
1508
- skipOnVariables: !0
1509
- },
1510
- cacheInBuiltFormats: !0
1511
- }), it = (e) => (R(e.ns) && (e.ns = [e.ns]), R(e.fallbackLng) && (e.fallbackLng = [e.fallbackLng]), R(e.fallbackNS) && (e.fallbackNS = [e.fallbackNS]), e.supportedLngs?.indexOf?.("cimode") < 0 && (e.supportedLngs = e.supportedLngs.concat(["cimode"])), typeof e.initImmediate == "boolean" && (e.initAsync = e.initImmediate), e), q = () => {}, at = (e) => {
1512
- Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach((t) => {
1513
- typeof e[t] == "function" && (e[t] = e[t].bind(e));
1514
- });
1515
- }, ot = "__i18next_supportNoticeShown", st = () => !!(typeof globalThis < "u" && globalThis[ot] || typeof process < "u" && process.env && process.env.I18NEXT_NO_SUPPORT_NOTICE || typeof process < "u" && process.env), ct = () => {
1516
- typeof globalThis < "u" && (globalThis[ot] = !0);
1517
- }, lt = (e) => !!(e?.modules?.backend?.name?.indexOf("Locize") > 0 || e?.modules?.backend?.constructor?.name?.indexOf("Locize") > 0 || e?.options?.backend?.backends && e.options.backend.backends.some((e) => e?.name?.indexOf("Locize") > 0 || e?.constructor?.name?.indexOf("Locize") > 0) || e?.options?.backend?.projectId || e?.options?.backend?.backendOptions && e.options.backend.backendOptions.some((e) => e?.projectId)), J = class e extends G {
1518
- constructor(e = {}, t) {
1519
- if (super(), this.options = it(e), this.services = {}, this.logger = W, this.modules = { external: [] }, at(this), t && !this.isInitialized && !e.isClone) {
1520
- if (!this.options.initAsync) return this.init(e, t), this;
1521
- setTimeout(() => {
1522
- this.init(e, t);
1523
- }, 0);
1524
- }
1525
- }
1526
- init(e = {}, t) {
1527
- this.isInitializing = !0, typeof e == "function" && (t = e, e = {}), e.defaultNS == null && e.ns && (R(e.ns) ? e.defaultNS = e.ns : e.ns.indexOf("translation") < 0 && (e.defaultNS = e.ns[0]));
1528
- let n = rt();
1529
- this.options = {
1530
- ...n,
1531
- ...this.options,
1532
- ...it(e)
1533
- }, this.options.interpolation = {
1534
- ...n.interpolation,
1535
- ...this.options.interpolation
1536
- }, e.keySeparator !== void 0 && (this.options.userDefinedKeySeparator = e.keySeparator), e.nsSeparator !== void 0 && (this.options.userDefinedNsSeparator = e.nsSeparator), typeof this.options.overloadTranslationOptionHandler != "function" && (this.options.overloadTranslationOptionHandler = n.overloadTranslationOptionHandler), this.options.showSupportNotice !== !1 && !lt(this) && !st() && (typeof console < "u" && console.info !== void 0 && console.info("🌐 i18next is made possible by our own product, Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙"), ct());
1537
- let r = (e) => e ? typeof e == "function" ? new e() : e : null;
1538
- if (!this.options.isClone) {
1539
- this.modules.logger ? W.init(r(this.modules.logger), this.options) : W.init(null, this.options);
1540
- let e;
1541
- e = this.modules.formatter ? this.modules.formatter : et;
1542
- let t = new We(this.options);
1543
- this.store = new Le(this.options.resources, this.options);
1544
- let i = this.services;
1545
- i.logger = W, i.resourceStore = this.store, i.languageUtils = t, i.pluralResolver = new qe(t, {
1546
- prepend: this.options.pluralSeparator,
1547
- simplifyPluralSuffix: this.options.simplifyPluralSuffix
1548
- }), this.options.interpolation.format && this.options.interpolation.format !== n.interpolation.format && this.logger.deprecate("init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting"), e && (!this.options.interpolation.format || this.options.interpolation.format === n.interpolation.format) && (i.formatter = r(e), i.formatter.init && i.formatter.init(i, this.options), this.options.interpolation.format = i.formatter.format.bind(i.formatter)), i.interpolator = new Xe(this.options), i.utils = { hasLoadedNamespace: this.hasLoadedNamespace.bind(this) }, i.backendConnector = new nt(r(this.modules.backend), i.resourceStore, i, this.options), i.backendConnector.on("*", (e, ...t) => {
1549
- this.emit(e, ...t);
1550
- }), this.modules.languageDetector && (i.languageDetector = r(this.modules.languageDetector), i.languageDetector.init && i.languageDetector.init(i, this.options.detection, this.options)), this.modules.i18nFormat && (i.i18nFormat = r(this.modules.i18nFormat), i.i18nFormat.init && i.i18nFormat.init(this)), this.translator = new Ue(this.services, this.options), this.translator.on("*", (e, ...t) => {
1551
- this.emit(e, ...t);
1552
- }), this.modules.external.forEach((e) => {
1553
- e.init && e.init(this);
1554
- });
1555
- }
1556
- if (this.format = this.options.interpolation.format, t ||= q, this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {
1557
- let e = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);
1558
- e.length > 0 && e[0] !== "dev" && (this.options.lng = e[0]);
1559
- }
1560
- !this.services.languageDetector && !this.options.lng && this.logger.warn("init: no languageDetector is used and no lng is defined"), [
1561
- "getResource",
1562
- "hasResourceBundle",
1563
- "getResourceBundle",
1564
- "getDataByLanguage"
1565
- ].forEach((e) => {
1566
- this[e] = (...t) => this.store[e](...t);
1567
- }), [
1568
- "addResource",
1569
- "addResources",
1570
- "addResourceBundle",
1571
- "removeResourceBundle"
1572
- ].forEach((e) => {
1573
- this[e] = (...t) => (this.store[e](...t), this);
1574
- });
1575
- let i = z(), a = () => {
1576
- let e = (e, n) => {
1577
- this.isInitializing = !1, this.isInitialized && !this.initializedStoreOnce && this.logger.warn("init: i18next is already initialized. You should call init just once!"), this.isInitialized = !0, this.options.isClone || this.logger.log("initialized", this.options), this.emit("initialized", this.options), i.resolve(n), t(e, n);
1578
- };
1579
- if (this.languages && !this.isInitialized) return e(null, this.t.bind(this));
1580
- this.changeLanguage(this.options.lng, e);
1581
- };
1582
- return this.options.resources || !this.options.initAsync ? a() : setTimeout(a, 0), i;
1583
- }
1584
- loadResources(e, t = q) {
1585
- let n = t, r = R(e) ? e : this.language;
1586
- if (typeof e == "function" && (n = e), !this.options.resources || this.options.partialBundledLanguages) {
1587
- if (r?.toLowerCase() === "cimode" && (!this.options.preload || this.options.preload.length === 0)) return n();
1588
- let e = [], t = (t) => {
1589
- t && t !== "cimode" && this.services.languageUtils.toResolveHierarchy(t).forEach((t) => {
1590
- t !== "cimode" && e.indexOf(t) < 0 && e.push(t);
1591
- });
1592
- };
1593
- r ? t(r) : this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach((e) => t(e)), this.options.preload?.forEach?.((e) => t(e)), this.services.backendConnector.load(e, this.options.ns, (e) => {
1594
- !e && !this.resolvedLanguage && this.language && this.setResolvedLanguage(this.language), n(e);
1595
- });
1596
- } else n(null);
1597
- }
1598
- reloadResources(e, t, n) {
1599
- let r = z();
1600
- return typeof e == "function" && (n = e, e = void 0), typeof t == "function" && (n = t, t = void 0), e ||= this.languages, t ||= this.options.ns, n ||= q, this.services.backendConnector.reload(e, t, (e) => {
1601
- r.resolve(), n(e);
1602
- }), r;
1603
- }
1604
- use(e) {
1605
- if (!e) throw Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");
1606
- if (!e.type) throw Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");
1607
- return e.type === "backend" && (this.modules.backend = e), (e.type === "logger" || e.log && e.warn && e.error) && (this.modules.logger = e), e.type === "languageDetector" && (this.modules.languageDetector = e), e.type === "i18nFormat" && (this.modules.i18nFormat = e), e.type === "postProcessor" && Re.addPostProcessor(e), e.type === "formatter" && (this.modules.formatter = e), e.type === "3rdParty" && this.modules.external.push(e), this;
1608
- }
1609
- setResolvedLanguage(e) {
1610
- if (!(!e || !this.languages) && !(["cimode", "dev"].indexOf(e) > -1)) {
1611
- for (let e = 0; e < this.languages.length; e++) {
1612
- let t = this.languages[e];
1613
- if (!(["cimode", "dev"].indexOf(t) > -1) && this.store.hasLanguageSomeTranslations(t)) {
1614
- this.resolvedLanguage = t;
1615
- break;
1616
- }
1617
- }
1618
- !this.resolvedLanguage && this.languages.indexOf(e) < 0 && this.store.hasLanguageSomeTranslations(e) && (this.resolvedLanguage = e, this.languages.unshift(e));
1619
- }
1620
- }
1621
- changeLanguage(e, t) {
1622
- this.isLanguageChangingTo = e;
1623
- let n = z();
1624
- this.emit("languageChanging", e);
1625
- let r = (e) => {
1626
- this.language = e, this.languages = this.services.languageUtils.toResolveHierarchy(e), this.resolvedLanguage = void 0, this.setResolvedLanguage(e);
1627
- }, i = (i, a) => {
1628
- a ? this.isLanguageChangingTo === e && (r(a), this.translator.changeLanguage(a), this.isLanguageChangingTo = void 0, this.emit("languageChanged", a), this.logger.log("languageChanged", a)) : this.isLanguageChangingTo = void 0, n.resolve((...e) => this.t(...e)), t && t(i, (...e) => this.t(...e));
1629
- }, a = (t) => {
1630
- !e && !t && this.services.languageDetector && (t = []);
1631
- let n = R(t) ? t : t && t[0], a = this.store.hasLanguageSomeTranslations(n) ? n : this.services.languageUtils.getBestMatchFromCodes(R(t) ? [t] : t);
1632
- a && (this.language || r(a), this.translator.language || this.translator.changeLanguage(a), this.services.languageDetector?.cacheUserLanguage?.(a)), this.loadResources(a, (e) => {
1633
- i(e, a);
1634
- });
1635
- };
1636
- return !e && this.services.languageDetector && !this.services.languageDetector.async ? a(this.services.languageDetector.detect()) : !e && this.services.languageDetector && this.services.languageDetector.async ? this.services.languageDetector.detect.length === 0 ? this.services.languageDetector.detect().then(a) : this.services.languageDetector.detect(a) : a(e), n;
1637
- }
1638
- getFixedT(e, t, n) {
1639
- let r = (e, t, ...i) => {
1640
- let a;
1641
- a = typeof t == "object" ? { ...t } : this.options.overloadTranslationOptionHandler([e, t].concat(i)), a.lng = a.lng || r.lng, a.lngs = a.lngs || r.lngs, a.ns = a.ns || r.ns, a.keyPrefix !== "" && (a.keyPrefix = a.keyPrefix || n || r.keyPrefix);
1642
- let o = {
1643
- ...this.options,
1644
- ...a
1645
- };
1646
- typeof a.keyPrefix == "function" && (a.keyPrefix = K(a.keyPrefix, o));
1647
- let s = this.options.keySeparator || ".", c;
1648
- return a.keyPrefix && Array.isArray(e) ? c = e.map((e) => (typeof e == "function" && (e = K(e, o)), `${a.keyPrefix}${s}${e}`)) : (typeof e == "function" && (e = K(e, o)), c = a.keyPrefix ? `${a.keyPrefix}${s}${e}` : e), this.t(c, a);
1649
- };
1650
- return R(e) ? r.lng = e : r.lngs = e, r.ns = t, r.keyPrefix = n, r;
1651
- }
1652
- t(...e) {
1653
- return this.translator?.translate(...e);
1654
- }
1655
- exists(...e) {
1656
- return this.translator?.exists(...e);
1657
- }
1658
- setDefaultNamespace(e) {
1659
- this.options.defaultNS = e;
1660
- }
1661
- hasLoadedNamespace(e, t = {}) {
1662
- if (!this.isInitialized) return this.logger.warn("hasLoadedNamespace: i18next was not initialized", this.languages), !1;
1663
- if (!this.languages || !this.languages.length) return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty", this.languages), !1;
1664
- let n = t.lng || this.resolvedLanguage || this.languages[0], r = this.options ? this.options.fallbackLng : !1, i = this.languages[this.languages.length - 1];
1665
- if (n.toLowerCase() === "cimode") return !0;
1666
- let a = (e, t) => {
1667
- let n = this.services.backendConnector.state[`${e}|${t}`];
1668
- return n === -1 || n === 0 || n === 2;
1669
- };
1670
- if (t.precheck) {
1671
- let e = t.precheck(this, a);
1672
- if (e !== void 0) return e;
1673
- }
1674
- return !!(this.hasResourceBundle(n, e) || !this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages || a(n, e) && (!r || a(i, e)));
1675
- }
1676
- loadNamespaces(e, t) {
1677
- let n = z();
1678
- return this.options.ns ? (R(e) && (e = [e]), e.forEach((e) => {
1679
- this.options.ns.indexOf(e) < 0 && this.options.ns.push(e);
1680
- }), this.loadResources((e) => {
1681
- n.resolve(), t && t(e);
1682
- }), n) : (t && t(), Promise.resolve());
1683
- }
1684
- loadLanguages(e, t) {
1685
- let n = z();
1686
- R(e) && (e = [e]);
1687
- let r = this.options.preload || [], i = e.filter((e) => r.indexOf(e) < 0 && this.services.languageUtils.isSupportedCode(e));
1688
- return i.length ? (this.options.preload = r.concat(i), this.loadResources((e) => {
1689
- n.resolve(), t && t(e);
1690
- }), n) : (t && t(), Promise.resolve());
1691
- }
1692
- dir(e) {
1693
- if (e ||= this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language), !e) return "rtl";
1694
- try {
1695
- let t = new Intl.Locale(e);
1696
- if (t && t.getTextInfo) {
1697
- let e = t.getTextInfo();
1698
- if (e && e.direction) return e.direction;
1699
- }
1700
- } catch {}
1701
- let t = /* @__PURE__ */ "ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb".split("."), n = this.services?.languageUtils || new We(rt());
1702
- return e.toLowerCase().indexOf("-latn") > 1 ? "ltr" : t.indexOf(n.getLanguagePartFromCode(e)) > -1 || e.toLowerCase().indexOf("-arab") > 1 ? "rtl" : "ltr";
1703
- }
1704
- static createInstance(t = {}, n) {
1705
- let r = new e(t, n);
1706
- return r.createInstance = e.createInstance, r;
1707
- }
1708
- cloneInstance(t = {}, n = q) {
1709
- let r = t.forkResourceStore;
1710
- r && delete t.forkResourceStore;
1711
- let i = {
1712
- ...this.options,
1713
- ...t,
1714
- isClone: !0
1715
- }, a = new e(i);
1716
- if ((t.debug !== void 0 || t.prefix !== void 0) && (a.logger = a.logger.clone(t)), [
1717
- "store",
1718
- "services",
1719
- "language"
1720
- ].forEach((e) => {
1721
- a[e] = this[e];
1722
- }), a.services = { ...this.services }, a.services.utils = { hasLoadedNamespace: a.hasLoadedNamespace.bind(a) }, r && (a.store = new Le(Object.keys(this.store.data).reduce((e, t) => (e[t] = { ...this.store.data[t] }, e[t] = Object.keys(e[t]).reduce((n, r) => (n[r] = { ...e[t][r] }, n), e[t]), e), {}), i), a.services.resourceStore = a.store), t.interpolation) {
1723
- let e = {
1724
- ...rt().interpolation,
1725
- ...this.options.interpolation,
1726
- ...t.interpolation
1727
- }, n = {
1728
- ...i,
1729
- interpolation: e
1730
- };
1731
- a.services.interpolator = new Xe(n);
1732
- }
1733
- return a.translator = new Ue(a.services, i), a.translator.on("*", (e, ...t) => {
1734
- a.emit(e, ...t);
1735
- }), a.init(i, n), a.translator.options = i, a.translator.backendConnector.services.utils = { hasLoadedNamespace: a.hasLoadedNamespace.bind(a) }, a;
1736
- }
1737
- toJSON() {
1738
- return {
1739
- options: this.options,
1740
- store: this.store,
1741
- language: this.language,
1742
- languages: this.languages,
1743
- resolvedLanguage: this.resolvedLanguage
1744
- };
1745
- }
1746
- }.createInstance();
1747
- //#endregion
1748
- //#region ../../lib-react/translator/dist/index.js
1749
- J.createInstance, J.dir, J.init, J.loadResources, J.reloadResources, J.use, J.changeLanguage, J.getFixedT, J.t, J.exists, J.setDefaultNamespace, J.hasLoadedNamespace, J.loadNamespaces, J.loadLanguages, J.init({
1750
- fallbackLng: "en",
1751
- lng: "en",
1752
- debug: !0,
1753
- resources: {
1754
- en: ve,
1755
- es: ye
1756
- }
1757
- });
1758
- var ut = {
1759
- translator: {
1760
- ...J,
1761
- t: (e, t) => {
1762
- let { lng: n } = t;
1763
- switch (n) {
1764
- case "en_US":
1765
- case "en-US":
1766
- t.lng = "en";
1767
- break;
1768
- case "es_ES":
1769
- case "es-ES":
1770
- case "es_MX":
1771
- case "es-MX":
1772
- t.lng = "es";
1773
- break;
1774
- default: break;
1775
- }
1776
- return J.t(e, {
1777
- lng: n,
1778
- ...t
1779
- });
1780
- }
1781
- },
1782
- languageOptions: [{
1783
- value: "en_US",
1784
- label: "English (US)"
1785
- }, {
1786
- value: "es_ES",
1787
- label: "Spanish"
1788
- }]
1789
- };
1790
- //#endregion
1791
- //#region ../../lib-react/correct-answer-toggle/dist/index.js
1792
- function Y(e) {
1793
- return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
1794
- }
1795
- function dt(e, t) {
1796
- 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;
1797
- }
1798
- var ft = dt(T, "Readable") || dt(ht.Readable, "Readable"), pt = w, mt = pt.default, ht = mt && typeof mt == "object" ? mt : pt, { translator: X } = ut, gt = {
1799
- WebkitTouchCallout: "none",
1800
- WebkitUserSelect: "none",
1801
- KhtmlUserSelect: "none",
1802
- MozUserSelect: "none",
1803
- msUserSelect: "none",
1804
- userSelect: "none"
1805
- }, _t = g("div")(() => ({
1806
- width: "100%",
1807
- cursor: "pointer"
1808
- })), vt = g("div")(() => ({
1809
- margin: "0 auto",
1810
- textAlign: "center",
1811
- display: "flex"
1812
- })), yt = g("div")(() => ({
1813
- width: "fit-content",
1814
- minWidth: "140px",
1815
- alignSelf: "center",
1816
- verticalAlign: "middle",
1817
- color: `var(--correct-answer-toggle-label-color, ${l.text()})`,
1818
- fontWeight: "normal",
1819
- ...gt
1820
- })), bt = g("div")(() => ({
1821
- position: "absolute",
1822
- width: "25px",
1823
- "&.enter": { opacity: "0" },
1824
- "&.enter-active": {
1825
- opacity: "1",
1826
- transition: "opacity 0.3s ease-in"
1827
- },
1828
- "&.exit": { opacity: "1" },
1829
- "&.exit-active": {
1830
- opacity: "0",
1831
- transition: "opacity 0.3s ease-in"
1832
- }
1833
- })), xt = g("div")(() => ({
1834
- width: "25px",
1835
- marginRight: "5px",
1836
- display: "flex",
1837
- alignItems: "center"
1838
- })), St = class e extends D.Component {
1839
- static propTypes = {
1840
- onToggle: N.default.func,
1841
- toggled: N.default.bool,
1842
- show: N.default.bool,
1843
- hideMessage: N.default.string,
1844
- showMessage: N.default.string,
1845
- className: N.default.string,
1846
- language: N.default.string
1847
- };
1848
- static defaultProps = {
1849
- showMessage: "Show correct answer",
1850
- hideMessage: "Hide correct answer",
1851
- show: !1,
1852
- toggled: !1
1853
- };
1854
- constructor(t) {
1855
- super(t), this.state = { show: t.show }, this.openIconRef = D.createRef(), this.closedIconRef = D.createRef(), e.defaultProps = {
1856
- ...e.defaultProps,
1857
- showMessage: X.t("common:showCorrectAnswer", { lng: t.language }),
1858
- hideMessage: X.t("common:hideCorrectAnswer", { lng: t.language })
1859
- };
1860
- }
1861
- onClick() {
1862
- this.props.onToggle(!this.props.toggled);
1863
- }
1864
- onTouch(e) {
1865
- e.preventDefault(), this.props.onToggle(!this.props.toggled);
1866
- }
1867
- UNSAFE_componentWillReceiveProps(t) {
1868
- this.setState({ show: t.show }), t.language !== this.props?.language && (e.defaultProps = {
1869
- ...e.defaultProps,
1870
- showMessage: X.t("common:showCorrectAnswer", { lng: t.language }),
1871
- hideMessage: X.t("common:hideCorrectAnswer", { lng: t.language })
1872
- });
1873
- }
1874
- render() {
1875
- let { className: e, toggled: t, hideMessage: n, showMessage: r } = this.props;
1876
- return /* @__PURE__ */ j(_t, {
1877
- className: e,
1878
- children: /* @__PURE__ */ j(_e, {
1879
- show: this.state.show,
1880
- children: /* @__PURE__ */ M(vt, {
1881
- onClick: this.onClick.bind(this),
1882
- onTouchEnd: this.onTouch.bind(this),
1883
- children: [/* @__PURE__ */ M(xt, { children: [/* @__PURE__ */ j(x, {
1884
- nodeRef: this.openIconRef,
1885
- timeout: 400,
1886
- in: t,
1887
- exit: !t,
1888
- classNames: {
1889
- enter: "enter",
1890
- enterActive: "enter-active",
1891
- exit: "exit",
1892
- exitActive: "exit-active"
1893
- },
1894
- children: /* @__PURE__ */ j(bt, {
1895
- ref: this.openIconRef,
1896
- children: /* @__PURE__ */ j(I, { open: t }, "correct-open")
1897
- })
1898
- }), /* @__PURE__ */ j(x, {
1899
- nodeRef: this.closedIconRef,
1900
- timeout: 5e3,
1901
- in: !t,
1902
- exit: t,
1903
- classNames: {
1904
- enter: "enter",
1905
- enterActive: "enter-active",
1906
- exit: "exit",
1907
- exitActive: "exit-active"
1908
- },
1909
- children: /* @__PURE__ */ j(bt, {
1910
- ref: this.closedIconRef,
1911
- children: /* @__PURE__ */ j(I, { open: t }, "correct-closed")
1912
- })
1913
- })] }), /* @__PURE__ */ j(ft, {
1914
- false: !0,
1915
- children: /* @__PURE__ */ j(yt, {
1916
- "aria-hidden": !this.state.show,
1917
- children: t ? n : r
1918
- })
1919
- })]
1920
- })
1921
- })
1922
- });
1923
- }
1924
- }, Ct = r(/*#__PURE__*/ j("path", { d: "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }), "Close"), wt = g("svg")(() => ({
1925
- "&.correctEmpty": { color: l.correct() },
1926
- "&.correctFilled": {
1927
- color: l.background(),
1928
- backgroundColor: l.correct()
1929
- },
1930
- "&.incorrectEmpty": { color: l.incorrect() },
1931
- "&.incorrectFilled": {
1932
- color: l.background(),
1933
- backgroundColor: l.incorrect()
1934
- }
1935
- })), Tt = (e, t) => `${e ? "correct" : "incorrect"}${t ? "Filled" : "Empty"}`, Z = ({ containerStyle: e, isCorrect: t, filled: n }) => {
1936
- let r = t ? C : Ct, i = t !== void 0, a = i ? Tt(t, n) : "";
1937
- return i ? /* @__PURE__ */ j(r, {
1938
- component: wt,
1939
- className: a,
1940
- style: e
1941
- }) : null;
1942
- };
1943
- Z.propTypes = {
1944
- containerStyle: N.default.object,
1945
- filled: N.default.bool,
1946
- isCorrect: N.default.oneOfType([N.default.bool, N.default.number])
1947
- }, Z.defaultProps = {
1948
- containerStyle: {},
1949
- filled: !1,
1950
- isCorrect: void 0
1951
- };
1952
- //#endregion
1953
- //#region src/delivery/static-html-span.tsx
1954
- var Et = class extends D.PureComponent {
1955
- shouldComponentUpdate() {
1956
- return !1;
1957
- }
1958
- render() {
1959
- let { html: e, className: t } = this.props;
1960
- return /* @__PURE__ */ j("span", {
1961
- className: t,
1962
- dangerouslySetInnerHTML: { __html: e }
1963
- });
1964
- }
1965
- };
1966
- Et.propTypes = {
1967
- html: N.default.string.isRequired,
1968
- className: N.default.string
1969
- }, Et.defaultProps = { className: "" };
1970
- //#endregion
1971
- //#region src/delivery/possible-response.tsx
1972
- var Dt = g("div")(() => ({
1973
- position: "relative",
1974
- backgroundColor: l.white(),
1975
- border: `1px solid ${l.borderDark()}`,
1976
- display: "flex",
1977
- alignItems: "center",
1978
- justifyContent: "center",
1979
- minHeight: "28px",
1980
- width: "fit-content",
1981
- "& span img": { pointerEvents: "none" },
1982
- "&.textAnswerChoiceStyle": {
1983
- padding: "0 10px",
1984
- margin: "4px 6px !important"
1985
- },
1986
- "&.answerChoiceTransparency": {
1987
- border: "none",
1988
- backgroundColor: `${l.transparent()}`,
1989
- "&:hover": { border: `1px solid ${l.borderDark()}` }
1990
- },
1991
- "&.baseCorrect": { border: `2px solid ${l.correct()} !important` },
1992
- "&.baseIncorrect": { border: `2px solid ${l.incorrect()} !important` }
1993
- })), Ot = g(Et)(() => ({
1994
- cursor: "grab",
1995
- backgroundColor: l.background(),
1996
- "&.hiddenSpan": { visibility: "hidden" }
1997
- })), Q = ({ canDrag: e, containerStyle: t, data: n, onDragBegin: r, answerChoiceTransparency: i, isOverlay: o }) => {
1998
- let s = k(null), c = k(null), { setNodeRef: l, attributes: u, listeners: d, isDragging: f } = b({
1999
- id: `possible-response-${n.id}`,
2000
- data: {
2001
- id: n.id,
2002
- value: n.value,
2003
- containerIndex: n.containerIndex
2004
- },
2005
- disabled: !e
2006
- }), p = () => {
2007
- clearTimeout(c.current);
2008
- }, m = () => {
2009
- clearTimeout(c.current);
2010
- }, h = (t) => {
2011
- t.preventDefault(), c.current = setTimeout(() => {
2012
- e && s.current && r(n);
2013
- }, 500);
2014
- };
2015
- O(() => {
2016
- let e = s.current;
2017
- if (e) return e.addEventListener("touchstart", h, { passive: !1 }), e.addEventListener("touchend", p), e.addEventListener("touchmove", m, { passive: !1 }), () => {
2018
- e.removeEventListener("touchstart", h), e.removeEventListener("touchend", p), e.removeEventListener("touchmove", m);
2019
- };
2020
- }, [e, n]);
2021
- let { isCorrect: g } = n || {}, _ = {
2022
- fontSize: 14,
2023
- position: "absolute",
2024
- bottom: "3px",
2025
- right: "3px"
2026
- }, v = g === !0 ? "baseCorrect" : g === !1 ? "baseIncorrect" : void 0, y = /<img[^>]+src="([^">]+)"/.test(n.value), x = a({
2027
- answerChoiceTransparency: i && !f,
2028
- [v]: !!v,
2029
- textAnswerChoiceStyle: !y && !o
2030
- }), ee = a({ hiddenSpan: n.hidden });
2031
- return /* @__PURE__ */ M(Dt, {
2032
- className: x,
2033
- style: t,
2034
- ref: (e) => {
2035
- s.current = e, l(e);
2036
- },
2037
- ...d,
2038
- ...u,
2039
- children: [/* @__PURE__ */ j(Ot, {
2040
- html: n.value,
2041
- className: ee
2042
- }), /* @__PURE__ */ j(Z, {
2043
- isCorrect: n.isCorrect,
2044
- containerStyle: _
2045
- })]
2046
- });
2047
- };
2048
- Q.propTypes = {
2049
- canDrag: N.default.bool.isRequired,
2050
- containerStyle: N.default.object,
2051
- data: N.default.object.isRequired,
2052
- onDragBegin: N.default.func.isRequired,
2053
- answerChoiceTransparency: N.default.bool,
2054
- isOverlay: N.default.bool
2055
- }, Q.defaultProps = {
2056
- containerStyle: {},
2057
- answerChoiceTransparency: !1,
2058
- isOverlay: !1
2059
- };
2060
- //#endregion
2061
- //#region src/delivery/image-drop-target.tsx
2062
- var kt = g("div")(() => ({
2063
- display: "flex",
2064
- flexWrap: "wrap"
2065
- })), At = g("div")(() => ({
2066
- position: "absolute",
2067
- boxSizing: "border-box",
2068
- "&.active": {
2069
- border: `2px solid ${l.text()}`,
2070
- backgroundColor: "rgba(230, 242, 252, .8)"
2071
- },
2072
- "&.dashed": { border: `2px dashed ${l.text()}` },
2073
- "&.is-over": {
2074
- border: "1px solid rgb(158, 158, 158)",
2075
- backgroundColor: "rgb(224, 224, 224)"
2076
- }
2077
- })), jt = ({ answers: e, canDrag: t, containerStyle: n, draggingElement: r, onDragAnswerBegin: i, onDragAnswerEnd: o, showDashedBorder: s, responseAreaFill: c, responseContainerPadding: l = "10px", imageDropTargetPadding: u, answerChoiceTransparency: d, maxResponsePerZone: f, onDrop: p, index: m }) => {
2078
- let [h, g] = A(!1), _ = k(null), v = k(null), { setNodeRef: y, isOver: b } = S({
2079
- id: `response-container-${m}`,
2080
- data: {
2081
- containerIndex: m,
2082
- onDrop: p
2083
- }
2084
- });
2085
- O(() => {
2086
- let e = _.current;
2087
- if (!e) return;
2088
- let t = (e) => {
2089
- e.preventDefault();
2090
- };
2091
- return e.addEventListener("touchstart", t, { passive: !1 }), () => {
2092
- e.removeEventListener("touchstart", t);
2093
- };
2094
- }, []);
2095
- let x = !!r.id;
2096
- return /* @__PURE__ */ j(At, {
2097
- ref: (e) => {
2098
- _.current = e, y(e);
2099
- },
2100
- className: a({
2101
- "is-over": b,
2102
- dashed: s && !x,
2103
- active: x
2104
- }),
2105
- style: {
2106
- padding: f === 1 ? "0" : l,
2107
- ...n,
2108
- ...c && !x && { backgroundColor: c }
2109
- },
2110
- children: e.length ? /* @__PURE__ */ j(kt, {
2111
- ref: (e) => {
2112
- v.current = e?.getBoundingClientRect().height;
2113
- },
2114
- children: e.map((e) => /* @__PURE__ */ j(Q, {
2115
- data: e,
2116
- canDrag: t,
2117
- onDragBegin: () => i(e),
2118
- onDragEnd: o,
2119
- answerChoiceTransparency: d,
2120
- containerStyle: { padding: u || (h ? "2px" : "6px 10px") }
2121
- }, e.id))
2122
- }) : null
2123
- });
2124
- };
2125
- jt.propTypes = {
2126
- answer: N.default.object,
2127
- answers: N.default.array,
2128
- canDrag: N.default.bool.isRequired,
2129
- containerStyle: N.default.object.isRequired,
2130
- draggingElement: N.default.object.isRequired,
2131
- onDragAnswerBegin: N.default.func.isRequired,
2132
- onDragAnswerEnd: N.default.func.isRequired,
2133
- onDrop: N.default.func.isRequired,
2134
- showDashedBorder: N.default.bool,
2135
- responseAreaFill: N.default.string,
2136
- answerChoiceTransparency: N.default.bool,
2137
- responseContainerPadding: N.default.string,
2138
- imageDropTargetPadding: N.default.string,
2139
- maxResponsePerZone: N.default.number
2140
- };
2141
- //#endregion
2142
- //#region src/delivery/image-container.tsx
2143
- var Mt = g("div")(({ theme: e }) => ({
2144
- margin: e.spacing(2),
2145
- position: "relative",
2146
- width: "fit-content"
2147
- })), Nt = class extends ne {
2148
- render() {
2149
- let { answers: e, canDrag: t, draggingElement: n, image: { height: r, src: i, width: a } = {}, onAnswerSelect: o, onDragAnswerBegin: s, onDragAnswerEnd: c, responseContainers: l, showDashedBorder: u, responseAreaFill: d, answerChoiceTransparency: f, responseContainerPadding: p, imageDropTargetPadding: m, maxResponsePerZone: h } = this.props;
2150
- return /* @__PURE__ */ M(Mt, { children: [/* @__PURE__ */ j("img", {
2151
- src: i,
2152
- height: r,
2153
- width: a
2154
- }), (l || []).map((i, l) => {
2155
- let g = i.height.replace("%", "") / 100 * r, _ = i.width.replace("%", "") / 100 * a, v = i.x / 100 * a, y = i.y / 100 * r;
2156
- return /* @__PURE__ */ j(jt, {
2157
- answers: e.filter((e) => e.containerIndex === i.index),
2158
- canDrag: t,
2159
- containerStyle: {
2160
- height: g,
2161
- width: _,
2162
- left: v,
2163
- top: y
2164
- },
2165
- draggingElement: n,
2166
- index: i.index,
2167
- onDrop: (e) => o(e, i.index),
2168
- onDragAnswerBegin: s,
2169
- onDragAnswerEnd: c,
2170
- showDashedBorder: u,
2171
- responseAreaFill: d,
2172
- answerChoiceTransparency: f,
2173
- responseContainerPadding: p,
2174
- imageDropTargetPadding: m,
2175
- maxResponsePerZone: h
2176
- }, i.id + l);
2177
- })] });
2178
- }
2179
- };
2180
- Nt.propTypes = {
2181
- answers: N.default.array.isRequired,
2182
- canDrag: N.default.bool.isRequired,
2183
- draggingElement: N.default.shape({}).isRequired,
2184
- image: N.default.object.isRequired,
2185
- onAnswerSelect: N.default.func.isRequired,
2186
- onDragAnswerBegin: N.default.func.isRequired,
2187
- onDragAnswerEnd: N.default.func.isRequired,
2188
- responseContainers: N.default.array.isRequired,
2189
- showDashedBorder: N.default.bool,
2190
- answerChoiceTransparency: N.default.bool,
2191
- responseAreaFill: N.default.string,
2192
- responseContainerPadding: N.default.string,
2193
- imageDropTargetPadding: N.default.string,
2194
- maxResponsePerZone: N.default.number
2195
- };
2196
- //#endregion
2197
- //#region src/delivery/interactive-section.tsx
2198
- var Pt = g("div")(({ theme: e }) => ({
2199
- marginTop: e.spacing(2),
2200
- display: "flex",
2201
- width: "fit-content",
2202
- "&.default": { border: `1px solid ${l.disabled()}` },
2203
- "&.correct": { border: `2px solid ${l.correct()}` },
2204
- "&.incorrect": { border: `2px solid ${l.incorrect()}` }
2205
- })), Ft = class extends D.Component {
2206
- getClassname() {
2207
- let { responseCorrect: e } = this.props, t;
2208
- switch (e) {
2209
- case void 0:
2210
- t = "default";
2211
- break;
2212
- case !0:
2213
- t = "correct";
2214
- break;
2215
- default:
2216
- t = "incorrect";
2217
- break;
2218
- }
2219
- return t;
2220
- }
2221
- getPositionDirection(e) {
2222
- let t;
2223
- switch (e) {
2224
- case "left":
2225
- t = "row-reverse";
2226
- break;
2227
- case "right":
2228
- t = "row";
2229
- break;
2230
- case "top":
2231
- t = "column-reverse";
2232
- break;
2233
- default:
2234
- t = "column";
2235
- break;
2236
- }
2237
- return t;
2238
- }
2239
- render() {
2240
- let { children: e, responseCorrect: t, uiStyle: n } = this.props, r = this.getClassname(), { possibilityListPosition: i = "bottom" } = n || {};
2241
- return /* @__PURE__ */ M(Pt, {
2242
- className: r,
2243
- style: { flexDirection: this.getPositionDirection(i) },
2244
- children: [/* @__PURE__ */ j(Z, {
2245
- containerStyle: {
2246
- display: "flex",
2247
- margin: "0 auto",
2248
- marginTop: -14
2249
- },
2250
- filled: !0,
2251
- isCorrect: t
2252
- }), e]
2253
- });
2254
- }
2255
- };
2256
- Ft.propTypes = {
2257
- children: N.default.oneOfType([N.default.element, N.default.array]).isRequired,
2258
- responseCorrect: N.default.oneOfType([N.default.bool, N.default.number]),
2259
- uiStyle: N.default.object
2260
- }, Ft.defaultProps = { responseCorrect: void 0 };
2261
- //#endregion
2262
- //#region src/delivery/possible-responses.tsx
2263
- var It = g("div")(({ theme: e }) => ({
2264
- backgroundColor: l.background(),
2265
- padding: e.spacing(2),
2266
- display: "flex",
2267
- alignItems: "center",
2268
- width: "fit-content"
2269
- })), Lt = ({ canDrag: e, data: t, onDragBegin: n, answerChoiceTransparency: r, customStyle: i, isVertical: a, minHeight: o }) => /* @__PURE__ */ j(It, {
2270
- style: i,
2271
- children: /* @__PURE__ */ j(pe, {
2272
- id: "ica-board",
2273
- disabled: !e,
2274
- isVerticalPool: a,
2275
- minHeight: o,
2276
- children: (t || []).map((t) => /* @__PURE__ */ j(Q, {
2277
- canDrag: e,
2278
- data: t,
2279
- onDragBegin: n,
2280
- answerChoiceTransparency: r,
2281
- containerStyle: { margin: "4px" }
2282
- }, t.id))
2283
- })
2284
- });
2285
- Lt.propTypes = {
2286
- canDrag: N.default.bool.isRequired,
2287
- data: N.default.array.isRequired,
2288
- onDragBegin: N.default.func.isRequired,
2289
- answerChoiceTransparency: N.default.bool,
2290
- customStyle: N.default.object,
2291
- isVertical: N.default.bool,
2292
- minHeight: N.default.number
2293
- };
2294
- //#endregion
2295
- //#region src/delivery/utils-correctness.ts
2296
- var Rt = E(), zt = (e, t) => (e || []).map((e) => ({
2297
- ...e,
2298
- isCorrect: (t[e.containerIndex] && t[e.containerIndex].images || []).includes(e.value)
2299
- })), Bt = (e, t) => (t[e.containerIndex].images || []).filter((t) => t === e.value), Vt = (e, t) => {
2300
- let n = e;
2301
- return e.forEach((r) => {
2302
- let i = e.filter((e) => e.value === r.value && e.containerIndex === r.containerIndex);
2303
- i.length > 1 && (i.shift(), i.forEach((e, r) => {
2304
- n = (n || []).map((n) => {
2305
- if (n.id === e.id) {
2306
- let e = Bt(n, t);
2307
- return {
2308
- ...n,
2309
- isCorrect: e.length > r + 1
2310
- };
2311
- }
2312
- return n;
2313
- });
2314
- }));
2315
- }), n;
2316
- }, Ht = (e, t) => {
2317
- let { validResponse: { value: n } = {} } = (0, Rt.camelizeKeys)(t);
2318
- return (n || []).reduce((t, n, r) => {
2319
- let i = !!e.find((e) => e.containerIndex === r);
2320
- return n.images = n.images || [], i ? t : [...t, {
2321
- id: `unanswered-${r}`,
2322
- value: n.images[0] || "",
2323
- containerIndex: r,
2324
- isCorrect: n.images.length ? !1 : void 0,
2325
- hidden: !0
2326
- }];
2327
- }, []);
2328
- }, Ut = (e, t) => {
2329
- let { validResponse: { value: n }, altResponses: r } = (0, Rt.camelizeKeys)(t), i = Vt(zt(e, n), n);
2330
- return i.filter((e) => e.isCorrect).length < i.length && r && r.length ? (r || []).map((t) => {
2331
- let n = t.value;
2332
- return Vt(zt(e, n), n);
2333
- }).sort((e, t) => t.filter((e) => e.isCorrect).length - e.filter((e) => e.isCorrect).length)[0] : i;
2334
- };
2335
- //#endregion
2336
- //#region src/delivery/root.tsx
2337
- function Wt(e) {
2338
- return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
2339
- }
2340
- function $(e, t) {
2341
- return !e || Wt(e) ? e : Wt(e.default) ? e.default : t && Wt(e[t]) ? e[t] : t && Wt(e[t]?.default) ? e[t].default : e;
2342
- }
2343
- var Gt = $(i, "UiLayout") || $(Xt.UiLayout, "UiLayout"), Kt = $(te, "PreviewPrompt") || $(Xt.PreviewPrompt, "PreviewPrompt"), qt = $(c, "Collapsible") || $(Xt.Collapsible, "Collapsible"), Jt = w, Yt = Jt.default, Xt = Yt && typeof Yt == "object" ? Yt : Jt, { translator: Zt } = ut, Qt = () => Math.random().toString(36).substring(2) + (/* @__PURE__ */ new Date()).getTime().toString(36), $t = g(Gt)({
2344
- color: l.text(),
2345
- backgroundColor: l.background(),
2346
- position: "relative",
2347
- "& img": {
2348
- maxWidth: "100%",
2349
- height: "auto"
2350
- }
2351
- }), en = g(qt)(({ theme: e }) => ({ marginBottom: e.spacing(2) })), tn = g(qt)(({ theme: e }) => ({ marginTop: e.spacing(2) })), nn = class extends D.Component {
2352
- constructor(t) {
2353
- super(t);
2354
- let { model: { possibleResponses: r, responseContainers: i, duplicateResponses: a, maxResponsePerZone: o }, session: s } = t, { answers: c } = s || {}, l = (r || []).map((e, t) => ({
2355
- value: e,
2356
- id: `${t}`
2357
- }));
2358
- c = n(e(c || [], "containerIndex"), (e) => e.slice(-(o || 1))).map((e, t) => ({
2359
- ...e,
2360
- id: `${t}`
2361
- })).filter((e) => e.containerIndex < i.length);
2362
- let u = l.filter((e) => !c.find((t) => t.value === e.value));
2363
- this.state = {
2364
- answers: c || [],
2365
- draggingElement: {
2366
- id: "",
2367
- value: ""
2368
- },
2369
- possibleResponses: a ? l : u,
2370
- responseContainers: (i || []).map((e, t) => ({
2371
- index: t,
2372
- ...e,
2373
- id: `${t}`
2374
- })),
2375
- maxResponsePerZone: o || 1,
2376
- showCorrect: !1,
2377
- isValidDrop: !1
2378
- };
2379
- }
2380
- onDragStart = (e) => {
2381
- let { active: t } = e;
2382
- t?.data?.current && this.setState({
2383
- draggingElement: t.data.current,
2384
- isValidDrop: !1
2385
- });
2386
- };
2387
- onDragEnd = (e) => {
2388
- let { active: t, over: n } = e, { model: r } = this.props, { duplicateResponses: i } = r || {}, a = t?.data?.current, o = n?.data?.current, s = n && t && a && o && o.containerIndex !== void 0 && i;
2389
- if (this.setState({
2390
- draggingElement: {
2391
- id: "",
2392
- value: ""
2393
- },
2394
- isValidDrop: s
2395
- }), !(!n || !t) && a) {
2396
- if (n.id === "ica-board") {
2397
- this.handleOnAnswerRemove(a);
2398
- return;
2399
- }
2400
- o && this.handleOnAnswerSelect(a, o.containerIndex);
2401
- }
2402
- };
2403
- renderDragOverlay = () => {
2404
- let { draggingElement: e } = this.state, { model: t } = this.props;
2405
- if (!e.id) return null;
2406
- let n = /<img[^>]+src="([^">]+)"/.test(e.value);
2407
- return /* @__PURE__ */ j(Q, {
2408
- canDrag: !1,
2409
- data: e,
2410
- onDragBegin: () => {},
2411
- isOverlay: !0,
2412
- containerStyle: {
2413
- ...t.answerChoiceTransparency ? { opacity: "0.8" } : {},
2414
- ...n ? {} : {
2415
- padding: "0 10px",
2416
- margin: "4px 6px !important"
2417
- }
2418
- }
2419
- }, e.id);
2420
- };
2421
- filterPossibleAnswers = (e, t) => e.filter((e) => e.value !== t.value);
2422
- handleOnAnswerSelect = (e, t) => {
2423
- let { model: { duplicateResponses: n }, updateAnswer: r } = this.props, { answers: i, maxResponsePerZone: a } = this.state, { possibleResponses: o } = this.state, s, c = [], l = [];
2424
- if (i.forEach((e) => {
2425
- e.containerIndex === t ? c.push(e) : l.push(e);
2426
- }), a === c.length) {
2427
- let r = c[0];
2428
- if (a === 1) c.shift();
2429
- else {
2430
- this.setState({ maxResponsePerZoneWarning: !0 });
2431
- return;
2432
- }
2433
- n || (o = Array.isArray(o) ? o : [], o.push({
2434
- ...r,
2435
- containerIndex: void 0,
2436
- id: r.id || Qt()
2437
- })), s = [
2438
- ...c,
2439
- ...l.filter((t) => n ? !0 : t.value !== e.value),
2440
- {
2441
- ...e,
2442
- containerIndex: t,
2443
- ...n ? { id: Qt() } : {}
2444
- }
2445
- ];
2446
- } else s = [...i.filter((t) => n ? t.id !== e.id : t.value !== e.value), {
2447
- ...e,
2448
- containerIndex: t,
2449
- ...n ? { id: Qt() } : {}
2450
- }];
2451
- this.setState({
2452
- maxResponsePerZoneWarning: !1,
2453
- answers: s,
2454
- possibleResponses: n ? o : this.filterPossibleAnswers(o, e)
2455
- }), r(s);
2456
- };
2457
- handleOnAnswerRemove = (e) => {
2458
- let { model: { duplicateResponses: t }, updateAnswer: n } = this.props, { answers: r, possibleResponses: i } = this.state, a = r.filter((t) => t.id !== e.id), o = e.containerIndex === void 0;
2459
- this.setState({
2460
- maxResponsePerZoneWarning: !1,
2461
- answers: a,
2462
- possibleResponses: t || o ? i : [...i, {
2463
- ...e,
2464
- containerIndex: void 0
2465
- }]
2466
- }), n(a);
2467
- };
2468
- toggleCorrect = (e) => this.setState({ showCorrect: e });
2469
- render() {
2470
- let { model: { disabled: e, duplicateResponses: t, extraCSSRules: n, image: r, responseAreaFill: i, stimulus: a, responseCorrect: o, validation: s, teacherInstructions: c, prompt: l, autoplayAudioEnabled: u, showDashedBorder: f, mode: p, rationale: m, language: g, uiStyle: _ = {}, answerChoiceTransparency: v, responseContainerPadding: y, imageDropTargetPadding: b, fontSizeFactor: x, customAudioButton: S } } = this.props, { answers: C, draggingElement: w, possibleResponses: T, responseContainers: te, maxResponsePerZone: E, maxResponsePerZoneWarning: ne, showCorrect: O, isValidDrop: k } = this.state, A = p === "evaluate" && !o, { possibilityListPosition: re = "bottom" } = _ || {}, N = re === "left" || re === "right", { validResponse: P } = s || {}, F = [], ie = m && (d(m) || h(m)), I = c && (d(c) || h(c));
2471
- P && (P.value || []).forEach((e, t) => {
2472
- (e.images || []).forEach((e) => {
2473
- F.push({
2474
- value: e,
2475
- containerIndex: t,
2476
- isCorrect: !0
2477
- });
2478
- });
2479
- });
2480
- let ae = Zt.t("imageClozeAssociation.reachedLimit_other", {
2481
- lng: g,
2482
- count: E
2483
- }), L = o === void 0 ? C : Ut(C, s, t);
2484
- o === !1 && E === 1 && (L = [...L, ...Ht(L, s)]);
2485
- let oe = {
2486
- draggingElement: w,
2487
- duplicateResponses: t,
2488
- image: r,
2489
- onAnswerSelect: this.handleOnAnswerSelect,
2490
- onDragAnswerBegin: this.onDragStart,
2491
- onDragAnswerEnd: this.onDragEnd,
2492
- responseContainers: te,
2493
- showDashedBorder: f,
2494
- responseAreaFill: i,
2495
- responseContainerPadding: y,
2496
- imageDropTargetPadding: b,
2497
- maxResponsePerZone: E
2498
- };
2499
- return /* @__PURE__ */ M(ue, {
2500
- onDragStart: this.onDragStart,
2501
- onDragEnd: this.onDragEnd,
2502
- children: [/* @__PURE__ */ M($t, {
2503
- extraCSSRules: n,
2504
- id: "main-container",
2505
- fontSizeFactor: x,
2506
- children: [
2507
- I && /* @__PURE__ */ j(en, {
2508
- labels: {
2509
- hidden: "Show Teacher Instructions",
2510
- visible: "Hide Teacher Instructions"
2511
- },
2512
- children: /* @__PURE__ */ j(Kt, { prompt: c })
2513
- }),
2514
- /* @__PURE__ */ j(Kt, {
2515
- className: "prompt",
2516
- prompt: l,
2517
- autoplayAudioEnabled: u,
2518
- customAudioButton: S
2519
- }),
2520
- /* @__PURE__ */ j(Kt, { prompt: a }),
2521
- /* @__PURE__ */ j(St, {
2522
- show: A,
2523
- toggled: O,
2524
- onToggle: this.toggleCorrect,
2525
- language: g
2526
- }),
2527
- /* @__PURE__ */ M(Ft, {
2528
- responseCorrect: O && A ? !0 : o,
2529
- uiStyle: _,
2530
- children: [/* @__PURE__ */ j(Nt, {
2531
- ...oe,
2532
- canDrag: O && A ? !1 : !e,
2533
- answers: O && A ? F : L,
2534
- answerChoiceTransparency: O && A ? void 0 : v
2535
- }), O && A ? null : /* @__PURE__ */ M(D.Fragment, { children: [ne && /* @__PURE__ */ j(on, { message: ae }), /* @__PURE__ */ j(Lt, {
2536
- canDrag: !e,
2537
- data: T,
2538
- onAnswerRemove: this.handleOnAnswerRemove,
2539
- onDragBegin: this.onDragStart,
2540
- answerChoiceTransparency: v,
2541
- customStyle: { minWidth: N ? "130px" : r?.width || "fit-content" },
2542
- isVertical: N,
2543
- minHeight: N ? r?.height : void 0
2544
- })] })]
2545
- }),
2546
- ie && /* @__PURE__ */ j(tn, {
2547
- labels: {
2548
- hidden: "Show Rationale",
2549
- visible: "Hide Rationale"
2550
- },
2551
- children: /* @__PURE__ */ j(Kt, { prompt: m })
2552
- })
2553
- ]
2554
- }), /* @__PURE__ */ j(ee, {
2555
- dropAnimation: k ? null : void 0,
2556
- children: this.renderDragOverlay()
2557
- })]
2558
- });
2559
- }
2560
- }, rn = g("div")(({ theme: e }) => ({
2561
- margin: `0 ${e.spacing(2)}`,
2562
- backgroundColor: "#dddddd",
2563
- padding: e.spacing(1),
2564
- display: "flex",
2565
- alignItems: "center",
2566
- "& svg": { height: "30px" },
2567
- "& h1": {
2568
- padding: "0px",
2569
- margin: "0px"
2570
- }
2571
- })), an = g("span")(({ theme: e }) => ({
2572
- paddingLeft: e.spacing(.5),
2573
- userSelect: "none"
2574
- })), on = ({ message: e }) => {
2575
- let t = D.useRef(null);
2576
- return /* @__PURE__ */ j(m, { children: /* @__PURE__ */ j(x, {
2577
- classNames: "fb",
2578
- timeout: 300,
2579
- nodeRef: t,
2580
- children: /* @__PURE__ */ M(rn, {
2581
- ref: t,
2582
- children: [/* @__PURE__ */ j(me, {
2583
- color: "secondary",
2584
- fontSize: "small"
2585
- }), /* @__PURE__ */ j(an, { dangerouslySetInnerHTML: { __html: e } })]
2586
- }, "panel")
2587
- }, "fb") });
2588
- };
2589
- on.propTypes = { message: N.default.string }, nn.propTypes = {
2590
- model: N.default.object.isRequired,
2591
- session: N.default.object,
2592
- updateAnswer: N.default.func.isRequired
2593
- };
2594
- //#endregion
2595
- //#region src/delivery/index.ts
2596
- function sn(e) {
2597
- return typeof e == "function" || typeof e == "object" && !!e && typeof e.$$typeof == "symbol";
2598
- }
2599
- function cn(e, t) {
2600
- return !e || sn(e) ? e : sn(e.default) ? e.default : t && sn(e[t]) ? e[t] : t && sn(e[t]?.default) ? e[t].default : e;
2601
- }
2602
- var ln = cn("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAJYAyADAREAAhEBAxEB/8QAHgABAQABBQEBAQAAAAAAAAAAAAEIAgMGBwkEBQr/xABiEAACAQIDBAMKCAYMCgYLAQAAAQIDEQQFIQYSMUEHCFETFRYiUmFxkdHhCRRjgaGisfAXMjRTcsEjJDY4QmJ1dpKztMQYMzdEVIKyw9PxQ1hmc3SWJzVFRlZXhJOUldJk/8QAGwEBAQADAQEBAAAAAAAAAAAAAAcEBQYCAQP/xABBEQEAAQIDAgkJBgUFAQEBAAAAAQIDBAYRBSESMUFEYXGCscITNDVRcoGRocEUIjJS0eEVI2KSsjNCU6LwFtLx/9oADAMBAAIRAxEAPwD1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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", "EnableAudioAutoplayImage") || cn(fn.EnableAudioAutoplayImage, "EnableAudioAutoplayImage"), un = w, dn = un.default, fn = dn && typeof dn == "object" ? dn : un, pn = class extends HTMLElement {
2603
- constructor() {
2604
- super(), this._root = null;
2605
- }
2606
- set model(e) {
2607
- this._model = e, this.dispatchEvent(new ae(this.tagName.toLowerCase(), this.isComplete(), !!this._model)), this._render();
2608
- }
2609
- isComplete() {
2610
- let { autoplayAudioEnabled: e, completeAudioEnabled: t, completeResponses: n, duplicateResponses: r, hasUnplacedChoices: i, maxResponsePerZone: a, responseAreasToBeFilled: o } = this._model || {}, s = this;
2611
- if (e && t && !this.audioComplete && s) {
2612
- let e = s.querySelector("audio"), t = e && e.closest("#preview-prompt");
2613
- if (e && t) return !1;
2614
- }
2615
- if (!this._session || !this._session.answers) return !1;
2616
- let { answers: c } = this._session;
2617
- if (!Array.isArray(c)) return !1;
2618
- let l = [...new Map(c.map((e) => [e.containerIndex, e])).values()].length >= o;
2619
- if (a > 1) {
2620
- if (r || i) return l;
2621
- let e = c.map((e) => e.value);
2622
- return n.some((t) => t.every((t) => e.includes(t)));
2623
- }
2624
- return l;
2625
- }
2626
- set session(e) {
2627
- e && !e.answers && (e.answers = []), this._session = e, this._render();
2628
- }
2629
- get session() {
2630
- return this._session;
2631
- }
2632
- updateAnswer(e) {
2633
- this._session.answers = e, this._session.selector = "Mouse", this.dispatchEvent(new L(this.tagName.toLowerCase(), this.isComplete())), this._render();
2634
- }
2635
- _createAudioInfoToast() {
2636
- let e = document.createElement("div");
2637
- e.id = "play-audio-info", Object.assign(e.style, {
2638
- position: "absolute",
2639
- top: 0,
2640
- width: "100%",
2641
- height: "100%",
2642
- display: "flex",
2643
- justifyContent: "center",
2644
- alignItems: "center",
2645
- background: "white",
2646
- zIndex: "1000",
2647
- cursor: "pointer"
2648
- });
2649
- let t = document.createElement("img");
2650
- return t.src = ln, t.alt = "Click anywhere to enable audio autoplay", t.width = 500, t.height = 300, e.appendChild(t), e;
2651
- }
2652
- connectedCallback() {
2653
- this._render(), new MutationObserver((e, t) => {
2654
- e.forEach((e) => {
2655
- if (e.type === "childList") {
2656
- let e = this.querySelector("audio"), n = e && e.closest("#preview-prompt");
2657
- if (!this._model || !this._model.autoplayAudioEnabled || e && !n || !e) return;
2658
- let r = this._createAudioInfoToast(), i = this.querySelector("#main-container"), a = () => {
2659
- this.querySelector("#play-audio-info") && (e.play(), i.removeChild(r)), document.removeEventListener("click", a);
2660
- };
2661
- setTimeout(() => {
2662
- e.paused && !this.querySelector("#play-audio-info") ? (i.appendChild(r), document.addEventListener("click", a)) : document.removeEventListener("click", a);
2663
- }, 500);
2664
- let o = () => {
2665
- let t = this.querySelector("#play-audio-info");
2666
- t && i.removeChild(t), e.removeEventListener("playing", o);
2667
- };
2668
- e.addEventListener("playing", o);
2669
- let s = () => {
2670
- this.audioComplete = !0, this.dispatchEvent(new L(this.tagName.toLowerCase(), this.isComplete())), e.removeEventListener("ended", s);
2671
- };
2672
- e.addEventListener("ended", s), this._audio = e, this._handlePlaying = o, this._handleEnded = s, this._enableAudio = a, t.disconnect();
2673
- }
2674
- });
2675
- }).observe(this, {
2676
- childList: !0,
2677
- subtree: !0
2678
- });
2679
- }
2680
- disconnectedCallback() {
2681
- 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();
2682
- }
2683
- _render() {
2684
- if (this._model && this._session) {
2685
- let e = D.createElement(nn, {
2686
- model: this._model,
2687
- session: this._session,
2688
- updateAnswer: this.updateAnswer.bind(this)
2689
- });
2690
- this._root ||= re(this), this._root.render(e), queueMicrotask(() => {
2691
- o(this);
2692
- });
2693
- }
2694
- }
2695
- };
2696
- //#endregion
2697
- export { pn as default };
2698
-
2699
- //# sourceMappingURL=index.js.map