@longsightgroup/qti3-player 0.2.0 → 0.3.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.
- package/README.md +19 -0
- package/dist/icons.d.ts +8 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +45 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +3 -114
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4503
- package/dist/index.js.map +1 -1
- package/dist/interaction-support.d.ts +34 -0
- package/dist/interaction-support.d.ts.map +1 -0
- package/dist/interaction-support.js +189 -0
- package/dist/interaction-support.js.map +1 -0
- package/dist/movement.d.ts +3 -0
- package/dist/movement.d.ts.map +1 -0
- package/dist/movement.js +21 -0
- package/dist/movement.js.map +1 -0
- package/dist/player-element.d.ts +60 -0
- package/dist/player-element.d.ts.map +1 -0
- package/dist/player-element.js +367 -0
- package/dist/player-element.js.map +1 -0
- package/dist/player-locale.d.ts +6 -0
- package/dist/player-locale.d.ts.map +1 -0
- package/dist/player-locale.js +205 -0
- package/dist/player-locale.js.map +1 -0
- package/dist/player-messages.d.ts +40 -0
- package/dist/player-messages.d.ts.map +1 -0
- package/dist/player-messages.js +2 -0
- package/dist/player-messages.js.map +1 -0
- package/dist/player-styles.d.ts +3 -0
- package/dist/player-styles.d.ts.map +1 -0
- package/dist/player-styles.js +24 -0
- package/dist/player-styles.js.map +1 -0
- package/dist/player-types.d.ts +71 -0
- package/dist/player-types.d.ts.map +1 -0
- package/dist/player-types.js +2 -0
- package/dist/player-types.js.map +1 -0
- package/dist/player-validation-dom.d.ts +3 -0
- package/dist/player-validation-dom.d.ts.map +1 -0
- package/dist/player-validation-dom.js +28 -0
- package/dist/player-validation-dom.js.map +1 -0
- package/dist/player-validation.d.ts +13 -0
- package/dist/player-validation.d.ts.map +1 -0
- package/dist/player-validation.js +123 -0
- package/dist/player-validation.js.map +1 -0
- package/dist/portable-custom-support.d.ts +11 -0
- package/dist/portable-custom-support.d.ts.map +1 -0
- package/dist/portable-custom-support.js +70 -0
- package/dist/portable-custom-support.js.map +1 -0
- package/dist/response-limits.d.ts +9 -0
- package/dist/response-limits.d.ts.map +1 -0
- package/dist/response-limits.js +44 -0
- package/dist/response-limits.js.map +1 -0
- package/package.json +4 -4
- package/src/content/content-dom.ts +274 -0
- package/src/content/content-renderer.ts +114 -0
- package/src/controls/remove-button.ts +13 -0
- package/src/icons.ts +47 -0
- package/src/index.ts +26 -5053
- package/src/interaction-support.ts +263 -0
- package/src/interactions/choice-interaction.ts +92 -0
- package/src/interactions/drawing-interaction.ts +447 -0
- package/src/interactions/end-attempt-interaction.ts +19 -0
- package/src/interactions/gap-match-interaction.ts +337 -0
- package/src/interactions/graphic-associate-interaction.ts +324 -0
- package/src/interactions/graphic-context.ts +33 -0
- package/src/interactions/hotspot-interaction.ts +87 -0
- package/src/interactions/hottext-interaction.ts +81 -0
- package/src/interactions/inline-choice-interaction.ts +45 -0
- package/src/interactions/inline-controls.ts +21 -0
- package/src/interactions/interaction-diagnostics.ts +159 -0
- package/src/interactions/interaction-dispatch.ts +9 -0
- package/src/interactions/interaction-label.ts +10 -0
- package/src/interactions/interaction-registry.ts +209 -0
- package/src/interactions/match-interaction.ts +199 -0
- package/src/interactions/object-asset.ts +212 -0
- package/src/interactions/pair-interaction.ts +147 -0
- package/src/interactions/point-value.ts +41 -0
- package/src/interactions/portable-custom-interaction.ts +139 -0
- package/src/interactions/position-object-interaction.ts +210 -0
- package/src/interactions/routing.ts +27 -0
- package/src/interactions/select-point-interaction.ts +185 -0
- package/src/interactions/shared.ts +56 -0
- package/src/interactions/text-interaction.ts +127 -0
- package/src/interactions/unsupported-interaction.ts +25 -0
- package/src/interactions/upload-interaction.ts +16 -0
- package/src/movement.ts +29 -0
- package/src/player/attempt-availability.ts +36 -0
- package/src/player/content-state.ts +63 -0
- package/src/player/dynamic-body.ts +40 -0
- package/src/player/feedback-panel.ts +23 -0
- package/src/player/fetch-xml.ts +8 -0
- package/src/player/interaction-render.ts +89 -0
- package/src/player/render-shell.ts +44 -0
- package/src/player/resolve-assets.ts +12 -0
- package/src/player/validation-messages.ts +42 -0
- package/src/player-element.ts +493 -0
- package/src/player-locale.ts +232 -0
- package/src/player-messages.ts +31 -0
- package/src/player-styles.ts +25 -0
- package/src/player-types.ts +99 -0
- package/src/player-validation-dom.ts +31 -0
- package/src/player-validation.ts +158 -0
- package/src/portable-custom-support.ts +74 -0
- package/src/reorder/a11y.ts +40 -0
- package/src/reorder/graphic-order-interaction.ts +260 -0
- package/src/reorder/list-controls.ts +114 -0
- package/src/reorder/order-interaction.ts +75 -0
- package/src/response-limits.ts +47 -0
- package/src/styles/base-styles.ts +117 -0
- package/src/styles/choice-hottext-styles.ts +75 -0
- package/src/styles/control-styles.ts +113 -0
- package/src/styles/drawing-styles.ts +29 -0
- package/src/styles/gap-match-styles.ts +32 -0
- package/src/styles/graphic-styles.ts +294 -0
- package/src/styles/match-pair-styles.ts +61 -0
- package/src/styles/text-slider-styles.ts +34 -0
package/README.md
CHANGED
|
@@ -39,6 +39,25 @@ player?.addEventListener("qti-statechange", (event) => {
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
## Player Chrome Messages
|
|
43
|
+
|
|
44
|
+
The player keeps authored QTI content language separate from player chrome such as
|
|
45
|
+
remove buttons. Chrome language defaults to the player `languageOfInterface` property,
|
|
46
|
+
the `language-of-interface` attribute, browser language, document language, then
|
|
47
|
+
English. Hosts can override it when delivery settings require a fixed interface language.
|
|
48
|
+
|
|
49
|
+
Built-in catalogs are currently available for English, Spanish (`es-MX`, `es-ES`),
|
|
50
|
+
Swedish (`sv-SE`), German (`de-DE`), Portuguese (`pt-BR`, `pt-PT`), and French
|
|
51
|
+
(`fr-FR`, `fr-CA`).
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
player.languageOfInterface = "es-MX";
|
|
55
|
+
player.messages = {
|
|
56
|
+
remove: () => "Eliminar",
|
|
57
|
+
removePair: ({ label }) => `Eliminar ${label}`,
|
|
58
|
+
};
|
|
59
|
+
```
|
|
60
|
+
|
|
42
61
|
## Portable Custom Interactions
|
|
43
62
|
|
|
44
63
|
For `qti-portable-custom-interaction`, the player renders a
|
package/dist/icons.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type IconPath = string | {
|
|
2
|
+
d: string;
|
|
3
|
+
fill?: string;
|
|
4
|
+
stroke?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function inlineIcon(className: string, paths: IconPath[]): SVGSVGElement;
|
|
7
|
+
export declare function trashIcon(): SVGSVGElement;
|
|
8
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAiC9E;AAED,wBAAgB,SAAS,IAAI,aAAa,CASzC"}
|
package/dist/icons.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function inlineIcon(className, paths) {
|
|
2
|
+
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
3
|
+
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
|
|
4
|
+
svg.setAttribute("width", "24");
|
|
5
|
+
svg.setAttribute("height", "24");
|
|
6
|
+
svg.setAttribute("viewBox", "0 0 24 24");
|
|
7
|
+
svg.setAttribute("fill", "none");
|
|
8
|
+
svg.setAttribute("stroke", "currentColor");
|
|
9
|
+
svg.setAttribute("stroke-width", "2");
|
|
10
|
+
svg.setAttribute("stroke-linecap", "round");
|
|
11
|
+
svg.setAttribute("stroke-linejoin", "round");
|
|
12
|
+
svg.setAttribute("aria-hidden", "true");
|
|
13
|
+
svg.setAttribute("focusable", "false");
|
|
14
|
+
svg.setAttribute("class", className);
|
|
15
|
+
for (const entry of paths) {
|
|
16
|
+
const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
17
|
+
if (typeof entry === "string") {
|
|
18
|
+
path.setAttribute("d", entry);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
path.setAttribute("d", entry.d);
|
|
22
|
+
if (entry.stroke) {
|
|
23
|
+
path.setAttribute("stroke", entry.stroke);
|
|
24
|
+
path.style.stroke = entry.stroke;
|
|
25
|
+
}
|
|
26
|
+
if (entry.fill) {
|
|
27
|
+
path.setAttribute("fill", entry.fill);
|
|
28
|
+
path.style.fill = entry.fill;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
svg.append(path);
|
|
32
|
+
}
|
|
33
|
+
return svg;
|
|
34
|
+
}
|
|
35
|
+
export function trashIcon() {
|
|
36
|
+
return inlineIcon("qti3-trash-icon", [
|
|
37
|
+
{ d: "M0 0h24v24H0z", stroke: "none", fill: "none" },
|
|
38
|
+
"M4 7l16 0",
|
|
39
|
+
"M10 11l0 6",
|
|
40
|
+
"M14 11l0 6",
|
|
41
|
+
"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",
|
|
42
|
+
"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,KAAiB;IAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IAC1E,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;IACxD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,CAAC,iBAAiB,EAAE;QACnC,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACpD,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,gDAAgD;QAChD,0CAA0C;KAC3C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,115 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
showFeedback?: boolean | undefined;
|
|
5
|
-
}
|
|
6
|
-
export interface QtiScoreAttemptOptions {
|
|
7
|
-
validateResponses?: boolean | undefined;
|
|
8
|
-
}
|
|
9
|
-
export type QtiPlayerFetchXml = (url: string) => Promise<string>;
|
|
10
|
-
export type QtiPlayerResolveAsset = (url: string) => string;
|
|
11
|
-
export interface QtiPlayerLoadOptions {
|
|
12
|
-
state?: QtiAttemptStateV1 | undefined;
|
|
13
|
-
status?: QtiAttemptStatus | undefined;
|
|
14
|
-
sessionControl?: QtiPlayerSessionControl | undefined;
|
|
15
|
-
fetchXml?: QtiPlayerFetchXml | undefined;
|
|
16
|
-
resolveAsset?: QtiPlayerResolveAsset | undefined;
|
|
17
|
-
}
|
|
18
|
-
export interface QtiReadyEventDetail {
|
|
19
|
-
item: QtiAssessmentItem;
|
|
20
|
-
}
|
|
21
|
-
export interface QtiStateChangeEventDetail {
|
|
22
|
-
state: QtiAttemptStateV1;
|
|
23
|
-
}
|
|
24
|
-
export interface QtiResponseChangeEventDetail {
|
|
25
|
-
responseIdentifier: string;
|
|
26
|
-
value: QtiValue;
|
|
27
|
-
}
|
|
28
|
-
export interface QtiPortableCustomMountEventDetail {
|
|
29
|
-
responseIdentifier: string;
|
|
30
|
-
interaction: QtiInteraction;
|
|
31
|
-
definition: QtiPortableCustomDefinition;
|
|
32
|
-
host: HTMLElement;
|
|
33
|
-
value: QtiValue;
|
|
34
|
-
state?: QtiPortableCustomStateValue | undefined;
|
|
35
|
-
}
|
|
36
|
-
export type QtiScoreEventDetail = QtiScoreResult;
|
|
37
|
-
export interface QtiValidationEventDetail {
|
|
38
|
-
validationMessages: QtiDiagnostic[];
|
|
39
|
-
state: QtiAttemptStateV1;
|
|
40
|
-
}
|
|
41
|
-
export interface QtiSuspendEventDetail {
|
|
42
|
-
state: QtiAttemptStateV1;
|
|
43
|
-
}
|
|
44
|
-
export interface QtiEndAttemptEventDetail {
|
|
45
|
-
state: QtiAttemptStateV1;
|
|
46
|
-
}
|
|
47
|
-
export interface QtiAssessmentItemPlayerEventDetailMap {
|
|
48
|
-
"qti-ready": QtiReadyEventDetail;
|
|
49
|
-
"qti-statechange": QtiStateChangeEventDetail;
|
|
50
|
-
"qti-responsechange": QtiResponseChangeEventDetail;
|
|
51
|
-
"qti-portable-custom-mount": QtiPortableCustomMountEventDetail;
|
|
52
|
-
"qti-score": QtiScoreEventDetail;
|
|
53
|
-
"qti-validation": QtiValidationEventDetail;
|
|
54
|
-
"qti-suspend": QtiSuspendEventDetail;
|
|
55
|
-
"qti-endattempt": QtiEndAttemptEventDetail;
|
|
56
|
-
}
|
|
57
|
-
export type QtiAssessmentItemPlayerEventName = keyof QtiAssessmentItemPlayerEventDetailMap;
|
|
58
|
-
export type QtiAssessmentItemPlayerEvent<T extends QtiAssessmentItemPlayerEventName = QtiAssessmentItemPlayerEventName> = CustomEvent<QtiAssessmentItemPlayerEventDetailMap[T]>;
|
|
59
|
-
export type QtiAssessmentItemPlayerCustomEventMap = {
|
|
60
|
-
[T in QtiAssessmentItemPlayerEventName]: CustomEvent<QtiAssessmentItemPlayerEventDetailMap[T]>;
|
|
61
|
-
};
|
|
62
|
-
declare const HTMLElementBase: typeof HTMLElement;
|
|
63
|
-
export declare class QtiAssessmentItemPlayer extends HTMLElementBase {
|
|
64
|
-
private documentModel?;
|
|
65
|
-
private session?;
|
|
66
|
-
private resolveAsset;
|
|
67
|
-
private validationMessages;
|
|
68
|
-
private sessionControl;
|
|
69
|
-
loadXml(xml: string, options?: QtiPlayerLoadOptions): Promise<void>;
|
|
70
|
-
loadUrl(url: string, options?: QtiPlayerLoadOptions): Promise<void>;
|
|
71
|
-
scoreAttempt(options?: QtiScoreAttemptOptions): QtiScoreResult | undefined;
|
|
72
|
-
reset(): void;
|
|
73
|
-
restore(state: QtiAttemptStateV1): void;
|
|
74
|
-
suspend(): void;
|
|
75
|
-
endAttempt(options?: QtiScoreAttemptOptions): void;
|
|
76
|
-
serialize(): QtiAttemptStateV1 | undefined;
|
|
77
|
-
getTextToSpeechTraversal(): QtiTextToSpeechTraversal | undefined;
|
|
78
|
-
getCatalogSupportResolution(options?: QtiCatalogSupportResolutionOptions): QtiCatalogSupportResolution | undefined;
|
|
79
|
-
private emitStateChange;
|
|
80
|
-
private dispatchPlayerEvent;
|
|
81
|
-
private render;
|
|
82
|
-
private renderInteraction;
|
|
83
|
-
private renderPortableCustomResponse;
|
|
84
|
-
private renderEmbeddedInteraction;
|
|
85
|
-
private renderContentNodes;
|
|
86
|
-
private renderContentNode;
|
|
87
|
-
private renderTemplateContent;
|
|
88
|
-
private renderPrintedVariable;
|
|
89
|
-
private renderFeedbackContent;
|
|
90
|
-
private updateDynamicBodyState;
|
|
91
|
-
private updateAttemptAvailability;
|
|
92
|
-
private attemptIsCompleted;
|
|
93
|
-
private isFeedbackVisible;
|
|
94
|
-
private isTemplateContentVisible;
|
|
95
|
-
private currentVariableValue;
|
|
96
|
-
private currentTemplateValue;
|
|
97
|
-
private mathTemplateValue;
|
|
98
|
-
private currentResponseValue;
|
|
99
|
-
private currentInteractionState;
|
|
100
|
-
private setPortableCustomValidity;
|
|
101
|
-
private applyDefaultStyles;
|
|
102
|
-
private resolveRenderedAssets;
|
|
103
|
-
private validateResponses;
|
|
104
|
-
private renderValidationMessages;
|
|
105
|
-
private clearValidationMessage;
|
|
106
|
-
private renderFeedback;
|
|
107
|
-
}
|
|
108
|
-
export declare function defineQtiAssessmentItemPlayer(): void;
|
|
109
|
-
declare global {
|
|
110
|
-
interface HTMLElementTagNameMap {
|
|
111
|
-
"qti-assessment-item-player": QtiAssessmentItemPlayer;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
export {};
|
|
1
|
+
export type { QtiPlayerAssociationPairLabelParams, QtiPlayerMessages, QtiPlayerRemoveMessageParams, } from "./player-messages.js";
|
|
2
|
+
export type { QtiAssessmentItemPlayerCustomEventMap, QtiAssessmentItemPlayerEvent, QtiAssessmentItemPlayerEventDetailMap, QtiAssessmentItemPlayerEventName, QtiEndAttemptEventDetail, QtiPlayerFetchXml, QtiPlayerLoadOptions, QtiPlayerMessageOverrides, QtiPlayerResolveAsset, QtiPlayerSessionControl, QtiPortableCustomMountEventDetail, QtiReadyEventDetail, QtiResponseChangeEventDetail, QtiScoreAttemptOptions, QtiScoreEventDetail, QtiStateChangeEventDetail, QtiSuspendEventDetail, QtiValidationEventDetail, } from "./player-types.js";
|
|
3
|
+
export { QtiAssessmentItemPlayer, defineQtiAssessmentItemPlayer } from "./player-element.js";
|
|
115
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mCAAmC,EACnC,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,qCAAqC,EACrC,4BAA4B,EAC5B,qCAAqC,EACrC,gCAAgC,EAChC,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,iCAAiC,EACjC,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC"}
|