@pie-element/ebsr 12.0.1-next.0 → 12.0.1
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/configure/package.json +3 -3
- package/controller/package.json +3 -3
- package/esm/configure.js +8054 -0
- package/esm/configure.js.map +1 -0
- package/esm/controller.js +549 -0
- package/esm/controller.js.map +1 -0
- package/esm/element.js +163 -0
- package/esm/element.js.map +1 -0
- package/esm/print.js +209 -0
- package/esm/print.js.map +1 -0
- package/module/element.js +1 -1
- package/module/index.html +1 -1
- package/module/manifest.json +1 -1
- package/module/print.html +1 -1
- package/module/print.js +1 -1
- package/package.json +24 -6
package/esm/element.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { SessionChangedEvent } from '@pie-framework/pie-player-events';
|
|
2
|
+
import MultipleChoice from '@pie-element/multiple-choice';
|
|
3
|
+
import get from 'lodash/get';
|
|
4
|
+
import debug from 'debug';
|
|
5
|
+
|
|
6
|
+
function _defineProperty(obj, key, value) {
|
|
7
|
+
if (key in obj) {
|
|
8
|
+
Object.defineProperty(obj, key, {
|
|
9
|
+
value: value,
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true
|
|
13
|
+
});
|
|
14
|
+
} else {
|
|
15
|
+
obj[key] = value;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return obj;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
|
+
|
|
23
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
24
|
+
var SESSION_CHANGED = SessionChangedEvent.TYPE;
|
|
25
|
+
var MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
26
|
+
var log = debug('pie-elements:ebsr');
|
|
27
|
+
|
|
28
|
+
class EbsrMC extends MultipleChoice {}
|
|
29
|
+
|
|
30
|
+
var defineMultipleChoice = () => {
|
|
31
|
+
if (!customElements.get(MC_TAG_NAME)) {
|
|
32
|
+
customElements.define(MC_TAG_NAME, EbsrMC);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
defineMultipleChoice();
|
|
37
|
+
|
|
38
|
+
var isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
|
|
39
|
+
|
|
40
|
+
var isSessionComplete = session => {
|
|
41
|
+
var a = get(session, 'value.partA.value');
|
|
42
|
+
var b = get(session, 'value.partB.value');
|
|
43
|
+
return isNonEmptyArray(a) && isNonEmptyArray(b);
|
|
44
|
+
};
|
|
45
|
+
class Ebsr extends HTMLElement {
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
|
|
49
|
+
_defineProperty(this, "onSessionUpdated", e => {
|
|
50
|
+
if (e.target === this) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
e.stopImmediatePropagation();
|
|
56
|
+
var id = e.target.getAttribute('id');
|
|
57
|
+
|
|
58
|
+
if (id) {
|
|
59
|
+
var key = "part".concat(id.toUpperCase());
|
|
60
|
+
|
|
61
|
+
if (e.update) {
|
|
62
|
+
this._model[key] = e.update;
|
|
63
|
+
} //TODO: accessing a private property here. The session event should contain the update in future to prevent this.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
this.dispatchSessionChanged(e.srcElement._session, key);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
this._model = {};
|
|
71
|
+
this._session = {};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
set model(m) {
|
|
75
|
+
this._model = m;
|
|
76
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
77
|
+
this.setPartModel(this.partA, 'partA');
|
|
78
|
+
this.setPartModel(this.partB, 'partB');
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
set session(s) {
|
|
83
|
+
this._session = s;
|
|
84
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
85
|
+
this.setPartSession(this.partA, 'partA');
|
|
86
|
+
this.setPartSession(this.partB, 'partB');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get session() {
|
|
91
|
+
return this._session;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
setPartModel(part, key) {
|
|
95
|
+
if (this._model && this._model[key] && part) {
|
|
96
|
+
var {
|
|
97
|
+
mode
|
|
98
|
+
} = this._model;
|
|
99
|
+
part.model = _objectSpread(_objectSpread({}, this._model[key]), {}, {
|
|
100
|
+
mode,
|
|
101
|
+
keyMode: this._model[key].choicePrefix
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
setPartSession(part, key) {
|
|
107
|
+
if (this._session && this._model && part) {
|
|
108
|
+
var {
|
|
109
|
+
value
|
|
110
|
+
} = this._session;
|
|
111
|
+
part.session = value && value[key] ? value[key] : {
|
|
112
|
+
id: key
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
dispatchSessionChanged(partSession, key) {
|
|
118
|
+
this._session.value = _objectSpread(_objectSpread({}, this._session.value), {}, {
|
|
119
|
+
[key]: partSession
|
|
120
|
+
});
|
|
121
|
+
log('[onSessionChanged] session: ', this._session);
|
|
122
|
+
var complete = isSessionComplete(this._session);
|
|
123
|
+
this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
get partA() {
|
|
127
|
+
return this.querySelector("".concat(MC_TAG_NAME, "#a"));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
get partB() {
|
|
131
|
+
return this.querySelector("".concat(MC_TAG_NAME, "#b"));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
connectedCallback() {
|
|
135
|
+
this._render();
|
|
136
|
+
|
|
137
|
+
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
disconnectedCallback() {
|
|
141
|
+
this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
_render() {
|
|
145
|
+
var _this$_model, _this$_model$extraCSS;
|
|
146
|
+
|
|
147
|
+
this.ariaLabel = 'Two-Part Question';
|
|
148
|
+
this.role = 'region';
|
|
149
|
+
this.innerHTML = "\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ".concat((_this$_model = this._model) === null || _this$_model === void 0 ? void 0 : (_this$_model$extraCSS = _this$_model.extraCSSRules) === null || _this$_model$extraCSS === void 0 ? void 0 : _this$_model$extraCSS.rules, "\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <").concat(MC_TAG_NAME, " id=\"a\"></").concat(MC_TAG_NAME, ">\n <").concat(MC_TAG_NAME, " id=\"b\"></").concat(MC_TAG_NAME, ">\n "); // when item is re-rendered (due to connectedCallback), if the custom element is already defined,
|
|
150
|
+
// we need to set the model and session, otherwise the setters are not reached again
|
|
151
|
+
|
|
152
|
+
if (customElements.get(MC_TAG_NAME)) {
|
|
153
|
+
this.setPartModel(this.partA, 'partA');
|
|
154
|
+
this.setPartModel(this.partB, 'partB');
|
|
155
|
+
this.setPartSession(this.partA, 'partA');
|
|
156
|
+
this.setPartSession(this.partB, 'partB');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export { Ebsr as default, isSessionComplete };
|
|
163
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/index.js"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport get from 'lodash/get';\nimport debug from 'debug';\n\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst log = debug('pie-elements:ebsr');\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n get session() {\n return this._session;\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n const { mode } = this._model;\n\n part.model = {\n ...this._model[key],\n mode,\n keyMode: this._model[key].choicePrefix,\n };\n }\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.ariaLabel = 'Two-Part Question';\n this.role = 'region';\n this.innerHTML = `\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ${this._model?.extraCSSRules?.rules}\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n `;\n\n // when item is re-rendered (due to connectedCallback), if the custom element is already defined,\n // we need to set the model and session, otherwise the setters are not reached again\n if (customElements.get(MC_TAG_NAME)) {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n }\n }\n}\n"],"names":["SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","debug","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","HTMLElement","constructor","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","model","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","ariaLabel","role","innerHTML","extraCSSRules","rules"],"mappings":"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"}
|
package/esm/print.js
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
2
|
+
import MultipleChoice from '@pie-element/multiple-choice';
|
|
3
|
+
import debug from 'debug';
|
|
4
|
+
import get from 'lodash/get';
|
|
5
|
+
import { SessionChangedEvent } from '@pie-framework/pie-player-events';
|
|
6
|
+
import Translator from '@pie-lib/translator';
|
|
7
|
+
|
|
8
|
+
function _defineProperty(obj, key, value) {
|
|
9
|
+
if (key in obj) {
|
|
10
|
+
Object.defineProperty(obj, key, {
|
|
11
|
+
value: value,
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true
|
|
15
|
+
});
|
|
16
|
+
} else {
|
|
17
|
+
obj[key] = value;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return obj;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
24
|
+
|
|
25
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
26
|
+
var MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
27
|
+
var SESSION_CHANGED = SessionChangedEvent.TYPE;
|
|
28
|
+
var {
|
|
29
|
+
translator
|
|
30
|
+
} = Translator;
|
|
31
|
+
var log = debug('pie-element:ebsr:print');
|
|
32
|
+
/**
|
|
33
|
+
* Live in same package as main element - so we can access some of the shared comps!
|
|
34
|
+
*
|
|
35
|
+
* - update pslb to build print if src/print.js is there
|
|
36
|
+
* - update demo el
|
|
37
|
+
* - get configure/controller building
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
var preparePrintModel = (model, opts) => {
|
|
41
|
+
var instr = opts.role === 'instructor';
|
|
42
|
+
model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
|
|
43
|
+
model.teacherInstructions = instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
|
|
44
|
+
model.showTeacherInstructions = instr;
|
|
45
|
+
model.alwaysShowCorrect = instr;
|
|
46
|
+
model.mode = instr ? 'evaluate' : 'gather';
|
|
47
|
+
model.disabled = true;
|
|
48
|
+
model.animationsDisabled = true;
|
|
49
|
+
model.lockChoiceOrder = true;
|
|
50
|
+
model.choicesLayout = model.choicesLayout || 'vertical';
|
|
51
|
+
var choices = cloneDeep(model.choices);
|
|
52
|
+
model.choices = choices.map(c => {
|
|
53
|
+
c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;
|
|
54
|
+
c.hideTick = instr;
|
|
55
|
+
c.feedback = undefined;
|
|
56
|
+
return c;
|
|
57
|
+
});
|
|
58
|
+
model.keyMode = model.choicePrefix || 'letters';
|
|
59
|
+
return model;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
class EbsrMC extends MultipleChoice {}
|
|
63
|
+
|
|
64
|
+
var defineMultipleChoice = () => {
|
|
65
|
+
if (!customElements.get(MC_TAG_NAME)) {
|
|
66
|
+
customElements.define(MC_TAG_NAME, EbsrMC);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
defineMultipleChoice();
|
|
71
|
+
|
|
72
|
+
var isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
|
|
73
|
+
|
|
74
|
+
var isSessionComplete = session => {
|
|
75
|
+
var a = get(session, 'value.partA.value');
|
|
76
|
+
var b = get(session, 'value.partB.value');
|
|
77
|
+
return isNonEmptyArray(a) && isNonEmptyArray(b);
|
|
78
|
+
};
|
|
79
|
+
class Ebsr extends HTMLElement {
|
|
80
|
+
constructor() {
|
|
81
|
+
super();
|
|
82
|
+
|
|
83
|
+
_defineProperty(this, "onSessionUpdated", e => {
|
|
84
|
+
if (e.target === this) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
e.stopImmediatePropagation();
|
|
90
|
+
var id = e.target.getAttribute('id');
|
|
91
|
+
|
|
92
|
+
if (id) {
|
|
93
|
+
var key = "part".concat(id.toUpperCase());
|
|
94
|
+
|
|
95
|
+
if (e.update) {
|
|
96
|
+
this._model[key] = e.update;
|
|
97
|
+
} //TODO: accessing a private property here. The session event should contain the update in future to prevent this.
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
this.dispatchSessionChanged(e.srcElement._session, key);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
this._model = {};
|
|
105
|
+
this._session = {};
|
|
106
|
+
this._options = null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
set model(m) {
|
|
110
|
+
this._model = m;
|
|
111
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
112
|
+
this.setPartModel(this.partA, 'partA');
|
|
113
|
+
this.setPartModel(this.partB, 'partB');
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
set session(s) {
|
|
118
|
+
this._session = s;
|
|
119
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
120
|
+
this.setPartSession(this.partA, 'partA');
|
|
121
|
+
this.setPartSession(this.partB, 'partB');
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
setPartModel(part, key) {
|
|
126
|
+
if (this._model && this._model[key] && part) {
|
|
127
|
+
var labels = {
|
|
128
|
+
'partA': undefined,
|
|
129
|
+
'partB': undefined
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
if (this._model.partLabels) {
|
|
133
|
+
var language = this._model.language;
|
|
134
|
+
labels = {
|
|
135
|
+
'partA': translator.t('ebsr.part', {
|
|
136
|
+
lng: language,
|
|
137
|
+
index: this._model.partLabelType === 'Letters' ? 'A' : '1'
|
|
138
|
+
}),
|
|
139
|
+
'partB': translator.t('ebsr.part', {
|
|
140
|
+
lng: language,
|
|
141
|
+
index: this._model.partLabelType === 'Letters' ? 'B' : '2'
|
|
142
|
+
})
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
part.model = _objectSpread(_objectSpread({}, preparePrintModel(this._model[key], this._options)), {}, {
|
|
147
|
+
keyMode: this._model[key].choicePrefix,
|
|
148
|
+
partLabel: labels[key]
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
if (!part._session) {
|
|
152
|
+
// for print, "set session" is not called,
|
|
153
|
+
// but ebsr needs sessions in order to render the elements,
|
|
154
|
+
// so we set it here it was not set already
|
|
155
|
+
part.session = {};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
set options(o) {
|
|
161
|
+
this._options = o;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
setPartSession(part, key) {
|
|
165
|
+
if (this._session && this._model && part) {
|
|
166
|
+
var {
|
|
167
|
+
value
|
|
168
|
+
} = this._session;
|
|
169
|
+
part.session = value && value[key] ? value[key] : {
|
|
170
|
+
id: key
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
dispatchSessionChanged(partSession, key) {
|
|
176
|
+
this._session.value = _objectSpread(_objectSpread({}, this._session.value), {}, {
|
|
177
|
+
[key]: partSession
|
|
178
|
+
});
|
|
179
|
+
log('[onSessionChanged] session: ', this._session);
|
|
180
|
+
var complete = isSessionComplete(this._session);
|
|
181
|
+
this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
get partA() {
|
|
185
|
+
return this.querySelector("".concat(MC_TAG_NAME, "#a"));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
get partB() {
|
|
189
|
+
return this.querySelector("".concat(MC_TAG_NAME, "#b"));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
connectedCallback() {
|
|
193
|
+
this._render();
|
|
194
|
+
|
|
195
|
+
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
disconnectedCallback() {
|
|
199
|
+
this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
_render() {
|
|
203
|
+
this.innerHTML = "\n <div>\n <".concat(MC_TAG_NAME, " id=\"a\"></").concat(MC_TAG_NAME, ">\n <").concat(MC_TAG_NAME, " id=\"b\"></").concat(MC_TAG_NAME, ">\n </div>\n ");
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export { Ebsr as default, isSessionComplete };
|
|
209
|
+
//# sourceMappingURL=print.js.map
|
package/esm/print.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/print.js"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import cloneDeep from 'lodash/cloneDeep';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport debug from 'debug';\nimport get from 'lodash/get';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst log = debug('pie-element:ebsr:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : 'gather';\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.lockChoiceOrder = true;\n model.choicesLayout = model.choicesLayout || 'vertical';\n\n const choices = cloneDeep(model.choices);\n\n model.choices = choices.map((c) => {\n c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n model.keyMode = model.choicePrefix || 'letters';\n\n return model;\n};\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n this._options = null;\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n let labels = {\n 'partA': undefined,\n 'partB': undefined\n };\n\n if (this._model.partLabels) {\n const language = this._model.language;\n\n labels = {\n 'partA': translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'A' : '1'\n }),\n 'partB': translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'B' : '2'\n })\n };\n }\n\n part.model = {\n ...preparePrintModel(this._model[key], this._options),\n keyMode: this._model[key].choicePrefix,\n partLabel: labels[key]\n };\n\n if (!part._session) {\n // for print, \"set session\" is not called,\n // but ebsr needs sessions in order to render the elements,\n // so we set it here it was not set already\n part.session = {};\n }\n }\n }\n\n set options(o) {\n this._options = o;\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.innerHTML = `\n <div>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n </div>\n `;\n }\n}\n"],"names":["MC_TAG_NAME","SESSION_CHANGED","SessionChangedEvent","TYPE","translator","Translator","log","debug","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","cloneDeep","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","HTMLElement","constructor","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","_options","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","labels","partLabels","language","t","lng","index","partLabelType","partLabel","options","o","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","innerHTML"],"mappings":";;;;;;;AAAe,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACzD,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;AAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;AACpC,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,QAAQ,EAAE,IAAI;AACpB,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb;;;;;ACRA,IAAMA,WAAW,GAAG,sBAApB,CAAA;AACA,IAAMC,eAAe,GAAGC,mBAAmB,CAACC,IAA5C,CAAA;AAGA,IAAM;AAAEC,EAAAA,UAAAA;AAAF,CAAA,GAAiBC,UAAvB,CAAA;AAEA,IAAMC,GAAG,GAAGC,KAAK,CAAC,wBAAD,CAAjB,CAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,iBAAiB,GAAG,CAACC,KAAD,EAAQC,IAAR,KAAiB;AACzC,EAAA,IAAMC,KAAK,GAAGD,IAAI,CAACE,IAAL,KAAc,YAA5B,CAAA;AAEAH,EAAAA,KAAK,CAACI,MAAN,GAAeJ,KAAK,CAACK,aAAN,KAAwB,KAAxB,GAAgCL,KAAK,CAACI,MAAtC,GAA+CE,SAA9D,CAAA;AACAN,EAAAA,KAAK,CAACO,mBAAN,GACEL,KAAK,IAAIF,KAAK,CAACQ,0BAAN,KAAqC,KAA9C,GAAsDR,KAAK,CAACO,mBAA5D,GAAkFD,SADpF,CAAA;AAEAN,EAAAA,KAAK,CAACS,uBAAN,GAAgCP,KAAhC,CAAA;AACAF,EAAAA,KAAK,CAACU,iBAAN,GAA0BR,KAA1B,CAAA;AACAF,EAAAA,KAAK,CAACW,IAAN,GAAaT,KAAK,GAAG,UAAH,GAAgB,QAAlC,CAAA;AAEAF,EAAAA,KAAK,CAACY,QAAN,GAAiB,IAAjB,CAAA;AACAZ,EAAAA,KAAK,CAACa,kBAAN,GAA2B,IAA3B,CAAA;AACAb,EAAAA,KAAK,CAACc,eAAN,GAAwB,IAAxB,CAAA;AACAd,EAAAA,KAAK,CAACe,aAAN,GAAsBf,KAAK,CAACe,aAAN,IAAuB,UAA7C,CAAA;AAEA,EAAA,IAAMC,OAAO,GAAGC,SAAS,CAACjB,KAAK,CAACgB,OAAP,CAAzB,CAAA;AAEAhB,EAAAA,KAAK,CAACgB,OAAN,GAAgBA,OAAO,CAACE,GAAR,CAAaC,CAAD,IAAO;AACjCA,IAAAA,CAAC,CAACC,SAAF,GAAclB,KAAK,IAAIF,KAAK,CAACqB,gBAAN,KAA2B,KAApC,GAA4CF,CAAC,CAACC,SAA9C,GAA0Dd,SAAxE,CAAA;AACAa,IAAAA,CAAC,CAACG,QAAF,GAAapB,KAAb,CAAA;AACAiB,IAAAA,CAAC,CAACI,QAAF,GAAajB,SAAb,CAAA;AACA,IAAA,OAAOa,CAAP,CAAA;AACD,GALe,CAAhB,CAAA;AAOAnB,EAAAA,KAAK,CAACwB,OAAN,GAAgBxB,KAAK,CAACyB,YAAN,IAAsB,SAAtC,CAAA;AAEA,EAAA,OAAOzB,KAAP,CAAA;AACD,CA3BD,CAAA;;AA6BA,MAAM0B,MAAN,SAAqBC,cAArB,CAAoC,EAAA;;AAEpC,IAAMC,oBAAoB,GAAG,MAAM;AACjC,EAAA,IAAI,CAACC,cAAc,CAACC,GAAf,CAAmBvC,WAAnB,CAAL,EAAsC;AACpCsC,IAAAA,cAAc,CAACE,MAAf,CAAsBxC,WAAtB,EAAmCmC,MAAnC,CAAA,CAAA;AACD,GAAA;AACF,CAJD,CAAA;;AAMAE,oBAAoB,EAAA,CAAA;;AAEpB,IAAMI,eAAe,GAAIC,CAAD,IAAOC,KAAK,CAACC,OAAN,CAAcF,CAAd,CAAoBA,IAAAA,CAAC,CAACG,MAAF,GAAW,CAA9D,CAAA;;AAEaC,IAAAA,iBAAiB,GAAIC,OAAD,IAAa;AAC5C,EAAA,IAAML,CAAC,GAAGH,GAAG,CAACQ,OAAD,EAAU,mBAAV,CAAb,CAAA;AACA,EAAA,IAAMC,CAAC,GAAGT,GAAG,CAACQ,OAAD,EAAU,mBAAV,CAAb,CAAA;AAEA,EAAON,OAAAA,eAAe,CAACC,CAAD,CAAf,IAAsBD,eAAe,CAACO,CAAD,CAA5C,CAAA;AACD,EALM;AAOQ,MAAMC,IAAN,SAAmBC,WAAnB,CAA+B;AAC5CC,EAAAA,WAAW,GAAG;AACZ,IAAA,KAAA,EAAA,CAAA;;AADY,IAAA,eAAA,CAAA,IAAA,EAAA,kBAAA,EAOMC,CAAD,IAAO;AACxB,MAAA,IAAIA,CAAC,CAACC,MAAF,KAAa,IAAjB,EAAuB;AACrB,QAAA,OAAA;AACD,OAAA;;AAEDD,MAAAA,CAAC,CAACE,cAAF,EAAA,CAAA;AACAF,MAAAA,CAAC,CAACG,wBAAF,EAAA,CAAA;AAEA,MAAMC,IAAAA,EAAE,GAAGJ,CAAC,CAACC,MAAF,CAASI,YAAT,CAAsB,IAAtB,CAAX,CAAA;;AAEA,MAAA,IAAID,EAAJ,EAAQ;AACN,QAAA,IAAME,GAAG,GAAUF,MAAAA,CAAAA,MAAAA,CAAAA,EAAE,CAACG,WAAH,EAAV,CAAT,CAAA;;AAEA,QAAIP,IAAAA,CAAC,CAACQ,MAAN,EAAc;AACZ,UAAA,IAAA,CAAKC,MAAL,CAAYH,GAAZ,CAAmBN,GAAAA,CAAC,CAACQ,MAArB,CAAA;AACD,SALK;;;AAON,QAAKE,IAAAA,CAAAA,sBAAL,CAA4BV,CAAC,CAACW,UAAF,CAAaC,QAAzC,EAAmDN,GAAnD,CAAA,CAAA;AACD,OAAA;AACF,KA1Ba,CAAA,CAAA;;AAEZ,IAAKG,IAAAA,CAAAA,MAAL,GAAc,EAAd,CAAA;AACA,IAAKG,IAAAA,CAAAA,QAAL,GAAgB,EAAhB,CAAA;AACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;AACD,GAAA;;AAuBQ,EAALxD,IAAAA,KAAK,CAACyD,CAAD,EAAI;AACX,IAAKL,IAAAA,CAAAA,MAAL,GAAcK,CAAd,CAAA;AAEA5B,IAAAA,cAAc,CAAC6B,WAAf,CAA2BnE,WAA3B,CAAwCoE,CAAAA,IAAxC,CAA6C,MAAM;AACjD,MAAA,IAAA,CAAKC,YAAL,CAAkB,IAAKC,CAAAA,KAAvB,EAA8B,OAA9B,CAAA,CAAA;AACA,MAAA,IAAA,CAAKD,YAAL,CAAkB,IAAKE,CAAAA,KAAvB,EAA8B,OAA9B,CAAA,CAAA;AACD,KAHD,CAAA,CAAA;AAID,GAAA;;AAEU,EAAPxB,IAAAA,OAAO,CAACyB,CAAD,EAAI;AACb,IAAKR,IAAAA,CAAAA,QAAL,GAAgBQ,CAAhB,CAAA;AAEAlC,IAAAA,cAAc,CAAC6B,WAAf,CAA2BnE,WAA3B,CAAwCoE,CAAAA,IAAxC,CAA6C,MAAM;AACjD,MAAA,IAAA,CAAKK,cAAL,CAAoB,IAAKH,CAAAA,KAAzB,EAAgC,OAAhC,CAAA,CAAA;AACA,MAAA,IAAA,CAAKG,cAAL,CAAoB,IAAKF,CAAAA,KAAzB,EAAgC,OAAhC,CAAA,CAAA;AACD,KAHD,CAAA,CAAA;AAID,GAAA;;AAEDF,EAAAA,YAAY,CAACK,IAAD,EAAOhB,GAAP,EAAY;AACtB,IAAI,IAAA,IAAA,CAAKG,MAAL,IAAe,IAAKA,CAAAA,MAAL,CAAYH,GAAZ,CAAf,IAAmCgB,IAAvC,EAA6C;AAC3C,MAAA,IAAIC,MAAM,GAAG;AACX,QAAA,OAAA,EAAS5D,SADE;AAEX,QAASA,OAAAA,EAAAA,SAAAA;AAFE,OAAb,CAAA;;AAKA,MAAA,IAAI,IAAK8C,CAAAA,MAAL,CAAYe,UAAhB,EAA4B;AAC1B,QAAA,IAAMC,QAAQ,GAAG,IAAKhB,CAAAA,MAAL,CAAYgB,QAA7B,CAAA;AAEAF,QAAAA,MAAM,GAAG;AACP,UAAA,OAAA,EAASvE,UAAU,CAAC0E,CAAX,CAAa,WAAb,EAA0B;AACjCC,YAAAA,GAAG,EAAEF,QAD4B;AAEjCG,YAAAA,KAAK,EAAE,IAAA,CAAKnB,MAAL,CAAYoB,aAAZ,KAA8B,SAA9B,GAA0C,GAA1C,GAAgD,GAAA;AAFtB,WAA1B,CADF;AAKP,UAAA,OAAA,EAAS7E,UAAU,CAAC0E,CAAX,CAAa,WAAb,EAA0B;AACjCC,YAAAA,GAAG,EAAEF,QAD4B;AAEjCG,YAAAA,KAAK,EAAE,IAAA,CAAKnB,MAAL,CAAYoB,aAAZ,KAA8B,SAA9B,GAA0C,GAA1C,GAAgD,GAAA;AAFtB,WAA1B,CAAA;AALF,SAAT,CAAA;AAUD,OAAA;;AAEDP,MAAAA,IAAI,CAACjE,KAAL,GAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EACKD,iBAAiB,CAAC,IAAA,CAAKqD,MAAL,CAAYH,GAAZ,CAAD,EAAmB,IAAA,CAAKO,QAAxB,CADtB,CAAA,EAAA,EAAA,EAAA;AAEEhC,QAAAA,OAAO,EAAE,IAAA,CAAK4B,MAAL,CAAYH,GAAZ,EAAiBxB,YAF5B;AAGEgD,QAAAA,SAAS,EAAEP,MAAM,CAACjB,GAAD,CAAA;AAHnB,OAAA,CAAA,CAAA;;AAMA,MAAA,IAAI,CAACgB,IAAI,CAACV,QAAV,EAAoB;AAClB;AACA;AACA;AACAU,QAAAA,IAAI,CAAC3B,OAAL,GAAe,EAAf,CAAA;AACD,OAAA;AACF,KAAA;AACF,GAAA;;AAEU,EAAPoC,IAAAA,OAAO,CAACC,CAAD,EAAI;AACb,IAAKnB,IAAAA,CAAAA,QAAL,GAAgBmB,CAAhB,CAAA;AACD,GAAA;;AAEDX,EAAAA,cAAc,CAACC,IAAD,EAAOhB,GAAP,EAAY;AACxB,IAAA,IAAI,KAAKM,QAAL,IAAiB,KAAKH,MAAtB,IAAgCa,IAApC,EAA0C;AACxC,MAAM,IAAA;AAAEW,QAAAA,KAAAA;AAAF,OAAA,GAAY,KAAKrB,QAAvB,CAAA;AACAU,MAAAA,IAAI,CAAC3B,OAAL,GAAesC,KAAK,IAAIA,KAAK,CAAC3B,GAAD,CAAd,GAAsB2B,KAAK,CAAC3B,GAAD,CAA3B,GAAmC;AAAEF,QAAAA,EAAE,EAAEE,GAAAA;AAAN,OAAlD,CAAA;AACD,KAAA;AACF,GAAA;;AAEDI,EAAAA,sBAAsB,CAACwB,WAAD,EAAc5B,GAAd,EAAmB;AACvC,IAAA,IAAA,CAAKM,QAAL,CAAcqB,KAAd,mCACK,IAAKrB,CAAAA,QAAL,CAAcqB,KADnB,CAAA,EAAA,EAAA,EAAA;AAEE,MAAA,CAAC3B,GAAD,GAAO4B,WAAAA;AAFT,KAAA,CAAA,CAAA;AAKAhF,IAAAA,GAAG,CAAC,8BAAD,EAAiC,IAAA,CAAK0D,QAAtC,CAAH,CAAA;AACA,IAAA,IAAMuB,QAAQ,GAAGzC,iBAAiB,CAAC,IAAA,CAAKkB,QAAN,CAAlC,CAAA;AACA,IAAA,IAAA,CAAKwB,aAAL,CAAmB,IAAItF,mBAAJ,CAAwB,IAAA,CAAKuF,OAAL,CAAaC,WAAb,EAAxB,EAAoDH,QAApD,CAAnB,CAAA,CAAA;AACD,GAAA;;AAEQ,EAAA,IAALjB,KAAK,GAAG;AACV,IAAA,OAAO,IAAKqB,CAAAA,aAAL,CAAsB3F,EAAAA,CAAAA,MAAAA,CAAAA,WAAtB,EAAP,IAAA,CAAA,CAAA,CAAA;AACD,GAAA;;AAEQ,EAAA,IAALuE,KAAK,GAAG;AACV,IAAA,OAAO,IAAKoB,CAAAA,aAAL,CAAsB3F,EAAAA,CAAAA,MAAAA,CAAAA,WAAtB,EAAP,IAAA,CAAA,CAAA,CAAA;AACD,GAAA;;AAED4F,EAAAA,iBAAiB,GAAG;AAClB,IAAA,IAAA,CAAKC,OAAL,EAAA,CAAA;;AACA,IAAA,IAAA,CAAKC,gBAAL,CAAsB7F,eAAtB,EAAuC,KAAK8F,gBAA5C,CAAA,CAAA;AACD,GAAA;;AAEDC,EAAAA,oBAAoB,GAAG;AACrB,IAAA,IAAA,CAAKC,mBAAL,CAAyBhG,eAAzB,EAA0C,KAAK8F,gBAA/C,CAAA,CAAA;AACD,GAAA;;AAEDF,EAAAA,OAAO,GAAG;AACR,IAAKK,IAAAA,CAAAA,SAAL,qCAEOlG,WAFP,EAAA,cAAA,CAAA,CAAA,MAAA,CAE+BA,WAF/B,EAGOA,cAAAA,CAAAA,CAAAA,MAAAA,CAAAA,WAHP,yBAG+BA,WAH/B,EAAA,uBAAA,CAAA,CAAA;AAMD,GAAA;;AAlI2C;;;;"}
|