@citolab/qti-components 3.0.83 → 6.0.0-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 (117) hide show
  1. package/dist/ExpressionResult-2192c3d8.d.ts +33 -0
  2. package/dist/chunk-DHKNFCXT.cjs +1 -0
  3. package/dist/chunk-HWADA6Q6.js +1 -0
  4. package/dist/chunk-JLKCCEGG.cjs +1 -0
  5. package/dist/chunk-L6436D6O.js +1 -0
  6. package/dist/chunk-QYAOZBP6.js +1 -0
  7. package/dist/chunk-TQLGNXF4.cjs +1 -0
  8. package/dist/qti-assessment-item-e9f437d6.d.ts +117 -0
  9. package/dist/qti-components/index.cjs +403 -0
  10. package/dist/qti-components/index.d.ts +786 -0
  11. package/dist/qti-components/index.js +403 -0
  12. package/dist/qti-convert/index.cjs +84 -0
  13. package/dist/qti-convert/index.d.ts +6 -0
  14. package/dist/qti-convert/index.js +84 -0
  15. package/dist/qti-item/index.cjs +17 -0
  16. package/dist/qti-item/index.d.ts +27 -0
  17. package/dist/qti-item/index.js +17 -0
  18. package/dist/qti-test/index.cjs +12 -0
  19. package/{lab/qti-test/qti-test.d.ts → dist/qti-test/index.d.ts} +10 -6
  20. package/dist/qti-test/index.js +12 -0
  21. package/dist/qti-transform/index.cjs +102 -0
  22. package/dist/qti-transform/index.d.ts +18 -0
  23. package/dist/qti-transform/index.js +102 -0
  24. package/package.json +72 -8
  25. package/readme.md +96 -0
  26. package/index.css +0 -2
  27. package/index.d.ts +0 -51
  28. package/index.js +0 -3655
  29. package/index.umd.cjs +0 -503
  30. package/lab/qti-custom-operator/qti-custom-operator-levenshtein.d.ts +0 -11
  31. package/lab/qti-custom-operator/qti-custom-operator-numeric-parse-nl.d.ts +0 -11
  32. package/lab/qti-custom-operator/qti-custom-operator-numeric.d.ts +0 -6
  33. package/lab/qti-custom-operator/qti-custom-operator-remove-spaces.d.ts +0 -6
  34. package/lab/qti-custom-operator/qti-custom-operator-trim.d.ts +0 -6
  35. package/lab/qti-item/qti-item.d.ts +0 -20
  36. package/lab/qti-manual-scoring/qti-manual-scoring.d.ts +0 -15
  37. package/lab/qti-test/index.d.ts +0 -2
  38. package/lib/qti-assessment-item/qti-assessment-item.d.ts +0 -44
  39. package/lib/qti-choice/qti-choice.d.ts +0 -34
  40. package/lib/qti-choice/qti-hottext/qti-hottext.d.ts +0 -8
  41. package/lib/qti-choice/qti-simple-choice/qti-simple-choice.d.ts +0 -8
  42. package/lib/qti-companion-materials-info/qti-companion-materials-info.d.ts +0 -3
  43. package/lib/qti-feedback/qti-feedback-inline/qti-feedback-inline.d.ts +0 -5
  44. package/lib/qti-feedback/qti-feedback.d.ts +0 -30
  45. package/lib/qti-feedback/qti-modal-feedback/qti-modal-feedback.d.ts +0 -4
  46. package/lib/qti-interaction/qti-associate-interaction/qti-associate-interaction.d.ts +0 -9
  47. package/lib/qti-interaction/qti-associate-interaction/qti-simple-associable-choice.d.ts +0 -5
  48. package/lib/qti-interaction/qti-choice-interaction/qti-choice-interaction.d.ts +0 -10
  49. package/lib/qti-interaction/qti-extended-text-interaction/qti-extended-text-interaction.d.ts +0 -18
  50. package/lib/qti-interaction/qti-gap-match-interaction/qti-gap-match-interaction.d.ts +0 -7
  51. package/lib/qti-interaction/qti-gap-match-interaction/qti-gap-text.d.ts +0 -5
  52. package/lib/qti-interaction/qti-gap-match-interaction/qti-gap.d.ts +0 -4
  53. package/lib/qti-interaction/qti-graphic-associate-interaction/qti-graphic-associate-interaction.d.ts +0 -9
  54. package/lib/qti-interaction/qti-graphic-gap-match-interaction/qti-graphic-gap-match-interaction.d.ts +0 -10
  55. package/lib/qti-interaction/qti-graphic-order-interaction/qti-graphic-order-interaction.d.ts +0 -10
  56. package/lib/qti-interaction/qti-hotspot-choice.d.ts +0 -5
  57. package/lib/qti-interaction/qti-hotspot-interaction/qti-hotspot-interaction.d.ts +0 -8
  58. package/lib/qti-interaction/qti-hottext-interaction/qti-hottext-interaction.d.ts +0 -5
  59. package/lib/qti-interaction/qti-inline-choice-interaction/qti-inline-choice-interaction.d.ts +0 -26
  60. package/lib/qti-interaction/qti-match-interaction/qti-match-interaction.d.ts +0 -7
  61. package/lib/qti-interaction/qti-media-interaction/qti-media-interaction.d.ts +0 -18
  62. package/lib/qti-interaction/qti-order-interaction/qti-order-interaction.d.ts +0 -22
  63. package/lib/qti-interaction/qti-portable-custom-interaction/qti-portable-custom-interaction.d.ts +0 -34
  64. package/lib/qti-interaction/qti-preview-badge.d.ts +0 -1
  65. package/lib/qti-interaction/qti-select-point-interaction/qti-select-point-interaction.d.ts +0 -9
  66. package/lib/qti-interaction/qti-slider-interaction/qti-slider-interaction.d.ts +0 -31
  67. package/lib/qti-interaction/qti-text-entry-interaction/qti-text-entry-interaction.d.ts +0 -33
  68. package/lib/qti-item-body/qti-item-body.d.ts +0 -5
  69. package/lib/qti-prompt/qti-prompt.d.ts +0 -5
  70. package/lib/qti-responseprocessing/index.d.ts +0 -18
  71. package/lib/qti-responseprocessing/qti-expression/qti-and/qti-and.d.ts +0 -7
  72. package/lib/qti-responseprocessing/qti-expression/qti-basevalue/qti-basevalue.d.ts +0 -6
  73. package/lib/qti-responseprocessing/qti-expression/qti-contains/qti-contains.d.ts +0 -6
  74. package/lib/qti-responseprocessing/qti-expression/qti-correct/qti-correct.d.ts +0 -6
  75. package/lib/qti-responseprocessing/qti-expression/qti-expression.d.ts +0 -6
  76. package/lib/qti-responseprocessing/qti-expression/qti-gte/qti-gte.d.ts +0 -6
  77. package/lib/qti-responseprocessing/qti-expression/qti-is-null/qti-is-null.d.ts +0 -6
  78. package/lib/qti-responseprocessing/qti-expression/qti-mapresponse/qti-mapresponse.d.ts +0 -4
  79. package/lib/qti-responseprocessing/qti-expression/qti-match/qti-match.d.ts +0 -4
  80. package/lib/qti-responseprocessing/qti-expression/qti-multiple/qti-multiple.d.ts +0 -4
  81. package/lib/qti-responseprocessing/qti-expression/qti-or/qti-or.d.ts +0 -7
  82. package/lib/qti-responseprocessing/qti-expression/qti-variable/qti-variable.d.ts +0 -6
  83. package/lib/qti-responseprocessing/qti-responseelse/qti-responseelse.d.ts +0 -15
  84. package/lib/qti-responseprocessing/qti-responseelse/qti-responseif/qti-responseelseif/qti-responseelseif.d.ts +0 -4
  85. package/lib/qti-responseprocessing/qti-responseelse/qti-responseif/qti-responseif.d.ts +0 -7
  86. package/lib/qti-responseprocessing/qti-responseprocessing/qti-responseprocessing.d.ts +0 -7
  87. package/lib/qti-responseprocessing/qti-rule/qti-responsecondition/qti-responsecondition.d.ts +0 -5
  88. package/lib/qti-responseprocessing/qti-rule/qti-rule.d.ts +0 -5
  89. package/lib/qti-responseprocessing/qti-rule/qti-setoutcomevalue/qti-setoutcomevalue.d.ts +0 -4
  90. package/lib/qti-rubric-block/qti-content-body.d.ts +0 -4
  91. package/lib/qti-rubric-block/qti-rubric-block.d.ts +0 -15
  92. package/lib/qti-stylesheet/qti-stylesheet.d.ts +0 -7
  93. package/lib/qti-utilities/EventStrings.d.ts +0 -19
  94. package/lib/qti-utilities/EventTypes.d.ts +0 -7
  95. package/lib/qti-utilities/ExpressionResult.d.ts +0 -43
  96. package/lib/qti-utilities/OutcomeVariable.d.ts +0 -8
  97. package/lib/qti-utilities/ResponseVariable.d.ts +0 -28
  98. package/lib/qti-utilities/TemplateStrings.d.ts +0 -3
  99. package/lib/qti-utilities/VariableDeclaration.d.ts +0 -7
  100. package/lib/qti-variabledeclaration/qti-outcomedeclaration/qti-outcomedeclaration.d.ts +0 -5
  101. package/lib/qti-variabledeclaration/qti-responsedeclaration/qti-responsedeclaration.d.ts +0 -9
  102. package/lib/qti-variabledeclaration/qti-variabledeclaration.d.ts +0 -4
  103. package/lib/utilities/choice/choices.d.ts +0 -23
  104. package/lib/utilities/context/context.d.ts +0 -7
  105. package/lib/utilities/decorators/liveQuery.d.ts +0 -10
  106. package/lib/utilities/decorators/watch.d.ts +0 -14
  107. package/lib/utilities/drag-drop/drag-drop-api.d.ts +0 -91
  108. package/lib/utilities/drag-drop/drag-drop-interaction-mixin.d.ts +0 -5
  109. package/lib/utilities/drag-drop/droppables-mixin.d.ts +0 -6
  110. package/lib/utilities/drag-drop/flippables-mixin.d.ts +0 -8
  111. package/lib/utilities/drag-drop/index.d.ts +0 -4
  112. package/lib/utilities/element/qti-element.d.ts +0 -6
  113. package/lib/utilities/hotspots/hotspot.d.ts +0 -2
  114. package/lib/utilities/interaction/interaction.d.ts +0 -14
  115. package/lib/utilities/interaction/interaction.interface.d.ts +0 -8
  116. package/lib/utilities/reset-styles/reset-shadowroot-styles.d.ts +0 -1
  117. package/lib/utilities/scale-to-fit/scale-to-fit.mixin.d.ts +0 -6
@@ -0,0 +1,33 @@
1
+ interface directedPair {
2
+ destination: string;
3
+ source: string;
4
+ }
5
+ interface ResponseInteraction<T> {
6
+ responseIdentifier: string;
7
+ responses: T;
8
+ }
9
+ interface ResponseItem<T> {
10
+ item: string | null;
11
+ interaction: ResponseInteraction<T>;
12
+ }
13
+ interface InputResponseFormat<T> {
14
+ item: string;
15
+ interactions: ResponseInteraction<T>[];
16
+ }
17
+ interface Calculate {
18
+ calculate: () => ResponseType;
19
+ }
20
+ type QtiVariableJSON = {
21
+ [K in "list" | "base"]?: {
22
+ [Ka in "boolean" | "integer" | "float" | "string" | "pair" | "directedPair" | "identifier"]?: ResponseType;
23
+ };
24
+ };
25
+ type float = number;
26
+ type integer = number;
27
+ type ResponseType = boolean | directedPair | float | integer | string | ResponseType[];
28
+ type BaseType = "boolean" | "directedPair" | "float" | "integer" | "string" | "identifier" | "pair";
29
+ type Multiple = ResponseType[];
30
+ type Ordered = ResponseType[];
31
+ type Cardinality = "multiple" | "ordered" | "single";
32
+
33
+ export { BaseType as B, Cardinality as C, InputResponseFormat as I, Multiple as M, Ordered as O, QtiVariableJSON as Q, ResponseType as R, ResponseInteraction as a, ResponseItem as b, Calculate as c, directedPair as d, float as f, integer as i };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkTQLGNXF4cjs = require('./chunk-TQLGNXF4.cjs');function u(e,d){let o=_chunkTQLGNXF4cjs.a.call(void 0, {waitUntilFirstUpdate:!1},d);return(s,r)=>{let{update:c}=s,f=Array.isArray(e)?e:[e];s.update=function(t){f.forEach(p=>{let n=p;if(t.has(n)){let a=t.get(n),i=this[n];a!==i&&(!o.waitUntilFirstUpdate||this.hasUpdated)&&this[r](a,i)}}),c.call(this,t)}}}exports.a = u;
@@ -0,0 +1 @@
1
+ var m=Object.create;var f=Object.defineProperty,n=Object.defineProperties,k=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,p=Object.getOwnPropertyNames,i=Object.getOwnPropertySymbols,q=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;var j=(b,a,c)=>a in b?f(b,a,{enumerable:!0,configurable:!0,writable:!0,value:c}):b[a]=c,t=(b,a)=>{for(var c in a||(a={}))l.call(a,c)&&j(b,c,a[c]);if(i)for(var c of i(a))r.call(a,c)&&j(b,c,a[c]);return b},u=(b,a)=>n(b,o(a));var v=(b=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(b,{get:(a,c)=>(typeof require!="undefined"?require:a)[c]}):b)(function(b){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+b+'" is not supported')});var w=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);var s=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of p(a))!l.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=k(a,d))||e.enumerable});return b};var x=(b,a,c)=>(c=b!=null?m(q(b)):{},s(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:!0}):c,b));var y=(b,a,c,e)=>{for(var d=e>1?void 0:e?k(a,c):a,g=b.length-1,h;g>=0;g--)(h=b[g])&&(d=(e?h(a,c,d):h(d))||d);return e&&d&&f(a,c,d),d};export{t as a,u as b,v as c,w as d,x as e,y as f};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _context = require('@lit-labs/context');var g=_context.createContext.call(void 0, "logger");exports.a = g;
@@ -0,0 +1 @@
1
+ import{createContext as e}from"@lit-labs/context";var g=e("logger");export{g as a};
@@ -0,0 +1 @@
1
+ import{a as l}from"./chunk-HWADA6Q6.js";function u(e,d){let o=l({waitUntilFirstUpdate:!1},d);return(s,r)=>{let{update:c}=s,f=Array.isArray(e)?e:[e];s.update=function(t){f.forEach(p=>{let n=p;if(t.has(n)){let a=t.get(n),i=this[n];a!==i&&(!o.waitUntilFirstUpdate||this.hasUpdated)&&this[r](a,i)}}),c.call(this,t)}}}export{u as a};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var m=Object.create;var f=Object.defineProperty,n=Object.defineProperties,k=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,p=Object.getOwnPropertyNames,i=Object.getOwnPropertySymbols,q=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;var j=(b,a,c)=>a in b?f(b,a,{enumerable:!0,configurable:!0,writable:!0,value:c}):b[a]=c,t= exports.a =(b,a)=>{for(var c in a||(a={}))l.call(a,c)&&j(b,c,a[c]);if(i)for(var c of i(a))r.call(a,c)&&j(b,c,a[c]);return b},u= exports.b =(b,a)=>n(b,o(a));var v=(b=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(b,{get:(a,c)=>(typeof require!="undefined"?require:a)[c]}):b)(function(b){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+b+'" is not supported')});var w=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);var s=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of p(a))!l.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=k(a,d))||e.enumerable});return b};var x=(b,a,c)=>(c=b!=null?m(q(b)):{},s(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:!0}):c,b));var y=(b,a,c,e)=>{for(var d=e>1?void 0:e?k(a,c):a,g=b.length-1,h;g>=0;g--)(h=b[g])&&(d=(e?h(a,c,d):h(d))||d);return e&&d&&f(a,c,d),d};exports.a = t; exports.b = u; exports.c = v; exports.d = w; exports.e = x; exports.f = y;
@@ -0,0 +1,117 @@
1
+ import * as lit_html from 'lit-html';
2
+ import { C as Cardinality, B as BaseType, R as ResponseType, Q as QtiVariableJSON, I as InputResponseFormat } from './ExpressionResult-2192c3d8.js';
3
+ import { LitElement } from 'lit';
4
+
5
+ interface VariableDeclaration {
6
+ identifier: string;
7
+ cardinality: Cardinality;
8
+ baseType: BaseType;
9
+ value: ResponseType;
10
+ }
11
+
12
+ declare class ResponseVariable implements VariableDeclaration {
13
+ private _candidateResponse;
14
+ private _mapping;
15
+ private _correctResponse;
16
+ private _cardinality;
17
+ private _identifier;
18
+ private _basetype;
19
+ private _qtiVariable;
20
+ static getCandidateResponse(value: QtiVariableJSON): ResponseType;
21
+ constructor({ mapping, correctResponse, cardinality, baseType, identifier }: {
22
+ mapping: Map<string, number>;
23
+ correctResponse: BaseType;
24
+ cardinality: Cardinality;
25
+ baseType: BaseType;
26
+ identifier: string;
27
+ });
28
+ get mapping(): Map<string, number>;
29
+ get correctResponse(): BaseType;
30
+ get cardinality(): Cardinality;
31
+ get baseType(): BaseType;
32
+ get identifier(): string;
33
+ get value(): ResponseType;
34
+ set value(val: ResponseType);
35
+ set qtiVariable(value: QtiVariableJSON);
36
+ get qtiVariable(): QtiVariableJSON;
37
+ }
38
+
39
+ declare class OutcomeVariable implements VariableDeclaration {
40
+ identifier: string;
41
+ cardinality: Cardinality;
42
+ baseType: BaseType;
43
+ value: ResponseType;
44
+ }
45
+
46
+ type EventTypeRequiresDetail<T> = T extends keyof GlobalEventHandlersEventMap ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, unknown>> ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, never>> ? never : Partial<GlobalEventHandlersEventMap[T]['detail']> extends GlobalEventHandlersEventMap[T]['detail'] ? never : T : never : never;
47
+ type EventTypeDoesNotRequireDetail<T> = T extends keyof GlobalEventHandlersEventMap ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, unknown>> ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, never>> ? T : Partial<GlobalEventHandlersEventMap[T]['detail']> extends GlobalEventHandlersEventMap[T]['detail'] ? T : never : T : T;
48
+ type EventTypesWithRequiredDetail = {
49
+ [EventType in keyof GlobalEventHandlersEventMap as EventTypeRequiresDetail<EventType>]: true;
50
+ };
51
+ type EventTypesWithoutRequiredDetail = {
52
+ [EventType in keyof GlobalEventHandlersEventMap as EventTypeDoesNotRequireDetail<EventType>]: true;
53
+ };
54
+ type WithRequired<T, K extends keyof T> = T & {
55
+ [P in K]-?: T[P];
56
+ };
57
+ type SlEventInit<T> = T extends keyof GlobalEventHandlersEventMap ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, unknown>> ? GlobalEventHandlersEventMap[T] extends CustomEvent<Record<PropertyKey, never>> ? CustomEventInit<GlobalEventHandlersEventMap[T]['detail']> : Partial<GlobalEventHandlersEventMap[T]['detail']> extends GlobalEventHandlersEventMap[T]['detail'] ? CustomEventInit<GlobalEventHandlersEventMap[T]['detail']> : WithRequired<CustomEventInit<GlobalEventHandlersEventMap[T]['detail']>, 'detail'> : CustomEventInit : CustomEventInit;
58
+ type GetCustomEventType<T> = T extends keyof GlobalEventHandlersEventMap ? GlobalEventHandlersEventMap[T] extends CustomEvent<unknown> ? GlobalEventHandlersEventMap[T] : CustomEvent<unknown> : CustomEvent<unknown>;
59
+ declare class QtiElement extends LitElement {
60
+ dir: string;
61
+ lang: string;
62
+ /** Emits a custom event with more convenient defaults. */
63
+ emit<T extends string & keyof EventTypesWithoutRequiredDetail>(name: EventTypeDoesNotRequireDetail<T>, options?: SlEventInit<T> | undefined): GetCustomEventType<T>;
64
+ emit<T extends string & keyof EventTypesWithRequiredDetail>(name: EventTypeRequiresDetail<T>, options: SlEventInit<T>): GetCustomEventType<T>;
65
+ err(value: string): void;
66
+ }
67
+
68
+ /**
69
+ * @summary The qti-assessment-item element contains all the other QTI 3 item structures.
70
+ * @documentation https://www.imsglobal.org/spec/qti/v3p0/impl#h.dltnnj87l0yj
71
+ * @status stable
72
+ * @since 4.0
73
+ *
74
+ * @dependency qti-feedback
75
+ * @dependency qti-responseprocessing
76
+ *
77
+ * @slot - The default slot where all the other QTI 3 item structures go.
78
+ *
79
+ * @event qti-interaction-changed - Emitted when an interaction is changed.
80
+ * @event qti-outcome-changed - Emitted when the radio group receives user input.
81
+ *
82
+ */
83
+ declare class QtiAssessmentItem extends QtiElement {
84
+ private variables;
85
+ private feedbackElements;
86
+ private interactionElements;
87
+ disabled: boolean;
88
+ readonly: boolean;
89
+ title: string;
90
+ identifier: string;
91
+ render(): lit_html.TemplateResult<1>;
92
+ _handleDisabledChange: (_: boolean, disabled: boolean) => void;
93
+ _handleReadonlyChange: (_: boolean, readonly: boolean) => void;
94
+ constructor();
95
+ disconnectedCallback(): void;
96
+ private _registerVariable;
97
+ showCorrectResponse(): void;
98
+ processResponse(): boolean;
99
+ set responses(myResponses: InputResponseFormat<QtiVariableJSON>);
100
+ resetInteractions(): void;
101
+ validateResponses(): boolean;
102
+ getVariableValue(identifier: string): ResponseType | null;
103
+ getResponse(identifier: string): ResponseVariable | null;
104
+ getOutcome(identifier: string): OutcomeVariable | null;
105
+ private registerFeedbackElement;
106
+ private registerInteractionElement;
107
+ private interactionResponse;
108
+ private outcomeChanged;
109
+ setOutcomeValue(identifier: string, value: ResponseType): void;
110
+ }
111
+ declare global {
112
+ interface HTMLElementTagNameMap {
113
+ 'qti-assessment-item': QtiAssessmentItem;
114
+ }
115
+ }
116
+
117
+ export { OutcomeVariable as O, QtiElement as Q, ResponseVariable as R, VariableDeclaration as V, QtiAssessmentItem as a };