@citolab/qti-components 7.14.3 → 7.15.0

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 (146) hide show
  1. package/cdn/index.global.js +1 -1
  2. package/cdn/index.js +4044 -4030
  3. package/custom-elements.json +10478 -26460
  4. package/dist/base.d.ts +8 -0
  5. package/dist/base.js +50 -0
  6. package/dist/{chunks/chunk-DGBI4IU5.js → chunk-2DOYPVF5.js} +252 -136
  7. package/dist/chunk-2DOYPVF5.js.map +1 -0
  8. package/dist/chunk-2ZEJ3RR5.js +89 -0
  9. package/dist/chunk-2ZEJ3RR5.js.map +1 -0
  10. package/dist/{chunks/chunk-E4GR4K26.js → chunk-352OTVTY.js} +1481 -442
  11. package/dist/chunk-352OTVTY.js.map +1 -0
  12. package/dist/{chunks/chunk-C4ELTNV7.js → chunk-C2HQFI2C.js} +857 -3819
  13. package/dist/chunk-C2HQFI2C.js.map +1 -0
  14. package/dist/chunk-DWIRLYDS.js +20 -0
  15. package/dist/chunk-DWIRLYDS.js.map +1 -0
  16. package/dist/{chunks/chunk-H2JE6IVU.js → chunk-EUXUH3YW.js} +1 -1
  17. package/dist/chunk-F44CI35W.js +145 -0
  18. package/dist/chunk-F44CI35W.js.map +1 -0
  19. package/dist/{chunks/chunk-XBPO6E25.js → chunk-INKI27D5.js} +6 -5
  20. package/dist/chunk-INKI27D5.js.map +1 -0
  21. package/dist/chunk-JEUY3MYB.js +2010 -0
  22. package/dist/chunk-JEUY3MYB.js.map +1 -0
  23. package/dist/chunk-O4XIWHTF.js +1139 -0
  24. package/dist/chunk-O4XIWHTF.js.map +1 -0
  25. package/dist/chunk-RI47B4ZT.js +1753 -0
  26. package/dist/chunk-RI47B4ZT.js.map +1 -0
  27. package/dist/{qti-loader/index.js → chunk-VEV4DGPH.js} +6 -6
  28. package/dist/chunk-VEV4DGPH.js.map +1 -0
  29. package/dist/{chunks/chunk-TN75CWLX.js → chunk-W4SQRNWO.js} +97 -2
  30. package/dist/chunk-W4SQRNWO.js.map +1 -0
  31. package/dist/elements.d.ts +1 -0
  32. package/dist/elements.js +42 -0
  33. package/dist/index.d.ts +8 -24
  34. package/dist/index.js +117 -285
  35. package/dist/index.js.map +1 -1
  36. package/dist/interactions.d.ts +1 -0
  37. package/dist/interactions.js +72 -0
  38. package/dist/item.d.ts +1 -0
  39. package/dist/item.js +23 -0
  40. package/dist/loader.d.ts +1 -0
  41. package/dist/loader.js +11 -0
  42. package/dist/processing.d.ts +1 -0
  43. package/dist/processing.js +103 -0
  44. package/dist/qti-components-jsx.d.ts +1475 -2388
  45. package/dist/test.d.ts +1 -0
  46. package/dist/{qti-test/index.js → test.js} +11 -19
  47. package/dist/transformers.d.ts +1 -0
  48. package/dist/{qti-transformers/index.js → transformers.js} +3 -3
  49. package/dist/vscode.html-custom-data.json +469 -631
  50. package/package.json +70 -166
  51. package/LICENSE.md +0 -674
  52. package/dist/chunks/chunk-4OGJBG35.js +0 -8
  53. package/dist/chunks/chunk-4OGJBG35.js.map +0 -1
  54. package/dist/chunks/chunk-AGV5GOTF.js +0 -234
  55. package/dist/chunks/chunk-AGV5GOTF.js.map +0 -1
  56. package/dist/chunks/chunk-BHJSX3Q6.js +0 -8
  57. package/dist/chunks/chunk-BHJSX3Q6.js.map +0 -1
  58. package/dist/chunks/chunk-C4ELTNV7.js.map +0 -1
  59. package/dist/chunks/chunk-C5RLRG3L.js +0 -10
  60. package/dist/chunks/chunk-C5RLRG3L.js.map +0 -1
  61. package/dist/chunks/chunk-CJADUWEC.js +0 -10
  62. package/dist/chunks/chunk-CJADUWEC.js.map +0 -1
  63. package/dist/chunks/chunk-DGBI4IU5.js.map +0 -1
  64. package/dist/chunks/chunk-DVQQ7I6Y.js +0 -8
  65. package/dist/chunks/chunk-DVQQ7I6Y.js.map +0 -1
  66. package/dist/chunks/chunk-E4GR4K26.js.map +0 -1
  67. package/dist/chunks/chunk-ELDMXTUQ.js +0 -31
  68. package/dist/chunks/chunk-ELDMXTUQ.js.map +0 -1
  69. package/dist/chunks/chunk-GAAFN7QF.js +0 -146
  70. package/dist/chunks/chunk-GAAFN7QF.js.map +0 -1
  71. package/dist/chunks/chunk-H6KHXSIO.js +0 -8
  72. package/dist/chunks/chunk-H6KHXSIO.js.map +0 -1
  73. package/dist/chunks/chunk-JQ6HWGRY.js +0 -22
  74. package/dist/chunks/chunk-JQ6HWGRY.js.map +0 -1
  75. package/dist/chunks/chunk-NJNQOQUU.js +0 -8
  76. package/dist/chunks/chunk-NJNQOQUU.js.map +0 -1
  77. package/dist/chunks/chunk-P4QBOVQ2.js +0 -206
  78. package/dist/chunks/chunk-P4QBOVQ2.js.map +0 -1
  79. package/dist/chunks/chunk-SV4K25ZI.js +0 -19
  80. package/dist/chunks/chunk-SV4K25ZI.js.map +0 -1
  81. package/dist/chunks/chunk-TN75CWLX.js.map +0 -1
  82. package/dist/chunks/chunk-XBPO6E25.js.map +0 -1
  83. package/dist/exports/computed-item.context.d.ts +0 -23
  84. package/dist/exports/computed-item.context.js +0 -8
  85. package/dist/exports/computed.context.d.ts +0 -34
  86. package/dist/exports/computed.context.js +0 -8
  87. package/dist/exports/config.context.d.ts +0 -14
  88. package/dist/exports/config.context.js +0 -8
  89. package/dist/exports/expression-result.d.ts +0 -19
  90. package/dist/exports/expression-result.js +0 -1
  91. package/dist/exports/interaction.d.ts +0 -46
  92. package/dist/exports/interaction.interface.d.ts +0 -13
  93. package/dist/exports/interaction.interface.js +0 -1
  94. package/dist/exports/interaction.js +0 -12
  95. package/dist/exports/item.context.d.ts +0 -11
  96. package/dist/exports/item.context.js +0 -8
  97. package/dist/exports/qti-assessment-item.context.d.ts +0 -9
  98. package/dist/exports/qti-assessment-item.context.js +0 -8
  99. package/dist/exports/qti-condition-expression.d.ts +0 -14
  100. package/dist/exports/qti-condition-expression.js +0 -11
  101. package/dist/exports/qti-condition-expression.js.map +0 -1
  102. package/dist/exports/qti-expression.d.ts +0 -23
  103. package/dist/exports/qti-expression.js +0 -10
  104. package/dist/exports/qti-expression.js.map +0 -1
  105. package/dist/exports/qti-test.d.ts +0 -12
  106. package/dist/exports/qti-test.js +0 -1
  107. package/dist/exports/qti-test.js.map +0 -1
  108. package/dist/exports/qti.context.d.ts +0 -14
  109. package/dist/exports/qti.context.js +0 -8
  110. package/dist/exports/qti.context.js.map +0 -1
  111. package/dist/exports/session.context.d.ts +0 -15
  112. package/dist/exports/session.context.js +0 -10
  113. package/dist/exports/session.context.js.map +0 -1
  114. package/dist/exports/test.context.d.ts +0 -16
  115. package/dist/exports/test.context.js +0 -10
  116. package/dist/exports/test.context.js.map +0 -1
  117. package/dist/exports/variables.d.ts +0 -2
  118. package/dist/exports/variables.js +0 -1
  119. package/dist/exports/variables.js.map +0 -1
  120. package/dist/qti-assessment-item-l-mN3teH.d.ts +0 -105
  121. package/dist/qti-components/index.d.ts +0 -1524
  122. package/dist/qti-components/index.js +0 -216
  123. package/dist/qti-components/index.js.map +0 -1
  124. package/dist/qti-item/index.d.ts +0 -114
  125. package/dist/qti-item/index.js +0 -19
  126. package/dist/qti-item/index.js.map +0 -1
  127. package/dist/qti-loader/index.d.ts +0 -21
  128. package/dist/qti-loader/index.js.map +0 -1
  129. package/dist/qti-modal-feedback-Cp3CHVKw.d.ts +0 -30
  130. package/dist/qti-test/index.d.ts +0 -480
  131. package/dist/qti-test/index.js.map +0 -1
  132. package/dist/qti-test-mmY8zNIj.d.ts +0 -120
  133. package/dist/qti-transform-test-Bz9A3hmD.d.ts +0 -63
  134. package/dist/qti-transformers/index.d.ts +0 -18
  135. package/dist/qti-transformers/index.js.map +0 -1
  136. package/dist/variables-BCkyLoXK.d.ts +0 -55
  137. package/readme.md +0 -59
  138. /package/dist/{chunks/chunk-H2JE6IVU.js.map → base.js.map} +0 -0
  139. /package/dist/{exports/computed-item.context.js.map → chunk-EUXUH3YW.js.map} +0 -0
  140. /package/dist/{exports/computed.context.js.map → elements.js.map} +0 -0
  141. /package/dist/{exports/config.context.js.map → interactions.js.map} +0 -0
  142. /package/dist/{exports/expression-result.js.map → item.js.map} +0 -0
  143. /package/dist/{exports/interaction.interface.js.map → loader.js.map} +0 -0
  144. /package/dist/{exports/interaction.js.map → processing.js.map} +0 -0
  145. /package/dist/{exports/item.context.js.map → test.js.map} +0 -0
  146. /package/dist/{exports/qti-assessment-item.context.js.map → transformers.js.map} +0 -0
@@ -0,0 +1,89 @@
1
+ // ../lit-utilities/src/decorators/watch.ts
2
+ function watch(propertyName, options) {
3
+ const resolvedOptions = {
4
+ waitUntilFirstUpdate: false,
5
+ ...options
6
+ };
7
+ return (proto, decoratedFnName) => {
8
+ const { update } = proto;
9
+ const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];
10
+ proto.update = function(changedProps) {
11
+ watchedProperties.forEach((property) => {
12
+ const key = property;
13
+ if (changedProps.has(key)) {
14
+ const oldValue = changedProps.get(key);
15
+ const newValue = this[key];
16
+ if (oldValue !== newValue) {
17
+ if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
18
+ this[decoratedFnName](oldValue, newValue);
19
+ }
20
+ }
21
+ }
22
+ });
23
+ update.call(this, changedProps);
24
+ };
25
+ };
26
+ }
27
+
28
+ // ../lit-utilities/src/decorators/live-query.ts
29
+ function liveQuery(querySelector, options) {
30
+ return (proto, decoratedFnName) => {
31
+ const { connectedCallback, disconnectedCallback } = proto;
32
+ proto.connectedCallback = function() {
33
+ connectedCallback.call(this);
34
+ const handler = this[decoratedFnName];
35
+ const callback = (mutationList) => {
36
+ const added = [];
37
+ const removed = [];
38
+ for (const m of mutationList) {
39
+ if (m.type !== "childList") continue;
40
+ m.addedNodes.forEach((n2) => {
41
+ if (n2.nodeType !== 1) return;
42
+ const el = n2;
43
+ if (el.matches?.(querySelector)) added.push(el);
44
+ added.push(...el.querySelectorAll?.(querySelector) ?? []);
45
+ });
46
+ m.removedNodes.forEach((n2) => {
47
+ if (n2.nodeType !== 1) return;
48
+ const el = n2;
49
+ if (el.matches?.(querySelector)) removed.push(el);
50
+ removed.push(...el.querySelectorAll?.(querySelector) ?? []);
51
+ });
52
+ }
53
+ const dedupe = (arr) => Array.from(new Set(arr));
54
+ const A = dedupe(added);
55
+ const R = dedupe(removed);
56
+ if (A.length || R.length) {
57
+ handler.call(this, A, R);
58
+ }
59
+ };
60
+ const obsLight = new MutationObserver(callback);
61
+ obsLight.observe(this, { childList: true, subtree: true });
62
+ const obsShadow = this.shadowRoot ? new MutationObserver(callback) : null;
63
+ obsShadow?.observe(this.shadowRoot, { childList: true, subtree: true });
64
+ this.__lqObservers = [obsLight, obsShadow].filter((o) => !!o);
65
+ const fireInitial = async () => {
66
+ if (options?.waitUntilFirstUpdate && "updateComplete" in this) {
67
+ await this.updateComplete;
68
+ }
69
+ const initial = [
70
+ ...this.querySelectorAll(querySelector),
71
+ ...this.shadowRoot?.querySelectorAll(querySelector) ?? []
72
+ ];
73
+ if (initial.length) handler.call(this, initial, []);
74
+ };
75
+ void fireInitial();
76
+ };
77
+ proto.disconnectedCallback = function() {
78
+ disconnectedCallback.call(this);
79
+ this.__lqObservers?.forEach((o) => o.disconnect());
80
+ this.__lqObservers = void 0;
81
+ };
82
+ };
83
+ }
84
+
85
+ export {
86
+ liveQuery,
87
+ watch
88
+ };
89
+ //# sourceMappingURL=chunk-2ZEJ3RR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../lit-utilities/src/decorators/watch.ts","../../lit-utilities/src/decorators/live-query.ts"],"sourcesContent":["import type { LitElement } from 'lit';\n\ntype UpdateHandler = (prev?: unknown, next?: unknown) => void;\n\ntype NonUndefined<A> = A extends undefined ? never : A;\n\nexport type UpdateHandlerFunctionKeys<T extends object> = {\n [K in keyof T]-?: NonUndefined<T[K]> extends UpdateHandler ? K : never;\n}[keyof T];\n\ninterface WatchOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\n/**\n * Runs when observed properties change, e.g. @property or @state, but before the component updates. To wait for an\n * update to complete after a change occurs, use `await this.updateComplete` in the handler. To start watching after the\n * initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n *\n * Usage:\n *\n * @watch('propName')\n * handlePropChange(oldValue, newValue) {\n * ...\n * }\n */\nexport function watch(propertyName: string | string[], options?: WatchOptions) {\n const resolvedOptions: Required<WatchOptions> = {\n waitUntilFirstUpdate: false,\n ...options\n };\n return <ElemClass extends LitElement>(\n proto: ElemClass,\n decoratedFnName: UpdateHandlerFunctionKeys<ElemClass> | any\n ) => {\n // @ts-expect-error - update is a protected property\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n\n // @ts-expect-error - update is a protected property\n proto.update = function (this: ElemClass, changedProps: Map<keyof ElemClass, ElemClass[keyof ElemClass]>) {\n watchedProperties.forEach(property => {\n const key = property as keyof ElemClass;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n ((this as any)[decoratedFnName] as unknown as UpdateHandler)(oldValue, newValue);\n }\n }\n }\n });\n\n update.call(this, changedProps);\n };\n };\n}\n","import type { LitElement } from 'lit';\n\ntype LiveQueryHandler = (added: Element[], removed: Element[]) => void;\ntype LiveQueryHandlerKeys<T extends object> = {\n [K in keyof T]-?: T[K] extends LiveQueryHandler ? K : never;\n}[keyof T];\n\ninterface LiveQueryOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\nexport function liveQuery(querySelector: string, options?: LiveQueryOptions) {\n return <ElemClass extends LitElement>(proto: ElemClass, decoratedFnName: LiveQueryHandlerKeys<ElemClass>): void => {\n const { connectedCallback, disconnectedCallback } = proto;\n\n proto.connectedCallback = function (this: ElemClass) {\n connectedCallback.call(this);\n\n const handler = this[decoratedFnName] as unknown as LiveQueryHandler;\n\n const callback = (mutationList: MutationRecord[]) => {\n const added: Element[] = [];\n const removed: Element[] = [];\n\n for (const m of mutationList) {\n if (m.type !== 'childList') continue;\n\n m.addedNodes.forEach(n => {\n if (n.nodeType !== 1) return;\n const el = n as Element;\n if (el.matches?.(querySelector)) added.push(el);\n added.push(...(el.querySelectorAll?.(querySelector) ?? []));\n });\n\n m.removedNodes.forEach(n => {\n if (n.nodeType !== 1) return;\n const el = n as Element;\n if (el.matches?.(querySelector)) removed.push(el);\n removed.push(...(el.querySelectorAll?.(querySelector) ?? []));\n });\n }\n\n // deduplicate added and removed (might be multiples since we observe both light and shadow DOM)\n const dedupe = (arr: Element[]) => Array.from(new Set(arr));\n const A = dedupe(added);\n const R = dedupe(removed);\n\n if (A.length || R.length) {\n handler.call(this, A, R);\n }\n };\n\n // observe both light and shadow DOM\n const obsLight = new MutationObserver(callback);\n obsLight.observe(this, { childList: true, subtree: true });\n\n const obsShadow = this.shadowRoot ? new MutationObserver(callback) : null;\n obsShadow?.observe(this.shadowRoot, { childList: true, subtree: true });\n\n (this as any).__lqObservers = [obsLight, obsShadow].filter((o): o is MutationObserver => !!o);\n\n const fireInitial = async () => {\n if (options?.waitUntilFirstUpdate && 'updateComplete' in this) {\n await (this as any).updateComplete;\n }\n const initial = [\n ...this.querySelectorAll(querySelector),\n ...(this.shadowRoot?.querySelectorAll(querySelector) ?? [])\n ] as Element[];\n if (initial.length) handler.call(this, initial, []);\n };\n\n void fireInitial();\n };\n\n proto.disconnectedCallback = function (this: ElemClass) {\n disconnectedCallback.call(this);\n (this as any).__lqObservers?.forEach((o: MutationObserver) => o.disconnect());\n (this as any).__lqObservers = undefined;\n };\n };\n}\n"],"mappings":"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","names":["n"]}