@researchdatabox/sails-ng-common 0.0.1-beta.9700 → 0.0.1-beta.9873

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.
@@ -6,29 +6,7 @@ export declare class QuestionTreeHelper {
6
6
  private readonly logName;
7
7
  private readonly defaultQuestionTreeLabelPrefix;
8
8
  private readonly logger;
9
- private readonly propertiesHelper;
10
9
  constructor(logger: ILogger);
11
- /**
12
- * Convert the question tree rules to a JSONata expression to control the visibility.
13
- * @param lineagePath The question tree lineage paths.
14
- * @param rule The current question rule.
15
- * @return The JSONata expression.
16
- */
17
- questionTreeRuleToExpression(lineagePath: LineagePaths, rule: QuestionTreeQuestionRules): string;
18
- /**
19
- * Build the JSONata reference / identifier from the question tree lineage path and qauestion id.
20
- * @param lineagePath The question tree lineage paths.
21
- * @param questionId The question id.
22
- * @return The JSONata reference / identifier.
23
- */
24
- questionReference(lineagePath: LineagePaths, questionId: string): string;
25
- /**
26
- * Convert the visibility JSONata rule expression to a JSONata expression to set the model.value.
27
- * @param ruleExpression The visibility JSONata rule expression.
28
- * @param questionReference The JSONata question reference / identifier.
29
- * @return The JSONata expression to set the model.value.
30
- */
31
- questionTreeModelValueExpression(ruleExpression: string, questionReference: string): string;
32
10
  validateQuestions(questions: QuestionTreeQuestion[]): {
33
11
  errors: string[];
34
12
  questionAnswerValuesMap: {
@@ -52,10 +30,29 @@ export declare class QuestionTreeHelper {
52
30
  * @param name The question tree name.
53
31
  * @param lineagePath The question tree lineage path.
54
32
  * @param item The question tree component config.
55
- * @param question The question config to transform.
33
+ * @param modelData The full question tree model data.
34
+ * @param questionId The question config to transform.
35
+ * @param questions The questions config.
56
36
  * @return A reusable form definition representing the question and available answers.
57
37
  */
58
- transformQuestionConfig(name: string | null, lineagePath: LineagePaths, item: QuestionTreeFieldComponentDefinitionOutline, question: QuestionTreeQuestion): ReusableFormComponentDefinitionFrame;
38
+ transformQuestionConfig(name: string, lineagePath: LineagePaths, item: QuestionTreeFieldComponentDefinitionOutline, modelData: unknown, questionId: string, questions: QuestionTreeQuestion[]): ReusableFormComponentDefinitionFrame;
39
+ private questionLabelPrefix;
59
40
  private questionLabelKey;
60
41
  private questionHelpKey;
42
+ private questionAnswerLabelKey;
61
43
  }
44
+ /**
45
+ * Determine whether a question should be 'activated' based on the provided question tree form model data.
46
+ * - An activated question is visible and can have a non-null data model. A question is active if its rules evaluate to true.
47
+ * - A deactivated question is not visible and its form model data must be null.
48
+ * @param questionId The question id.
49
+ * @param questions The questions config.
50
+ * @param data The current question tree form data.
51
+ */
52
+ export declare function isQuestionTreeQuestionActivated(questionId: string, questions: QuestionTreeQuestion[], data: Record<string, unknown>): boolean;
53
+ /**
54
+ * Determine whether a rule is true given the data.
55
+ * @param rule The question tree question rule to check.
56
+ * @param data The question tree data.
57
+ */
58
+ export declare function isQuestionTreeQuestionRuleTrue(rule: QuestionTreeQuestionRules, data: Record<string, unknown>): boolean;
@@ -1,81 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QuestionTreeHelper = void 0;
4
- const common_model_1 = require("../visitor/common.model");
4
+ exports.isQuestionTreeQuestionActivated = isQuestionTreeQuestionActivated;
5
+ exports.isQuestionTreeQuestionRuleTrue = isQuestionTreeQuestionRuleTrue;
6
+ const helpers_1 = require("../helpers");
5
7
  class QuestionTreeHelper {
6
8
  logName = "QuestionTreeHelper";
7
9
  defaultQuestionTreeLabelPrefix = "questiontree";
8
10
  logger;
9
- propertiesHelper;
10
11
  constructor(logger) {
11
12
  this.logger = logger;
12
- this.propertiesHelper = new common_model_1.PropertiesHelper();
13
- }
14
- /**
15
- * Convert the question tree rules to a JSONata expression to control the visibility.
16
- * @param lineagePath The question tree lineage paths.
17
- * @param rule The current question rule.
18
- * @return The JSONata expression.
19
- */
20
- questionTreeRuleToExpression(lineagePath, rule) {
21
- switch (rule.op) {
22
- case "true":
23
- return 'true';
24
- case "and":
25
- return rule.args.map(arg => `(${this.questionTreeRuleToExpression(lineagePath, arg)})`).join(' and ');
26
- case "or":
27
- return rule.args.map(arg => `(${this.questionTreeRuleToExpression(lineagePath, arg)})`).join(' or ');
28
- case "in":
29
- case "notin":
30
- case "only":
31
- // Build the jsonata format identifier.
32
- // Use the question tree angular component path, plus the question id as the path.
33
- const identifierString = this.questionReference(lineagePath, rule.q);
34
- // The value can be converted to a json array for the jsonata expression.
35
- const values = (Array.isArray(rule.a) ? rule.a : [rule.a]).map(i => this.propertiesHelper.toFieldReference(i));
36
- const valueString = JSON.stringify(values);
37
- if (rule.op === "in") {
38
- return `$count(${identifierString}[][$ in ${valueString}]) > 0`;
39
- }
40
- else if (rule.op === "only") {
41
- return `${identifierString}[] = ${valueString}`;
42
- }
43
- else if (rule.op === "notin") {
44
- return `$count(${identifierString}[][$not($ in ${valueString})]) = $count(${identifierString})`;
45
- }
46
- throw new Error(`${this.logName} unknown rule ${JSON.stringify(rule)}.`);
47
- default:
48
- throw new Error(`${this.logName} unknown rule ${JSON.stringify(rule)}.`);
49
- }
50
- }
51
- /**
52
- * Build the JSONata reference / identifier from the question tree lineage path and qauestion id.
53
- * @param lineagePath The question tree lineage paths.
54
- * @param questionId The question id.
55
- * @return The JSONata reference / identifier.
56
- */
57
- questionReference(lineagePath, questionId) {
58
- const path = [...lineagePath.dataModel, questionId];
59
- return `formData.${this.propertiesHelper.lineagePathToExpressionIdentifiers([...path])}`;
60
- }
61
- /**
62
- * Convert the visibility JSONata rule expression to a JSONata expression to set the model.value.
63
- * @param ruleExpression The visibility JSONata rule expression.
64
- * @param questionReference The JSONata question reference / identifier.
65
- * @return The JSONata expression to set the model.value.
66
- */
67
- questionTreeModelValueExpression(ruleExpression, questionReference) {
68
- // NOTE: A Question Tree component model.value could be set to null based on either of two criteria:
69
- // 1) Using the rule expression:
70
- // - If the rule expression is true, then component should be visible, use the existing model value.
71
- // - If the rule expression is false, then component should be hidden, so set the model.value to null.
72
- // 2) Using the visible state of the component:
73
- // - If the component is visible, use the existing data model value.
74
- // - If the component is hidden, set the model.value to null.
75
- // Chose to use the rule expression, as it is directly responsible for the changes.
76
- // However, there could be edge cases where the rule expression is not enough,
77
- // and the field.ui-attribute.changed might need to be used instead.
78
- return `(${ruleExpression} ? ${questionReference} : null)`;
79
13
  }
80
14
  validateQuestions(questions) {
81
15
  // Prepare question and answer info to assist checking for valid structure
@@ -179,71 +113,34 @@ class QuestionTreeHelper {
179
113
  * @param name The question tree name.
180
114
  * @param lineagePath The question tree lineage path.
181
115
  * @param item The question tree component config.
182
- * @param question The question config to transform.
116
+ * @param modelData The full question tree model data.
117
+ * @param questionId The question config to transform.
118
+ * @param questions The questions config.
183
119
  * @return A reusable form definition representing the question and available answers.
184
120
  */
185
- transformQuestionConfig(name, lineagePath, item, question) {
121
+ transformQuestionConfig(name, lineagePath, item, modelData, questionId, questions) {
186
122
  if (!lineagePath.angularComponentsJsonPointer) {
187
123
  throw new Error(`${this.logName}: Did not provide lineage path JSON pointer ${JSON.stringify({
188
124
  name, lineagePath, item
189
125
  })}`);
190
126
  }
191
- const id = question.id;
127
+ if (modelData !== undefined && ((0, helpers_1.guessType)(modelData) !== 'object' || typeof modelData !== 'object')) {
128
+ throw new Error(`${this.logName}: Expected model data to be an object, but got ${modelData}`);
129
+ }
130
+ const question = questions.find(q => q.id === questionId);
131
+ if (question === undefined) {
132
+ throw new Error(`${this.logName}: Could not find question id ${questionId}`);
133
+ }
134
+ const id = questionId;
192
135
  const answersMax = question.answersMax;
193
136
  const answers = question.answers;
194
- const rules = question.rules;
195
- const ruleExpression = this.questionTreeRuleToExpression(lineagePath, rules);
196
- const questionReference = this.questionReference(lineagePath, id);
197
- const modelValueExpression = this.questionTreeModelValueExpression(ruleExpression, questionReference);
198
- // TODO: Component visibility is based on the rule expressions, but the record data can change this.
199
- // For now, the visibility change due to record data is done on the client only.
200
- // It might be necessary to calculate the visibility on the server-side using the record data.
201
- const isVisible = !ruleExpression || ruleExpression === 'true';
202
- // Notes:
203
- // - condition is always executed, should be true or false, if true, then evals template
204
- // - The condition should restrict to the question tree.
205
- // - use formData in the template to get the current value of a component of the question tree
206
- // - Both the layout and component have `visible` properties, so they both need to be set.
207
- const configCondition = `${lineagePath.angularComponentsJsonPointer}::field.value.changed`;
208
- const expressions = isVisible ? undefined : [
209
- {
210
- // Show and hide the layout based on the rules for the question.
211
- name: `${name}-${id}-layoutvis-qt`,
212
- config: {
213
- template: ruleExpression,
214
- conditionKind: 'jsonpointer',
215
- condition: configCondition,
216
- target: `layout.visible`
217
- }
218
- },
219
- {
220
- // TODO: if the layout is changed to also control the component visibility, this expression can be removed.
221
- // Show and hide the component based on the rules for the question.
222
- name: `${name}-${id}-compvis-qt`,
223
- config: {
224
- template: ruleExpression,
225
- conditionKind: 'jsonpointer',
226
- condition: configCondition,
227
- target: `component.visible`
228
- }
229
- },
230
- {
231
- // Set the component value to null based on the rules for the question.
232
- name: `${name}-${id}-modval-qt`,
233
- config: {
234
- template: modelValueExpression,
235
- conditionKind: 'jsonpointer',
236
- condition: configCondition,
237
- target: `model.value`
238
- }
239
- },
240
- ];
137
+ const isVisible = isQuestionTreeQuestionActivated(id, questions, modelData);
241
138
  // build reusable component
242
139
  const hasOneAnswer = answersMax === 1;
243
140
  const componentOptions = answers.map(a => {
244
- return { value: a.value, label: a.label ?? `@${name}-${id}-${a.value}` };
141
+ return { value: a.value, label: this.questionAnswerLabelKey(name, id, a.value, a.label) };
245
142
  });
246
- const questionLabel = question.label !== undefined ? question.label : this.questionLabelKey(name, id);
143
+ const questionLabel = this.questionLabelKey(name, id, question.label);
247
144
  const questionHelpText = this.questionHelpKey(name, id);
248
145
  const componentAnswerOne = {
249
146
  overrides: { reusableFormName: "questiontree-answer-one" },
@@ -254,9 +151,11 @@ class QuestionTreeHelper {
254
151
  {
255
152
  name: "questiontree_answer_one",
256
153
  overrides: { replaceName: id },
257
- layout: { class: "DefaultLayout", config: { label: questionLabel, helpText: questionHelpText, visible: isVisible } },
154
+ layout: {
155
+ class: "DefaultLayout",
156
+ config: { label: questionLabel, helpText: questionHelpText, visible: isVisible }
157
+ },
258
158
  component: { class: "RadioInputComponent", config: { options: componentOptions, visible: isVisible } },
259
- expressions: expressions,
260
159
  },
261
160
  ],
262
161
  },
@@ -272,9 +171,11 @@ class QuestionTreeHelper {
272
171
  {
273
172
  name: 'questiontree_answer_one_more',
274
173
  overrides: { replaceName: id },
275
- layout: { class: 'DefaultLayout', config: { label: questionLabel, helpText: questionHelpText, visible: isVisible } },
174
+ layout: {
175
+ class: 'DefaultLayout',
176
+ config: { label: questionLabel, helpText: questionHelpText, visible: isVisible }
177
+ },
276
178
  component: { class: 'CheckboxInputComponent', config: { options: componentOptions, visible: isVisible } },
277
- expressions: expressions,
278
179
  },
279
180
  ],
280
181
  },
@@ -282,17 +183,109 @@ class QuestionTreeHelper {
282
183
  };
283
184
  return hasOneAnswer ? componentAnswerOne : componentAnswerMore;
284
185
  }
285
- questionLabelKey(componentName, label) {
286
- if (label.startsWith("@")) {
287
- return label;
186
+ questionLabelPrefix(componentName) {
187
+ return (componentName ?? "").trim().replace(/^@+/, "") || this.defaultQuestionTreeLabelPrefix;
188
+ }
189
+ questionLabelKey(componentName, questionId, questionLabel) {
190
+ if (!!questionLabel?.trim()) {
191
+ return questionLabel;
288
192
  }
289
- const keyPrefix = (componentName ?? "").trim().replace(/^@+/, "") || this.defaultQuestionTreeLabelPrefix;
290
- return `@${keyPrefix}-item-${label}-label`;
193
+ const keyPrefix = this.questionLabelPrefix(componentName);
194
+ return `@${keyPrefix}-item-${questionId}-label`;
291
195
  }
292
196
  questionHelpKey(componentName, questionId) {
293
- const keyPrefix = (componentName ?? "").trim().replace(/^@+/, "") || this.defaultQuestionTreeLabelPrefix;
197
+ const keyPrefix = this.questionLabelPrefix(componentName);
294
198
  return `@${keyPrefix}-item-${questionId}-help`;
295
199
  }
200
+ questionAnswerLabelKey(componentName, questionId, answerValue, answerLabel) {
201
+ if (!!answerLabel?.trim()) {
202
+ return answerLabel;
203
+ }
204
+ const keyPrefix = this.questionLabelPrefix(componentName);
205
+ return `@${keyPrefix}-item-${questionId}-${answerValue}-label`;
206
+ }
296
207
  }
297
208
  exports.QuestionTreeHelper = QuestionTreeHelper;
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29uZmlnL2NvbXBvbmVudC9xdWVzdGlvbi10cmVlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSwwREFBeUQ7QUFJekQsTUFBYSxrQkFBa0I7SUFDWixPQUFPLEdBQUcsb0JBQW9CLENBQUM7SUFDL0IsOEJBQThCLEdBQUcsY0FBYyxDQUFDO0lBQ2hELE1BQU0sQ0FBVTtJQUNoQixnQkFBZ0IsQ0FBbUI7SUFFcEQsWUFBWSxNQUFlO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLCtCQUFnQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNEJBQTRCLENBQUMsV0FBeUIsRUFBRSxJQUErQjtRQUM1RixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RyxLQUFLLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZHLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE1BQU07Z0JB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
209
+ /**
210
+ * Determine whether a question should be 'activated' based on the provided question tree form model data.
211
+ * - An activated question is visible and can have a non-null data model. A question is active if its rules evaluate to true.
212
+ * - A deactivated question is not visible and its form model data must be null.
213
+ * @param questionId The question id.
214
+ * @param questions The questions config.
215
+ * @param data The current question tree form data.
216
+ */
217
+ function isQuestionTreeQuestionActivated(questionId, questions, data) {
218
+ const questionIdsToCheck = [questionId];
219
+ while (questionIdsToCheck.length > 0) {
220
+ const currentQuestionId = questionIdsToCheck.shift();
221
+ const currentQuestion = questions.find(q => q.id === currentQuestionId);
222
+ if (currentQuestion === undefined) {
223
+ return false;
224
+ }
225
+ const rulesToCheck = [currentQuestion?.rules];
226
+ while (rulesToCheck.length > 0) {
227
+ const currentRule = rulesToCheck.shift();
228
+ if (currentRule === undefined) {
229
+ return false;
230
+ }
231
+ if (!isQuestionTreeQuestionRuleTrue(currentRule, data)) {
232
+ return false;
233
+ }
234
+ switch (currentRule?.op) {
235
+ case "true":
236
+ continue;
237
+ case "and":
238
+ rulesToCheck.push(...currentRule.args);
239
+ continue;
240
+ case "or":
241
+ rulesToCheck.push(...currentRule.args.filter(rule => isQuestionTreeQuestionRuleTrue(rule, data)));
242
+ continue;
243
+ case "in":
244
+ case "notin":
245
+ case "only":
246
+ if (currentRule.q) {
247
+ questionIdsToCheck.push(currentRule.q);
248
+ }
249
+ continue;
250
+ default:
251
+ throw new Error(`Unknown question tree question rule ${JSON.stringify(currentRule)}.`);
252
+ }
253
+ }
254
+ }
255
+ return true;
256
+ }
257
+ /**
258
+ * Determine whether a rule is true given the data.
259
+ * @param rule The question tree question rule to check.
260
+ * @param data The question tree data.
261
+ */
262
+ function isQuestionTreeQuestionRuleTrue(rule, data) {
263
+ switch (rule.op) {
264
+ case "true":
265
+ return true;
266
+ case "and":
267
+ return rule.args.every(rule => isQuestionTreeQuestionRuleTrue(rule, data));
268
+ case "or":
269
+ return rule.args.some(rule => isQuestionTreeQuestionRuleTrue(rule, data));
270
+ case "in":
271
+ const valueIn = data?.[rule.q] ?? "";
272
+ const actualIn = Array.isArray(valueIn) ? valueIn : [valueIn];
273
+ const expectedIn = Array.isArray(rule.a) ? rule.a : [rule.a];
274
+ return expectedIn.every(e => actualIn.filter(a => !!a).includes(e));
275
+ case "notin":
276
+ const valueNotIn = data?.[rule.q] ?? "";
277
+ const actualNotIn = Array.isArray(valueNotIn) ? valueNotIn : [valueNotIn];
278
+ const expectedNotIn = Array.isArray(rule.a) ? rule.a : [rule.a];
279
+ return expectedNotIn.every(e => !actualNotIn.filter(a => !!a).includes(e));
280
+ case "only":
281
+ const valueOnly = data?.[rule.q] ?? "";
282
+ const actualOnly = Array.isArray(valueOnly) ? valueOnly : [valueOnly];
283
+ const expectedOnly = Array.isArray(rule.a) ? rule.a : [rule.a];
284
+ return actualOnly.length === expectedOnly.length &&
285
+ expectedOnly.every(e => actualOnly.filter(a => !!a).includes(e)) &&
286
+ actualOnly.every(a => expectedOnly.filter(e => !!e).includes(a));
287
+ default:
288
+ throw new Error(`Unknown question tree question rule ${JSON.stringify(rule)}.`);
289
+ }
290
+ }
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29uZmlnL2NvbXBvbmVudC9xdWVzdGlvbi10cmVlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4UUEsMEVBeUNDO0FBT0Qsd0VBa0NDO0FBdFZELHdDQUFxQztBQUVyQyxNQUFhLGtCQUFrQjtJQUNaLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQztJQUMvQiw4QkFBOEIsR0FBRyxjQUFjLENBQUM7SUFDaEQsTUFBTSxDQUFVO0lBRWpDLFlBQVksTUFBZTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0saUJBQWlCLENBQUMsU0FBaUM7UUFDeEQsMEVBQTBFO1FBQzFFLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDaEQsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuSCxJQUFJLG9CQUFvQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwSCxDQUFDO1FBRUQsT0FBTyxFQUFDLE1BQU0sRUFBRSx1QkFBdUIsRUFBQyxDQUFBO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGdCQUFnQixDQUNyQixRQUE4QixFQUM5QixhQUFxQixFQUNyQixzQkFBZ0MsRUFDaEMsYUFBK0IsRUFDL0IsdUJBQWtEO1FBRWxELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUU3QixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFNUIsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxhQUFhLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsWUFBWSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1FBQ3JELElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksZ0JBQWdCLFVBQVUsc0RBQXNELFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUNELElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0UsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLElBQUksZ0JBQWdCLFVBQVUsc0RBQXNELFVBQVUsb0RBQW9ELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FDeEssQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksaUNBQWlDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyw4RkFBOEY7WUFDOUYsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEIsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLElBQUksV0FBVyxXQUFXLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLHlCQUF5QixPQUFPLHFCQUFxQixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDN0ksQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQixLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLElBQUksV0FBVyxXQUFXLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLDBCQUEwQixPQUFPLHFCQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNsSixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNyRSxNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsSUFBSSxXQUFXLFdBQVcsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssZUFBZSxPQUFPLHdCQUF3QixTQUFTLHFCQUFxQixNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUMxSyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw2RUFBNkU7UUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsU0FBUztZQUNYLENBQUM7WUFDRCxRQUFRLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxNQUFNO29CQUNULFNBQVM7Z0JBQ1gsS0FBSyxLQUFLLENBQUM7Z0JBQ1gsS0FBSyxJQUFJO29CQUNQLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLE1BQU07Z0JBQ1IsS0FBSyxJQUFJLENBQUM7Z0JBQ1YsS0FBSyxPQUFPLENBQUM7Z0JBQ2IsS0FBSyxNQUFNO29CQUNULElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsRUFBRSxDQUFDO3dCQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxhQUFhLFdBQVcsQ0FBQyxFQUFFLHdDQUF3QyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0csQ0FBQztvQkFDRCxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELEtBQUssTUFBTSxlQUFlLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDOzRCQUMvQyxNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsSUFBSSxhQUFhLFdBQVcsQ0FBQyxFQUFFLGVBQWUsV0FBVyxDQUFDLENBQUMseUNBQXlDLGVBQWUsSUFBSSxDQUMzSCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxNQUFNO2dCQUNSO29CQUNFLDRGQUE0RjtvQkFDNUYscUZBQXFGO29CQUNyRixNQUFNLFdBQVcsR0FBVSxXQUFXLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEUsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLHVCQUF1QixDQUM1QixJQUFZLEVBQ1osV0FBeUIsRUFDekIsSUFBaUQsRUFDakQsU0FBa0IsRUFDbEIsVUFBa0IsRUFDbEIsU0FBaUM7UUFFakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTywrQ0FBK0MsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0YsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJO2FBQ3hCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDUixDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBQSxtQkFBUyxFQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxrREFBa0QsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGdDQUFnQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFDdEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRWpDLE1BQU0sU0FBUyxHQUFHLCtCQUErQixDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBb0MsQ0FBQyxDQUFDO1FBRXZHLDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FBRyxVQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLGtCQUFrQixHQUEyQztZQUNqRSxTQUFTLEVBQUUsRUFBQyxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBQztZQUN4RCxJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFO29CQUNsQyxvQkFBb0IsRUFBRTt3QkFDcEI7NEJBQ0UsSUFBSSxFQUFFLHlCQUF5Qjs0QkFDL0IsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLEVBQUUsRUFBQzs0QkFDNUIsTUFBTSxFQUFFO2dDQUNOLEtBQUssRUFBRSxlQUFlO2dDQUN0QixNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDOzZCQUMvRTs0QkFDRCxTQUFTLEVBQUUsRUFBQyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsRUFBQzt5QkFDbkc7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFDRixNQUFNLG1CQUFtQixHQUEyQztZQUNsRSxTQUFTLEVBQUUsRUFBQyxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBQztZQUM3RCxJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixNQUFNLEVBQUU7b0JBQ04sb0JBQW9CLEVBQUU7d0JBQ3BCOzRCQUNFLElBQUksRUFBRSw4QkFBOEI7NEJBQ3BDLFNBQVMsRUFBRSxFQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUM7NEJBQzVCLE1BQU0sRUFBRTtnQ0FDTixLQUFLLEVBQUUsZUFBZTtnQ0FDdEIsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQzs2QkFDL0U7NEJBQ0QsU0FBUyxFQUFFLEVBQUMsS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLEVBQUM7eUJBQ3RHO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztJQUNqRSxDQUFDO0lBRU8sbUJBQW1CLENBQUMsYUFBcUI7UUFDL0MsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztJQUNoRyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsYUFBcUIsRUFBRSxVQUFrQixFQUFFLGFBQWlDO1FBQ25HLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLFNBQVMsU0FBUyxVQUFVLFFBQVEsQ0FBQztJQUNsRCxDQUFDO0lBRU8sZUFBZSxDQUFDLGFBQXFCLEVBQUUsVUFBa0I7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxTQUFTLFNBQVMsVUFBVSxPQUFPLENBQUM7SUFDakQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGFBQXFCLEVBQUUsVUFBa0IsRUFBRSxXQUFtQixFQUFFLFdBQXNDO1FBQ25JLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLFNBQVMsU0FBUyxVQUFVLElBQUksV0FBVyxRQUFRLENBQUM7SUFDakUsQ0FBQztDQUVGO0FBeFBELGdEQXdQQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQiwrQkFBK0IsQ0FBQyxVQUFrQixFQUFFLFNBQWlDLEVBQUUsSUFBNkI7SUFDbEksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssaUJBQWlCLENBQUMsQ0FBQztRQUN4RSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxJQUFJLENBQUMsOEJBQThCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELFFBQVEsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLE1BQU07b0JBQ1QsU0FBUztnQkFDWCxLQUFLLEtBQUs7b0JBQ1IsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsU0FBUztnQkFDWCxLQUFLLElBQUk7b0JBQ1AsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEcsU0FBUztnQkFDWCxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLE9BQU8sQ0FBQztnQkFDYixLQUFLLE1BQU07b0JBQ1QsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLENBQUM7b0JBQ0QsU0FBUztnQkFDWDtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsOEJBQThCLENBQUMsSUFBK0IsRUFBRSxJQUE2QjtJQUMzRyxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU07WUFDVCxPQUFPLElBQUksQ0FBQztRQUVkLEtBQUssS0FBSztZQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3RSxLQUFLLElBQUk7WUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUUsS0FBSyxJQUFJO1lBQ1AsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEUsS0FBSyxPQUFPO1lBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUUsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxLQUFLLE1BQU07WUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNO2dCQUM5QyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEYsQ0FBQztBQUNILENBQUMifQ==
@@ -13,7 +13,8 @@ export interface QuestionTreeOutcome {
13
13
  value: QuestionTreeOutcomeValue;
14
14
  /**
15
15
  * The optional translation message to use as the label, or the actual label text.
16
- * Leave out or set 'falsy' to use a translation message id of `${question-tree-name}-${outcome-value}`.
16
+ * Leave out or set 'falsy' to use a translation message id of
17
+ * `${question-tree-name}-outcome-${outcome-value}-label`.
17
18
  */
18
19
  label?: string | null;
19
20
  }
@@ -29,7 +30,8 @@ export interface QuestionTreeMeta {
29
30
  /**
30
31
  * The key is an available property value.
31
32
  * The optional value is the translation message id.
32
- * Set value 'falsy' to use a translation message id of `${question-tree-name}-${outcome-meta-property-key}-${outcome-meta-property-value}`.
33
+ * Set value 'falsy' to use a translation message id of
34
+ * `${question-tree-name}-meta-${outcome-meta-property-key}-${outcome-meta-property-value}-label`.
33
35
  */
34
36
  [key: string]: string | null;
35
37
  };
@@ -50,7 +52,8 @@ export interface QuestionTreeQuestionAnswer {
50
52
  value: string;
51
53
  /**
52
54
  * The optional translation message to use as the label, or the actual label text.
53
- * Leave out or set 'falsy' to use a translation message id of `${question-tree-name}-${question-id}-${answer-id}`.
55
+ * Leave out or set 'falsy' to use a translation message id of
56
+ * `${question-tree-name}-item-${question-id}-${answer-id}-label`.
54
57
  */
55
58
  label?: string | null;
56
59
  /**
@@ -6,4 +6,4 @@ exports.QuestionTreeOutcomeInfoKey = 'questiontree-outcome-info';
6
6
  exports.QuestionTreeComponentName = `QuestionTreeComponent`;
7
7
  /* QuestionTree Model */
8
8
  exports.QuestionTreeModelName = `QuestionTreeModel`;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5vdXRsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy9jb21wb25lbnQvcXVlc3Rpb24tdHJlZS5vdXRsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBNYSxRQUFBLDBCQUEwQixHQUFHLDJCQUFvQyxDQUFDO0FBaUQvRSw0QkFBNEI7QUFFZixRQUFBLHlCQUF5QixHQUFHLHVCQUFnQyxDQUFDO0FBNkMxRSx3QkFBd0I7QUFFWCxRQUFBLHFCQUFxQixHQUFHLG1CQUE0QixDQUFDIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tdHJlZS5vdXRsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy9jb21wb25lbnQvcXVlc3Rpb24tdHJlZS5vdXRsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZNYSxRQUFBLDBCQUEwQixHQUFHLDJCQUFvQyxDQUFDO0FBaUQvRSw0QkFBNEI7QUFFZixRQUFBLHlCQUF5QixHQUFHLHVCQUFnQyxDQUFDO0FBNkMxRSx3QkFBd0I7QUFFWCxRQUFBLHFCQUFxQixHQUFHLG1CQUE0QixDQUFDIn0=
@@ -123,7 +123,7 @@ export declare const FormExpressionsTargetFieldDisabled: "field.disabled";
123
123
  type FormExpressionsTargetFieldDisabledType = typeof FormExpressionsTargetFieldDisabled;
124
124
  interface FormExpressionsTargetFieldDisabledConfigFrame {
125
125
  /**
126
- * A convenience target that sets all of `component.visible`, `layout.visible`, and `model.disabled`.
126
+ * A convenience target that sets all of `component.disabled`, `layout.disabled`, and `model.disabled`.
127
127
  */
128
128
  target: FormExpressionsTargetFieldDisabledType;
129
129
  }
@@ -58,9 +58,10 @@ export declare class FormOverride {
58
58
  * @param name The form component name.
59
59
  * @param lineagePath The form component lineage path.
60
60
  * @param item The question tree component.
61
+ * @param modelData The question tree model data.
61
62
  * @private
62
63
  */
63
- applyQuestionTreeDsl(name: string | null, lineagePath: LineagePaths, item: QuestionTreeFieldComponentDefinitionOutline): AvailableFormComponentDefinitionFrames[];
64
+ applyQuestionTreeDsl(name: string | null, lineagePath: LineagePaths, item: QuestionTreeFieldComponentDefinitionOutline, modelData?: unknown): AvailableFormComponentDefinitionFrames[];
64
65
  /**
65
66
  * Check that only the allowed form component frames have been used.
66
67
  * @param items The form components after reusable components have been applied.