@media-quest/builder 0.0.27 → 0.0.28

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/public-api.ts","../src/BuilderObject.ts","../src/primitives/ID.ts","../src/Builder-option.ts","../src/Builder-question.ts","../src/BuilderMainText.ts","../src/rulebuilder/condition/Builder-operator.ts","../src/rulebuilder/SingleSelectItem.ts","../src/rulebuilder/condition/Builder-condition.ts","../src/rulebuilder/condition/Builder-condition-group.ts","../src/rulebuilder/multi-select-item.ts","../src/rulebuilder/tag-action-manager.ts","../src/rulebuilder/page-action-manager.ts","../src/rulebuilder/jump-to-action-manager.ts","../src/rulebuilder/Builder-rule.ts","../src/rulebuilder/RuleInput.ts","../src/rulebuilder/RuleVariable.ts","../src/page/Builder-page.ts","../src/primitives/schema-prefix.ts","../src/primitives/page-prefix.ts","../src/primitives/varID.ts","../src/theme/AbstractThemeCompiler.ts","../src/theme/theme-utils.ts","../src/theme/icon-urls.ts","../src/theme/IDefaultTheme.ts","../src/theme/default-theme-compiler.ts","../src/Builder-schema.ts","../src/code-book/codebook.ts","../src/schema-config.ts","../src/sum-score/sum-score-variable.ts","../src/sum-score/sum-score-variable-collection.ts","../src/tag/BuilderTag.ts","../src/tag/Tag-Collection.ts","../src/page/Builder-page-collection.ts","../src/Builder-text.ts","../src/sum-score/sum-score.ts"],"sourcesContent":["export { type BuilderOptionDto, BuilderOption } from \"./Builder-option\";\nexport { type BuilderPageDto, type BuilderPageType, BuilderPage } from \"./page/Builder-page\";\nexport {\n type BuilderQuestionDto,\n BuilderQuestion,\n type BuilderQuestionType,\n} from \"./Builder-question\";\nexport { BuilderSchema, type BuilderSchemaDto } from \"./Builder-schema\";\nexport { BuilderText, type BuilderTextDto } from \"./Builder-text\";\nexport { type BuilderMainImageDto } from \"./BuilderMainImageDto\";\nexport { BuilderMainText, type BuilderMainTextDto } from \"./BuilderMainText\";\nexport { type BuilderMainVideoDto } from \"./BuilderMainVideoDto\";\nexport { type BuilderTagDto, BuilderTag } from \"./tag/BuilderTag\";\nexport { type AudioFile, type ImageFile, type VideoFile } from \"./media-files\";\n// Public Api of rule-builder\nexport * from \"./rulebuilder\";\nexport { PagePrefix, PagePrefixValue } from \"./primitives/page-prefix\";\nexport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\nexport * from \"./schema-config\";\nexport * from \"./code-book/codebook\";\nexport { VarID } from \"./primitives/varID\";\nexport * from \"./primitives/ID\";\nexport * from \"./code-book/codebook-variable\";\nexport * from \"./builder-compiler\";\nexport * from \"./sum-score/sum-score\";\nexport { SumScoreVariableDto } from \"./sum-score/sum-score-variable\";\nexport { SumScoreAnswer } from \"./sum-score/sum-score-answer\";\nexport { TagCollection } from \"./tag/Tag-Collection\";\n","/**\r\n * Builder objects are complex objects that are embedded inside\r\n * a Builder-schema, and needs to be serialized to json. Often these objects\r\n * are used in collections, and that is why most of them need an id.\r\n */\r\ntype BuilderObjectType =\r\n | \"builder-page\"\r\n | \"builder-question-option\"\r\n | \"builder-question\"\r\n | \"builder-main-text\"\r\n | \"builder-text\"\r\n | \"builder-rule\"\r\n | \"builder-tag\"\r\n | \"builder-sum-score-variable\"\r\n | \"builder-sum-score-membership\"\r\n | \"builder-condition\"\r\n | \"builder-variable\"\r\n | \"builder-condition-group\";\r\n\r\nexport abstract class BuilderObject<T extends BuilderObjectType, Dto extends {}> {\r\n // abstract readonly id: string;\r\n abstract readonly objectType: T;\r\n abstract toJson(): Dto;\r\n abstract clone(): Dto;\r\n protected readonly originalDto: Dto;\r\n protected constructor(dto: Dto) {\r\n this.originalDto = dto;\r\n // this.objectId = dto.objectId;\r\n }\r\n}\r\n","// The default length of an ID\nconst ID_LENGTH = 32;\n\n// The minimum length of an ID\nconst MIN_LENGTH = 10;\n\nexport type ID<B extends string> = string & { __ID__: B };\n\nconst isID = <const B extends string>(idName: B, id?: string): id is ID<B> => {\n if (typeof id !== \"string\") return false;\n return id.length >= MIN_LENGTH;\n};\n\nconst createIDByName = <const B extends string>(idName: B): ID<B> => {\n const letters = \"abcdefghijklmnopqrstuvyz\";\n const all = letters + letters.toUpperCase();\n let result = \"\";\n\n for (let i = 0; i < ID_LENGTH; i++) {\n const char = all.charAt(Math.floor(Math.random() * all.length));\n result += char;\n }\n\n return result as ID<B>;\n};\nconst createDummyID = <const B extends string>(idName: B, letter: string): ID<B> => {\n return letter.repeat(ID_LENGTH) as ID<B>;\n};\ninterface Id<T extends string> {\n name: T;\n is: (id: string) => id is ID<T>;\n validateOrCreate: (id: string) => ID<T>;\n validateOrThrow: (id: string) => ID<T>;\n create: () => ID<T>;\n dummy: {\n a: ID<T>;\n b: ID<T>;\n c: ID<T>;\n d: ID<T>;\n e: ID<T>;\n f: ID<T>;\n g: ID<T>;\n h: ID<T>;\n i: ID<T>;\n j: ID<T>;\n };\n}\n\n/**\n * Creates a object with helper functions for a specific ID type\n * @param idName\n */\nexport const createTypedIdSingleton = <const B extends string>(idName: B): Id<B> => {\n /**\n * Creates a new ID of the correct type\n */\n const create = (): ID<B> => createIDByName(idName);\n\n /**\n * Checks if the id is of the correct type\n * @param id\n */\n const is = (id: string): id is ID<B> => isID(idName, id);\n\n /**\n * Checks if the id is of the correct type, if not it throws an error\n * @param id\n */\n const validateOrThrow = (id: string): ID<B> => {\n if (!is(id)) {\n throw new Error(`Invalid id: ${id}`);\n }\n return id;\n };\n\n /**\n * The lowercase name of the id (SCHEMA, PAGE, etc)\n */\n const name: B = idName;\n\n /**\n * Ensures that the id is of the correct type, if not it creates a new one\n * @param id\n */\n const validateOrCreate = (id: string): ID<B> => {\n return is(id) ? id : create();\n };\n\n const a = createDummyID(idName, \"a\");\n const b = createDummyID(idName, \"b\");\n const c = createDummyID(idName, \"c\");\n const d = createDummyID(idName, \"d\");\n const e = createDummyID(idName, \"e\");\n const f = createDummyID(idName, \"f\");\n const g = createDummyID(idName, \"g\");\n const h = createDummyID(idName, \"h\");\n const i = createDummyID(idName, \"i\");\n const j = createDummyID(idName, \"j\");\n const list = [a, b, c, d, e, f, g, h, i, j];\n\n const dummy = {\n a,\n b,\n c,\n d,\n e,\n f,\n g,\n h,\n i,\n j,\n list,\n };\n\n return Object.freeze({ create, is, validateOrCreate, validateOrThrow, name, dummy });\n};\n\nexport type SchemaID = ID<\"SCHEMA\">;\nexport const SchemaID = createTypedIdSingleton(\"SCHEMA\");\n\nexport type PageID = ID<\"PAGE\">;\nexport const PageID = createTypedIdSingleton(\"PAGE\");\n\nexport type TagID = ID<\"TAG\">;\nexport const TagID = createTypedIdSingleton(\"TAG\");\nexport type OptionID = ID<\"OPTION\">;\nexport const OptionID = createTypedIdSingleton(\"OPTION\");\n\nexport type TextID = ID<\"TEXT\">;\nexport const TextID = createTypedIdSingleton(\"TEXT\");\nexport type QuestionID = ID<\"QUESTION\">;\nexport const QuestionID = createTypedIdSingleton(\"QUESTION\");\n\nexport type SumScoreVariableID = ID<\"SUM_SCORE_VARIABLE\">;\nexport const SumScoreVariableID = createTypedIdSingleton(\"SUM_SCORE_VARIABLE\");\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport type { BuilderOptionTheme } from \"./theme/IDefaultTheme\";\r\nimport { DefaultTheme } from \"./theme/IDefaultTheme\";\r\nimport { AudioFile } from \"./media-files\";\r\nimport { OptionID } from \"./primitives/ID\";\r\n\r\nexport interface BuilderOptionDto {\r\n readonly id: OptionID;\r\n readonly value: number;\r\n readonly label: string;\r\n readonly labelAudio?: AudioFile;\r\n}\r\n\r\nexport class BuilderOption extends BuilderObject<\"builder-question-option\", BuilderOptionDto> {\r\n readonly objectType = \"builder-question-option\";\r\n id: OptionID;\r\n value: number;\r\n label = \"\";\r\n private _labelAudioFile: AudioFile | false = false;\r\n get labelAudioFile() {\r\n return this._labelAudioFile;\r\n }\r\n set labelAudioFile(audioFile: AudioFile | false) {\r\n this._labelAudioFile = audioFile;\r\n }\r\n\r\n private constructor(dto: BuilderOptionDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this.value = dto.value;\r\n this.label = dto.label;\r\n // this.theme = dto.theme;\r\n }\r\n public static create(value: number, label: string) {\r\n const id = OptionID.create();\r\n const dto: BuilderOptionDto = {\r\n id,\r\n value,\r\n label,\r\n };\r\n const instance = new BuilderOption(dto);\r\n return instance;\r\n }\r\n\r\n public static fromJson(dto: BuilderOptionDto) {\r\n const instance = new BuilderOption(dto);\r\n return instance;\r\n }\r\n\r\n toJson(): BuilderOptionDto {\r\n const dto: BuilderOptionDto = {\r\n id: this.id,\r\n value: this.value,\r\n label: this.label,\r\n };\r\n return dto;\r\n }\r\n\r\n clone(): BuilderOptionDto {\r\n const dto = this.toJson();\r\n const cloneDto: BuilderOptionDto = { ...dto, id: OptionID.create() };\r\n return cloneDto;\r\n }\r\n}\r\n","import type { BuilderOptionDto } from \"./Builder-option\";\r\nimport { BuilderOption } from \"./Builder-option\";\r\nimport { BuilderObject } from \"./BuilderObject\";\r\nimport { QuestionID } from \"./primitives/ID\";\r\n\r\nexport type BuilderQuestionType =\r\n | \"select-one\"\r\n | \"select-many\"\r\n | \"text\"\r\n | \"time\"\r\n | \"textarea\"\r\n | \"date\"\r\n | \"numeric-range\"\r\n | \"duration\";\r\n\r\nexport interface BuilderQuestionDto {\r\n readonly id: QuestionID;\r\n _type: BuilderQuestionType;\r\n text: string;\r\n options: ReadonlyArray<BuilderOptionDto>;\r\n prefix: string;\r\n}\r\n\r\nexport class BuilderQuestion extends BuilderObject<\"builder-question\", BuilderQuestionDto> {\r\n readonly objectType = \"builder-question\";\r\n id: QuestionID;\r\n type: BuilderQuestionType;\r\n questionText = \"\";\r\n options: BuilderOption[] = [];\r\n prefix = \"\";\r\n\r\n static create = (type: BuilderQuestionType) => {\r\n const id = QuestionID.create();\r\n\r\n return new BuilderQuestion({\r\n id,\r\n _type: type,\r\n text: \"\",\r\n options: [],\r\n prefix: \"\",\r\n });\r\n };\r\n\r\n public static fromJson(dto: BuilderQuestionDto): BuilderQuestion {\r\n const question = new BuilderQuestion(dto);\r\n return question;\r\n }\r\n\r\n private constructor(dto: BuilderQuestionDto) {\r\n super(dto);\r\n this.id = QuestionID.validateOrCreate(dto.id);\r\n this.type = dto._type;\r\n this.questionText = dto.text;\r\n this.prefix = dto.prefix;\r\n this.options = dto.options.map((o) => BuilderOption.fromJson(o));\r\n }\r\n\r\n addOption(label: string, value: number, atIndex = -1) {\r\n const option = BuilderOption.create(value, label);\r\n if (atIndex >= 0 && atIndex < this.options.length) {\r\n this.options.splice(atIndex, 0, option);\r\n } else {\r\n this.options.push(option);\r\n }\r\n return option;\r\n }\r\n\r\n deleteOption(option: BuilderOption): boolean {\r\n const filtered = this.options.filter((o) => o.id !== option.id);\r\n const didDelete = filtered.length === this.options.length - 1;\r\n this.options = filtered;\r\n return didDelete;\r\n }\r\n\r\n toJson() {\r\n const optionsJson = this.options.map((o) => o.toJson());\r\n const dto: BuilderQuestionDto = {\r\n id: this.id,\r\n prefix: this.prefix,\r\n _type: this.type,\r\n text: this.questionText,\r\n options: optionsJson,\r\n };\r\n return dto;\r\n }\r\n\r\n clone(): BuilderQuestionDto {\r\n const cloneId = QuestionID.create();\r\n const dto = this.toJson();\r\n const optionsClone = this.options.map((o) => o.clone());\r\n const clonedDto: BuilderQuestionDto = {\r\n ...dto,\r\n id: cloneId,\r\n options: optionsClone,\r\n };\r\n return clonedDto;\r\n }\r\n}\r\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport { AudioFile } from \"./media-files\";\r\n\r\nexport interface BuilderMainTextDto {\r\n text: string;\r\n audioFile: AudioFile | false;\r\n autoplay: boolean;\r\n autoplayDelay: number;\r\n}\r\n\r\nexport class BuilderMainText extends BuilderObject<\"builder-main-text\", BuilderMainTextDto> {\r\n readonly objectType: \"builder-main-text\" = \"builder-main-text\";\r\n autoplay = false;\r\n private _audioFile: AudioFile | false = false;\r\n autoplayDelay = 0;\r\n\r\n text = \"\";\r\n\r\n private constructor(dto: BuilderMainTextDto) {\r\n super(dto);\r\n this._audioFile = dto.audioFile ?? false;\r\n this.autoplay = dto.autoplay ?? false;\r\n this.autoplayDelay = dto.autoplayDelay ?? 0;\r\n this.text = dto.text ?? \"\";\r\n }\r\n\r\n get autoplayDelayInSeconds() {\r\n const delay = this.autoplayDelay;\r\n const s = delay / 1000;\r\n const formatted = s.toFixed(1);\r\n return formatted;\r\n }\r\n\r\n get durationTag() {\r\n if (!this.audioFile) return \"\";\r\n // console.log(this.audioFile.duration);\r\n const dur = this.audioFile.duration.toFixed(1);\r\n return \"dur \" + dur + \" s\";\r\n }\r\n\r\n static fromJson(dto: BuilderMainTextDto): BuilderMainText {\r\n const mainText = new BuilderMainText(dto);\r\n return mainText;\r\n }\r\n\r\n static create = () => {\r\n const dto: BuilderMainTextDto = {\r\n autoplay: false,\r\n autoplayDelay: 0,\r\n audioFile: false,\r\n text: \"\",\r\n };\r\n return new BuilderMainText(dto);\r\n };\r\n\r\n clone(): BuilderMainTextDto {\r\n const dto = this.toJson();\r\n const clone = JSON.parse(JSON.stringify(dto));\r\n return clone;\r\n }\r\n\r\n toJson(): BuilderMainTextDto {\r\n const dto: BuilderMainTextDto = {\r\n text: this.text,\r\n audioFile: this.audioFile,\r\n autoplay: this.autoplay,\r\n autoplayDelay: this.autoplayDelay,\r\n };\r\n return dto;\r\n }\r\n get audioFile(): AudioFile | false {\r\n return this._audioFile;\r\n }\r\n set audioFile(audioFile: AudioFile | false) {\r\n if (audioFile === false) {\r\n this.autoplayDelay = 0;\r\n this.autoplay = false;\r\n }\r\n this._audioFile = audioFile;\r\n }\r\n}\r\n","const BuilderOperatorSymbols = {\r\n equal: true,\r\n notEqual: true,\r\n lessThan: true,\r\n lessThanOrEqual: true,\r\n greaterThan: true,\r\n greaterThanOrEqual: true,\r\n between: true,\r\n notBetween: true,\r\n in: true,\r\n notIn: true,\r\n missing: true,\r\n notMissing: true,\r\n contains: true,\r\n notContains: true,\r\n empty: true,\r\n notEmpty: true,\r\n startsWith: true,\r\n endsWith: true,\r\n} as const;\r\n\r\nexport type BuilderOperator = keyof typeof BuilderOperatorSymbols;\r\n\r\nexport namespace BuilderOperator {\r\n export const is = (symbol?: string): symbol is BuilderOperator => {\r\n if (typeof symbol !== \"string\") {\r\n return false;\r\n }\r\n return Object.keys(BuilderOperatorSymbols).includes(symbol);\r\n };\r\n}\r\n","import { RuleVariable, RuleVariableOption } from \"./RuleVariable\";\r\nimport { BuilderOperator } from \"./condition/Builder-operator\";\r\nimport { JumpToPageAction } from \"./RuleAction\";\r\n\r\nexport abstract class SingleSelectItem<T> {\r\n private readonly _selectLabel;\r\n private readonly _toolTip;\r\n private readonly _searchString;\r\n get selectLabel(): string {\r\n return this._selectLabel;\r\n }\r\n get tooltip() {\r\n return this._toolTip;\r\n }\r\n\r\n get searchString() {\r\n return this._searchString;\r\n }\r\n\r\n protected constructor(readonly data: T) {\r\n this._selectLabel = this.getSelectLabel();\r\n this._toolTip = this.getTooltip();\r\n this._searchString = this.getSearchString();\r\n }\r\n protected abstract getSelectLabel(): string;\r\n protected abstract getTooltip(): string;\r\n protected abstract getSearchString(): string;\r\n}\r\n\r\nexport class RuleVariableSelectItem extends SingleSelectItem<RuleVariable> {\r\n public static create = (data: RuleVariable) => {\r\n return new RuleVariableSelectItem(data);\r\n };\r\n readonly options: ReadonlyArray<RuleOptionSelectItem>;\r\n constructor(readonly data: RuleVariable) {\r\n super(data);\r\n this.options = data.options.map(RuleOptionSelectItem.create);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return this.data.varId + this.data.label;\r\n }\r\n\r\n getSelectLabel(): string {\r\n return this.data.varId;\r\n }\r\n\r\n getTooltip(): string {\r\n return this.data.label;\r\n }\r\n}\r\n\r\nexport class RuleOptionSelectItem extends SingleSelectItem<RuleVariableOption> {\r\n public static create = (option: RuleVariableOption) => {\r\n return new RuleOptionSelectItem(option);\r\n };\r\n private constructor(option: RuleVariableOption) {\r\n super(option);\r\n }\r\n protected getSearchString(): string {\r\n return \"\";\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.label + \"(\" + this.data.value + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport class OperatorSelectItem extends SingleSelectItem<BuilderOperator | \"\"> {\r\n public static readonly EQ = new OperatorSelectItem(\"equal\");\r\n public static readonly NOT_EQ = new OperatorSelectItem(\"notEqual\");\r\n public static readonly fromSymbol = (\r\n symbol: BuilderOperator | Omit<string, BuilderOperator>,\r\n ): OperatorSelectItem | false => {\r\n if (symbol === \"equal\") {\r\n return OperatorSelectItem.EQ;\r\n }\r\n if (symbol === \"notEqual\") {\r\n return OperatorSelectItem.NOT_EQ;\r\n }\r\n return false;\r\n };\r\n private constructor(operator: BuilderOperator) {\r\n super(operator);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return \"\";\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n const operator = this.data;\r\n if (operator === \"equal\") {\r\n return \"Equals\";\r\n }\r\n if (operator === \"notEqual\") {\r\n return \"Not equals\";\r\n }\r\n return \"\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n const operator = this.data;\r\n if (operator === \"equal\") {\r\n return \"Equals\";\r\n }\r\n if (operator === \"notEqual\") {\r\n return \"Not equals\";\r\n }\r\n return \"\";\r\n }\r\n}\r\n\r\nexport class JumpToPageSelectItem extends SingleSelectItem<JumpToPageAction> {\r\n public static readonly create = (pageData: JumpToPageAction) =>\r\n new JumpToPageSelectItem(pageData);\r\n protected constructor(pageData: JumpToPageAction) {\r\n super(pageData);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return this.data.pagePrefix + this.data.mainText;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.pagePrefix + \" (\" + this.data.pageNumber + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.mainText;\r\n }\r\n}\r\n","import { BuilderObject } from \"../../BuilderObject\";\r\nimport { BuilderOperator } from \"./Builder-operator\";\r\nimport type { RuleVariable, RuleVariableOption } from \"../RuleVariable\";\r\nimport {\r\n OperatorSelectItem,\r\n RuleOptionSelectItem,\r\n RuleVariableSelectItem,\r\n} from \"../SingleSelectItem\";\r\nimport { Condition } from \"@media-quest/engine\";\r\nexport interface BuilderConditionDto {\r\n readonly kind: \"condition\";\r\n readonly operator: BuilderOperator | \"\";\r\n readonly name: string;\r\n readonly variableId: string;\r\n readonly value: number | string | boolean;\r\n}\r\n\r\nexport class BuilderCondition extends BuilderObject<\"builder-condition\", BuilderConditionDto> {\r\n readonly objectType: \"builder-condition\" = \"builder-condition\";\r\n public static readonly NUMBER_OPERATORS: ReadonlyArray<OperatorSelectItem> = [\r\n OperatorSelectItem.EQ,\r\n OperatorSelectItem.NOT_EQ,\r\n ];\r\n\r\n private initialDto: BuilderConditionDto;\r\n name = \"\";\r\n\r\n public static create = (variableList: ReadonlyArray<RuleVariable>) => {\r\n const condition = new BuilderCondition(\r\n {\r\n kind: \"condition\",\r\n name: \"\",\r\n operator: \"\",\r\n variableId: \"\",\r\n value: \"\",\r\n },\r\n variableList,\r\n );\r\n return condition;\r\n };\r\n\r\n public static fromDto = (dto: BuilderConditionDto, variables: ReadonlyArray<RuleVariable>) => {\r\n const _dto: BuilderConditionDto = {\r\n kind: \"condition\",\r\n name: dto.name ?? \"\",\r\n value: dto.value ?? \"\",\r\n operator: dto.operator ?? \"\",\r\n variableId: dto.variableId ?? \"\",\r\n };\r\n const instance = new BuilderCondition(_dto, variables);\r\n return instance;\r\n };\r\n private _variable: RuleVariable | false = false;\r\n private _operator: BuilderOperator | \"\" = \"\";\r\n private _value: RuleVariableOption | false = false;\r\n private _variableList: ReadonlyArray<RuleVariable> = [];\r\n\r\n /**\r\n * Can only set variables that exist in variableList.\r\n * @param variable\r\n */\r\n set variable(variable: RuleVariable | false) {\r\n if (variable === this._variable) {\r\n return;\r\n }\r\n this._variable = variable;\r\n this._operator = \"\";\r\n this._value = false;\r\n }\r\n\r\n get variable() {\r\n return this._variable;\r\n }\r\n\r\n set value(variableValue: RuleVariableOption | false) {\r\n this._value = variableValue;\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n validate(): { isValid: true } | { isValid: false; message: string } {\r\n if (this._variableList.length === 0) {\r\n return {\r\n isValid: false,\r\n message: \"Has no variableList to check dto against.\",\r\n };\r\n }\r\n if (!this._variable) {\r\n return {\r\n isValid: false,\r\n message: \"Variable has not been initialized from variableList.\",\r\n };\r\n }\r\n\r\n if (!this._operator) {\r\n return { isValid: false, message: \"Operator has not been initialized\" };\r\n }\r\n\r\n if (!this._value) {\r\n return {\r\n isValid: false,\r\n message: \"Value (RuleVariableOption) is not initialized\",\r\n };\r\n }\r\n\r\n return { isValid: true };\r\n }\r\n\r\n toEngineCondition(): Condition.Simple | false {\r\n const val = this.value;\r\n const op = this._operator;\r\n const v = this._variable;\r\n if (!val) return false;\r\n if (!op) return false;\r\n if (!v) return false;\r\n if (op === \"equal\") {\r\n const engineCondition: Condition.Simple = {\r\n kind: \"numeric-condition\",\r\n value: val.value,\r\n valueLabel: val.label,\r\n referenceId: v.varId,\r\n referenceLabel: v.label,\r\n operator: \"eq\",\r\n };\r\n return engineCondition;\r\n }\r\n return false;\r\n }\r\n\r\n private findVariableInUniverse(variableId: string): RuleVariable | false {\r\n const v = this._variableList.find((v) => v.varId === variableId);\r\n return v ?? false;\r\n }\r\n\r\n set operator(operator: BuilderOperator | \"\") {\r\n if (BuilderOperator.is(operator)) {\r\n this._operator = operator;\r\n } else {\r\n this._operator = \"\";\r\n }\r\n }\r\n\r\n get operator() {\r\n return this._operator;\r\n }\r\n\r\n private constructor(dto: BuilderConditionDto, variables: ReadonlyArray<RuleVariable>) {\r\n super(dto);\r\n this.initialDto = dto;\r\n this.name = dto.name;\r\n this._setVariableList(variables);\r\n }\r\n\r\n get variableSelectItemsInUniverse(): ReadonlyArray<RuleVariableSelectItem> {\r\n return this._variableList.map(RuleVariableSelectItem.create);\r\n }\r\n\r\n get operatorsSelectItems(): ReadonlyArray<OperatorSelectItem> {\r\n return this._variable ? BuilderCondition.NUMBER_OPERATORS : [];\r\n }\r\n\r\n get selectValueItems(): ReadonlyArray<RuleOptionSelectItem> {\r\n if (!this._variable) {\r\n return [];\r\n }\r\n const opt = this._variable.options.map(RuleOptionSelectItem.create);\r\n return opt;\r\n }\r\n\r\n clone(): BuilderConditionDto {\r\n return this.toJson();\r\n }\r\n\r\n private _setVariableList(variables: ReadonlyArray<RuleVariable>): boolean {\r\n this._variableList = variables;\r\n const v = this._variableList.find((v) => v.varId === this.originalDto.variableId);\r\n if (!v) {\r\n this._variable = false;\r\n this._operator = \"\";\r\n this._value = false;\r\n return false;\r\n }\r\n this._variable = v;\r\n const op = this.originalDto.operator;\r\n\r\n if (!BuilderOperator.is(op)) {\r\n return false;\r\n }\r\n this._operator = op;\r\n const maybeOption = v.options.find((op) => op.value === this.originalDto.value);\r\n if (!maybeOption) {\r\n return false;\r\n }\r\n this._value = maybeOption;\r\n return true;\r\n }\r\n\r\n toJson(): BuilderConditionDto {\r\n const name = this.name;\r\n const variableId = this._variable ? this._variable.varId : \"\";\r\n const operator = this._operator ? this._operator : \"\";\r\n const value = this._value ? this._value.value : \"\";\r\n return {\r\n kind: \"condition\",\r\n name,\r\n operator,\r\n variableId,\r\n value,\r\n };\r\n }\r\n}\r\n","import { BuilderCondition, type BuilderConditionDto } from \"./Builder-condition\";\r\nimport { BuilderObject } from \"../../BuilderObject\";\r\nimport type { RuleVariable } from \"../RuleVariable\";\r\nimport { Condition } from \"@media-quest/engine\";\r\n\r\nconst ConditionGroupType = {\r\n all: true,\r\n any: true,\r\n count: true,\r\n};\r\n\r\nexport type ConditionGroupType = keyof typeof ConditionGroupType;\r\nexport interface BuilderConditionGroupDto {\r\n readonly kind: \"condition-group\";\r\n readonly name: string;\r\n readonly count?: number;\r\n readonly type: ConditionGroupType;\r\n readonly conditions: ReadonlyArray<BuilderConditionDto>;\r\n}\r\n\r\nexport class BuilderConditionGroup extends BuilderObject<\r\n \"builder-condition-group\",\r\n BuilderConditionGroupDto\r\n> {\r\n static readonly isConditionGroupType = (value: string | symbol): value is ConditionGroupType => {\r\n if (typeof value !== \"string\") {\r\n return false;\r\n }\r\n const validValues = Object.keys(ConditionGroupType);\r\n return validValues.includes(value);\r\n };\r\n\r\n readonly objectType: \"builder-condition-group\" = \"builder-condition-group\";\r\n private _type: ConditionGroupType;\r\n name = \"\";\r\n private readonly _conditions: Array<BuilderCondition>;\r\n private readonly _variableList: ReadonlyArray<RuleVariable>;\r\n\r\n public static readonly fromDto = (\r\n dto: BuilderConditionGroupDto,\r\n variableList: ReadonlyArray<RuleVariable>,\r\n ) => {\r\n return new BuilderConditionGroup(dto, variableList);\r\n };\r\n protected constructor(dto: BuilderConditionGroupDto, variableList: ReadonlyArray<RuleVariable>) {\r\n super(dto);\r\n this.name = dto.name;\r\n this._type = dto.type;\r\n const conditionList = Array.isArray(dto.conditions) ? dto.conditions : [];\r\n this._conditions = conditionList.map((dto) => BuilderCondition.fromDto(dto, variableList));\r\n this._variableList = variableList;\r\n }\r\n get conditions(): ReadonlyArray<BuilderCondition> {\r\n return this._conditions;\r\n }\r\n\r\n get conditionCount() {\r\n return this._conditions.length;\r\n }\r\n\r\n addCondition(): BuilderCondition {\r\n const newConditions = BuilderCondition.create(this._variableList);\r\n this._conditions.push(newConditions);\r\n return newConditions;\r\n }\r\n\r\n removeCondition(condition: BuilderCondition): boolean {\r\n // this._conditions.\r\n const index = this._conditions.indexOf(condition);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._conditions.splice(index, 1);\r\n return true;\r\n }\r\n\r\n clone(): BuilderConditionGroupDto {\r\n return this.toJson();\r\n }\r\n\r\n toJson(): BuilderConditionGroupDto {\r\n const conditions: ReadonlyArray<BuilderConditionDto> = [\r\n ...this._conditions.map((c) => c.toJson()),\r\n ];\r\n return {\r\n name: this.name,\r\n conditions,\r\n type: this._type,\r\n kind: \"condition-group\",\r\n };\r\n }\r\n\r\n toEngineConditionComplex(): Condition.Complex | false {\r\n const comp: Condition.Complex = {\r\n kind: \"complex-condition\",\r\n all: [],\r\n some: [],\r\n name: \"\",\r\n };\r\n const conditions: Condition.Simple[] = [];\r\n this.conditions.forEach((c) => {\r\n const maybeSimple = c.toEngineCondition();\r\n if (maybeSimple) {\r\n conditions.push(maybeSimple);\r\n }\r\n });\r\n if (this._type === \"all\") {\r\n return { ...comp, all: conditions };\r\n }\r\n if (this._type === \"any\") {\r\n return { ...comp, some: conditions };\r\n }\r\n\r\n console.log(\"INVALID COMPLEX CONDITION. TODO IMPLEMENT range, and count.\");\r\n\r\n return false;\r\n }\r\n get type(): ConditionGroupType {\r\n return this._type;\r\n }\r\n set type(conditionGroupType: ConditionGroupType) {\r\n if (BuilderConditionGroup.isConditionGroupType(conditionGroupType)) {\r\n this._type = conditionGroupType;\r\n }\r\n }\r\n}\r\n","import { ExcludeByPageAction, ExcludeByTagAction } from \"./RuleAction\";\r\n\r\nexport abstract class MultiSelectItem<T> {\r\n private readonly _isSelectedInitially: boolean;\r\n private readonly _selectLabel;\r\n private readonly _toolTip;\r\n private readonly _searchString;\r\n public isSelected: boolean;\r\n get selectLabel(): string {\r\n return this._selectLabel;\r\n }\r\n get tooltip() {\r\n return this._toolTip;\r\n }\r\n\r\n get searchString() {\r\n return this._searchString;\r\n }\r\n protected constructor(\r\n readonly data: T,\r\n isSelected: boolean,\r\n ) {\r\n this._isSelectedInitially = isSelected;\r\n this.isSelected = isSelected;\r\n this._searchString = this.getSearchString();\r\n this._toolTip = this.getTooltip();\r\n this._selectLabel = this.getSelectLabel();\r\n }\r\n protected abstract getSelectLabel(): string;\r\n protected abstract getTooltip(): string;\r\n protected abstract getSearchString(): string;\r\n}\r\n\r\nexport class ExcludeByTagSelectItem extends MultiSelectItem<ExcludeByTagAction> {\r\n public static readonly create = (tagData: ExcludeByTagAction, isSelected: boolean) => {\r\n return new ExcludeByTagSelectItem(tagData, isSelected);\r\n };\r\n protected constructor(data: ExcludeByTagAction, isSelected: boolean) {\r\n super(data, isSelected);\r\n }\r\n protected getSearchString(): string {\r\n return this.data.tag;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.tag + \" (\" + this.data.pageCount + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.tag + \" (used in \" + this.data.pageCount + \" pages)\";\r\n }\r\n}\r\n\r\nexport class ExcludeByPageIdSelectItem extends MultiSelectItem<ExcludeByPageAction> {\r\n public static create = (ruleActionPage: ExcludeByPageAction, isSelected: boolean) => {\r\n return new ExcludeByPageIdSelectItem(ruleActionPage, isSelected);\r\n };\r\n\r\n protected constructor(data: ExcludeByPageAction, isSelected: boolean) {\r\n super(data, isSelected);\r\n }\r\n protected getSearchString(): string {\r\n return this.data.pagePrefix + this.data.mainText;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.pagePrefix + \" (\" + this.data.pageNumber + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.mainText;\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { ExcludeByTagSelectItem } from \"./multi-select-item\";\r\nimport { ExcludeByTagAction } from \"./RuleAction\";\r\n\r\nexport class TagActionManager {\r\n private readonly _initialSelection: Set<string>;\r\n readonly selectItems: ReadonlyArray<ExcludeByTagSelectItem>;\r\n constructor(\r\n readonly validOptions: RuleInput[\"_tagActions\"],\r\n readonly initialSelection: ReadonlyArray<string>,\r\n ) {\r\n this._initialSelection = new Set([...initialSelection]);\r\n this.selectItems = validOptions.map((opt) => {\r\n const isSelected = this._initialSelection.has(opt.tag);\r\n return ExcludeByTagSelectItem.create(opt, isSelected);\r\n });\r\n }\r\n getCurrentSelection(): ReadonlyArray<string> {\r\n const selected = this.selectItems.filter((item) => item.isSelected).map((itm) => itm.data.tag);\r\n return selected;\r\n }\r\n\r\n getEngineActions(): ReadonlyArray<ExcludeByTagAction> {\r\n const selected = this.selectItems.filter((item) => item.isSelected);\r\n const tagActions = selected.map((s) => s.data);\r\n return [...tagActions];\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { ExcludeByPageIdSelectItem } from \"./multi-select-item\";\r\nimport { ExcludeByPageAction } from \"./RuleAction\";\r\nimport { PageID } from \"../primitives/ID\";\r\n\r\nexport class PageActionManager {\r\n private readonly _initialSelection: Set<string>;\r\n readonly selectItems: ReadonlyArray<ExcludeByPageIdSelectItem>;\r\n\r\n constructor(\r\n readonly validOptions: RuleInput[\"_pageIdActions\"],\r\n readonly initialSelection: ReadonlyArray<string>,\r\n ) {\r\n this._initialSelection = new Set([...initialSelection]);\r\n this.selectItems = validOptions.map((opt) => {\r\n const isSelected = this._initialSelection.has(opt.pageId);\r\n return ExcludeByPageIdSelectItem.create(opt, isSelected);\r\n });\r\n }\r\n\r\n getCurrentSelection(): ReadonlyArray<PageID> {\r\n const selected = this.selectItems\r\n .filter((item) => item.isSelected)\r\n .map((itm) => itm.data.pageId);\r\n return selected;\r\n }\r\n\r\n getEngineAction(): ReadonlyArray<ExcludeByPageAction> {\r\n const selectItems = this.selectItems.filter((item) => item.isSelected);\r\n const actions = selectItems.map((item) => item.data);\r\n return [...actions];\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { JumpToPageSelectItem } from \"./SingleSelectItem\";\r\n\r\nexport class JumpToActionManager {\r\n readonly options: ReadonlyArray<JumpToPageSelectItem>;\r\n private _selected: JumpToPageSelectItem | false;\r\n constructor(\r\n private readonly validOptions: RuleInput[\"_jumpActions\"],\r\n private readonly initialSelection: string | false | undefined,\r\n ) {\r\n this.options = validOptions.map(JumpToPageSelectItem.create);\r\n this._selected = this.findSelected(initialSelection);\r\n }\r\n get selected(): JumpToPageSelectItem | false {\r\n return this._selected;\r\n }\r\n set selected(selected: JumpToPageSelectItem | false) {\r\n this._selected = this.findSelected(selected);\r\n }\r\n getSelectedPageId(): string | false {\r\n return this._selected ? this._selected.data.pageId : false;\r\n }\r\n private findSelected(value: unknown): JumpToPageSelectItem | false {\r\n if (!value) return false;\r\n if (value instanceof JumpToPageSelectItem) {\r\n return this.options.find((v) => v === value) || false;\r\n }\r\n if (typeof value === \"string\") {\r\n return this.options.find((v) => v.data.pageId === value) || false;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { BuilderCondition, type BuilderConditionDto } from \"./condition/Builder-condition\";\r\nimport {\r\n BuilderConditionGroup,\r\n type BuilderConditionGroupDto,\r\n type ConditionGroupType,\r\n} from \"./condition/Builder-condition-group\";\r\nimport type { RuleInput } from \"./RuleInput\";\r\nimport { BuilderObject } from \"../BuilderObject\";\r\nimport { TagActionManager } from \"./tag-action-manager\";\r\nimport { PageActionManager } from \"./page-action-manager\";\r\nimport { JumpToActionManager } from \"./jump-to-action-manager\";\r\nimport { Condition, RuleActionPageQue, PageQueRules } from \"@media-quest/engine\";\r\nimport { PageID } from \"../primitives/ID\";\r\n\r\nexport interface BuilderRuleDto {\r\n readonly type: ConditionGroupType;\r\n readonly name: string;\r\n readonly conditions: ReadonlyArray<BuilderConditionDto | BuilderConditionGroupDto>;\r\n readonly excludeTags: ReadonlyArray<string>;\r\n readonly excludePages: ReadonlyArray<PageID>;\r\n readonly jumpToPage: string | false;\r\n}\r\nexport class BuilderRule extends BuilderObject<\"builder-rule\", BuilderRuleDto> {\r\n readonly objectType: \"builder-rule\" = \"builder-rule\";\r\n private _type: ConditionGroupType = \"all\";\r\n public name = \"Rule name\";\r\n // public countNumber = 1;\r\n private readonly _conditions: Array<BuilderCondition | BuilderConditionGroup> = [];\r\n\r\n private readonly _tagActionManager: TagActionManager;\r\n private _pageActionManager: PageActionManager;\r\n readonly jumpToActionManager: JumpToActionManager;\r\n public static readonly fromDto = (dto: BuilderRuleDto, input: RuleInput): BuilderRule => {\r\n return new BuilderRule(dto, input);\r\n };\r\n\r\n protected constructor(\r\n private readonly dto: BuilderRuleDto,\r\n private readonly _ruleInput: RuleInput,\r\n ) {\r\n super(dto);\r\n const conditionInput = this._ruleInput.getConditionInput();\r\n this.name = dto.name ?? \"\";\r\n this._type = dto.type ?? \"any\";\r\n this._conditions = dto.conditions.reduce<Array<BuilderCondition | BuilderConditionGroup>>(\r\n (acc, curr) => {\r\n if (curr.kind === \"condition\") {\r\n const condition = BuilderCondition.fromDto(curr, conditionInput);\r\n acc.push(condition);\r\n }\r\n if (curr.kind === \"condition-group\") {\r\n const conditionGroup = BuilderConditionGroup.fromDto(curr, conditionInput);\r\n acc.push(conditionGroup);\r\n }\r\n return acc;\r\n },\r\n [],\r\n );\r\n // TODO CHECK WITH CURRENT OPTIONS.\r\n this._pageActionManager = new PageActionManager(\r\n _ruleInput.excludeByPageIdActions,\r\n dto.excludePages,\r\n );\r\n // this.excludeByPageIdDtoList.push(...dto.excludePages);\r\n this._tagActionManager = new TagActionManager(_ruleInput.excludeByTagActions, dto.excludeTags);\r\n\r\n this.jumpToActionManager = new JumpToActionManager(\r\n _ruleInput.jumpToPageActions,\r\n dto.jumpToPage,\r\n );\r\n }\r\n\r\n get conditions(): ReadonlyArray<BuilderConditionGroup | BuilderCondition> {\r\n return this._conditions;\r\n }\r\n\r\n getTagActions() {\r\n return this._tagActionManager.selectItems;\r\n }\r\n\r\n getValidPageActions() {\r\n return this._pageActionManager.selectItems;\r\n }\r\n\r\n get conditionCount() {\r\n return this._conditions.length;\r\n }\r\n\r\n set type(type: ConditionGroupType) {\r\n if (BuilderConditionGroup.isConditionGroupType(type)) {\r\n this._type = type;\r\n }\r\n }\r\n\r\n get type() {\r\n return this._type;\r\n }\r\n\r\n deleteCondition(condition: BuilderCondition | BuilderConditionGroup): boolean {\r\n const index = this._conditions.indexOf(condition);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._conditions.splice(index, 1);\r\n return true;\r\n }\r\n\r\n addCondition(): BuilderCondition {\r\n const condition = BuilderCondition.create(this._ruleInput.getConditionInput());\r\n this._conditions.push(condition);\r\n return condition;\r\n }\r\n\r\n addConditionGroup(): BuilderConditionGroup {\r\n const dto: BuilderConditionGroupDto = {\r\n kind: \"condition-group\",\r\n name: \"\",\r\n type: \"all\",\r\n conditions: [],\r\n };\r\n const newGroup = BuilderConditionGroup.fromDto(dto, this._ruleInput.questionVars);\r\n this._conditions.push(newGroup);\r\n return newGroup;\r\n }\r\n\r\n clone(): BuilderRuleDto {\r\n return this.toJson();\r\n }\r\n\r\n toJson(): BuilderRuleDto {\r\n const conditions = this._conditions.map((c) => c.toJson());\r\n const excludePages = this._pageActionManager.getCurrentSelection();\r\n const excludeTags = this._tagActionManager.getCurrentSelection();\r\n const jumpToPage = this.jumpToActionManager.getSelectedPageId();\r\n const dto: BuilderRuleDto = {\r\n type: this._type,\r\n name: this.name,\r\n conditions,\r\n excludePages,\r\n jumpToPage,\r\n excludeTags,\r\n };\r\n return dto;\r\n }\r\n toEngineRule(): PageQueRules {\r\n const conditions: Condition[] = [];\r\n this._conditions.forEach((c) => {\r\n if (c) {\r\n if (c instanceof BuilderCondition) {\r\n const simpleCondition = c.toEngineCondition();\r\n if (simpleCondition) {\r\n conditions.push(simpleCondition);\r\n }\r\n }\r\n if (c instanceof BuilderConditionGroup) {\r\n const complexCondition = c.toEngineConditionComplex();\r\n if (complexCondition) conditions.push(complexCondition);\r\n }\r\n }\r\n });\r\n let all: Condition[] = [];\r\n let some: Condition[] = [];\r\n\r\n if (this.type === \"all\") {\r\n all = [...conditions];\r\n }\r\n const ruleActionList: Array<RuleActionPageQue> = [];\r\n const maybeJumpToPage = this.jumpToActionManager.selected;\r\n if (maybeJumpToPage) {\r\n ruleActionList.push({ kind: \"jumpToPage\", pageId: maybeJumpToPage.data.pageId });\r\n }\r\n\r\n const excludePageByIdList = this._pageActionManager.getEngineAction().map((a) => a.pageId);\r\n if (excludePageByIdList.length) {\r\n ruleActionList.push({ kind: \"excludeByPageId\", pageIds: [...excludePageByIdList] });\r\n }\r\n const excludeTags = this._tagActionManager.getEngineActions().map((tagA) => tagA.tag);\r\n if (excludeTags.length) {\r\n ruleActionList.push({ kind: \"excludeByTag\", tagIds: [...excludeTags] });\r\n }\r\n\r\n const rule: PageQueRules = {\r\n description: this.name,\r\n all,\r\n some,\r\n onFailure: [],\r\n onSuccess: ruleActionList,\r\n };\r\n return rule;\r\n }\r\n}\r\n","import type { RuleQuestionVariable, RuleCustomVariable, RuleVariable } from \"./RuleVariable\";\r\nimport type { ExcludeByPageAction, ExcludeByTagAction, JumpToPageAction } from \"./RuleAction\";\r\nimport { JumpToPageSelectItem } from \"./SingleSelectItem\";\r\n\r\n/**\r\n * TODO Crate filters for \"cardinality\" or \"order\" of a sum-score;\r\n * Return legal lists of variables.\r\n */\r\nexport class RuleInput {\r\n constructor(\r\n private readonly _questionVariables: ReadonlyArray<RuleQuestionVariable>,\r\n private readonly _customVariables: ReadonlyArray<RuleCustomVariable>,\r\n private readonly _pageIdActions: ReadonlyArray<ExcludeByPageAction>,\r\n private readonly _tagActions: ReadonlyArray<ExcludeByTagAction>,\r\n private readonly _jumpActions: ReadonlyArray<JumpToPageAction>,\r\n ) {}\r\n\r\n get questionVars(): ReadonlyArray<RuleVariable> {\r\n return this._questionVariables;\r\n }\r\n\r\n getConditionInput(): ReadonlyArray<RuleVariable> {\r\n return [...this.questionVars, ...this.customVars];\r\n }\r\n\r\n getJumpToPageOptions(): ReadonlyArray<JumpToPageSelectItem> {\r\n return this._jumpActions.map(JumpToPageSelectItem.create);\r\n }\r\n\r\n get customVars(): ReadonlyArray<RuleCustomVariable> {\r\n return this._customVariables;\r\n }\r\n\r\n get excludeByPageIdActions() {\r\n return this._pageIdActions;\r\n }\r\n\r\n get excludeByTagActions() {\r\n return this._tagActions;\r\n }\r\n get jumpToPageActions() {\r\n return this._jumpActions;\r\n }\r\n}\r\n","import { VarID } from \"../primitives/varID\";\r\n\r\n/*******************************************\r\n ** ONLY USE THESE TYPES IN RULE-BUILDER **\r\n ******************************************/\r\n\r\nexport class RuleVariableOption {\r\n constructor(\r\n readonly label: string,\r\n readonly value: number,\r\n ) {}\r\n}\r\n\r\nexport class RuleQuestionVariable {\r\n readonly kind: \"question-variable\" = \"question-variable\";\r\n constructor(\r\n readonly varId: VarID,\r\n readonly label: string,\r\n readonly options: ReadonlyArray<RuleVariableOption>,\r\n readonly pageNumber: number,\r\n ) {}\r\n}\r\n\r\nexport class RuleCustomVariable {\r\n readonly kind: \"configuration-variable\" = \"configuration-variable\";\r\n constructor(\r\n readonly varId: string,\r\n readonly label: string,\r\n readonly options: ReadonlyArray<RuleVariableOption>,\r\n ) {}\r\n}\r\n\r\n// export class RuleVariable {}\r\nexport type RuleVariable = RuleQuestionVariable | RuleCustomVariable;\r\n","import type { BuilderQuestionDto, BuilderQuestionType } from \"../Builder-question\";\nimport { BuilderQuestion } from \"../Builder-question\";\nimport { BuilderObject } from \"../BuilderObject\";\nimport type { BuilderOptionDto } from \"../Builder-option\";\nimport { BuilderOption } from \"../Builder-option\";\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\nimport type { BuilderMainTextDto } from \"../BuilderMainText\";\nimport { BuilderMainText } from \"../BuilderMainText\";\nimport { RuleVariableOption, RuleQuestionVariable } from \"../rulebuilder\";\nimport { DUtil } from \"@media-quest/engine\";\nimport { PagePrefix, PagePrefixValue } from \"../primitives/page-prefix\";\nimport { VarID } from \"../primitives/varID\";\nimport { SchemaPrefix } from \"../primitives/schema-prefix\";\nimport { PageID, SumScoreVariableID } from \"../primitives/ID\";\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\n\nconst U = DUtil;\nexport type BuilderPageType = \"info-page\" | \"question\";\n\nexport interface BuilderPageDto {\n readonly id: PageID;\n readonly prefix: PagePrefixValue;\n _type: BuilderPageType;\n mainText: BuilderMainTextDto;\n nextButton: BuilderOptionDto;\n defaultQuestion: BuilderQuestionDto;\n mainMedia?: BuilderMainImageDto | BuilderMainVideoDto;\n includedInSumScores: Array<{ sumScoreVariableId: SumScoreVariableID; weight: number }>;\n autoplaySequence: Array<string>;\n tags: ReadonlyArray<string>;\n}\n\nexport class BuilderPage extends BuilderObject<\"builder-page\", BuilderPageDto> {\n readonly objectType: \"builder-page\" = \"builder-page\";\n readonly id: PageID;\n private _pageType: BuilderPageType;\n private _prefix: PagePrefix;\n private readonly _tags: Set<string>;\n private _backgroundColor = \"#FFFFFF\";\n private _includedInSumScores: Map<\n SumScoreVariableID,\n {\n sumScoreVariableId: SumScoreVariableID;\n weight: number;\n name: string;\n description: string;\n }\n > = new Map();\n\n mainMedia: BuilderMainVideoDto | BuilderMainImageDto | false = false;\n defaultQuestion: BuilderQuestion;\n mainText: BuilderMainText;\n nextButton = BuilderOption.create(-1, \"Neste\");\n\n public static create(type: BuilderPageType, _prefix: PagePrefixValue) {\n const id = PageID.create();\n const mainTextDto: BuilderMainTextDto = {\n text: \"\",\n audioFile: false,\n autoplay: false,\n autoplayDelay: 0,\n };\n const nextButtonDto = BuilderOption.create(-1, \"page-next-button-text\").toJson();\n const defaultQuestionDto = BuilderQuestion.create(\"select-one\").toJson();\n\n const dto: BuilderPageDto = {\n _type: type,\n autoplaySequence: [],\n defaultQuestion: defaultQuestionDto,\n id,\n nextButton: nextButtonDto,\n mainText: mainTextDto,\n prefix: _prefix,\n includedInSumScores: [],\n tags: [],\n };\n\n const page = new BuilderPage(dto);\n return page;\n }\n public static fromJson(dto: BuilderPageDto): BuilderPage {\n const page = new BuilderPage(dto);\n return page;\n }\n\n private constructor(dto: BuilderPageDto) {\n super(dto);\n this.id = dto.id;\n this._pageType = dto._type;\n const prefixInstance = PagePrefix.castOrCreateRandom(dto.prefix);\n this._prefix = prefixInstance;\n this.mainText = BuilderMainText.fromJson(dto.mainText);\n this.nextButton = BuilderOption.fromJson(dto.nextButton);\n this.defaultQuestion = BuilderQuestion.fromJson(dto.defaultQuestion);\n const tagList: string[] = Array.isArray(dto.tags) ? dto.tags : [];\n const sumScores = Array.isArray(dto.includedInSumScores) ? dto.includedInSumScores : [];\n sumScores.forEach((item) => {\n this._includedInSumScores.set(item.sumScoreVariableId, {\n sumScoreVariableId: item.sumScoreVariableId,\n weight: item.weight,\n name: \"\",\n description: \"\",\n });\n });\n this._tags = new Set(tagList);\n if (dto.mainMedia) {\n this.mainMedia = dto.mainMedia;\n }\n }\n\n public addTag(tag: string) {\n this._tags.add(tag);\n }\n public deleteTag(tag: string) {\n this._tags.delete(tag);\n }\n\n set pageType(value: BuilderPageType) {\n this._pageType = value;\n }\n\n get includedInSumScores() {\n return [...this._includedInSumScores.values()];\n }\n\n getQuestionVariables(\n modulePrefix: SchemaPrefix,\n pageNumber: number,\n ): ReadonlyArray<RuleQuestionVariable> {\n const variables: RuleQuestionVariable[] = [];\n\n if (this._pageType === \"question\") {\n const pagePrefix = this.prefix;\n const varId = VarID.create(modulePrefix.value, pagePrefix);\n const label = this.mainText.text;\n const op = this.defaultQuestion.options.map((o) => {\n const label = o.label;\n const value = o.value;\n return new RuleVariableOption(label, value);\n });\n const singleVar = new RuleQuestionVariable(varId, label, op, pageNumber);\n variables.push(singleVar);\n }\n return variables;\n }\n\n get tags(): ReadonlyArray<string> {\n return [...this._tags];\n }\n get pageType() {\n return this._pageType;\n }\n\n get prefix() {\n return this._prefix.value;\n }\n\n set prefix(value: PagePrefixValue) {\n this._prefix.value = value;\n }\n\n sumScoreVariableSet(sumScoreVariable: SumScoreVariable, weight: number) {\n const { id, name, description } = sumScoreVariable;\n\n this._includedInSumScores.set(sumScoreVariable.id, {\n sumScoreVariableId: id,\n weight,\n name,\n description,\n });\n\n return true;\n }\n\n sumScoreVariableUpdateData(variables: ReadonlyArray<SumScoreVariable>) {\n variables.forEach((v) => {\n const sumScoreEntry = this._includedInSumScores.get(v.id);\n if (sumScoreEntry) {\n this.sumScoreVariableSet(v, sumScoreEntry.weight);\n }\n });\n }\n\n toJson(): BuilderPageDto {\n const mainText = this.mainText.toJson();\n const nextButton = this.nextButton.toJson();\n const mainMedia = this.mainMedia;\n const includedInSumScores = this.includedInSumScores.map(({ sumScoreVariableId, weight }) => ({\n sumScoreVariableId,\n weight,\n }));\n const dto: BuilderPageDto = {\n _type: this.pageType,\n mainText,\n autoplaySequence: [],\n nextButton,\n id: this.id,\n tags: [...this.tags],\n includedInSumScores,\n prefix: this._prefix.value,\n defaultQuestion: this.defaultQuestion.toJson(),\n };\n if (mainMedia) {\n dto.mainMedia = mainMedia;\n }\n return dto;\n }\n\n clone(): BuilderPageDto {\n const dto = this.toJson();\n const defaultQuestionClone = this.defaultQuestion.clone();\n const mainTextClone = JSON.parse(JSON.stringify(this.mainText));\n const newId = PageID.create();\n const clone: BuilderPageDto = {\n ...dto,\n id: newId,\n defaultQuestion: defaultQuestionClone,\n mainText: mainTextClone,\n };\n // const cloneDto\n return clone;\n }\n\n get backgroundColor() {\n return this._backgroundColor;\n }\n\n set backgroundColor(color: string) {\n if (typeof color === \"string\") {\n this._backgroundColor = color;\n }\n }\n\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\n this._includedInSumScores.delete(sumScoreVariableID);\n }\n}\n","import { createRandomPrefix } from \"./page-prefix\";\r\n\r\nexport type SchemaPrefixValue = string & { __SCHEMA_PREFIX__: true };\r\n\r\nexport class SchemaPrefix {\r\n public static readonly MIN_LENGTH = 1;\r\n private static randomLen = 5;\r\n public static readonly MAX_LENGTH = 16;\r\n\r\n public static fromValue = (value: SchemaPrefixValue): SchemaPrefix => {\r\n return new SchemaPrefix(value);\r\n };\r\n\r\n public static fromValueOrThrow = (value: string): SchemaPrefix => {\r\n if (!SchemaPrefix.isValid(value)) throw new Error(\"Invalid prefix\");\r\n return new SchemaPrefix(value);\r\n };\r\n public static fromString = (value: string): SchemaPrefix | false => {\r\n if (!SchemaPrefix.isValid(value)) return false;\r\n return new SchemaPrefix(value);\r\n };\r\n public static castOrCreateRandom = (value: string): SchemaPrefix => {\r\n const v = SchemaPrefix.isValid(value)\r\n ? value\r\n : createRandomPrefix<SchemaPrefixValue>(SchemaPrefix.randomLen);\r\n return new SchemaPrefix(v);\r\n };\r\n\r\n public static isValid = (prefix: string | 999): prefix is SchemaPrefixValue => {\r\n if (typeof prefix !== \"string\") return false;\r\n if (prefix.length < SchemaPrefix.MIN_LENGTH) return false;\r\n if (prefix.length > SchemaPrefix.MAX_LENGTH) return false;\r\n return true;\r\n };\r\n\r\n get value(): SchemaPrefixValue {\r\n return this._value;\r\n }\r\n\r\n get isValid() {\r\n return SchemaPrefix.isValid(this._value);\r\n }\r\n\r\n set value(value: string) {\r\n const casted = value as unknown;\r\n if (typeof casted === \"string\") {\r\n this._value = casted as SchemaPrefixValue;\r\n }\r\n }\r\n\r\n private constructor(private _value: SchemaPrefixValue) {}\r\n}\r\n","import { SchemaPrefix } from \"./schema-prefix\";\r\n\r\nexport type PagePrefixValue = string & { __PAGE_PREFIX__: true };\r\nexport const createRandomPrefix = <const P extends string>(length: number): P => {\r\n const letters = \"abcdefghijklmnopqrstuvyz\";\r\n const all = letters + letters.toUpperCase();\r\n let result = \"\";\r\n for (let i = 0; i < length; i++) {\r\n const char = all.charAt(Math.floor(Math.random() * all.length));\r\n result += char;\r\n }\r\n return result as P;\r\n};\r\n\r\nexport class PagePrefix {\r\n public static readonly MIN_LENGTH = 1;\r\n private static randomLen = 5;\r\n public static readonly MAX_LENGTH = 16;\r\n\r\n public static create = (): PagePrefix => {\r\n const v = createRandomPrefix<PagePrefixValue>(PagePrefix.randomLen);\r\n return new PagePrefix(v);\r\n };\r\n public static fromString = (value: string): PagePrefix | false => {\r\n if (!PagePrefix.isValid(value)) return false;\r\n return new PagePrefix(value);\r\n };\r\n\r\n public static fromStringOrThrow = (value: string): PagePrefixValue => {\r\n if (!PagePrefix.isValid(value)) throw new Error(\"Invalid prefix\");\r\n return value;\r\n };\r\n public static castOrCreateRandom = (value: string): PagePrefix => {\r\n const v = PagePrefix.isValid(value)\r\n ? value\r\n : createRandomPrefix<PagePrefixValue>(PagePrefix.randomLen);\r\n return new PagePrefix(v);\r\n };\r\n\r\n public static isValid = (prefix: string | 999): prefix is PagePrefixValue => {\r\n if (typeof prefix !== \"string\") return false;\r\n if (prefix.length < SchemaPrefix.MIN_LENGTH) return false;\r\n return prefix.length <= SchemaPrefix.MAX_LENGTH;\r\n };\r\n\r\n get value(): PagePrefixValue {\r\n return this._value;\r\n }\r\n\r\n set value(value: string) {\r\n if (!PagePrefix.isValid(value)) {\r\n console.log(\"INVALID PREFIX\", value);\r\n } else {\r\n this._value = value;\r\n }\r\n }\r\n\r\n private constructor(private _value: PagePrefixValue) {}\r\n}\r\n","import { PagePrefixValue } from \"./page-prefix\";\r\n\r\nimport { SchemaPrefixValue } from \"./schema-prefix\";\r\n\r\nexport type VarID = `${SchemaPrefixValue}_${PagePrefixValue}`;\r\n\r\nexport const VarID = {\r\n create: (schemaPrefix: SchemaPrefixValue, pagePrefix: PagePrefixValue): VarID => {\r\n const varId = schemaPrefix + \"_\" + pagePrefix;\r\n return varId as VarID;\r\n },\r\n};\r\n","import type { BuilderSchemaDto } from \"../Builder-schema\";\r\nimport { SchemaDto } from \"@media-quest/engine\";\r\n\r\nexport abstract class AbstractThemeCompiler<ThemeSchema> {\r\n protected constructor(protected readonly theme: ThemeSchema) {}\r\n abstract compile(schema: BuilderSchemaDto): SchemaDto;\r\n}\r\n","import { DStyle } from \"@media-quest/engine\";\r\nimport { DElementDto } from \"@media-quest/engine\";\r\n\r\nexport namespace ThemeUtils {\r\n export const spaceEvenlyX = <T extends Pick<DElementDto, \"style\">>(\r\n items: ReadonlyArray<T>,\r\n options: { startAt: number; endAt: number; defaultItemWidth: number } = {\r\n startAt: 0,\r\n endAt: 100,\r\n defaultItemWidth: 5,\r\n },\r\n ): ReadonlyArray<T> => {\r\n const startAt = options?.startAt ?? 0;\r\n const endAt = options?.endAt ?? 100;\r\n const range = Math.abs(endAt - startAt);\r\n if (items.length === 0) {\r\n return [];\r\n }\r\n const marginCount = items.length + 1;\r\n const defaultWidth = options.defaultItemWidth ?? 150 / marginCount;\r\n\r\n let totalWidthOfElements = items.reduce((prev, curr) => {\r\n const w = curr.style.w ?? defaultWidth;\r\n return prev + w;\r\n }, 0);\r\n\r\n let cursor = startAt;\r\n const rest = Math.max(range - totalWidthOfElements, 0);\r\n const margin = rest / marginCount;\r\n\r\n items.forEach((item) => {\r\n cursor = cursor + margin;\r\n const w = item.style.w ?? defaultWidth;\r\n const x = cursor;\r\n cursor = cursor + w;\r\n item.style.w = w;\r\n item.style.x = x;\r\n });\r\n\r\n return items;\r\n };\r\n\r\n export const centerY = (): Pick<DStyle, \"y\" | \"transform\"> => ({\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n });\r\n export const centerX = (): Pick<DStyle, \"x\" | \"transform\"> => ({\r\n x: 50,\r\n transform: \"translate(-50%, 0%)\",\r\n });\r\n\r\n export const centerXY = (): Pick<DStyle, \"x\" | \"y\" | \"transform\"> => ({\r\n x: 50,\r\n y: 50,\r\n transform: \"translate(-50%, 50%)\",\r\n });\r\n}\r\n","export const IconUrls = {\r\n ispeWhitePng:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fispe-hvit.png?alt=media&token=f6fe628b-2d99-472d-a2ea-e062873e2e22',\r\n pauseSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause-24px.svg?alt=media&token=47337491-bb0d-4c56-9c89-a073ce19fad4',\r\n pauseCircleOutlineSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause_circle_outline-24px.svg?alt=media&token=133aabc8-ab9a-4eaa-9914-4f0f82c22ee2',\r\n\r\n pauseCircleFilledSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause_circle_filled-24px.svg?alt=media&token=af3f12c3-3199-4096-8ed2-76347b9a0a0a',\r\n playCircleRegular:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay-circle-regular.svg?alt=media&token=0867b690-d7fd-475c-8e91-b2d7aeca54d1',\r\n playArrowSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay_arrow-24px.svg?alt=media&token=2fa95e1f-61f7-4a18-afb3-210eabae8227',\r\n playCircleOutline:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay_circle_outline-24px.svg?alt=media&token=3a9f62c5-dfa2-40ef-a50e-cf1bdd2d47f2',\r\n\r\n stopCircleSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fstop_circle-24px.svg?alt=media&token=8fbc8b89-29bb-49ad-ae11-b8882ba3ca77',\r\n stopSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fstop-24px.svg?alt=media&token=d2cd41f1-1331-4243-9b7a-dc0f0ccd255d',\r\n replayCircleSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Freplay-24px.svg?alt=media&token=3c35ccf4-b467-4e81-85d6-b36ac64738ad',\r\n\r\n volumeOffSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_off-24px.svg?alt=media&token=4e41cc10-9f4b-4967-b4df-ed0682e657a9',\r\n volumeUpSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_up-24px.svg?alt=media&token=551bd0a6-a515-4f87-a245-da433f4833f9'\r\n};\r\n","import type { CssTheme } from \"./css-theme\";\r\nimport { DStyle, DCss } from \"@media-quest/engine\";\r\nimport { IconUrls } from \"./icon-urls\";\r\n\r\ntype PStyle = Partial<DStyle>;\r\nexport interface IDefaultTheme {\r\n name: string;\r\n image: { style: PStyle };\r\n videoPlayer: {\r\n playButton: {\r\n iconUrl: string;\r\n css: PStyle;\r\n cssDisabled: PStyle;\r\n cssEnabled: PStyle;\r\n };\r\n pauseButton: {\r\n iconUrl: string;\r\n css: PStyle;\r\n cssDisabled: PStyle;\r\n cssEnabled: PStyle;\r\n };\r\n videoElement: {\r\n css: PStyle;\r\n };\r\n };\r\n mainText: {\r\n noMedia: {\r\n text: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n audio: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n };\r\n withMedia: {\r\n text: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n audio: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n };\r\n };\r\n // mainTextTheme: BuilderTextTheme;\r\n responseButtons: BuilderOptionTheme;\r\n nextButtonTheme: BuilderOptionTheme;\r\n // mainQuestionText: BuilderTextTheme;\r\n // dontKnowButtonTheme: BuilderOptionTheme;\r\n buttonThemes?: Array<BuilderOptionTheme>;\r\n}\r\n\r\nexport interface BuilderOptionTheme {\r\n name: string;\r\n normal: ButtonTheme;\r\n dontKnow: ButtonTheme;\r\n}\r\n\r\ninterface ButtonTheme {\r\n btn: CssTheme;\r\n divider: PStyle;\r\n text1: PStyle;\r\n text2: PStyle;\r\n}\r\n\r\nnamespace BuilderOptionTheme {\r\n const GREEN = \"#70AD47\";\r\n const YELLOW = \"#FFC000\";\r\n const ORANGE = \"#F4902C\";\r\n const RED = \"#FF0000\";\r\n const LIGHT_BLUE = \"#42719C\";\r\n const WHITE = \"#ffffff\";\r\n const BLUE = \"#2F5597\";\r\n const BTN_WIDTH = 18.5;\r\n const BTN_BORDER_WIDTH = 3;\r\n const BTN_BORDER_RADIUS = 10;\r\n const BTN_BORDER_STYLE: DStyle[\"borderStyle\"] = \"solid\";\r\n const BTN_HEIGHT = 9.2;\r\n const BTN_SHORT_WIDTH = 13.7;\r\n const FONT_WEIGHT: DStyle[\"fontWeight\"] = 600;\r\n const FONT_SIZE: DCss.Px[\"value\"] = 35;\r\n\r\n export const blueButton = (): BuilderOptionTheme => {\r\n const optionTheme: BuilderOptionTheme = {\r\n name: \"blue-button-theme\",\r\n normal: {\r\n btn: {\r\n css: {\r\n backgroundColor: BLUE,\r\n borderColor: BLUE,\r\n textColor: WHITE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\r\n borderStyle: BTN_BORDER_STYLE,\r\n borderRadius: { value: BTN_BORDER_RADIUS, _unit: \"px\" },\r\n padding: { _unit: \"px\", value: 40 },\r\n h: BTN_HEIGHT,\r\n w: BTN_WIDTH,\r\n x: 10,\r\n y: 8,\r\n textAlign: \"center\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n },\r\n divider: {},\r\n text1: {\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n textColor: WHITE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n w: 84,\r\n x: 8,\r\n fontWeight: FONT_WEIGHT,\r\n textAlign: \"center\",\r\n },\r\n text2: {},\r\n },\r\n\r\n dontKnow: {\r\n btn: {\r\n css: {\r\n backgroundColor: WHITE,\r\n borderColor: LIGHT_BLUE,\r\n textColor: BLUE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\r\n borderStyle: BTN_BORDER_STYLE,\r\n borderRadius: { value: BTN_BORDER_RADIUS, _unit: \"px\" },\r\n padding: { _unit: \"px\", value: 40 },\r\n h: BTN_HEIGHT,\r\n w: BTN_SHORT_WIDTH,\r\n x: 10,\r\n y: 8,\r\n textAlign: \"center\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n },\r\n text1: {\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n textColor: BLUE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n w: 84,\r\n x: 8,\r\n fontWeight: FONT_WEIGHT,\r\n textAlign: \"center\",\r\n },\r\n text2: {},\r\n divider: {},\r\n },\r\n };\r\n\r\n return optionTheme;\r\n };\r\n}\r\n\r\nexport const DefaultTheme: IDefaultTheme = {\r\n name: \"default-theme\",\r\n videoPlayer: {\r\n playButton: {\r\n iconUrl: IconUrls.playCircleRegular,\r\n css: { w: 5, h: 5, y: 48, x: 4 },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n pauseButton: {\r\n iconUrl: IconUrls.pauseSvg,\r\n css: { w: 5, h: 5, y: 48, x: 4 },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n videoElement: { css: { w: 100, h: 45, y: 55, x: 0 } },\r\n },\r\n image: { style: { h: 50, w: 100, x: 0 } },\r\n mainText: {\r\n noMedia: {\r\n text: {\r\n css: {\r\n w: 80,\r\n y: 65,\r\n x: 10,\r\n textAlign: \"center\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 40 },\r\n },\r\n cssDisabled: {},\r\n cssEnabled: {},\r\n },\r\n audio: {\r\n css: {\r\n h: 6,\r\n w: 6,\r\n x: 4,\r\n y: 32,\r\n cursor: \"pointer\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n },\r\n withMedia: {\r\n text: {\r\n css: {\r\n w: 80,\r\n y: 27,\r\n x: 10,\r\n textAlign: \"center\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 30 },\r\n },\r\n cssDisabled: {},\r\n cssEnabled: {},\r\n },\r\n audio: {\r\n css: {\r\n h: 6,\r\n w: 6,\r\n x: 4,\r\n y: 32,\r\n cursor: \"pointer\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n },\r\n },\r\n nextButtonTheme: BuilderOptionTheme.blueButton(),\r\n responseButtons: BuilderOptionTheme.blueButton(),\r\n};\r\n","import { AbstractThemeCompiler } from \"./AbstractThemeCompiler\";\nimport type { BuilderSchemaDto } from \"../Builder-schema\";\nimport { BuilderSchema } from \"../Builder-schema\";\nimport type { BuilderPageDto } from \"../page/Builder-page\";\nimport { ThemeUtils } from \"./theme-utils\";\nimport { DefaultTheme, type IDefaultTheme } from \"./IDefaultTheme\";\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\nimport {\n ButtonClickAction,\n DDivDto,\n DElementDto,\n DImgDto,\n DTextDto,\n PageDto,\n PageComponentDto,\n RuleActionPageQue,\n PlayAudioTask,\n PlayVideoTask,\n Rule,\n SchemaDto,\n DelayTask,\n} from \"@media-quest/engine\";\n\nimport { AudioFile } from \"../media-files\";\nimport { BuilderRule } from \"../rulebuilder\";\n\nexport class DefaultThemeCompiler extends AbstractThemeCompiler<IDefaultTheme> {\n readonly name = \"Ispe default theme.\";\n private readonly TAG = \"[ DEFAULT_THEME_COMPILER ]: \";\n constructor() {\n super(DefaultTheme);\n }\n\n private compileRules(source: BuilderSchemaDto): Rule<RuleActionPageQue, never>[] {\n const builderSchema = BuilderSchema.fromJson(source);\n const ruleInput = builderSchema.getRuleInput();\n const pageQueRules: Rule<RuleActionPageQue, never>[] = [];\n source.rules.forEach((rule) => {\n const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule();\n if (!Rule.isEmpty(engineRule)) {\n pageQueRules.push(engineRule);\n } else {\n console.log(this.TAG, \"Throws away empty rule. \" + rule.type + \" \" + rule.name);\n }\n });\n return pageQueRules;\n }\n\n compile(source: BuilderSchemaDto): SchemaDto {\n const pages = source.pages.map((p) => this.compilePage(p, source.prefix));\n const rules = this.compileRules(source);\n\n const dto: SchemaDto = {\n backgroundColor: source.backgroundColor,\n baseHeight: source.baseHeight,\n baseWidth: source.baseWidth,\n id: source.id,\n pageSequences: [],\n pages,\n predefinedFacts: [],\n rules,\n };\n return dto;\n }\n\n private compilePage(page: BuilderPageDto, modulePrefix: string): PageDto {\n const tags = page.tags ?? [];\n const { nextButton, mainText, id, mainMedia, _type, prefix } = page;\n const staticElements: DElementDto[] = [];\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\n let initialVideoTaskList: Array<PlayVideoTask | DelayTask> = [];\n const newPage: PageDto = {\n background: \"white\",\n components: [],\n staticElements,\n id,\n prefix,\n initialTasks: [],\n tags: [...tags],\n };\n\n if (page.mainText.audioFile) {\n const autoPlay = page.mainText.autoplay;\n const autoPlayDelay = page.mainText.autoplayDelay;\n const res = this.compileMainTextAudio(page.mainText.audioFile, autoPlay, autoPlayDelay);\n initialAudioTasks = [...res.initialTasks];\n newPage.components.push(...res.components);\n }\n\n if (_type === \"question\") {\n const variableId = modulePrefix + \"_\" + page.prefix;\n const { components, question } = this.compileQuestion(id, page, variableId);\n newPage.components.push(...components);\n newPage.staticElements.push(question);\n // console.log(question);\n // elements.push(...buttons, question);\n }\n\n if (_type === \"info-page\") {\n const infoText = mainText.text;\n const nextButtonComponent = this.compileButton(nextButton, {\n kind: \"next-button\",\n });\n\n const textStyle = mainMedia\n ? DefaultTheme.mainText.withMedia.text.css\n : DefaultTheme.mainText.noMedia.text.css;\n const infoTextElement: DElementDto = {\n innerText: infoText,\n _tag: \"p\",\n style: textStyle,\n };\n newPage.staticElements.push(infoTextElement);\n newPage.components.push(nextButtonComponent);\n }\n if (mainMedia && mainMedia.kind === \"main-image\") {\n const mainImageElement = this.compileImage(mainMedia);\n newPage.staticElements.push(mainImageElement);\n }\n\n if (mainMedia && mainMedia.kind === \"main-video\") {\n const videoOutput = this.compileVideo(mainMedia);\n newPage.videoPlayer = videoOutput.videoPlayer;\n newPage.components.push(...videoOutput.components);\n initialVideoTaskList = [...videoOutput.autoPlayTasks];\n }\n\n // ADDING INITIAL TASKS IN CORRECT ORDER\n newPage.initialTasks.push(...initialVideoTaskList);\n newPage.initialTasks.push(...initialAudioTasks);\n const clone = JSON.parse(JSON.stringify(newPage));\n return clone;\n }\n\n private compileImage(image: BuilderMainImageDto) {\n const img: DImgDto = {\n _tag: \"img\",\n style: this.theme.image.style,\n url: image.file.downloadUrl,\n };\n return img;\n }\n\n private compileMainTextAudio(\n audioFile: AudioFile,\n autoPlay: boolean,\n autoPlayDelay: number,\n ): {\n components: PageComponentDto[];\n initialTasks: Array<PlayAudioTask | DelayTask>;\n } {\n const t = this.theme.mainText;\n const audioId = audioFile.id;\n const iconUrl =\n \"https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_up-24px.svg?alt=media&token=551bd0a6-a515-4f87-a245-da433f4833f9\";\n\n const playMainTextAudio: DImgDto = {\n _tag: \"img\",\n url: iconUrl,\n style: { ...t.withMedia.audio.css },\n };\n\n const task: PlayAudioTask = {\n audioId,\n blockAudio: false,\n blockFormInput: false,\n blockResponseButton: false,\n blockVideo: false,\n kind: \"play-audio-task\",\n priority: \"replace-all\",\n url: audioFile.downloadUrl,\n };\n\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\n if (autoPlay) {\n const playAudioTask: PlayAudioTask = { ...task, priority: \"follow-queue\" };\n initialAudioTasks = [playAudioTask];\n if (autoPlayDelay > 0) {\n const delayTask: DelayTask = {\n kind: \"delay-task\",\n priority: \"follow-queue\",\n duration: autoPlayDelay,\n blockVideo: false,\n blockAudio: false,\n blockResponseButton: false,\n blockFormInput: false,\n };\n initialAudioTasks = [delayTask, playAudioTask];\n }\n }\n // const autoplayTask =\n const playBtn: PageComponentDto = {\n el: playMainTextAudio,\n onClick: { kind: \"play-audio\", task },\n };\n\n return { components: [playBtn], initialTasks: [...initialAudioTasks] };\n }\n\n private compileVideo(video: BuilderMainVideoDto): {\n videoPlayer: PageDto[\"videoPlayer\"];\n components: PageComponentDto[];\n autoPlayTasks: Array<PlayVideoTask | DelayTask>;\n } {\n const t = this.theme.videoPlayer;\n const mode = video.mode;\n const components: PageComponentDto[] = [];\n\n let autoPlayTasks: Array<PlayVideoTask | DelayTask> = [];\n\n let autoplayVideoTask: PlayVideoTask | false = false;\n let autoplayDelayTask: DelayTask | false = false;\n\n const playButtonTask: PlayVideoTask = {\n kind: \"play-video-task\",\n url: video.file.downloadUrl,\n videoId: video.file.id,\n blockAudio: false,\n blockFormInput: false,\n blockResponseButton: false,\n loop: mode === \"gif-mode\",\n blockVideo: false,\n priority: \"replace-all\",\n };\n\n if (video.mode === \"autoplay\" || video.mode === \"gif-mode\") {\n autoplayVideoTask = { ...playButtonTask, priority: \"follow-queue\" };\n autoPlayTasks = [autoplayVideoTask];\n if (video.preDelay > 0) {\n autoplayDelayTask = {\n kind: \"delay-task\",\n priority: \"follow-queue\",\n duration: video.preDelay,\n blockVideo: false,\n blockAudio: false,\n blockResponseButton: false,\n blockFormInput: false,\n };\n autoPlayTasks = [autoplayDelayTask, autoplayVideoTask];\n }\n }\n\n const videoPlayer: PageDto[\"videoPlayer\"] = {\n playUrl: video.file.downloadUrl,\n style: { h: 45, w: 100, x: 0, y: 55 },\n };\n const playButton: PageComponentDto = {\n el: {\n _tag: \"img\",\n url: t.playButton.iconUrl,\n style: { ...t.playButton.css, ...t.playButton.cssEnabled },\n },\n onClick: { kind: \"play-video\", task: playButtonTask },\n whenVideoPlay: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"visible\" },\n };\n const pauseBtn: PageComponentDto = {\n el: {\n _tag: \"img\",\n style: {\n ...t.pauseButton.css,\n visibility: \"hidden\",\n ...t.pauseButton.cssEnabled,\n },\n url: t.pauseButton.iconUrl,\n },\n onClick: { kind: \"pause-video\" },\n whenVideoPlay: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n };\n\n if (mode !== \"gif-mode\") {\n components.push(playButton);\n components.push(pauseBtn);\n }\n return { videoPlayer, components, autoPlayTasks: [...autoPlayTasks] };\n }\n private compileQuestion(\n pageId: string,\n page: BuilderPageDto,\n variableId: string,\n ): {\n question: DTextDto;\n components: PageComponentDto[];\n } {\n // TODO REFACTORE DEFAULT QUESTION TO - (REMOVE USE TEXT1)\n // console.log(page);\n const q = page.defaultQuestion;\n const text = page.mainText.text;\n const questionStyle = page.mainMedia\n ? DefaultTheme.mainText.withMedia.text.css\n : DefaultTheme.mainText.noMedia.text.css;\n const question: DTextDto = {\n _tag: \"p\",\n innerText: text,\n style: questionStyle,\n };\n const buttons: PageComponentDto[] = q.options.map((o) => {\n const btns = this.compileButton(o, {\n kind: \"response-button\",\n questionId: variableId,\n questionText: text,\n });\n return btns;\n });\n const rootElements = buttons.map((b) => b.el);\n ThemeUtils.spaceEvenlyX(rootElements);\n return { question, components: buttons };\n }\n\n private compileButton(\n buttonDto: BuilderPageDto[\"nextButton\"],\n options:\n | { kind: \"response-button\"; questionId: string; questionText: string }\n | { kind: \"next-button\" },\n ): PageComponentDto {\n const { id, value, label } = buttonDto;\n const onclickAction: ButtonClickAction =\n options.kind === \"response-button\"\n ? {\n kind: \"submit-fact\",\n fact: {\n kind: \"numeric-fact\",\n label: label,\n value: value,\n referenceId: options.questionId,\n referenceLabel: options.questionText,\n },\n }\n : { kind: \"next-page\" };\n\n const btnStyles =\n value === 9 ? DefaultTheme.responseButtons.dontKnow : DefaultTheme.responseButtons.normal;\n const btn: DDivDto = {\n _tag: \"div\",\n children: [\n {\n _tag: \"p\",\n innerText: label,\n style: btnStyles.text1,\n },\n ],\n style: { ...btnStyles.btn.css, ...btnStyles.btn.cssEnabled },\n };\n\n if (options.kind === \"next-button\") {\n btn.style.x = 50;\n btn.style.y = 8;\n btn.style.transform = \"translate(-50%, 0%)\";\n }\n const component: PageComponentDto = {\n el: btn,\n onClick: onclickAction,\n };\n return component;\n }\n}\n","import type { BuilderPageDto, BuilderPageType } from \"./page/Builder-page\";\nimport { BuilderPage } from \"./page/Builder-page\";\nimport type {\n BuilderRuleDto,\n ExcludeByPageAction,\n ExcludeByTagAction,\n JumpToPageAction,\n RuleCustomVariable,\n} from \"./rulebuilder\";\nimport { BuilderRule, RuleInput } from \"./rulebuilder\";\nimport type { RuleQuestionVariable } from \"./rulebuilder/RuleVariable\";\nimport type { BuilderTagDto } from \"./tag/BuilderTag\";\nimport { BuilderTag } from \"./tag/BuilderTag\";\nimport { DefaultThemeCompiler } from \"./theme/default-theme-compiler\";\nimport { ImageFile } from \"./media-files\";\nimport { DUtil } from \"@media-quest/engine\";\nimport { PagePrefix } from \"./primitives/page-prefix\";\nimport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\nimport { CodeBook } from \"./code-book/codebook\";\nimport { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\nimport { SchemaConfig } from \"./schema-config\";\nimport { CompilerOption, CompilerOutput } from \"./builder-compiler\";\n\nimport { SumScoreVariable, SumScoreVariableDto } from \"./sum-score/sum-score-variable\";\nimport { PageID, SchemaID, SumScoreVariableID } from \"./primitives/ID\";\nimport { SumScoreVariableCollection } from \"./sum-score/sum-score-variable-collection\";\nimport { TagCollection } from \"./tag/Tag-Collection\";\nimport { BuilderPageCollection } from \"./page/Builder-page-collection\";\n\nconst U = DUtil;\n\nexport interface BuilderSchemaDto {\n readonly id: SchemaID;\n readonly prefix: SchemaPrefixValue;\n readonly mainImage: ImageFile | false;\n readonly backgroundColor: string;\n readonly name: string;\n readonly pages: ReadonlyArray<BuilderPageDto>;\n readonly baseHeight: number;\n readonly baseWidth: number;\n readonly predefinedVariables?: Array<CodebookPredefinedVariable>;\n readonly sumScoreVariables?: ReadonlyArray<SumScoreVariableDto>;\n readonly rules: ReadonlyArray<BuilderRuleDto>;\n readonly tags: ReadonlyArray<BuilderTagDto>;\n}\n\nexport class BuilderSchema {\n readonly prefix: SchemaPrefix;\n baseHeight = 1300;\n baseWidth = 1024;\n backgroundColor = \"#000000\";\n private readonly _pageCollection: BuilderPageCollection;\n mainImage: ImageFile | false = false;\n predefinedVariables: CodebookPredefinedVariable[] = [];\n private _rules: BuilderRule[] = [];\n private readonly _sumScoreCollection;\n get rules(): ReadonlyArray<BuilderRule> {\n return [...this._rules];\n }\n get pages(): ReadonlyArray<BuilderPage> {\n return [...this._pageCollection];\n }\n\n get sumScoreVariables(): ReadonlyArray<SumScoreVariable> {\n return [...this._sumScoreCollection];\n }\n\n // get prefix(): SchemaPrefixValue {\n // return this._prefix.value;\n // }\n\n private readonly _tagCollection: TagCollection = TagCollection.create();\n get tags(): ReadonlyArray<BuilderTag> {\n return [...this._tagCollection];\n }\n public static create(id: SchemaID, name: string, prefix: SchemaPrefixValue) {\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(prefix);\n return new BuilderSchema(id, name, schemaPrefix);\n }\n\n public static fromJson(dto: BuilderSchemaDto): BuilderSchema {\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(dto.prefix);\n const schema = new BuilderSchema(dto.id, dto.name, schemaPrefix);\n const sumScoreVariables = dto.sumScoreVariables ? [...dto.sumScoreVariables] : [];\n const pagesDto = Array.isArray(dto.pages) ? dto.pages : [];\n\n // Init collections.\n schema._tagCollection.init(dto.tags);\n schema._sumScoreCollection.init(sumScoreVariables);\n\n schema.backgroundColor = dto.backgroundColor;\n schema.baseHeight = dto.baseHeight;\n schema.baseWidth = dto.baseWidth;\n schema._pageCollection._init(pagesDto);\n schema.predefinedVariables = dto.predefinedVariables ?? [];\n schema.backgroundColor = dto.backgroundColor;\n schema.mainImage = dto.mainImage ?? false;\n const rulesDto = dto.rules ?? [];\n const ruleInput = schema.getRuleInput();\n schema._rules = rulesDto.map((r) => BuilderRule.fromDto(r, ruleInput));\n return schema;\n }\n\n toJson(): BuilderSchemaDto {\n const pages = this._pageCollection.toJson();\n const tags = this._tagCollection.toJson();\n const rules = this._rules.map((rule) => rule.toJson());\n const sumScoreVariables = this._sumScoreCollection.toJson();\n const dto: BuilderSchemaDto = {\n backgroundColor: this.backgroundColor,\n baseHeight: this.baseHeight,\n baseWidth: this.baseWidth,\n id: this.id,\n name: this.name,\n pages,\n rules,\n tags,\n predefinedVariables: this.predefinedVariables,\n sumScoreVariables,\n mainImage: this.mainImage,\n prefix: this.prefix.value,\n };\n return dto;\n }\n private constructor(\n public readonly id: SchemaID,\n public name: string,\n prefix: SchemaPrefix,\n ) {\n this.prefix = prefix;\n this._sumScoreCollection = SumScoreVariableCollection.create([]);\n this._pageCollection = BuilderPageCollection.create([]);\n // this\n }\n\n addPage(type: BuilderPageType, atIndex = -1): BuilderPage {\n return this._pageCollection.add(type, atIndex);\n }\n\n sumScoreVariableCreate(options: { name: string; description: string; useAvg: boolean }) {\n // TODO VALIDATE.\n // this._sumVariables.push({ ...variable });\n const variable = this._sumScoreCollection.addNew(options);\n\n return variable;\n }\n sumScoreVariableAddToPage(sumScoreVariable: SumScoreVariable, page: BuilderPage, weight: number) {\n // this._pages.\n return this._pageCollection.addSumScoreVariable(sumScoreVariable, page.id, weight);\n }\n\n sumScoreVariableUpdate(id: SumScoreVariableID, data: Partial<SumScoreVariableDto>) {\n const didUpdate = this._sumScoreCollection._updateOne(id, data);\n this._pageCollection.updateAllData({ sumScoreVariables: this._sumScoreCollection.asArray() });\n return didUpdate;\n }\n\n insertPage(page: BuilderPage, atIndex: number): boolean {\n return this.insertPageAtIndex(page, atIndex);\n }\n\n private insertPageAtIndex(page: BuilderPage, atIndex: number) {\n return this._pageCollection.insertPage(page, atIndex);\n }\n\n addRule() {\n const input = this.getRuleInput();\n const count = this._rules.length + 1;\n const name = \"Rule-number: \" + count;\n const rule = BuilderRule.fromDto(\n {\n conditions: [],\n type: \"all\",\n name,\n excludeTags: [],\n jumpToPage: false,\n excludePages: [],\n },\n input,\n );\n this._rules.push(rule);\n return rule;\n }\n deleteRule(rule: BuilderRule) {\n this._rules = this._rules.filter((r) => r !== rule);\n }\n\n movePage(page: BuilderPage, toIndex: number): boolean {\n return this._pageCollection.movePage(page, toIndex);\n }\n\n deletePage(page: BuilderPage): boolean {\n return this._pageCollection.deleteById(page.id);\n }\n\n reevaluateRules() {\n console.log(\"Reevaluationg rulesInput\");\n const input = this.getRuleInput();\n const rulesDto = this._rules.map((r) => r.toJson());\n this._rules = rulesDto.map((dto) => BuilderRule.fromDto(dto, input));\n }\n\n getRuleInput(): RuleInput {\n const qVars: RuleQuestionVariable[] = [];\n const cVars: RuleCustomVariable[] = [];\n const pageIdActions: ExcludeByPageAction[] = [];\n const tagActions: ExcludeByTagAction[] = this.tags.map((t) => {\n const tag = t.tagText;\n const pageCount = this._pageCollection.pages.reduce((count, curr) => {\n return curr.tags.includes(tag) ? count + 1 : count;\n }, 0);\n const excludeByTagDto: ExcludeByTagAction = {\n kind: \"exclude-by-tag\",\n pageCount,\n tag,\n description: t.tagDescription,\n };\n return excludeByTagDto;\n });\n\n const jumpActions: JumpToPageAction[] = [];\n\n this._pageCollection.pages.forEach((page, index) => {\n const pageVariables = page.getQuestionVariables(this.prefix, index);\n qVars.push(...pageVariables);\n const mainText = page.mainText.text;\n const pagePrefix = page.prefix;\n const jumpAction: JumpToPageAction = {\n kind: \"jump-to-page\",\n pageId: page.id,\n pagePrefix,\n pageNumber: index,\n mainText: page.mainText.text,\n };\n const excludePageAction: ExcludeByPageAction = {\n kind: \"exclude-by-pageId\",\n pageId: page.id,\n pagePrefix,\n pageNumber: index,\n mainText,\n };\n jumpActions.push(jumpAction);\n pageIdActions.push(excludePageAction);\n });\n const ruleInput = new RuleInput(qVars, cVars, pageIdActions, tagActions, jumpActions);\n\n return ruleInput;\n }\n\n deleteTags(tags: ReadonlyArray<BuilderTag>) {\n this._tagCollection.deleteAll(tags);\n }\n\n addTag(builderTag: BuilderTag) {\n this._tagCollection.add(builderTag);\n }\n\n compile(\n options: CompilerOption = { blockAutoplayQuestion: false, blockAutoplayVideo: false },\n ): CompilerOutput {\n // const moduleDto = this.toJson();\n const builderSchema = BuilderSchema.fromJson(this.toJson());\n\n // Overriding the\n builderSchema._pageCollection.pages.forEach((p) => {\n if (options.blockAutoplayQuestion) {\n p.mainText.autoplay = false;\n }\n if (options.blockAutoplayVideo && p.mainMedia) {\n if (p.mainMedia.kind === \"main-video\") {\n // TODO autoplay as boolean, so that we know if video is optional or required when override.\n p.mainMedia.mode = \"optional\";\n }\n }\n });\n const moduleDto = builderSchema.toJson();\n const imp = new DefaultThemeCompiler();\n\n const codebook = CodeBook.fromSchema(moduleDto);\n const schema = imp.compile(moduleDto);\n const schemaConfig = SchemaConfig.fromSchema(moduleDto);\n const output: CompilerOutput = { codebook, schema, schemaConfig };\n return output;\n }\n\n sumScoreVariableDelete(id: SumScoreVariableID) {\n const didDelete = this._sumScoreCollection._deleteVariable(id);\n const sumScoreVariables = [...this._sumScoreCollection];\n this._pageCollection.updateAllData({ sumScoreVariables });\n this._pageCollection.sumScoreVariableDelete(id);\n return didDelete;\n }\n}\n","import { BuilderPageDto } from \"../page/Builder-page\";\nimport { BuilderSchemaDto } from \"../Builder-schema\";\nimport { CodeBookQuestionVariable, CodebookPredefinedVariable } from \"./codebook-variable\";\nimport { SumScoreVariableDto } from \"../sum-score/sum-score-variable\";\n\nexport interface Codebook {\n readonly predefinedVariables: ReadonlyArray<CodebookPredefinedVariable>;\n readonly pageVariables: ReadonlyArray<CodeBookQuestionVariable>;\n}\n\nconst fromPage = (\n page: BuilderPageDto,\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\n pagePosition: number,\n modulePrefix: string,\n): CodeBookQuestionVariable[] => {\n const variables: CodeBookQuestionVariable[] = [];\n\n if (page._type !== \"question\") {\n // TODO Implement form field variables\n return [];\n }\n\n const options: CodeBookQuestionVariable[\"options\"] = page.defaultQuestion.options.map((o) => {\n return { value: o.value, label: o.label };\n });\n\n const varId = modulePrefix + \"_\" + page.prefix;\n\n const includedInSumScores = page.includedInSumScores.filter((a) => true);\n\n const variable: CodeBookQuestionVariable = {\n kind: \"codebook-question-variable\",\n label: page.mainText.text,\n pageId: page.id,\n pagePrefix: page.prefix,\n options,\n modulePrefix,\n pagePosition,\n varId,\n includedInSumScores: [],\n };\n\n variables.push(variable);\n\n return variables;\n};\n\n/**\n * Converts a list of pages into a list of question-variables\n * @param pages\n * @param sumScoreVariables\n * @param modulePrefix\n */\nconst getPageVariablesFromPages = (\n pages: ReadonlyArray<BuilderPageDto>,\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\n modulePrefix: string,\n): CodeBookQuestionVariable[] => {\n const variables: CodeBookQuestionVariable[] = [];\n pages.forEach((page, index) => {\n const pageVariables = fromPage(page, sumScoreVariables, index, modulePrefix);\n variables.push(...pageVariables);\n });\n return variables;\n};\n\nconst fromSchema = (schema: BuilderSchemaDto): Codebook => {\n const modulePrefix = schema.prefix;\n const sumScoreVariables = schema.sumScoreVariables ?? [];\n const pageVariables = getPageVariablesFromPages(schema.pages, sumScoreVariables, modulePrefix);\n const vs = schema.predefinedVariables;\n const predefinedVariables: CodebookPredefinedVariable[] = vs ? [...vs] : [];\n return { pageVariables, predefinedVariables };\n};\n\nexport const _CodeBook = {\n fromSchema,\n} as const;\n\nexport const CodeBook = Object.freeze(_CodeBook);\n","import { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\r\nimport { BuilderSchemaDto } from \"./Builder-schema\";\r\n\r\n/**\r\n * This interface is ment to define all information that a schema-admin app\r\n * needs to generate a dynamic form for setting values for predefined variables.\r\n */\r\nexport interface SchemaConfig {\r\n readonly schemaName: string;\r\n readonly schemaId: string;\r\n readonly schemaPrefix: string;\r\n readonly variables: ReadonlyArray<CodebookPredefinedVariable>;\r\n}\r\n\r\nexport const SchemaConfig = {\r\n fromSchema: (schema: BuilderSchemaDto): SchemaConfig => {\r\n const variables = schema.predefinedVariables ?? [];\r\n return {\r\n schemaId: schema.id,\r\n schemaName: schema.name,\r\n schemaPrefix: schema.prefix,\r\n variables,\r\n };\r\n },\r\n} as const;\r\n","import { SumScoreVariableID } from \"../primitives/ID\";\nimport { BuilderObject } from \"../BuilderObject\";\nimport { DUtil } from \"@media-quest/engine\";\n\nexport interface SumScoreVariableDto {\n id: SumScoreVariableID;\n name: string;\n description: string;\n useAvg: boolean;\n /**\n * All variables that the sum-score should be based on.\n */\n // basedOn: Array<{ varId: string; varLabel: string; weight?: number }>;\n}\n\nexport class SumScoreVariable extends BuilderObject<\n \"builder-sum-score-variable\",\n SumScoreVariableDto\n> {\n readonly objectType = \"builder-sum-score-variable\";\n readonly id: SumScoreVariableID;\n private _useAvg = true;\n private _name = \"\";\n private _description = \"\";\n private _error = \"\";\n // private _basedOn = new Map<pageId: Page>()\n\n // private _basedOn: Array<{ varId: string }> = [];\n public static readonly create = (data: {\n name: string;\n description: string;\n useAvg: boolean;\n }): SumScoreVariable => {\n const id = SumScoreVariableID.create();\n return new SumScoreVariable({ id, ...data });\n };\n\n get hasErrors() {\n return this._error.length !== 0;\n }\n\n public static fromDto = (dto: SumScoreVariableDto): SumScoreVariable => {\n return new SumScoreVariable(dto);\n };\n\n private constructor(dto: SumScoreVariableDto) {\n super(dto);\n this.id = dto.id;\n this._name = dto.name;\n this._useAvg = dto.useAvg;\n this._description = dto.description;\n }\n toJson(): SumScoreVariableDto {\n const dto: SumScoreVariableDto = {\n description: this.description,\n id: this.id,\n name: this.name,\n useAvg: this.useAvg,\n };\n return dto;\n }\n clone(): SumScoreVariableDto {\n const id = SumScoreVariableID.create();\n const dto = this.toJson();\n return { ...dto, id };\n }\n\n /** @internal*/\n _update(data: { name?: string; description?: string; useAvg?: boolean }) {\n const d = data ?? {};\n if (DUtil.isString(d.name)) {\n this._name = d.name;\n }\n if (DUtil.isString(d.description)) {\n this._description = d.description;\n }\n if (DUtil.isBool(d.useAvg)) {\n this._useAvg = d.useAvg;\n }\n }\n\n /**\n * @internal - used by sum-score-variable-collection.\n */\n _setError(error: \"\" | \"Duplicate name\") {\n this._error = error;\n }\n\n get name() {\n return this._name;\n }\n get description() {\n return this._description;\n }\n get useAvg() {\n return this._useAvg;\n }\n}\n","import { SumScoreVariable, SumScoreVariableDto } from \"./sum-score-variable\";\nimport { SumScoreVariableID } from \"../primitives/ID\";\n\nexport class SumScoreVariableCollection implements Iterable<SumScoreVariable> {\n private _all: Array<SumScoreVariable> = [];\n\n [Symbol.iterator]() {\n const list = [...this._all];\n return list[Symbol.iterator]();\n }\n\n asArray(): ReadonlyArray<SumScoreVariable> {\n return [...this._all];\n }\n\n public static readonly create = (\n variables?: SumScoreVariableDto[],\n ): SumScoreVariableCollection => {\n return new SumScoreVariableCollection(variables);\n };\n\n private constructor(sumScoreVariables?: SumScoreVariableDto[]) {\n const all = Array.isArray(sumScoreVariables) ? sumScoreVariables : [];\n this._all = all.map((dto) => SumScoreVariable.fromDto(dto));\n this.checkForErrors();\n }\n\n init(variables: SumScoreVariableDto[]) {\n this._all = variables.map((variable) => SumScoreVariable.fromDto(variable));\n this.checkForErrors();\n }\n addNew(options: { name: string; description: string; useAvg: boolean }) {\n // console.log(options);\n const newVariable = SumScoreVariable.create({ ...options });\n this._all.push(newVariable);\n this.checkForErrors();\n return newVariable;\n }\n\n get size() {\n return this._all.length;\n }\n\n get errorsCount() {\n return this._all.filter((variable) => variable.hasErrors).length;\n }\n\n toJson() {\n return this._all.map((item) => item.toJson());\n }\n\n /**\n *\n */\n _deleteVariable(id: SumScoreVariableID) {\n const initialSize = this._all.length;\n this._all = this._all.filter((variable) => variable.id !== id);\n this.checkForErrors();\n return initialSize === this.size + 1;\n }\n\n /**\n * @internal\n */\n _updateOne(\n id: SumScoreVariableID,\n updates: { name?: string; description?: string; useAvg?: boolean },\n ): boolean {\n const variable = this._all.find((variable) => variable.id === id);\n if (variable) {\n variable._update(updates);\n this.checkForErrors();\n return true;\n } else {\n return false;\n }\n }\n\n /** @internal */\n _getVariableById(id: SumScoreVariableID): SumScoreVariable | undefined {\n return this._all.find((variable) => variable.id === id);\n }\n\n private checkForErrors() {\n const nameMap = new Map<string, SumScoreVariable[]>();\n this._all.forEach((v) => {\n const array = nameMap.get(v.name) ?? [];\n array.push(v);\n nameMap.set(v.name, array);\n });\n nameMap.forEach((sameNameArray) => {\n sameNameArray.forEach((sameNameItem) => {\n if (sameNameArray.length > 1) {\n sameNameItem._setError(\"Duplicate name\");\n } else {\n sameNameItem._setError(\"\");\n }\n });\n });\n }\n}\n","import { BuilderObject } from \"../BuilderObject\";\nimport { TagID } from \"../primitives/ID\";\n\nexport interface BuilderTagDto {\n readonly id: TagID;\n readonly tag: string;\n readonly description: string;\n}\n\nexport class BuilderTag extends BuilderObject<\"builder-tag\", BuilderTagDto> {\n readonly objectType: \"builder-tag\" = \"builder-tag\";\n readonly id: TagID;\n tagText = \"\";\n tagDescription = \"\";\n public static readonly MAX_LENGTH = 20;\n public static readonly MIN_LENGTH = 1;\n\n public static readonly create = (tag: string, description: string = \"\") => {\n const id = TagID.create();\n const dto: BuilderTagDto = {\n id,\n tag,\n description,\n };\n return new BuilderTag(dto);\n };\n public static readonly fromDto = (dto: BuilderTagDto) => {\n return new BuilderTag(dto);\n };\n protected constructor(dto: BuilderTagDto) {\n const id = TagID.validateOrCreate(dto.id);\n const withId = { ...dto, id };\n super(withId);\n this.id = id;\n this.tagText = dto.tag ?? \"\";\n this.tagDescription = dto.description ?? \"\";\n }\n clone(): BuilderTagDto {\n return this.toJson();\n }\n\n toJson(): BuilderTagDto {\n return { tag: this.tagText, description: this.tagDescription, id: this.id };\n }\n}\n","import { BuilderTag, BuilderTagDto } from \"./BuilderTag\";\n\nexport class TagCollection implements Iterable<BuilderTag> {\n private readonly _tags = new Set<BuilderTag>();\n public static readonly create = () => {\n return new TagCollection([]);\n };\n\n [Symbol.iterator]() {\n const list = [...this._tags];\n return list[Symbol.iterator]();\n }\n\n private constructor(initialTags: ReadonlyArray<BuilderTag>) {\n initialTags.forEach((tag) => {\n this._tags.add(tag);\n });\n }\n\n init(tags: ReadonlyArray<BuilderTagDto>) {\n const dtoList: ReadonlyArray<BuilderTagDto> = Array.isArray(tags) ? tags : [];\n const all = dtoList.map(BuilderTag.fromDto);\n all.forEach((tag) => {\n this._tags.add(tag);\n });\n }\n\n add(tag: BuilderTag) {\n this._tags.add(tag);\n }\n\n /**\n * Delete this tag from collection;\n * @param tag\n */\n delete(tag: BuilderTag) {\n this._tags.delete(tag);\n }\n\n toJson(): ReadonlyArray<BuilderTagDto> {\n const list = [...this._tags];\n const dtoList = list.map((t) => t.toJson());\n return dtoList;\n }\n\n deleteAll(tags: Iterable<BuilderTag>) {\n const l = tags[Symbol.iterator]();\n const asList = [...tags];\n asList.forEach((t) => {\n this.delete(t);\n });\n }\n}\n","import { DUtil } from \"@media-quest/engine\";\nimport { BuilderPage, BuilderPageDto } from \"./Builder-page\";\nimport { PageID, PagePrefix, SumScoreVariableID } from \"../public-api\";\nimport { SumScoreVariableCollection } from \"../sum-score/sum-score-variable-collection\";\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\n\nconst U = DUtil;\nexport type BuilderPageType = \"info-page\" | \"question\";\n\nexport class BuilderPageCollection implements Iterable<BuilderPage> {\n private _all: Array<BuilderPage> = [];\n\n public static create(pages: BuilderPageDto[]) {\n const page = new BuilderPageCollection(pages);\n page._all = pages.map((p) => BuilderPage.fromJson(p));\n return page;\n }\n private constructor(initialPages: BuilderPageDto[]) {}\n\n /** @internal - used by Schema*/\n _init(pages: BuilderPageDto[]) {\n this._all = pages.map(BuilderPage.fromJson);\n }\n\n add(type: BuilderPageType, atIndex = -1): BuilderPage {\n const pagePrefix = PagePrefix.create();\n const newPage = BuilderPage.create(type, pagePrefix.value);\n if (atIndex >= 0 && atIndex < this._all.length) {\n this._all.splice(atIndex, 0, newPage);\n } else {\n this._all.push(newPage);\n }\n return newPage;\n }\n\n deleteById(id: PageID) {\n const index = this._all.findIndex((p) => p.id === id);\n if (index !== -1) {\n this._all.splice(index, 1);\n return true;\n } else {\n return false;\n }\n }\n\n private getPageById(pageId: PageID) {\n const maybePage = this._all.find((p) => p.id === pageId);\n return maybePage ?? false;\n }\n get size() {\n return this._all.length;\n }\n get pages(): ReadonlyArray<BuilderPage> {\n return [...this._all];\n }\n toJson(): ReadonlyArray<BuilderPageDto> {\n return this._all.map((p) => p.toJson());\n }\n\n [Symbol.iterator]() {\n const list = [...this._all];\n return list[Symbol.iterator]();\n }\n\n movePage(page: BuilderPage, toIndex: number) {\n const index = this._all.indexOf(page);\n if (index < 0) {\n return false;\n }\n const isValidIndex = U.isInRange(0, this._all.length - 1);\n if (!isValidIndex(toIndex)) {\n return false;\n }\n // console.log('Moving from :' + index + ' to: ' + toIndex);\n this._all.splice(index, 1);\n this._all.splice(toIndex, 0, page);\n return true;\n }\n\n insertPage(page: BuilderPage, atIndex: number) {\n const isValidIndex = U.isInRange(0, this._all.length - 1);\n if (!isValidIndex(atIndex)) {\n return false;\n }\n const exists = !!this._all.find((p) => p.id === page.id);\n if (exists) {\n return false;\n }\n this._all.splice(atIndex, 0, page);\n return true;\n }\n\n addSumScoreVariable(sumScoreVariable: SumScoreVariable, pageId: PageID, weight: number) {\n const maybePage = this.getPageById(pageId);\n if (!maybePage) return false;\n maybePage.sumScoreVariableSet(sumScoreVariable, weight);\n\n // maybePage.addSumScoreVariable(maybeVariable, weight);\n return true;\n }\n\n updateAllData(context: { sumScoreVariables: ReadonlyArray<SumScoreVariable> }) {\n this._all.forEach((p) => {\n p.sumScoreVariableUpdateData(context.sumScoreVariables);\n });\n }\n\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\n this._all.forEach((p) => {\n p.sumScoreVariableDelete(sumScoreVariableID);\n });\n }\n}\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport { TextID } from \"./primitives/ID\";\r\n\r\nexport interface BuilderTextDto {\r\n readonly id: TextID;\r\n text: string;\r\n name: string;\r\n translationRequired: boolean;\r\n}\r\n\r\nexport class BuilderText extends BuilderObject<\"builder-text\", BuilderTextDto> {\r\n readonly objectType = \"builder-text\";\r\n id: TextID;\r\n text = \"\";\r\n name = \"\";\r\n translateRequired = false;\r\n // audio: {id: B}\r\n private constructor(dto: BuilderTextDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this.translateRequired = dto.translationRequired;\r\n this.name = dto.name;\r\n this.text = dto.text;\r\n }\r\n\r\n public static create(name: string) {\r\n const id = TextID.create();\r\n const dto: BuilderTextDto = {\r\n id,\r\n name,\r\n text: \"\",\r\n translationRequired: false,\r\n };\r\n const instance = new BuilderText(dto);\r\n return instance;\r\n }\r\n public static fromJson(dto: BuilderTextDto) {\r\n const instance = new BuilderText(dto);\r\n return instance;\r\n }\r\n\r\n clone(): BuilderTextDto {\r\n const dto = this.toJson();\r\n const withNewId: BuilderTextDto = { ...dto, id: TextID.create() };\r\n return withNewId;\r\n }\r\n\r\n toJson(): BuilderTextDto {\r\n const dto: BuilderTextDto = {\r\n id: this.id,\r\n name: this.name,\r\n text: this.text,\r\n translationRequired: this.translateRequired,\r\n };\r\n return dto;\r\n }\r\n}\r\n","import { SumScoreVariableDto } from \"./sum-score-variable\";\nimport { SumScoreVariableID } from \"../primitives/ID\";\nimport { SumScoreAnswer } from \"./sum-score-answer\";\nimport { CodeBook } from \"../code-book/codebook\";\nimport { BuilderSchemaDto } from \"../Builder-schema\";\n\n/**\n *\n * A constant Array that contains all legal\n */\nconst ALLOWED_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8];\nconst isAllowedValue = (num: number) => {\n const notNegative = num >= 0;\n const lessThanNine = num < 9;\n return notNegative && lessThanNine;\n};\n\ntype BasedOnEntry =\n | { kind: \"missing\"; varId: string }\n | { kind: \"invalid-variable\"; varId: string; message: string }\n | { kind: \"has-value\"; varId: string; value: number; weight: number; varLabel: string };\n\nexport interface SumScore {\n sumScore: number;\n avg: number; // Alle besvarte spørsmål som ikke er 9.\n useAvg: boolean;\n includedAnswerCount: number;\n missingAnswerCount: number;\n skippedBy9Count: number; // Antall vetikke / hopp over\n basedOn: Array<{ varId: string; value: number; weight: number; varLabel: string }>;\n errorMessages: string[];\n}\n\nconst calculateAll = (\n schemaDto: BuilderSchemaDto,\n answers: Array<SumScoreAnswer>,\n): ReadonlyArray<SumScore> => {\n const vs = schemaDto.sumScoreVariables ?? [];\n\n const basedOnMap = new Map<SumScoreVariableID, Array<{ varId: string; weight: number }>>();\n const codeBook = CodeBook.fromSchema(schemaDto);\n // codeBook.pageVariables.find(v => v.pageId === )\n const pages = schemaDto.pages;\n // const a: Array<{pageId: PageID, sumScoreVariableId: SumScoreVariableID, weight: number, varId: string}> = []\n\n pages.forEach((page) => {\n page.includedInSumScores.forEach((includedInScores) => {\n const variableId = includedInScores.sumScoreVariableId;\n const weight = includedInScores.weight;\n const p = codeBook.pageVariables.find((v) => v.pageId === page.id);\n if (p) {\n const currentBasedOnArray = basedOnMap.get(variableId) ?? [];\n currentBasedOnArray.push({ varId: p.varId, weight });\n basedOnMap.set(variableId, currentBasedOnArray);\n } else {\n // TODO - Global event-bus for errors?\n console.error(\"INVALID DATA in calculate all sum-scores.\");\n // throw Error(\"Invalid data...\");\n }\n });\n });\n // const pages = Array.isArray(schemaDto.pages) ? schemaDto.pages : [];\n const results: ReadonlyArray<SumScore> = vs.map((v) => {\n const basedOn = basedOnMap.get(v.id) ?? [];\n return calculate(v, basedOn, answers);\n });\n\n return results;\n};\nconst calculate = (\n sumScoreVariable: SumScoreVariableDto,\n basedOnVariables: Array<{ varId: string; weight: number }>,\n answers: Array<SumScoreAnswer>,\n): SumScore => {\n const legalValues: Array<number> = [...ALLOWED_VALUES];\n // CALCULATE THESE!!\n let includedAnswerCount = 0;\n let skippedBy9Count = 0;\n let missingAnswerCount = 0;\n let sumScore = 0;\n const errorMessages: string[] = [];\n const basedOn: SumScore[\"basedOn\"] = [];\n const useAvg = sumScoreVariable.useAvg;\n\n const basedOnEntries: BasedOnEntry[] = basedOnVariables.map((scv) => {\n const maybeAnswer = answers.find((v) => v.varId === scv.varId);\n let result: BasedOnEntry = { kind: \"missing\", varId: scv.varId };\n if (!maybeAnswer) {\n return result;\n }\n\n const value = maybeAnswer.value;\n const varLabel = maybeAnswer.varLabel;\n const weight = scv.weight ?? 1;\n const varId = maybeAnswer.varId;\n\n result = {\n kind: \"has-value\",\n varId,\n weight,\n value,\n varLabel,\n };\n\n return result;\n });\n\n basedOnEntries.forEach((entry) => {\n if (entry.kind === \"missing\") {\n missingAnswerCount++;\n }\n if (entry.kind === \"has-value\") {\n const { varId, varLabel, weight, value } = { ...entry };\n const isAllowed = isAllowedValue(value);\n if (isAllowed) {\n basedOn.push({ varId, weight, value, varLabel });\n sumScore += entry.value * entry.weight;\n includedAnswerCount++;\n }\n if (value === 9) {\n skippedBy9Count++;\n basedOn.push({ varId, weight, value, varLabel });\n }\n }\n if (entry.kind === \"invalid-variable\") {\n errorMessages.push(entry.message);\n }\n });\n\n const avg = sumScore / includedAnswerCount;\n const result: SumScore = {\n avg,\n useAvg,\n includedAnswerCount,\n skippedBy9Count,\n sumScore,\n basedOn,\n missingAnswerCount,\n errorMessages,\n };\n // Calculate avg\n\n return result;\n};\nconst createVariable = (): SumScoreVariableDto => {\n const id = SumScoreVariableID.create();\n return {\n id,\n name: \"\",\n useAvg: true,\n description: \"\",\n // basedOn: [],\n };\n};\nexport const SumScore = {\n ALLOWED_VALUES,\n calculate,\n calculateAll,\n isAllowedValue,\n createVariable,\n};\n"],"mappings":"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","names":["BuilderOperator","v","op","dto","label","ThemeUtils","BuilderOptionTheme","import_engine","import_engine","import_engine","variable","import_engine","result"]}
1
+ {"version":3,"sources":["../src/public-api.ts","../src/BuilderObject.ts","../src/primitives/ID.ts","../src/Builder-option.ts","../src/Builder-question.ts","../src/BuilderMainText.ts","../src/rulebuilder/condition/Builder-operator.ts","../src/rulebuilder/SingleSelectItem.ts","../src/rulebuilder/condition/Builder-condition.ts","../src/rulebuilder/condition/Builder-condition-group.ts","../src/rulebuilder/multi-select-item.ts","../src/rulebuilder/tag-action-manager.ts","../src/rulebuilder/page-action-manager.ts","../src/rulebuilder/jump-to-action-manager.ts","../src/rulebuilder/Builder-rule.ts","../src/rulebuilder/RuleInput.ts","../src/rulebuilder/RuleVariable.ts","../src/page/Builder-page.ts","../src/primitives/schema-prefix.ts","../src/primitives/page-prefix.ts","../src/primitives/varID.ts","../src/theme/AbstractThemeCompiler.ts","../src/theme/theme-utils.ts","../src/theme/icon-urls.ts","../src/theme/IDefaultTheme.ts","../src/theme/default-theme-compiler.ts","../src/Builder-schema.ts","../src/code-book/codebook.ts","../src/schema-config.ts","../src/sum-score/sum-score-variable.ts","../src/sum-score/sum-score-variable-collection.ts","../src/tag/BuilderTag.ts","../src/tag/Tag-Collection.ts","../src/page/Builder-page-collection.ts","../src/Builder-text.ts","../src/sum-score/sum-score.ts"],"sourcesContent":["export { type BuilderOptionDto, BuilderOption } from \"./Builder-option\";\nexport { type BuilderPageDto, type BuilderPageType, BuilderPage } from \"./page/Builder-page\";\nexport {\n type BuilderQuestionDto,\n BuilderQuestion,\n type BuilderQuestionType,\n} from \"./Builder-question\";\nexport { BuilderSchema, type BuilderSchemaDto } from \"./Builder-schema\";\nexport { BuilderText, type BuilderTextDto } from \"./Builder-text\";\nexport { type BuilderMainImageDto } from \"./BuilderMainImageDto\";\nexport { BuilderMainText, type BuilderMainTextDto } from \"./BuilderMainText\";\nexport { type BuilderMainVideoDto } from \"./BuilderMainVideoDto\";\nexport { type BuilderTagDto, BuilderTag } from \"./tag/BuilderTag\";\nexport { type AudioFile, type ImageFile, type VideoFile } from \"./media-files\";\n// Public Api of rule-builder\nexport * from \"./rulebuilder\";\nexport { PagePrefix, PagePrefixValue } from \"./primitives/page-prefix\";\nexport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\nexport * from \"./schema-config\";\nexport * from \"./code-book/codebook\";\nexport { VarID } from \"./primitives/varID\";\nexport * from \"./primitives/ID\";\nexport * from \"./code-book/codebook-variable\";\nexport * from \"./builder-compiler\";\nexport * from \"./sum-score/sum-score\";\nexport { SumScoreVariableDto, SumScoreVariable } from \"./sum-score/sum-score-variable\";\nexport { SumScoreAnswer } from \"./sum-score/sum-score-answer\";\nexport { TagCollection } from \"./tag/Tag-Collection\";\n","/**\r\n * Builder objects are complex objects that are embedded inside\r\n * a Builder-schema, and needs to be serialized to json. Often these objects\r\n * are used in collections, and that is why most of them need an id.\r\n */\r\ntype BuilderObjectType =\r\n | \"builder-page\"\r\n | \"builder-question-option\"\r\n | \"builder-question\"\r\n | \"builder-main-text\"\r\n | \"builder-text\"\r\n | \"builder-rule\"\r\n | \"builder-tag\"\r\n | \"builder-sum-score-variable\"\r\n | \"builder-sum-score-membership\"\r\n | \"builder-condition\"\r\n | \"builder-variable\"\r\n | \"builder-condition-group\";\r\n\r\nexport abstract class BuilderObject<T extends BuilderObjectType, Dto extends {}> {\r\n // abstract readonly id: string;\r\n abstract readonly objectType: T;\r\n abstract toJson(): Dto;\r\n abstract clone(): Dto;\r\n protected readonly originalDto: Dto;\r\n protected constructor(dto: Dto) {\r\n this.originalDto = dto;\r\n // this.objectId = dto.objectId;\r\n }\r\n}\r\n","// The default length of an ID\nconst ID_LENGTH = 32;\n\n// The minimum length of an ID\nconst MIN_LENGTH = 10;\n\nexport type ID<B extends string> = string & { __ID__: B };\n\nconst isID = <const B extends string>(idName: B, id?: string): id is ID<B> => {\n if (typeof id !== \"string\") return false;\n return id.length >= MIN_LENGTH;\n};\n\nconst createIDByName = <const B extends string>(idName: B): ID<B> => {\n const letters = \"abcdefghijklmnopqrstuvyz\";\n const all = letters + letters.toUpperCase();\n let result = \"\";\n\n for (let i = 0; i < ID_LENGTH; i++) {\n const char = all.charAt(Math.floor(Math.random() * all.length));\n result += char;\n }\n\n return result as ID<B>;\n};\nconst createDummyID = <const B extends string>(idName: B, letter: string): ID<B> => {\n return letter.repeat(ID_LENGTH) as ID<B>;\n};\ninterface Id<T extends string> {\n name: T;\n is: (id: string) => id is ID<T>;\n validateOrCreate: (id: string) => ID<T>;\n validateOrThrow: (id: string) => ID<T>;\n create: () => ID<T>;\n dummy: {\n a: ID<T>;\n b: ID<T>;\n c: ID<T>;\n d: ID<T>;\n e: ID<T>;\n f: ID<T>;\n g: ID<T>;\n h: ID<T>;\n i: ID<T>;\n j: ID<T>;\n };\n}\n\n/**\n * Creates a object with helper functions for a specific ID type\n * @param idName\n */\nexport const createTypedIdSingleton = <const B extends string>(idName: B): Id<B> => {\n /**\n * Creates a new ID of the correct type\n */\n const create = (): ID<B> => createIDByName(idName);\n\n /**\n * Checks if the id is of the correct type\n * @param id\n */\n const is = (id: string): id is ID<B> => isID(idName, id);\n\n /**\n * Checks if the id is of the correct type, if not it throws an error\n * @param id\n */\n const validateOrThrow = (id: string): ID<B> => {\n if (!is(id)) {\n throw new Error(`Invalid id: ${id}`);\n }\n return id;\n };\n\n /**\n * The lowercase name of the id (SCHEMA, PAGE, etc)\n */\n const name: B = idName;\n\n /**\n * Ensures that the id is of the correct type, if not it creates a new one\n * @param id\n */\n const validateOrCreate = (id: string): ID<B> => {\n return is(id) ? id : create();\n };\n\n const a = createDummyID(idName, \"a\");\n const b = createDummyID(idName, \"b\");\n const c = createDummyID(idName, \"c\");\n const d = createDummyID(idName, \"d\");\n const e = createDummyID(idName, \"e\");\n const f = createDummyID(idName, \"f\");\n const g = createDummyID(idName, \"g\");\n const h = createDummyID(idName, \"h\");\n const i = createDummyID(idName, \"i\");\n const j = createDummyID(idName, \"j\");\n const list = [a, b, c, d, e, f, g, h, i, j];\n\n const dummy = {\n a,\n b,\n c,\n d,\n e,\n f,\n g,\n h,\n i,\n j,\n list,\n };\n\n return Object.freeze({ create, is, validateOrCreate, validateOrThrow, name, dummy });\n};\n\nexport type SchemaID = ID<\"SCHEMA\">;\nexport const SchemaID = createTypedIdSingleton(\"SCHEMA\");\n\nexport type PageID = ID<\"PAGE\">;\nexport const PageID = createTypedIdSingleton(\"PAGE\");\n\nexport type TagID = ID<\"TAG\">;\nexport const TagID = createTypedIdSingleton(\"TAG\");\nexport type OptionID = ID<\"OPTION\">;\nexport const OptionID = createTypedIdSingleton(\"OPTION\");\n\nexport type TextID = ID<\"TEXT\">;\nexport const TextID = createTypedIdSingleton(\"TEXT\");\nexport type QuestionID = ID<\"QUESTION\">;\nexport const QuestionID = createTypedIdSingleton(\"QUESTION\");\n\nexport type SumScoreVariableID = ID<\"SUM_SCORE_VARIABLE\">;\nexport const SumScoreVariableID = createTypedIdSingleton(\"SUM_SCORE_VARIABLE\");\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport type { BuilderOptionTheme } from \"./theme/IDefaultTheme\";\r\nimport { DefaultTheme } from \"./theme/IDefaultTheme\";\r\nimport { AudioFile } from \"./media-files\";\r\nimport { OptionID } from \"./primitives/ID\";\r\n\r\nexport interface BuilderOptionDto {\r\n readonly id: OptionID;\r\n readonly value: number;\r\n readonly label: string;\r\n readonly labelAudio?: AudioFile;\r\n}\r\n\r\nexport class BuilderOption extends BuilderObject<\"builder-question-option\", BuilderOptionDto> {\r\n readonly objectType = \"builder-question-option\";\r\n id: OptionID;\r\n value: number;\r\n label = \"\";\r\n private _labelAudioFile: AudioFile | false = false;\r\n get labelAudioFile() {\r\n return this._labelAudioFile;\r\n }\r\n set labelAudioFile(audioFile: AudioFile | false) {\r\n this._labelAudioFile = audioFile;\r\n }\r\n\r\n private constructor(dto: BuilderOptionDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this.value = dto.value;\r\n this.label = dto.label;\r\n // this.theme = dto.theme;\r\n }\r\n public static create(value: number, label: string) {\r\n const id = OptionID.create();\r\n const dto: BuilderOptionDto = {\r\n id,\r\n value,\r\n label,\r\n };\r\n const instance = new BuilderOption(dto);\r\n return instance;\r\n }\r\n\r\n public static fromJson(dto: BuilderOptionDto) {\r\n const instance = new BuilderOption(dto);\r\n return instance;\r\n }\r\n\r\n toJson(): BuilderOptionDto {\r\n const dto: BuilderOptionDto = {\r\n id: this.id,\r\n value: this.value,\r\n label: this.label,\r\n };\r\n return dto;\r\n }\r\n\r\n clone(): BuilderOptionDto {\r\n const dto = this.toJson();\r\n const cloneDto: BuilderOptionDto = { ...dto, id: OptionID.create() };\r\n return cloneDto;\r\n }\r\n}\r\n","import type { BuilderOptionDto } from \"./Builder-option\";\r\nimport { BuilderOption } from \"./Builder-option\";\r\nimport { BuilderObject } from \"./BuilderObject\";\r\nimport { QuestionID } from \"./primitives/ID\";\r\n\r\nexport type BuilderQuestionType =\r\n | \"select-one\"\r\n | \"select-many\"\r\n | \"text\"\r\n | \"time\"\r\n | \"textarea\"\r\n | \"date\"\r\n | \"numeric-range\"\r\n | \"duration\";\r\n\r\nexport interface BuilderQuestionDto {\r\n readonly id: QuestionID;\r\n _type: BuilderQuestionType;\r\n text: string;\r\n options: ReadonlyArray<BuilderOptionDto>;\r\n prefix: string;\r\n}\r\n\r\nexport class BuilderQuestion extends BuilderObject<\"builder-question\", BuilderQuestionDto> {\r\n readonly objectType = \"builder-question\";\r\n id: QuestionID;\r\n type: BuilderQuestionType;\r\n questionText = \"\";\r\n options: BuilderOption[] = [];\r\n prefix = \"\";\r\n\r\n static create = (type: BuilderQuestionType) => {\r\n const id = QuestionID.create();\r\n\r\n return new BuilderQuestion({\r\n id,\r\n _type: type,\r\n text: \"\",\r\n options: [],\r\n prefix: \"\",\r\n });\r\n };\r\n\r\n public static fromJson(dto: BuilderQuestionDto): BuilderQuestion {\r\n const question = new BuilderQuestion(dto);\r\n return question;\r\n }\r\n\r\n private constructor(dto: BuilderQuestionDto) {\r\n super(dto);\r\n this.id = QuestionID.validateOrCreate(dto.id);\r\n this.type = dto._type;\r\n this.questionText = dto.text;\r\n this.prefix = dto.prefix;\r\n this.options = dto.options.map((o) => BuilderOption.fromJson(o));\r\n }\r\n\r\n addOption(label: string, value: number, atIndex = -1) {\r\n const option = BuilderOption.create(value, label);\r\n if (atIndex >= 0 && atIndex < this.options.length) {\r\n this.options.splice(atIndex, 0, option);\r\n } else {\r\n this.options.push(option);\r\n }\r\n return option;\r\n }\r\n\r\n deleteOption(option: BuilderOption): boolean {\r\n const filtered = this.options.filter((o) => o.id !== option.id);\r\n const didDelete = filtered.length === this.options.length - 1;\r\n this.options = filtered;\r\n return didDelete;\r\n }\r\n\r\n toJson() {\r\n const optionsJson = this.options.map((o) => o.toJson());\r\n const dto: BuilderQuestionDto = {\r\n id: this.id,\r\n prefix: this.prefix,\r\n _type: this.type,\r\n text: this.questionText,\r\n options: optionsJson,\r\n };\r\n return dto;\r\n }\r\n\r\n clone(): BuilderQuestionDto {\r\n const cloneId = QuestionID.create();\r\n const dto = this.toJson();\r\n const optionsClone = this.options.map((o) => o.clone());\r\n const clonedDto: BuilderQuestionDto = {\r\n ...dto,\r\n id: cloneId,\r\n options: optionsClone,\r\n };\r\n return clonedDto;\r\n }\r\n}\r\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport { AudioFile } from \"./media-files\";\r\n\r\nexport interface BuilderMainTextDto {\r\n text: string;\r\n audioFile: AudioFile | false;\r\n autoplay: boolean;\r\n autoplayDelay: number;\r\n}\r\n\r\nexport class BuilderMainText extends BuilderObject<\"builder-main-text\", BuilderMainTextDto> {\r\n readonly objectType: \"builder-main-text\" = \"builder-main-text\";\r\n autoplay = false;\r\n private _audioFile: AudioFile | false = false;\r\n autoplayDelay = 0;\r\n\r\n text = \"\";\r\n\r\n private constructor(dto: BuilderMainTextDto) {\r\n super(dto);\r\n this._audioFile = dto.audioFile ?? false;\r\n this.autoplay = dto.autoplay ?? false;\r\n this.autoplayDelay = dto.autoplayDelay ?? 0;\r\n this.text = dto.text ?? \"\";\r\n }\r\n\r\n get autoplayDelayInSeconds() {\r\n const delay = this.autoplayDelay;\r\n const s = delay / 1000;\r\n const formatted = s.toFixed(1);\r\n return formatted;\r\n }\r\n\r\n get durationTag() {\r\n if (!this.audioFile) return \"\";\r\n // console.log(this.audioFile.duration);\r\n const dur = this.audioFile.duration.toFixed(1);\r\n return \"dur \" + dur + \" s\";\r\n }\r\n\r\n static fromJson(dto: BuilderMainTextDto): BuilderMainText {\r\n const mainText = new BuilderMainText(dto);\r\n return mainText;\r\n }\r\n\r\n static create = () => {\r\n const dto: BuilderMainTextDto = {\r\n autoplay: false,\r\n autoplayDelay: 0,\r\n audioFile: false,\r\n text: \"\",\r\n };\r\n return new BuilderMainText(dto);\r\n };\r\n\r\n clone(): BuilderMainTextDto {\r\n const dto = this.toJson();\r\n const clone = JSON.parse(JSON.stringify(dto));\r\n return clone;\r\n }\r\n\r\n toJson(): BuilderMainTextDto {\r\n const dto: BuilderMainTextDto = {\r\n text: this.text,\r\n audioFile: this.audioFile,\r\n autoplay: this.autoplay,\r\n autoplayDelay: this.autoplayDelay,\r\n };\r\n return dto;\r\n }\r\n get audioFile(): AudioFile | false {\r\n return this._audioFile;\r\n }\r\n set audioFile(audioFile: AudioFile | false) {\r\n if (audioFile === false) {\r\n this.autoplayDelay = 0;\r\n this.autoplay = false;\r\n }\r\n this._audioFile = audioFile;\r\n }\r\n}\r\n","const BuilderOperatorSymbols = {\r\n equal: true,\r\n notEqual: true,\r\n lessThan: true,\r\n lessThanOrEqual: true,\r\n greaterThan: true,\r\n greaterThanOrEqual: true,\r\n between: true,\r\n notBetween: true,\r\n in: true,\r\n notIn: true,\r\n missing: true,\r\n notMissing: true,\r\n contains: true,\r\n notContains: true,\r\n empty: true,\r\n notEmpty: true,\r\n startsWith: true,\r\n endsWith: true,\r\n} as const;\r\n\r\nexport type BuilderOperator = keyof typeof BuilderOperatorSymbols;\r\n\r\nexport namespace BuilderOperator {\r\n export const is = (symbol?: string): symbol is BuilderOperator => {\r\n if (typeof symbol !== \"string\") {\r\n return false;\r\n }\r\n return Object.keys(BuilderOperatorSymbols).includes(symbol);\r\n };\r\n}\r\n","import { RuleVariable, RuleVariableOption } from \"./RuleVariable\";\r\nimport { BuilderOperator } from \"./condition/Builder-operator\";\r\nimport { JumpToPageAction } from \"./RuleAction\";\r\n\r\nexport abstract class SingleSelectItem<T> {\r\n private readonly _selectLabel;\r\n private readonly _toolTip;\r\n private readonly _searchString;\r\n get selectLabel(): string {\r\n return this._selectLabel;\r\n }\r\n get tooltip() {\r\n return this._toolTip;\r\n }\r\n\r\n get searchString() {\r\n return this._searchString;\r\n }\r\n\r\n protected constructor(readonly data: T) {\r\n this._selectLabel = this.getSelectLabel();\r\n this._toolTip = this.getTooltip();\r\n this._searchString = this.getSearchString();\r\n }\r\n protected abstract getSelectLabel(): string;\r\n protected abstract getTooltip(): string;\r\n protected abstract getSearchString(): string;\r\n}\r\n\r\nexport class RuleVariableSelectItem extends SingleSelectItem<RuleVariable> {\r\n public static create = (data: RuleVariable) => {\r\n return new RuleVariableSelectItem(data);\r\n };\r\n readonly options: ReadonlyArray<RuleOptionSelectItem>;\r\n constructor(readonly data: RuleVariable) {\r\n super(data);\r\n this.options = data.options.map(RuleOptionSelectItem.create);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return this.data.varId + this.data.label;\r\n }\r\n\r\n getSelectLabel(): string {\r\n return this.data.varId;\r\n }\r\n\r\n getTooltip(): string {\r\n return this.data.label;\r\n }\r\n}\r\n\r\nexport class RuleOptionSelectItem extends SingleSelectItem<RuleVariableOption> {\r\n public static create = (option: RuleVariableOption) => {\r\n return new RuleOptionSelectItem(option);\r\n };\r\n private constructor(option: RuleVariableOption) {\r\n super(option);\r\n }\r\n protected getSearchString(): string {\r\n return \"\";\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.label + \"(\" + this.data.value + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport class OperatorSelectItem extends SingleSelectItem<BuilderOperator | \"\"> {\r\n public static readonly EQ = new OperatorSelectItem(\"equal\");\r\n public static readonly NOT_EQ = new OperatorSelectItem(\"notEqual\");\r\n public static readonly fromSymbol = (\r\n symbol: BuilderOperator | Omit<string, BuilderOperator>,\r\n ): OperatorSelectItem | false => {\r\n if (symbol === \"equal\") {\r\n return OperatorSelectItem.EQ;\r\n }\r\n if (symbol === \"notEqual\") {\r\n return OperatorSelectItem.NOT_EQ;\r\n }\r\n return false;\r\n };\r\n private constructor(operator: BuilderOperator) {\r\n super(operator);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return \"\";\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n const operator = this.data;\r\n if (operator === \"equal\") {\r\n return \"Equals\";\r\n }\r\n if (operator === \"notEqual\") {\r\n return \"Not equals\";\r\n }\r\n return \"\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n const operator = this.data;\r\n if (operator === \"equal\") {\r\n return \"Equals\";\r\n }\r\n if (operator === \"notEqual\") {\r\n return \"Not equals\";\r\n }\r\n return \"\";\r\n }\r\n}\r\n\r\nexport class JumpToPageSelectItem extends SingleSelectItem<JumpToPageAction> {\r\n public static readonly create = (pageData: JumpToPageAction) =>\r\n new JumpToPageSelectItem(pageData);\r\n protected constructor(pageData: JumpToPageAction) {\r\n super(pageData);\r\n }\r\n\r\n protected getSearchString(): string {\r\n return this.data.pagePrefix + this.data.mainText;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.pagePrefix + \" (\" + this.data.pageNumber + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.mainText;\r\n }\r\n}\r\n","import { BuilderObject } from \"../../BuilderObject\";\r\nimport { BuilderOperator } from \"./Builder-operator\";\r\nimport type { RuleVariable, RuleVariableOption } from \"../RuleVariable\";\r\nimport {\r\n OperatorSelectItem,\r\n RuleOptionSelectItem,\r\n RuleVariableSelectItem,\r\n} from \"../SingleSelectItem\";\r\nimport { Condition } from \"@media-quest/engine\";\r\nexport interface BuilderConditionDto {\r\n readonly kind: \"condition\";\r\n readonly operator: BuilderOperator | \"\";\r\n readonly name: string;\r\n readonly variableId: string;\r\n readonly value: number | string | boolean;\r\n}\r\n\r\nexport class BuilderCondition extends BuilderObject<\"builder-condition\", BuilderConditionDto> {\r\n readonly objectType: \"builder-condition\" = \"builder-condition\";\r\n public static readonly NUMBER_OPERATORS: ReadonlyArray<OperatorSelectItem> = [\r\n OperatorSelectItem.EQ,\r\n OperatorSelectItem.NOT_EQ,\r\n ];\r\n\r\n private initialDto: BuilderConditionDto;\r\n name = \"\";\r\n\r\n public static create = (variableList: ReadonlyArray<RuleVariable>) => {\r\n const condition = new BuilderCondition(\r\n {\r\n kind: \"condition\",\r\n name: \"\",\r\n operator: \"\",\r\n variableId: \"\",\r\n value: \"\",\r\n },\r\n variableList,\r\n );\r\n return condition;\r\n };\r\n\r\n public static fromDto = (dto: BuilderConditionDto, variables: ReadonlyArray<RuleVariable>) => {\r\n const _dto: BuilderConditionDto = {\r\n kind: \"condition\",\r\n name: dto.name ?? \"\",\r\n value: dto.value ?? \"\",\r\n operator: dto.operator ?? \"\",\r\n variableId: dto.variableId ?? \"\",\r\n };\r\n const instance = new BuilderCondition(_dto, variables);\r\n return instance;\r\n };\r\n private _variable: RuleVariable | false = false;\r\n private _operator: BuilderOperator | \"\" = \"\";\r\n private _value: RuleVariableOption | false = false;\r\n private _variableList: ReadonlyArray<RuleVariable> = [];\r\n\r\n /**\r\n * Can only set variables that exist in variableList.\r\n * @param variable\r\n */\r\n set variable(variable: RuleVariable | false) {\r\n if (variable === this._variable) {\r\n return;\r\n }\r\n this._variable = variable;\r\n this._operator = \"\";\r\n this._value = false;\r\n }\r\n\r\n get variable() {\r\n return this._variable;\r\n }\r\n\r\n set value(variableValue: RuleVariableOption | false) {\r\n this._value = variableValue;\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n validate(): { isValid: true } | { isValid: false; message: string } {\r\n if (this._variableList.length === 0) {\r\n return {\r\n isValid: false,\r\n message: \"Has no variableList to check dto against.\",\r\n };\r\n }\r\n if (!this._variable) {\r\n return {\r\n isValid: false,\r\n message: \"Variable has not been initialized from variableList.\",\r\n };\r\n }\r\n\r\n if (!this._operator) {\r\n return { isValid: false, message: \"Operator has not been initialized\" };\r\n }\r\n\r\n if (!this._value) {\r\n return {\r\n isValid: false,\r\n message: \"Value (RuleVariableOption) is not initialized\",\r\n };\r\n }\r\n\r\n return { isValid: true };\r\n }\r\n\r\n toEngineCondition(): Condition.Simple | false {\r\n const val = this.value;\r\n const op = this._operator;\r\n const v = this._variable;\r\n if (!val) return false;\r\n if (!op) return false;\r\n if (!v) return false;\r\n if (op === \"equal\") {\r\n const engineCondition: Condition.Simple = {\r\n kind: \"numeric-condition\",\r\n value: val.value,\r\n valueLabel: val.label,\r\n referenceId: v.varId,\r\n referenceLabel: v.label,\r\n operator: \"eq\",\r\n };\r\n return engineCondition;\r\n }\r\n return false;\r\n }\r\n\r\n private findVariableInUniverse(variableId: string): RuleVariable | false {\r\n const v = this._variableList.find((v) => v.varId === variableId);\r\n return v ?? false;\r\n }\r\n\r\n set operator(operator: BuilderOperator | \"\") {\r\n if (BuilderOperator.is(operator)) {\r\n this._operator = operator;\r\n } else {\r\n this._operator = \"\";\r\n }\r\n }\r\n\r\n get operator() {\r\n return this._operator;\r\n }\r\n\r\n private constructor(dto: BuilderConditionDto, variables: ReadonlyArray<RuleVariable>) {\r\n super(dto);\r\n this.initialDto = dto;\r\n this.name = dto.name;\r\n this._setVariableList(variables);\r\n }\r\n\r\n get variableSelectItemsInUniverse(): ReadonlyArray<RuleVariableSelectItem> {\r\n return this._variableList.map(RuleVariableSelectItem.create);\r\n }\r\n\r\n get operatorsSelectItems(): ReadonlyArray<OperatorSelectItem> {\r\n return this._variable ? BuilderCondition.NUMBER_OPERATORS : [];\r\n }\r\n\r\n get selectValueItems(): ReadonlyArray<RuleOptionSelectItem> {\r\n if (!this._variable) {\r\n return [];\r\n }\r\n const opt = this._variable.options.map(RuleOptionSelectItem.create);\r\n return opt;\r\n }\r\n\r\n clone(): BuilderConditionDto {\r\n return this.toJson();\r\n }\r\n\r\n private _setVariableList(variables: ReadonlyArray<RuleVariable>): boolean {\r\n this._variableList = variables;\r\n const v = this._variableList.find((v) => v.varId === this.originalDto.variableId);\r\n if (!v) {\r\n this._variable = false;\r\n this._operator = \"\";\r\n this._value = false;\r\n return false;\r\n }\r\n this._variable = v;\r\n const op = this.originalDto.operator;\r\n\r\n if (!BuilderOperator.is(op)) {\r\n return false;\r\n }\r\n this._operator = op;\r\n const maybeOption = v.options.find((op) => op.value === this.originalDto.value);\r\n if (!maybeOption) {\r\n return false;\r\n }\r\n this._value = maybeOption;\r\n return true;\r\n }\r\n\r\n toJson(): BuilderConditionDto {\r\n const name = this.name;\r\n const variableId = this._variable ? this._variable.varId : \"\";\r\n const operator = this._operator ? this._operator : \"\";\r\n const value = this._value ? this._value.value : \"\";\r\n return {\r\n kind: \"condition\",\r\n name,\r\n operator,\r\n variableId,\r\n value,\r\n };\r\n }\r\n}\r\n","import { BuilderCondition, type BuilderConditionDto } from \"./Builder-condition\";\r\nimport { BuilderObject } from \"../../BuilderObject\";\r\nimport type { RuleVariable } from \"../RuleVariable\";\r\nimport { Condition } from \"@media-quest/engine\";\r\n\r\nconst ConditionGroupType = {\r\n all: true,\r\n any: true,\r\n count: true,\r\n};\r\n\r\nexport type ConditionGroupType = keyof typeof ConditionGroupType;\r\nexport interface BuilderConditionGroupDto {\r\n readonly kind: \"condition-group\";\r\n readonly name: string;\r\n readonly count?: number;\r\n readonly type: ConditionGroupType;\r\n readonly conditions: ReadonlyArray<BuilderConditionDto>;\r\n}\r\n\r\nexport class BuilderConditionGroup extends BuilderObject<\r\n \"builder-condition-group\",\r\n BuilderConditionGroupDto\r\n> {\r\n static readonly isConditionGroupType = (value: string | symbol): value is ConditionGroupType => {\r\n if (typeof value !== \"string\") {\r\n return false;\r\n }\r\n const validValues = Object.keys(ConditionGroupType);\r\n return validValues.includes(value);\r\n };\r\n\r\n readonly objectType: \"builder-condition-group\" = \"builder-condition-group\";\r\n private _type: ConditionGroupType;\r\n name = \"\";\r\n private readonly _conditions: Array<BuilderCondition>;\r\n private readonly _variableList: ReadonlyArray<RuleVariable>;\r\n\r\n public static readonly fromDto = (\r\n dto: BuilderConditionGroupDto,\r\n variableList: ReadonlyArray<RuleVariable>,\r\n ) => {\r\n return new BuilderConditionGroup(dto, variableList);\r\n };\r\n protected constructor(dto: BuilderConditionGroupDto, variableList: ReadonlyArray<RuleVariable>) {\r\n super(dto);\r\n this.name = dto.name;\r\n this._type = dto.type;\r\n const conditionList = Array.isArray(dto.conditions) ? dto.conditions : [];\r\n this._conditions = conditionList.map((dto) => BuilderCondition.fromDto(dto, variableList));\r\n this._variableList = variableList;\r\n }\r\n get conditions(): ReadonlyArray<BuilderCondition> {\r\n return this._conditions;\r\n }\r\n\r\n get conditionCount() {\r\n return this._conditions.length;\r\n }\r\n\r\n addCondition(): BuilderCondition {\r\n const newConditions = BuilderCondition.create(this._variableList);\r\n this._conditions.push(newConditions);\r\n return newConditions;\r\n }\r\n\r\n removeCondition(condition: BuilderCondition): boolean {\r\n // this._conditions.\r\n const index = this._conditions.indexOf(condition);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._conditions.splice(index, 1);\r\n return true;\r\n }\r\n\r\n clone(): BuilderConditionGroupDto {\r\n return this.toJson();\r\n }\r\n\r\n toJson(): BuilderConditionGroupDto {\r\n const conditions: ReadonlyArray<BuilderConditionDto> = [\r\n ...this._conditions.map((c) => c.toJson()),\r\n ];\r\n return {\r\n name: this.name,\r\n conditions,\r\n type: this._type,\r\n kind: \"condition-group\",\r\n };\r\n }\r\n\r\n toEngineConditionComplex(): Condition.Complex | false {\r\n const comp: Condition.Complex = {\r\n kind: \"complex-condition\",\r\n all: [],\r\n some: [],\r\n name: \"\",\r\n };\r\n const conditions: Condition.Simple[] = [];\r\n this.conditions.forEach((c) => {\r\n const maybeSimple = c.toEngineCondition();\r\n if (maybeSimple) {\r\n conditions.push(maybeSimple);\r\n }\r\n });\r\n if (this._type === \"all\") {\r\n return { ...comp, all: conditions };\r\n }\r\n if (this._type === \"any\") {\r\n return { ...comp, some: conditions };\r\n }\r\n\r\n console.log(\"INVALID COMPLEX CONDITION. TODO IMPLEMENT range, and count.\");\r\n\r\n return false;\r\n }\r\n get type(): ConditionGroupType {\r\n return this._type;\r\n }\r\n set type(conditionGroupType: ConditionGroupType) {\r\n if (BuilderConditionGroup.isConditionGroupType(conditionGroupType)) {\r\n this._type = conditionGroupType;\r\n }\r\n }\r\n}\r\n","import { ExcludeByPageAction, ExcludeByTagAction } from \"./RuleAction\";\r\n\r\nexport abstract class MultiSelectItem<T> {\r\n private readonly _isSelectedInitially: boolean;\r\n private readonly _selectLabel;\r\n private readonly _toolTip;\r\n private readonly _searchString;\r\n public isSelected: boolean;\r\n get selectLabel(): string {\r\n return this._selectLabel;\r\n }\r\n get tooltip() {\r\n return this._toolTip;\r\n }\r\n\r\n get searchString() {\r\n return this._searchString;\r\n }\r\n protected constructor(\r\n readonly data: T,\r\n isSelected: boolean,\r\n ) {\r\n this._isSelectedInitially = isSelected;\r\n this.isSelected = isSelected;\r\n this._searchString = this.getSearchString();\r\n this._toolTip = this.getTooltip();\r\n this._selectLabel = this.getSelectLabel();\r\n }\r\n protected abstract getSelectLabel(): string;\r\n protected abstract getTooltip(): string;\r\n protected abstract getSearchString(): string;\r\n}\r\n\r\nexport class ExcludeByTagSelectItem extends MultiSelectItem<ExcludeByTagAction> {\r\n public static readonly create = (tagData: ExcludeByTagAction, isSelected: boolean) => {\r\n return new ExcludeByTagSelectItem(tagData, isSelected);\r\n };\r\n protected constructor(data: ExcludeByTagAction, isSelected: boolean) {\r\n super(data, isSelected);\r\n }\r\n protected getSearchString(): string {\r\n return this.data.tag;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.tag + \" (\" + this.data.pageCount + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.tag + \" (used in \" + this.data.pageCount + \" pages)\";\r\n }\r\n}\r\n\r\nexport class ExcludeByPageIdSelectItem extends MultiSelectItem<ExcludeByPageAction> {\r\n public static create = (ruleActionPage: ExcludeByPageAction, isSelected: boolean) => {\r\n return new ExcludeByPageIdSelectItem(ruleActionPage, isSelected);\r\n };\r\n\r\n protected constructor(data: ExcludeByPageAction, isSelected: boolean) {\r\n super(data, isSelected);\r\n }\r\n protected getSearchString(): string {\r\n return this.data.pagePrefix + this.data.mainText;\r\n }\r\n\r\n protected getSelectLabel(): string {\r\n return this.data.pagePrefix + \" (\" + this.data.pageNumber + \")\";\r\n }\r\n\r\n protected getTooltip(): string {\r\n return this.data.mainText;\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { ExcludeByTagSelectItem } from \"./multi-select-item\";\r\nimport { ExcludeByTagAction } from \"./RuleAction\";\r\n\r\nexport class TagActionManager {\r\n private readonly _initialSelection: Set<string>;\r\n readonly selectItems: ReadonlyArray<ExcludeByTagSelectItem>;\r\n constructor(\r\n readonly validOptions: RuleInput[\"_tagActions\"],\r\n readonly initialSelection: ReadonlyArray<string>,\r\n ) {\r\n this._initialSelection = new Set([...initialSelection]);\r\n this.selectItems = validOptions.map((opt) => {\r\n const isSelected = this._initialSelection.has(opt.tag);\r\n return ExcludeByTagSelectItem.create(opt, isSelected);\r\n });\r\n }\r\n getCurrentSelection(): ReadonlyArray<string> {\r\n const selected = this.selectItems.filter((item) => item.isSelected).map((itm) => itm.data.tag);\r\n return selected;\r\n }\r\n\r\n getEngineActions(): ReadonlyArray<ExcludeByTagAction> {\r\n const selected = this.selectItems.filter((item) => item.isSelected);\r\n const tagActions = selected.map((s) => s.data);\r\n return [...tagActions];\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { ExcludeByPageIdSelectItem } from \"./multi-select-item\";\r\nimport { ExcludeByPageAction } from \"./RuleAction\";\r\nimport { PageID } from \"../primitives/ID\";\r\n\r\nexport class PageActionManager {\r\n private readonly _initialSelection: Set<string>;\r\n readonly selectItems: ReadonlyArray<ExcludeByPageIdSelectItem>;\r\n\r\n constructor(\r\n readonly validOptions: RuleInput[\"_pageIdActions\"],\r\n readonly initialSelection: ReadonlyArray<string>,\r\n ) {\r\n this._initialSelection = new Set([...initialSelection]);\r\n this.selectItems = validOptions.map((opt) => {\r\n const isSelected = this._initialSelection.has(opt.pageId);\r\n return ExcludeByPageIdSelectItem.create(opt, isSelected);\r\n });\r\n }\r\n\r\n getCurrentSelection(): ReadonlyArray<PageID> {\r\n const selected = this.selectItems\r\n .filter((item) => item.isSelected)\r\n .map((itm) => itm.data.pageId);\r\n return selected;\r\n }\r\n\r\n getEngineAction(): ReadonlyArray<ExcludeByPageAction> {\r\n const selectItems = this.selectItems.filter((item) => item.isSelected);\r\n const actions = selectItems.map((item) => item.data);\r\n return [...actions];\r\n }\r\n}\r\n","import type { RuleInput } from \"./RuleInput\";\r\nimport { JumpToPageSelectItem } from \"./SingleSelectItem\";\r\n\r\nexport class JumpToActionManager {\r\n readonly options: ReadonlyArray<JumpToPageSelectItem>;\r\n private _selected: JumpToPageSelectItem | false;\r\n constructor(\r\n private readonly validOptions: RuleInput[\"_jumpActions\"],\r\n private readonly initialSelection: string | false | undefined,\r\n ) {\r\n this.options = validOptions.map(JumpToPageSelectItem.create);\r\n this._selected = this.findSelected(initialSelection);\r\n }\r\n get selected(): JumpToPageSelectItem | false {\r\n return this._selected;\r\n }\r\n set selected(selected: JumpToPageSelectItem | false) {\r\n this._selected = this.findSelected(selected);\r\n }\r\n getSelectedPageId(): string | false {\r\n return this._selected ? this._selected.data.pageId : false;\r\n }\r\n private findSelected(value: unknown): JumpToPageSelectItem | false {\r\n if (!value) return false;\r\n if (value instanceof JumpToPageSelectItem) {\r\n return this.options.find((v) => v === value) || false;\r\n }\r\n if (typeof value === \"string\") {\r\n return this.options.find((v) => v.data.pageId === value) || false;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { BuilderCondition, type BuilderConditionDto } from \"./condition/Builder-condition\";\r\nimport {\r\n BuilderConditionGroup,\r\n type BuilderConditionGroupDto,\r\n type ConditionGroupType,\r\n} from \"./condition/Builder-condition-group\";\r\nimport type { RuleInput } from \"./RuleInput\";\r\nimport { BuilderObject } from \"../BuilderObject\";\r\nimport { TagActionManager } from \"./tag-action-manager\";\r\nimport { PageActionManager } from \"./page-action-manager\";\r\nimport { JumpToActionManager } from \"./jump-to-action-manager\";\r\nimport { Condition, RuleActionPageQue, PageQueRules } from \"@media-quest/engine\";\r\nimport { PageID } from \"../primitives/ID\";\r\n\r\nexport interface BuilderRuleDto {\r\n readonly type: ConditionGroupType;\r\n readonly name: string;\r\n readonly conditions: ReadonlyArray<BuilderConditionDto | BuilderConditionGroupDto>;\r\n readonly excludeTags: ReadonlyArray<string>;\r\n readonly excludePages: ReadonlyArray<PageID>;\r\n readonly jumpToPage: string | false;\r\n}\r\nexport class BuilderRule extends BuilderObject<\"builder-rule\", BuilderRuleDto> {\r\n readonly objectType: \"builder-rule\" = \"builder-rule\";\r\n private _type: ConditionGroupType = \"all\";\r\n public name = \"Rule name\";\r\n // public countNumber = 1;\r\n private readonly _conditions: Array<BuilderCondition | BuilderConditionGroup> = [];\r\n\r\n private readonly _tagActionManager: TagActionManager;\r\n private _pageActionManager: PageActionManager;\r\n readonly jumpToActionManager: JumpToActionManager;\r\n public static readonly fromDto = (dto: BuilderRuleDto, input: RuleInput): BuilderRule => {\r\n return new BuilderRule(dto, input);\r\n };\r\n\r\n protected constructor(\r\n private readonly dto: BuilderRuleDto,\r\n private readonly _ruleInput: RuleInput,\r\n ) {\r\n super(dto);\r\n const conditionInput = this._ruleInput.getConditionInput();\r\n this.name = dto.name ?? \"\";\r\n this._type = dto.type ?? \"any\";\r\n this._conditions = dto.conditions.reduce<Array<BuilderCondition | BuilderConditionGroup>>(\r\n (acc, curr) => {\r\n if (curr.kind === \"condition\") {\r\n const condition = BuilderCondition.fromDto(curr, conditionInput);\r\n acc.push(condition);\r\n }\r\n if (curr.kind === \"condition-group\") {\r\n const conditionGroup = BuilderConditionGroup.fromDto(curr, conditionInput);\r\n acc.push(conditionGroup);\r\n }\r\n return acc;\r\n },\r\n [],\r\n );\r\n // TODO CHECK WITH CURRENT OPTIONS.\r\n this._pageActionManager = new PageActionManager(\r\n _ruleInput.excludeByPageIdActions,\r\n dto.excludePages,\r\n );\r\n // this.excludeByPageIdDtoList.push(...dto.excludePages);\r\n this._tagActionManager = new TagActionManager(_ruleInput.excludeByTagActions, dto.excludeTags);\r\n\r\n this.jumpToActionManager = new JumpToActionManager(\r\n _ruleInput.jumpToPageActions,\r\n dto.jumpToPage,\r\n );\r\n }\r\n\r\n get conditions(): ReadonlyArray<BuilderConditionGroup | BuilderCondition> {\r\n return this._conditions;\r\n }\r\n\r\n getTagActions() {\r\n return this._tagActionManager.selectItems;\r\n }\r\n\r\n getValidPageActions() {\r\n return this._pageActionManager.selectItems;\r\n }\r\n\r\n get conditionCount() {\r\n return this._conditions.length;\r\n }\r\n\r\n set type(type: ConditionGroupType) {\r\n if (BuilderConditionGroup.isConditionGroupType(type)) {\r\n this._type = type;\r\n }\r\n }\r\n\r\n get type() {\r\n return this._type;\r\n }\r\n\r\n deleteCondition(condition: BuilderCondition | BuilderConditionGroup): boolean {\r\n const index = this._conditions.indexOf(condition);\r\n if (index < 0) {\r\n return false;\r\n }\r\n this._conditions.splice(index, 1);\r\n return true;\r\n }\r\n\r\n addCondition(): BuilderCondition {\r\n const condition = BuilderCondition.create(this._ruleInput.getConditionInput());\r\n this._conditions.push(condition);\r\n return condition;\r\n }\r\n\r\n addConditionGroup(): BuilderConditionGroup {\r\n const dto: BuilderConditionGroupDto = {\r\n kind: \"condition-group\",\r\n name: \"\",\r\n type: \"all\",\r\n conditions: [],\r\n };\r\n const newGroup = BuilderConditionGroup.fromDto(dto, this._ruleInput.questionVars);\r\n this._conditions.push(newGroup);\r\n return newGroup;\r\n }\r\n\r\n clone(): BuilderRuleDto {\r\n return this.toJson();\r\n }\r\n\r\n toJson(): BuilderRuleDto {\r\n const conditions = this._conditions.map((c) => c.toJson());\r\n const excludePages = this._pageActionManager.getCurrentSelection();\r\n const excludeTags = this._tagActionManager.getCurrentSelection();\r\n const jumpToPage = this.jumpToActionManager.getSelectedPageId();\r\n const dto: BuilderRuleDto = {\r\n type: this._type,\r\n name: this.name,\r\n conditions,\r\n excludePages,\r\n jumpToPage,\r\n excludeTags,\r\n };\r\n return dto;\r\n }\r\n toEngineRule(): PageQueRules {\r\n const conditions: Condition[] = [];\r\n this._conditions.forEach((c) => {\r\n if (c) {\r\n if (c instanceof BuilderCondition) {\r\n const simpleCondition = c.toEngineCondition();\r\n if (simpleCondition) {\r\n conditions.push(simpleCondition);\r\n }\r\n }\r\n if (c instanceof BuilderConditionGroup) {\r\n const complexCondition = c.toEngineConditionComplex();\r\n if (complexCondition) conditions.push(complexCondition);\r\n }\r\n }\r\n });\r\n let all: Condition[] = [];\r\n let some: Condition[] = [];\r\n\r\n if (this.type === \"all\") {\r\n all = [...conditions];\r\n }\r\n const ruleActionList: Array<RuleActionPageQue> = [];\r\n const maybeJumpToPage = this.jumpToActionManager.selected;\r\n if (maybeJumpToPage) {\r\n ruleActionList.push({ kind: \"jumpToPage\", pageId: maybeJumpToPage.data.pageId });\r\n }\r\n\r\n const excludePageByIdList = this._pageActionManager.getEngineAction().map((a) => a.pageId);\r\n if (excludePageByIdList.length) {\r\n ruleActionList.push({ kind: \"excludeByPageId\", pageIds: [...excludePageByIdList] });\r\n }\r\n const excludeTags = this._tagActionManager.getEngineActions().map((tagA) => tagA.tag);\r\n if (excludeTags.length) {\r\n ruleActionList.push({ kind: \"excludeByTag\", tagIds: [...excludeTags] });\r\n }\r\n\r\n const rule: PageQueRules = {\r\n description: this.name,\r\n all,\r\n some,\r\n onFailure: [],\r\n onSuccess: ruleActionList,\r\n };\r\n return rule;\r\n }\r\n}\r\n","import type { RuleQuestionVariable, RuleCustomVariable, RuleVariable } from \"./RuleVariable\";\r\nimport type { ExcludeByPageAction, ExcludeByTagAction, JumpToPageAction } from \"./RuleAction\";\r\nimport { JumpToPageSelectItem } from \"./SingleSelectItem\";\r\n\r\n/**\r\n * TODO Crate filters for \"cardinality\" or \"order\" of a sum-score;\r\n * Return legal lists of variables.\r\n */\r\nexport class RuleInput {\r\n constructor(\r\n private readonly _questionVariables: ReadonlyArray<RuleQuestionVariable>,\r\n private readonly _customVariables: ReadonlyArray<RuleCustomVariable>,\r\n private readonly _pageIdActions: ReadonlyArray<ExcludeByPageAction>,\r\n private readonly _tagActions: ReadonlyArray<ExcludeByTagAction>,\r\n private readonly _jumpActions: ReadonlyArray<JumpToPageAction>,\r\n ) {}\r\n\r\n get questionVars(): ReadonlyArray<RuleVariable> {\r\n return this._questionVariables;\r\n }\r\n\r\n getConditionInput(): ReadonlyArray<RuleVariable> {\r\n return [...this.questionVars, ...this.customVars];\r\n }\r\n\r\n getJumpToPageOptions(): ReadonlyArray<JumpToPageSelectItem> {\r\n return this._jumpActions.map(JumpToPageSelectItem.create);\r\n }\r\n\r\n get customVars(): ReadonlyArray<RuleCustomVariable> {\r\n return this._customVariables;\r\n }\r\n\r\n get excludeByPageIdActions() {\r\n return this._pageIdActions;\r\n }\r\n\r\n get excludeByTagActions() {\r\n return this._tagActions;\r\n }\r\n get jumpToPageActions() {\r\n return this._jumpActions;\r\n }\r\n}\r\n","import { VarID } from \"../primitives/varID\";\r\n\r\n/*******************************************\r\n ** ONLY USE THESE TYPES IN RULE-BUILDER **\r\n ******************************************/\r\n\r\nexport class RuleVariableOption {\r\n constructor(\r\n readonly label: string,\r\n readonly value: number,\r\n ) {}\r\n}\r\n\r\nexport class RuleQuestionVariable {\r\n readonly kind: \"question-variable\" = \"question-variable\";\r\n constructor(\r\n readonly varId: VarID,\r\n readonly label: string,\r\n readonly options: ReadonlyArray<RuleVariableOption>,\r\n readonly pageNumber: number,\r\n ) {}\r\n}\r\n\r\nexport class RuleCustomVariable {\r\n readonly kind: \"configuration-variable\" = \"configuration-variable\";\r\n constructor(\r\n readonly varId: string,\r\n readonly label: string,\r\n readonly options: ReadonlyArray<RuleVariableOption>,\r\n ) {}\r\n}\r\n\r\n// export class RuleVariable {}\r\nexport type RuleVariable = RuleQuestionVariable | RuleCustomVariable;\r\n","import type { BuilderQuestionDto, BuilderQuestionType } from \"../Builder-question\";\nimport { BuilderQuestion } from \"../Builder-question\";\nimport { BuilderObject } from \"../BuilderObject\";\nimport type { BuilderOptionDto } from \"../Builder-option\";\nimport { BuilderOption } from \"../Builder-option\";\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\nimport type { BuilderMainTextDto } from \"../BuilderMainText\";\nimport { BuilderMainText } from \"../BuilderMainText\";\nimport { RuleVariableOption, RuleQuestionVariable } from \"../rulebuilder\";\nimport { DUtil } from \"@media-quest/engine\";\nimport { PagePrefix, PagePrefixValue } from \"../primitives/page-prefix\";\nimport { VarID } from \"../primitives/varID\";\nimport { SchemaPrefix } from \"../primitives/schema-prefix\";\nimport { PageID, SumScoreVariableID } from \"../primitives/ID\";\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\n\nconst U = DUtil;\nexport type BuilderPageType = \"info-page\" | \"question\";\n\nexport interface BuilderPageDto {\n readonly id: PageID;\n readonly prefix: PagePrefixValue;\n _type: BuilderPageType;\n mainText: BuilderMainTextDto;\n nextButton: BuilderOptionDto;\n defaultQuestion: BuilderQuestionDto;\n mainMedia?: BuilderMainImageDto | BuilderMainVideoDto;\n includedInSumScores: Array<{ sumScoreVariableId: SumScoreVariableID; weight: number }>;\n autoplaySequence: Array<string>;\n tags: ReadonlyArray<string>;\n}\n\nexport class BuilderPage extends BuilderObject<\"builder-page\", BuilderPageDto> {\n readonly objectType: \"builder-page\" = \"builder-page\";\n readonly id: PageID;\n private _pageType: BuilderPageType;\n private _prefix: PagePrefix;\n private readonly _tags: Set<string>;\n private _backgroundColor = \"#FFFFFF\";\n private _includedInSumScores: Map<\n SumScoreVariableID,\n {\n sumScoreVariableId: SumScoreVariableID;\n weight: number;\n name: string;\n description: string;\n }\n > = new Map();\n\n mainMedia: BuilderMainVideoDto | BuilderMainImageDto | false = false;\n defaultQuestion: BuilderQuestion;\n mainText: BuilderMainText;\n nextButton = BuilderOption.create(-1, \"Neste\");\n\n public static create(type: BuilderPageType, _prefix: PagePrefixValue) {\n const id = PageID.create();\n const mainTextDto: BuilderMainTextDto = {\n text: \"\",\n audioFile: false,\n autoplay: false,\n autoplayDelay: 0,\n };\n const nextButtonDto = BuilderOption.create(-1, \"page-next-button-text\").toJson();\n const defaultQuestionDto = BuilderQuestion.create(\"select-one\").toJson();\n\n const dto: BuilderPageDto = {\n _type: type,\n autoplaySequence: [],\n defaultQuestion: defaultQuestionDto,\n id,\n nextButton: nextButtonDto,\n mainText: mainTextDto,\n prefix: _prefix,\n includedInSumScores: [],\n tags: [],\n };\n\n const page = new BuilderPage(dto);\n return page;\n }\n public static fromJson(dto: BuilderPageDto): BuilderPage {\n const page = new BuilderPage(dto);\n return page;\n }\n\n private constructor(dto: BuilderPageDto) {\n super(dto);\n this.id = dto.id;\n this._pageType = dto._type;\n const prefixInstance = PagePrefix.castOrCreateRandom(dto.prefix);\n this._prefix = prefixInstance;\n this.mainText = BuilderMainText.fromJson(dto.mainText);\n this.nextButton = BuilderOption.fromJson(dto.nextButton);\n this.defaultQuestion = BuilderQuestion.fromJson(dto.defaultQuestion);\n const tagList: string[] = Array.isArray(dto.tags) ? dto.tags : [];\n const sumScores = Array.isArray(dto.includedInSumScores) ? dto.includedInSumScores : [];\n sumScores.forEach((item) => {\n this._includedInSumScores.set(item.sumScoreVariableId, {\n sumScoreVariableId: item.sumScoreVariableId,\n weight: item.weight,\n name: \"\",\n description: \"\",\n });\n });\n this._tags = new Set(tagList);\n if (dto.mainMedia) {\n this.mainMedia = dto.mainMedia;\n }\n }\n\n public addTag(tag: string) {\n this._tags.add(tag);\n }\n public deleteTag(tag: string) {\n this._tags.delete(tag);\n }\n\n set pageType(value: BuilderPageType) {\n this._pageType = value;\n }\n\n get includedInSumScores() {\n return [...this._includedInSumScores.values()];\n }\n\n getQuestionVariables(\n modulePrefix: SchemaPrefix,\n pageNumber: number,\n ): ReadonlyArray<RuleQuestionVariable> {\n const variables: RuleQuestionVariable[] = [];\n\n if (this._pageType === \"question\") {\n const pagePrefix = this.prefix;\n const varId = VarID.create(modulePrefix.value, pagePrefix);\n const label = this.mainText.text;\n const op = this.defaultQuestion.options.map((o) => {\n const label = o.label;\n const value = o.value;\n return new RuleVariableOption(label, value);\n });\n const singleVar = new RuleQuestionVariable(varId, label, op, pageNumber);\n variables.push(singleVar);\n }\n return variables;\n }\n\n get tags(): ReadonlyArray<string> {\n return [...this._tags];\n }\n get pageType() {\n return this._pageType;\n }\n\n get prefix() {\n return this._prefix.value;\n }\n\n set prefix(value: PagePrefixValue) {\n this._prefix.value = value;\n }\n\n /** @internal */\n sumScoreVariableSet(sumScoreVariable: SumScoreVariable, weight: number) {\n const { id, name, description } = sumScoreVariable;\n\n this._includedInSumScores.set(sumScoreVariable.id, {\n sumScoreVariableId: id,\n weight,\n name,\n description,\n });\n\n return true;\n }\n\n /** @internal */\n updateRelationShips(variables: ReadonlyArray<SumScoreVariable>) {\n variables.forEach((v) => {\n const sumScoreEntry = this._includedInSumScores.get(v.id);\n if (sumScoreEntry) {\n this.sumScoreVariableSet(v, sumScoreEntry.weight);\n }\n });\n }\n\n toJson(): BuilderPageDto {\n const mainText = this.mainText.toJson();\n const nextButton = this.nextButton.toJson();\n const mainMedia = this.mainMedia;\n const includedInSumScores = this.includedInSumScores.map(({ sumScoreVariableId, weight }) => ({\n sumScoreVariableId,\n weight,\n }));\n const dto: BuilderPageDto = {\n _type: this.pageType,\n mainText,\n autoplaySequence: [],\n nextButton,\n id: this.id,\n tags: [...this.tags],\n includedInSumScores,\n prefix: this._prefix.value,\n defaultQuestion: this.defaultQuestion.toJson(),\n };\n if (mainMedia) {\n dto.mainMedia = mainMedia;\n }\n return dto;\n }\n\n clone(): BuilderPageDto {\n const dto = this.toJson();\n const defaultQuestionClone = this.defaultQuestion.clone();\n const mainTextClone = JSON.parse(JSON.stringify(this.mainText));\n const newId = PageID.create();\n const clone: BuilderPageDto = {\n ...dto,\n id: newId,\n defaultQuestion: defaultQuestionClone,\n mainText: mainTextClone,\n };\n // const cloneDto\n return clone;\n }\n\n get backgroundColor() {\n return this._backgroundColor;\n }\n\n set backgroundColor(color: string) {\n if (typeof color === \"string\") {\n this._backgroundColor = color;\n }\n }\n\n /**\n * @internal\n */\n _isIncludedInSumScore(sumScoreId: SumScoreVariableID) {\n return this._includedInSumScores.has(sumScoreId);\n }\n\n /**\n * @internal\n */\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\n this._includedInSumScores.delete(sumScoreVariableID);\n }\n}\n","import { createRandomPrefix } from \"./page-prefix\";\r\n\r\nexport type SchemaPrefixValue = string & { __SCHEMA_PREFIX__: true };\r\n\r\nexport class SchemaPrefix {\r\n public static readonly MIN_LENGTH = 1;\r\n private static randomLen = 5;\r\n public static readonly MAX_LENGTH = 16;\r\n\r\n public static fromValue = (value: SchemaPrefixValue): SchemaPrefix => {\r\n return new SchemaPrefix(value);\r\n };\r\n\r\n public static fromValueOrThrow = (value: string): SchemaPrefix => {\r\n if (!SchemaPrefix.isValid(value)) throw new Error(\"Invalid prefix\");\r\n return new SchemaPrefix(value);\r\n };\r\n public static fromString = (value: string): SchemaPrefix | false => {\r\n if (!SchemaPrefix.isValid(value)) return false;\r\n return new SchemaPrefix(value);\r\n };\r\n public static castOrCreateRandom = (value: string): SchemaPrefix => {\r\n const v = SchemaPrefix.isValid(value)\r\n ? value\r\n : createRandomPrefix<SchemaPrefixValue>(SchemaPrefix.randomLen);\r\n return new SchemaPrefix(v);\r\n };\r\n\r\n public static isValid = (prefix: string | 999): prefix is SchemaPrefixValue => {\r\n if (typeof prefix !== \"string\") return false;\r\n if (prefix.length < SchemaPrefix.MIN_LENGTH) return false;\r\n if (prefix.length > SchemaPrefix.MAX_LENGTH) return false;\r\n return true;\r\n };\r\n\r\n get value(): SchemaPrefixValue {\r\n return this._value;\r\n }\r\n\r\n get isValid() {\r\n return SchemaPrefix.isValid(this._value);\r\n }\r\n\r\n set value(value: string) {\r\n const casted = value as unknown;\r\n if (typeof casted === \"string\") {\r\n this._value = casted as SchemaPrefixValue;\r\n }\r\n }\r\n\r\n private constructor(private _value: SchemaPrefixValue) {}\r\n}\r\n","import { SchemaPrefix } from \"./schema-prefix\";\r\n\r\nexport type PagePrefixValue = string & { __PAGE_PREFIX__: true };\r\nexport const createRandomPrefix = <const P extends string>(length: number): P => {\r\n const letters = \"abcdefghijklmnopqrstuvyz\";\r\n const all = letters + letters.toUpperCase();\r\n let result = \"\";\r\n for (let i = 0; i < length; i++) {\r\n const char = all.charAt(Math.floor(Math.random() * all.length));\r\n result += char;\r\n }\r\n return result as P;\r\n};\r\n\r\nexport class PagePrefix {\r\n public static readonly MIN_LENGTH = 1;\r\n private static randomLen = 5;\r\n public static readonly MAX_LENGTH = 16;\r\n\r\n public static create = (): PagePrefix => {\r\n const v = createRandomPrefix<PagePrefixValue>(PagePrefix.randomLen);\r\n return new PagePrefix(v);\r\n };\r\n public static fromString = (value: string): PagePrefix | false => {\r\n if (!PagePrefix.isValid(value)) return false;\r\n return new PagePrefix(value);\r\n };\r\n\r\n public static fromStringOrThrow = (value: string): PagePrefixValue => {\r\n if (!PagePrefix.isValid(value)) throw new Error(\"Invalid prefix\");\r\n return value;\r\n };\r\n public static castOrCreateRandom = (value: string): PagePrefix => {\r\n const v = PagePrefix.isValid(value)\r\n ? value\r\n : createRandomPrefix<PagePrefixValue>(PagePrefix.randomLen);\r\n return new PagePrefix(v);\r\n };\r\n\r\n public static isValid = (prefix: string | 999): prefix is PagePrefixValue => {\r\n if (typeof prefix !== \"string\") return false;\r\n if (prefix.length < SchemaPrefix.MIN_LENGTH) return false;\r\n return prefix.length <= SchemaPrefix.MAX_LENGTH;\r\n };\r\n\r\n get value(): PagePrefixValue {\r\n return this._value;\r\n }\r\n\r\n set value(value: string) {\r\n if (!PagePrefix.isValid(value)) {\r\n console.log(\"INVALID PREFIX\", value);\r\n } else {\r\n this._value = value;\r\n }\r\n }\r\n\r\n private constructor(private _value: PagePrefixValue) {}\r\n}\r\n","import { PagePrefixValue } from \"./page-prefix\";\r\n\r\nimport { SchemaPrefixValue } from \"./schema-prefix\";\r\n\r\nexport type VarID = `${SchemaPrefixValue}_${PagePrefixValue}`;\r\n\r\nexport const VarID = {\r\n create: (schemaPrefix: SchemaPrefixValue, pagePrefix: PagePrefixValue): VarID => {\r\n const varId = schemaPrefix + \"_\" + pagePrefix;\r\n return varId as VarID;\r\n },\r\n};\r\n","import type { BuilderSchemaDto } from \"../Builder-schema\";\r\nimport { SchemaDto } from \"@media-quest/engine\";\r\n\r\nexport abstract class AbstractThemeCompiler<ThemeSchema> {\r\n protected constructor(protected readonly theme: ThemeSchema) {}\r\n abstract compile(schema: BuilderSchemaDto): SchemaDto;\r\n}\r\n","import { DStyle } from \"@media-quest/engine\";\r\nimport { DElementDto } from \"@media-quest/engine\";\r\n\r\nexport namespace ThemeUtils {\r\n export const spaceEvenlyX = <T extends Pick<DElementDto, \"style\">>(\r\n items: ReadonlyArray<T>,\r\n options: { startAt: number; endAt: number; defaultItemWidth: number } = {\r\n startAt: 0,\r\n endAt: 100,\r\n defaultItemWidth: 5,\r\n },\r\n ): ReadonlyArray<T> => {\r\n const startAt = options?.startAt ?? 0;\r\n const endAt = options?.endAt ?? 100;\r\n const range = Math.abs(endAt - startAt);\r\n if (items.length === 0) {\r\n return [];\r\n }\r\n const marginCount = items.length + 1;\r\n const defaultWidth = options.defaultItemWidth ?? 150 / marginCount;\r\n\r\n let totalWidthOfElements = items.reduce((prev, curr) => {\r\n const w = curr.style.w ?? defaultWidth;\r\n return prev + w;\r\n }, 0);\r\n\r\n let cursor = startAt;\r\n const rest = Math.max(range - totalWidthOfElements, 0);\r\n const margin = rest / marginCount;\r\n\r\n items.forEach((item) => {\r\n cursor = cursor + margin;\r\n const w = item.style.w ?? defaultWidth;\r\n const x = cursor;\r\n cursor = cursor + w;\r\n item.style.w = w;\r\n item.style.x = x;\r\n });\r\n\r\n return items;\r\n };\r\n\r\n export const centerY = (): Pick<DStyle, \"y\" | \"transform\"> => ({\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n });\r\n export const centerX = (): Pick<DStyle, \"x\" | \"transform\"> => ({\r\n x: 50,\r\n transform: \"translate(-50%, 0%)\",\r\n });\r\n\r\n export const centerXY = (): Pick<DStyle, \"x\" | \"y\" | \"transform\"> => ({\r\n x: 50,\r\n y: 50,\r\n transform: \"translate(-50%, 50%)\",\r\n });\r\n}\r\n","export const IconUrls = {\r\n ispeWhitePng:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fispe-hvit.png?alt=media&token=f6fe628b-2d99-472d-a2ea-e062873e2e22',\r\n pauseSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause-24px.svg?alt=media&token=47337491-bb0d-4c56-9c89-a073ce19fad4',\r\n pauseCircleOutlineSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause_circle_outline-24px.svg?alt=media&token=133aabc8-ab9a-4eaa-9914-4f0f82c22ee2',\r\n\r\n pauseCircleFilledSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fpause_circle_filled-24px.svg?alt=media&token=af3f12c3-3199-4096-8ed2-76347b9a0a0a',\r\n playCircleRegular:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay-circle-regular.svg?alt=media&token=0867b690-d7fd-475c-8e91-b2d7aeca54d1',\r\n playArrowSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay_arrow-24px.svg?alt=media&token=2fa95e1f-61f7-4a18-afb3-210eabae8227',\r\n playCircleOutline:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fplay_circle_outline-24px.svg?alt=media&token=3a9f62c5-dfa2-40ef-a50e-cf1bdd2d47f2',\r\n\r\n stopCircleSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fstop_circle-24px.svg?alt=media&token=8fbc8b89-29bb-49ad-ae11-b8882ba3ca77',\r\n stopSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fstop-24px.svg?alt=media&token=d2cd41f1-1331-4243-9b7a-dc0f0ccd255d',\r\n replayCircleSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Freplay-24px.svg?alt=media&token=3c35ccf4-b467-4e81-85d6-b36ac64738ad',\r\n\r\n volumeOffSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_off-24px.svg?alt=media&token=4e41cc10-9f4b-4967-b4df-ed0682e657a9',\r\n volumeUpSvg:\r\n 'https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_up-24px.svg?alt=media&token=551bd0a6-a515-4f87-a245-da433f4833f9'\r\n};\r\n","import type { CssTheme } from \"./css-theme\";\r\nimport { DStyle, DCss } from \"@media-quest/engine\";\r\nimport { IconUrls } from \"./icon-urls\";\r\n\r\ntype PStyle = Partial<DStyle>;\r\nexport interface IDefaultTheme {\r\n name: string;\r\n image: { style: PStyle };\r\n videoPlayer: {\r\n playButton: {\r\n iconUrl: string;\r\n css: PStyle;\r\n cssDisabled: PStyle;\r\n cssEnabled: PStyle;\r\n };\r\n pauseButton: {\r\n iconUrl: string;\r\n css: PStyle;\r\n cssDisabled: PStyle;\r\n cssEnabled: PStyle;\r\n };\r\n videoElement: {\r\n css: PStyle;\r\n };\r\n };\r\n mainText: {\r\n noMedia: {\r\n text: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n audio: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n };\r\n withMedia: {\r\n text: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n audio: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle };\r\n };\r\n };\r\n // mainTextTheme: BuilderTextTheme;\r\n responseButtons: BuilderOptionTheme;\r\n nextButtonTheme: BuilderOptionTheme;\r\n // mainQuestionText: BuilderTextTheme;\r\n // dontKnowButtonTheme: BuilderOptionTheme;\r\n buttonThemes?: Array<BuilderOptionTheme>;\r\n}\r\n\r\nexport interface BuilderOptionTheme {\r\n name: string;\r\n normal: ButtonTheme;\r\n dontKnow: ButtonTheme;\r\n}\r\n\r\ninterface ButtonTheme {\r\n btn: CssTheme;\r\n divider: PStyle;\r\n text1: PStyle;\r\n text2: PStyle;\r\n}\r\n\r\nnamespace BuilderOptionTheme {\r\n const GREEN = \"#70AD47\";\r\n const YELLOW = \"#FFC000\";\r\n const ORANGE = \"#F4902C\";\r\n const RED = \"#FF0000\";\r\n const LIGHT_BLUE = \"#42719C\";\r\n const WHITE = \"#ffffff\";\r\n const BLUE = \"#2F5597\";\r\n const BTN_WIDTH = 18.5;\r\n const BTN_BORDER_WIDTH = 3;\r\n const BTN_BORDER_RADIUS = 10;\r\n const BTN_BORDER_STYLE: DStyle[\"borderStyle\"] = \"solid\";\r\n const BTN_HEIGHT = 9.2;\r\n const BTN_SHORT_WIDTH = 13.7;\r\n const FONT_WEIGHT: DStyle[\"fontWeight\"] = 600;\r\n const FONT_SIZE: DCss.Px[\"value\"] = 35;\r\n\r\n export const blueButton = (): BuilderOptionTheme => {\r\n const optionTheme: BuilderOptionTheme = {\r\n name: \"blue-button-theme\",\r\n normal: {\r\n btn: {\r\n css: {\r\n backgroundColor: BLUE,\r\n borderColor: BLUE,\r\n textColor: WHITE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\r\n borderStyle: BTN_BORDER_STYLE,\r\n borderRadius: { value: BTN_BORDER_RADIUS, _unit: \"px\" },\r\n padding: { _unit: \"px\", value: 40 },\r\n h: BTN_HEIGHT,\r\n w: BTN_WIDTH,\r\n x: 10,\r\n y: 8,\r\n textAlign: \"center\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n },\r\n divider: {},\r\n text1: {\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n textColor: WHITE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n w: 84,\r\n x: 8,\r\n fontWeight: FONT_WEIGHT,\r\n textAlign: \"center\",\r\n },\r\n text2: {},\r\n },\r\n\r\n dontKnow: {\r\n btn: {\r\n css: {\r\n backgroundColor: WHITE,\r\n borderColor: LIGHT_BLUE,\r\n textColor: BLUE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\r\n borderStyle: BTN_BORDER_STYLE,\r\n borderRadius: { value: BTN_BORDER_RADIUS, _unit: \"px\" },\r\n padding: { _unit: \"px\", value: 40 },\r\n h: BTN_HEIGHT,\r\n w: BTN_SHORT_WIDTH,\r\n x: 10,\r\n y: 8,\r\n textAlign: \"center\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n },\r\n text1: {\r\n y: 50,\r\n transform: \"translate(0%, 50%)\",\r\n textColor: BLUE,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n w: 84,\r\n x: 8,\r\n fontWeight: FONT_WEIGHT,\r\n textAlign: \"center\",\r\n },\r\n text2: {},\r\n divider: {},\r\n },\r\n };\r\n\r\n return optionTheme;\r\n };\r\n}\r\n\r\nexport const DefaultTheme: IDefaultTheme = {\r\n name: \"default-theme\",\r\n videoPlayer: {\r\n playButton: {\r\n iconUrl: IconUrls.playCircleRegular,\r\n css: { w: 5, h: 5, y: 48, x: 4 },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n pauseButton: {\r\n iconUrl: IconUrls.pauseSvg,\r\n css: { w: 5, h: 5, y: 48, x: 4 },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n videoElement: { css: { w: 100, h: 45, y: 55, x: 0 } },\r\n },\r\n image: { style: { h: 50, w: 100, x: 0 } },\r\n mainText: {\r\n noMedia: {\r\n text: {\r\n css: {\r\n w: 80,\r\n y: 65,\r\n x: 10,\r\n textAlign: \"center\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 40 },\r\n },\r\n cssDisabled: {},\r\n cssEnabled: {},\r\n },\r\n audio: {\r\n css: {\r\n h: 6,\r\n w: 6,\r\n x: 4,\r\n y: 32,\r\n cursor: \"pointer\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n },\r\n withMedia: {\r\n text: {\r\n css: {\r\n w: 80,\r\n y: 27,\r\n x: 10,\r\n textAlign: \"center\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 30 },\r\n },\r\n cssDisabled: {},\r\n cssEnabled: {},\r\n },\r\n audio: {\r\n css: {\r\n h: 6,\r\n w: 6,\r\n x: 4,\r\n y: 32,\r\n cursor: \"pointer\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n },\r\n },\r\n nextButtonTheme: BuilderOptionTheme.blueButton(),\r\n responseButtons: BuilderOptionTheme.blueButton(),\r\n};\r\n","import { AbstractThemeCompiler } from \"./AbstractThemeCompiler\";\nimport type { BuilderSchemaDto } from \"../Builder-schema\";\nimport { BuilderSchema } from \"../Builder-schema\";\nimport type { BuilderPageDto } from \"../page/Builder-page\";\nimport { ThemeUtils } from \"./theme-utils\";\nimport { DefaultTheme, type IDefaultTheme } from \"./IDefaultTheme\";\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\nimport {\n ButtonClickAction,\n DDivDto,\n DElementDto,\n DImgDto,\n DTextDto,\n PageDto,\n PageComponentDto,\n RuleActionPageQue,\n PlayAudioTask,\n PlayVideoTask,\n Rule,\n SchemaDto,\n DelayTask,\n} from \"@media-quest/engine\";\n\nimport { AudioFile } from \"../media-files\";\nimport { BuilderRule } from \"../rulebuilder\";\n\nexport class DefaultThemeCompiler extends AbstractThemeCompiler<IDefaultTheme> {\n readonly name = \"Ispe default theme.\";\n private readonly TAG = \"[ DEFAULT_THEME_COMPILER ]: \";\n constructor() {\n super(DefaultTheme);\n }\n\n private compileRules(source: BuilderSchemaDto): Rule<RuleActionPageQue, never>[] {\n const builderSchema = BuilderSchema.fromJson(source);\n const ruleInput = builderSchema.getRuleInput();\n const pageQueRules: Rule<RuleActionPageQue, never>[] = [];\n source.rules.forEach((rule) => {\n const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule();\n if (!Rule.isEmpty(engineRule)) {\n pageQueRules.push(engineRule);\n } else {\n console.log(this.TAG, \"Throws away empty rule. \" + rule.type + \" \" + rule.name);\n }\n });\n return pageQueRules;\n }\n\n compile(source: BuilderSchemaDto): SchemaDto {\n const pages = source.pages.map((p) => this.compilePage(p, source.prefix));\n const rules = this.compileRules(source);\n\n const dto: SchemaDto = {\n backgroundColor: source.backgroundColor,\n baseHeight: source.baseHeight,\n baseWidth: source.baseWidth,\n id: source.id,\n pageSequences: [],\n pages,\n predefinedFacts: [],\n rules,\n };\n return dto;\n }\n\n private compilePage(page: BuilderPageDto, modulePrefix: string): PageDto {\n const tags = page.tags ?? [];\n const { nextButton, mainText, id, mainMedia, _type, prefix } = page;\n const staticElements: DElementDto[] = [];\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\n let initialVideoTaskList: Array<PlayVideoTask | DelayTask> = [];\n const newPage: PageDto = {\n background: \"white\",\n components: [],\n staticElements,\n id,\n prefix,\n initialTasks: [],\n tags: [...tags],\n };\n\n if (page.mainText.audioFile) {\n const autoPlay = page.mainText.autoplay;\n const autoPlayDelay = page.mainText.autoplayDelay;\n const res = this.compileMainTextAudio(page.mainText.audioFile, autoPlay, autoPlayDelay);\n initialAudioTasks = [...res.initialTasks];\n newPage.components.push(...res.components);\n }\n\n if (_type === \"question\") {\n const variableId = modulePrefix + \"_\" + page.prefix;\n const { components, question } = this.compileQuestion(id, page, variableId);\n newPage.components.push(...components);\n newPage.staticElements.push(question);\n // console.log(question);\n // elements.push(...buttons, question);\n }\n\n if (_type === \"info-page\") {\n const infoText = mainText.text;\n const nextButtonComponent = this.compileButton(nextButton, {\n kind: \"next-button\",\n });\n\n const textStyle = mainMedia\n ? DefaultTheme.mainText.withMedia.text.css\n : DefaultTheme.mainText.noMedia.text.css;\n const infoTextElement: DElementDto = {\n innerText: infoText,\n _tag: \"p\",\n style: textStyle,\n };\n newPage.staticElements.push(infoTextElement);\n newPage.components.push(nextButtonComponent);\n }\n if (mainMedia && mainMedia.kind === \"main-image\") {\n const mainImageElement = this.compileImage(mainMedia);\n newPage.staticElements.push(mainImageElement);\n }\n\n if (mainMedia && mainMedia.kind === \"main-video\") {\n const videoOutput = this.compileVideo(mainMedia);\n newPage.videoPlayer = videoOutput.videoPlayer;\n newPage.components.push(...videoOutput.components);\n initialVideoTaskList = [...videoOutput.autoPlayTasks];\n }\n\n // ADDING INITIAL TASKS IN CORRECT ORDER\n newPage.initialTasks.push(...initialVideoTaskList);\n newPage.initialTasks.push(...initialAudioTasks);\n const clone = JSON.parse(JSON.stringify(newPage));\n return clone;\n }\n\n private compileImage(image: BuilderMainImageDto) {\n const img: DImgDto = {\n _tag: \"img\",\n style: this.theme.image.style,\n url: image.file.downloadUrl,\n };\n return img;\n }\n\n private compileMainTextAudio(\n audioFile: AudioFile,\n autoPlay: boolean,\n autoPlayDelay: number,\n ): {\n components: PageComponentDto[];\n initialTasks: Array<PlayAudioTask | DelayTask>;\n } {\n const t = this.theme.mainText;\n const audioId = audioFile.id;\n const iconUrl =\n \"https://firebasestorage.googleapis.com/v0/b/ispe-backend-dev.appspot.com/o/public-assets%2Fvolume_up-24px.svg?alt=media&token=551bd0a6-a515-4f87-a245-da433f4833f9\";\n\n const playMainTextAudio: DImgDto = {\n _tag: \"img\",\n url: iconUrl,\n style: { ...t.withMedia.audio.css },\n };\n\n const task: PlayAudioTask = {\n audioId,\n blockAudio: false,\n blockFormInput: false,\n blockResponseButton: false,\n blockVideo: false,\n kind: \"play-audio-task\",\n priority: \"replace-all\",\n url: audioFile.downloadUrl,\n };\n\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\n if (autoPlay) {\n const playAudioTask: PlayAudioTask = { ...task, priority: \"follow-queue\" };\n initialAudioTasks = [playAudioTask];\n if (autoPlayDelay > 0) {\n const delayTask: DelayTask = {\n kind: \"delay-task\",\n priority: \"follow-queue\",\n duration: autoPlayDelay,\n blockVideo: false,\n blockAudio: false,\n blockResponseButton: false,\n blockFormInput: false,\n };\n initialAudioTasks = [delayTask, playAudioTask];\n }\n }\n // const autoplayTask =\n const playBtn: PageComponentDto = {\n el: playMainTextAudio,\n onClick: { kind: \"play-audio\", task },\n };\n\n return { components: [playBtn], initialTasks: [...initialAudioTasks] };\n }\n\n private compileVideo(video: BuilderMainVideoDto): {\n videoPlayer: PageDto[\"videoPlayer\"];\n components: PageComponentDto[];\n autoPlayTasks: Array<PlayVideoTask | DelayTask>;\n } {\n const t = this.theme.videoPlayer;\n const mode = video.mode;\n const components: PageComponentDto[] = [];\n\n let autoPlayTasks: Array<PlayVideoTask | DelayTask> = [];\n\n let autoplayVideoTask: PlayVideoTask | false = false;\n let autoplayDelayTask: DelayTask | false = false;\n\n const playButtonTask: PlayVideoTask = {\n kind: \"play-video-task\",\n url: video.file.downloadUrl,\n videoId: video.file.id,\n blockAudio: false,\n blockFormInput: false,\n blockResponseButton: false,\n loop: mode === \"gif-mode\",\n blockVideo: false,\n priority: \"replace-all\",\n };\n\n if (video.mode === \"autoplay\" || video.mode === \"gif-mode\") {\n autoplayVideoTask = { ...playButtonTask, priority: \"follow-queue\" };\n autoPlayTasks = [autoplayVideoTask];\n if (video.preDelay > 0) {\n autoplayDelayTask = {\n kind: \"delay-task\",\n priority: \"follow-queue\",\n duration: video.preDelay,\n blockVideo: false,\n blockAudio: false,\n blockResponseButton: false,\n blockFormInput: false,\n };\n autoPlayTasks = [autoplayDelayTask, autoplayVideoTask];\n }\n }\n\n const videoPlayer: PageDto[\"videoPlayer\"] = {\n playUrl: video.file.downloadUrl,\n style: { h: 45, w: 100, x: 0, y: 55 },\n };\n const playButton: PageComponentDto = {\n el: {\n _tag: \"img\",\n url: t.playButton.iconUrl,\n style: { ...t.playButton.css, ...t.playButton.cssEnabled },\n },\n onClick: { kind: \"play-video\", task: playButtonTask },\n whenVideoPlay: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"visible\" },\n };\n const pauseBtn: PageComponentDto = {\n el: {\n _tag: \"img\",\n style: {\n ...t.pauseButton.css,\n visibility: \"hidden\",\n ...t.pauseButton.cssEnabled,\n },\n url: t.pauseButton.iconUrl,\n },\n onClick: { kind: \"pause-video\" },\n whenVideoPlay: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n };\n\n if (mode !== \"gif-mode\") {\n components.push(playButton);\n components.push(pauseBtn);\n }\n return { videoPlayer, components, autoPlayTasks: [...autoPlayTasks] };\n }\n private compileQuestion(\n pageId: string,\n page: BuilderPageDto,\n variableId: string,\n ): {\n question: DTextDto;\n components: PageComponentDto[];\n } {\n // TODO REFACTORE DEFAULT QUESTION TO - (REMOVE USE TEXT1)\n // console.log(page);\n const q = page.defaultQuestion;\n const text = page.mainText.text;\n const questionStyle = page.mainMedia\n ? DefaultTheme.mainText.withMedia.text.css\n : DefaultTheme.mainText.noMedia.text.css;\n const question: DTextDto = {\n _tag: \"p\",\n innerText: text,\n style: questionStyle,\n };\n const buttons: PageComponentDto[] = q.options.map((o) => {\n const btns = this.compileButton(o, {\n kind: \"response-button\",\n questionId: variableId,\n questionText: text,\n });\n return btns;\n });\n const rootElements = buttons.map((b) => b.el);\n ThemeUtils.spaceEvenlyX(rootElements);\n return { question, components: buttons };\n }\n\n private compileButton(\n buttonDto: BuilderPageDto[\"nextButton\"],\n options:\n | { kind: \"response-button\"; questionId: string; questionText: string }\n | { kind: \"next-button\" },\n ): PageComponentDto {\n const { id, value, label } = buttonDto;\n const onclickAction: ButtonClickAction =\n options.kind === \"response-button\"\n ? {\n kind: \"submit-fact\",\n fact: {\n kind: \"numeric-fact\",\n label: label,\n value: value,\n referenceId: options.questionId,\n referenceLabel: options.questionText,\n },\n }\n : { kind: \"next-page\" };\n\n const btnStyles =\n value === 9 ? DefaultTheme.responseButtons.dontKnow : DefaultTheme.responseButtons.normal;\n const btn: DDivDto = {\n _tag: \"div\",\n children: [\n {\n _tag: \"p\",\n innerText: label,\n style: btnStyles.text1,\n },\n ],\n style: { ...btnStyles.btn.css, ...btnStyles.btn.cssEnabled },\n };\n\n if (options.kind === \"next-button\") {\n btn.style.x = 50;\n btn.style.y = 8;\n btn.style.transform = \"translate(-50%, 0%)\";\n }\n const component: PageComponentDto = {\n el: btn,\n onClick: onclickAction,\n };\n return component;\n }\n}\n","import type { BuilderPageDto, BuilderPageType } from \"./page/Builder-page\";\nimport { BuilderPage } from \"./page/Builder-page\";\nimport type {\n BuilderRuleDto,\n ExcludeByPageAction,\n ExcludeByTagAction,\n JumpToPageAction,\n RuleCustomVariable,\n} from \"./rulebuilder\";\nimport { BuilderRule, RuleInput } from \"./rulebuilder\";\nimport type { RuleQuestionVariable } from \"./rulebuilder/RuleVariable\";\nimport type { BuilderTagDto } from \"./tag/BuilderTag\";\nimport { BuilderTag } from \"./tag/BuilderTag\";\nimport { DefaultThemeCompiler } from \"./theme/default-theme-compiler\";\nimport { ImageFile } from \"./media-files\";\nimport { DUtil } from \"@media-quest/engine\";\nimport { PagePrefix } from \"./primitives/page-prefix\";\nimport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\nimport { CodeBook } from \"./code-book/codebook\";\nimport { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\nimport { SchemaConfig } from \"./schema-config\";\nimport { CompilerOption, CompilerOutput } from \"./builder-compiler\";\n\nimport { SumScoreVariable, SumScoreVariableDto } from \"./sum-score/sum-score-variable\";\nimport { PageID, SchemaID, SumScoreVariableID } from \"./primitives/ID\";\nimport { SumScoreVariableCollection } from \"./sum-score/sum-score-variable-collection\";\nimport { TagCollection } from \"./tag/Tag-Collection\";\nimport { BuilderPageCollection } from \"./page/Builder-page-collection\";\n\nconst U = DUtil;\n\nexport interface BuilderSchemaDto {\n readonly id: SchemaID;\n readonly prefix: SchemaPrefixValue;\n readonly mainImage: ImageFile | false;\n readonly backgroundColor: string;\n readonly name: string;\n readonly pages: ReadonlyArray<BuilderPageDto>;\n readonly baseHeight: number;\n readonly baseWidth: number;\n readonly predefinedVariables?: Array<CodebookPredefinedVariable>;\n readonly sumScoreVariables?: ReadonlyArray<SumScoreVariableDto>;\n readonly rules: ReadonlyArray<BuilderRuleDto>;\n readonly tags: ReadonlyArray<BuilderTagDto>;\n}\n\nexport class BuilderSchema {\n readonly prefix: SchemaPrefix;\n baseHeight = 1300;\n baseWidth = 1024;\n backgroundColor = \"#000000\";\n private readonly _pageCollection: BuilderPageCollection;\n mainImage: ImageFile | false = false;\n predefinedVariables: CodebookPredefinedVariable[] = [];\n private _rules: BuilderRule[] = [];\n private readonly _sumScoreCollection;\n get rules(): ReadonlyArray<BuilderRule> {\n return [...this._rules];\n }\n get pages(): ReadonlyArray<BuilderPage> {\n return [...this._pageCollection];\n }\n\n get sumScoreVariables(): ReadonlyArray<SumScoreVariable> {\n return [...this._sumScoreCollection];\n }\n\n // get prefix(): SchemaPrefixValue {\n // return this._prefix.value;\n // }\n\n private readonly _tagCollection: TagCollection = TagCollection.create();\n get tags(): ReadonlyArray<BuilderTag> {\n return [...this._tagCollection];\n }\n public static create(id: SchemaID, name: string, prefix: SchemaPrefixValue) {\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(prefix);\n return new BuilderSchema(id, name, schemaPrefix);\n }\n\n public static fromJson(dto: BuilderSchemaDto): BuilderSchema {\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(dto.prefix);\n const schema = new BuilderSchema(dto.id, dto.name, schemaPrefix);\n const sumScoreVariables = dto.sumScoreVariables ? [...dto.sumScoreVariables] : [];\n const pagesDto = Array.isArray(dto.pages) ? dto.pages : [];\n\n // Init collections.\n schema._tagCollection.init(dto.tags);\n schema._sumScoreCollection.init(sumScoreVariables);\n\n schema.backgroundColor = dto.backgroundColor;\n schema.baseHeight = dto.baseHeight;\n schema.baseWidth = dto.baseWidth;\n schema._pageCollection._init(pagesDto);\n schema.predefinedVariables = dto.predefinedVariables ?? [];\n schema.backgroundColor = dto.backgroundColor;\n schema.mainImage = dto.mainImage ?? false;\n const rulesDto = dto.rules ?? [];\n const ruleInput = schema.getRuleInput();\n schema._rules = rulesDto.map((r) => BuilderRule.fromDto(r, ruleInput));\n\n schema.updateSumScoreRelations();\n return schema;\n }\n\n toJson(): BuilderSchemaDto {\n const pages = this._pageCollection.toJson();\n const tags = this._tagCollection.toJson();\n const rules = this._rules.map((rule) => rule.toJson());\n const sumScoreVariables = this._sumScoreCollection.toJson();\n const dto: BuilderSchemaDto = {\n backgroundColor: this.backgroundColor,\n baseHeight: this.baseHeight,\n baseWidth: this.baseWidth,\n id: this.id,\n name: this.name,\n pages,\n rules,\n tags,\n predefinedVariables: this.predefinedVariables,\n sumScoreVariables,\n mainImage: this.mainImage,\n prefix: this.prefix.value,\n };\n return dto;\n }\n private constructor(\n public readonly id: SchemaID,\n public name: string,\n prefix: SchemaPrefix,\n ) {\n this.prefix = prefix;\n this._sumScoreCollection = SumScoreVariableCollection.create([]);\n this._pageCollection = BuilderPageCollection.create([]);\n // this\n }\n\n addPage(type: BuilderPageType, atIndex = -1): BuilderPage {\n return this._pageCollection.add(type, atIndex);\n }\n\n sumScoreVariableCreate(options: { name: string; description: string; useAvg: boolean }) {\n // TODO VALIDATE.\n // this._sumVariables.push({ ...variable });\n const variable = this._sumScoreCollection.addNew(options);\n\n return variable;\n }\n sumScoreVariableAddToPage(sumScoreVariable: SumScoreVariable, page: BuilderPage, weight: number) {\n const added = this._pageCollection.addSumScoreVariable(sumScoreVariable, page.id, weight);\n this.updateSumScoreRelations();\n return added;\n }\n\n private updateSumScoreRelations() {\n const sumScoreVariables = this._sumScoreCollection.asArray();\n this._pageCollection.updateRelationShips({ sumScoreVariables });\n }\n\n sumScoreVariableUpdate(id: SumScoreVariableID, data: Partial<SumScoreVariableDto>) {\n const didUpdate = this._sumScoreCollection._updateOne(id, data);\n this.updateSumScoreRelations();\n return didUpdate;\n }\n\n sumScoreVariableDeleteFromPage(pageId: PageID, sumScoreVariableId: SumScoreVariableID) {\n this._pageCollection.sumScoreVariableDeleteFromPage(pageId, sumScoreVariableId);\n this.updateSumScoreRelations();\n }\n\n insertPage(page: BuilderPage, atIndex: number): boolean {\n return this.insertPageAtIndex(page, atIndex);\n }\n\n private insertPageAtIndex(page: BuilderPage, atIndex: number) {\n return this._pageCollection.insertPage(page, atIndex);\n }\n\n addRule() {\n const input = this.getRuleInput();\n const count = this._rules.length + 1;\n const name = \"Rule-number: \" + count;\n const rule = BuilderRule.fromDto(\n {\n conditions: [],\n type: \"all\",\n name,\n excludeTags: [],\n jumpToPage: false,\n excludePages: [],\n },\n input,\n );\n this._rules.push(rule);\n return rule;\n }\n deleteRule(rule: BuilderRule) {\n this._rules = this._rules.filter((r) => r !== rule);\n }\n\n movePage(page: BuilderPage, toIndex: number): boolean {\n return this._pageCollection.movePage(page, toIndex);\n }\n\n deletePage(page: BuilderPage): boolean {\n return this._pageCollection.deleteById(page.id);\n }\n\n reevaluateRules() {\n console.log(\"Reevaluationg rulesInput\");\n const input = this.getRuleInput();\n const rulesDto = this._rules.map((r) => r.toJson());\n this._rules = rulesDto.map((dto) => BuilderRule.fromDto(dto, input));\n }\n\n getRuleInput(): RuleInput {\n const qVars: RuleQuestionVariable[] = [];\n const cVars: RuleCustomVariable[] = [];\n const pageIdActions: ExcludeByPageAction[] = [];\n const tagActions: ExcludeByTagAction[] = this.tags.map((t) => {\n const tag = t.tagText;\n const pageCount = this._pageCollection.pages.reduce((count, curr) => {\n return curr.tags.includes(tag) ? count + 1 : count;\n }, 0);\n const excludeByTagDto: ExcludeByTagAction = {\n kind: \"exclude-by-tag\",\n pageCount,\n tag,\n description: t.tagDescription,\n };\n return excludeByTagDto;\n });\n\n const jumpActions: JumpToPageAction[] = [];\n\n this._pageCollection.pages.forEach((page, index) => {\n const pageVariables = page.getQuestionVariables(this.prefix, index);\n qVars.push(...pageVariables);\n const mainText = page.mainText.text;\n const pagePrefix = page.prefix;\n const jumpAction: JumpToPageAction = {\n kind: \"jump-to-page\",\n pageId: page.id,\n pagePrefix,\n pageNumber: index,\n mainText: page.mainText.text,\n };\n const excludePageAction: ExcludeByPageAction = {\n kind: \"exclude-by-pageId\",\n pageId: page.id,\n pagePrefix,\n pageNumber: index,\n mainText,\n };\n jumpActions.push(jumpAction);\n pageIdActions.push(excludePageAction);\n });\n const ruleInput = new RuleInput(qVars, cVars, pageIdActions, tagActions, jumpActions);\n\n return ruleInput;\n }\n\n deleteTags(tags: ReadonlyArray<BuilderTag>) {\n this._tagCollection.deleteAll(tags);\n }\n\n addTag(builderTag: BuilderTag) {\n this._tagCollection.add(builderTag);\n }\n\n compile(\n options: CompilerOption = { blockAutoplayQuestion: false, blockAutoplayVideo: false },\n ): CompilerOutput {\n // const moduleDto = this.toJson();\n const builderSchema = BuilderSchema.fromJson(this.toJson());\n\n // Overriding the\n builderSchema._pageCollection.pages.forEach((p) => {\n if (options.blockAutoplayQuestion) {\n p.mainText.autoplay = false;\n }\n if (options.blockAutoplayVideo && p.mainMedia) {\n if (p.mainMedia.kind === \"main-video\") {\n // TODO autoplay as boolean, so that we know if video is optional or required when override.\n p.mainMedia.mode = \"optional\";\n }\n }\n });\n const moduleDto = builderSchema.toJson();\n const imp = new DefaultThemeCompiler();\n\n const codebook = CodeBook.fromSchema(moduleDto);\n const schema = imp.compile(moduleDto);\n const schemaConfig = SchemaConfig.fromSchema(moduleDto);\n const output: CompilerOutput = { codebook, schema, schemaConfig };\n return output;\n }\n\n sumScoreVariableDelete(id: SumScoreVariableID) {\n const didDelete = this._sumScoreCollection._deleteVariable(id);\n const sumScoreVariables = [...this._sumScoreCollection];\n this._pageCollection.updateRelationShips({ sumScoreVariables });\n this._pageCollection.sumScoreVariableDelete(id);\n return didDelete;\n }\n}\n","import { BuilderPageDto } from \"../page/Builder-page\";\nimport { BuilderSchemaDto } from \"../Builder-schema\";\nimport { CodeBookQuestionVariable, CodebookPredefinedVariable } from \"./codebook-variable\";\nimport { SumScoreVariableDto } from \"../sum-score/sum-score-variable\";\n\nexport interface Codebook {\n readonly predefinedVariables: ReadonlyArray<CodebookPredefinedVariable>;\n readonly pageVariables: ReadonlyArray<CodeBookQuestionVariable>;\n}\n\nconst fromPage = (\n page: BuilderPageDto,\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\n pagePosition: number,\n modulePrefix: string,\n): CodeBookQuestionVariable[] => {\n const variables: CodeBookQuestionVariable[] = [];\n\n if (page._type !== \"question\") {\n // TODO Implement form field variables\n return [];\n }\n\n const options: CodeBookQuestionVariable[\"options\"] = page.defaultQuestion.options.map((o) => {\n return { value: o.value, label: o.label };\n });\n\n const varId = modulePrefix + \"_\" + page.prefix;\n\n const includedInSumScores = page.includedInSumScores.filter((a) => true);\n\n const variable: CodeBookQuestionVariable = {\n kind: \"codebook-question-variable\",\n label: page.mainText.text,\n pageId: page.id,\n pagePrefix: page.prefix,\n options,\n modulePrefix,\n pagePosition,\n varId,\n includedInSumScores: [],\n };\n\n variables.push(variable);\n\n return variables;\n};\n\n/**\n * Converts a list of pages into a list of question-variables\n * @param pages\n * @param sumScoreVariables\n * @param modulePrefix\n */\nconst getPageVariablesFromPages = (\n pages: ReadonlyArray<BuilderPageDto>,\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\n modulePrefix: string,\n): CodeBookQuestionVariable[] => {\n const variables: CodeBookQuestionVariable[] = [];\n pages.forEach((page, index) => {\n const pageVariables = fromPage(page, sumScoreVariables, index, modulePrefix);\n variables.push(...pageVariables);\n });\n return variables;\n};\n\nconst fromSchema = (schema: BuilderSchemaDto): Codebook => {\n const modulePrefix = schema.prefix;\n const sumScoreVariables = schema.sumScoreVariables ?? [];\n const pageVariables = getPageVariablesFromPages(schema.pages, sumScoreVariables, modulePrefix);\n const vs = schema.predefinedVariables;\n const predefinedVariables: CodebookPredefinedVariable[] = vs ? [...vs] : [];\n return { pageVariables, predefinedVariables };\n};\n\nexport const _CodeBook = {\n fromSchema,\n} as const;\n\nexport const CodeBook = Object.freeze(_CodeBook);\n","import { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\r\nimport { BuilderSchemaDto } from \"./Builder-schema\";\r\n\r\n/**\r\n * This interface is ment to define all information that a schema-admin app\r\n * needs to generate a dynamic form for setting values for predefined variables.\r\n */\r\nexport interface SchemaConfig {\r\n readonly schemaName: string;\r\n readonly schemaId: string;\r\n readonly schemaPrefix: string;\r\n readonly variables: ReadonlyArray<CodebookPredefinedVariable>;\r\n}\r\n\r\nexport const SchemaConfig = {\r\n fromSchema: (schema: BuilderSchemaDto): SchemaConfig => {\r\n const variables = schema.predefinedVariables ?? [];\r\n return {\r\n schemaId: schema.id,\r\n schemaName: schema.name,\r\n schemaPrefix: schema.prefix,\r\n variables,\r\n };\r\n },\r\n} as const;\r\n","import { PageID, SumScoreVariableID } from \"../primitives/ID\";\nimport { BuilderObject } from \"../BuilderObject\";\nimport { DUtil } from \"@media-quest/engine\";\nimport { BuilderPage } from \"../page/Builder-page\";\n\nexport interface SumScoreVariableDto {\n id: SumScoreVariableID;\n name: string;\n description: string;\n useAvg: boolean;\n}\nexport class SumScoreVariable extends BuilderObject<\n \"builder-sum-score-variable\",\n SumScoreVariableDto\n> {\n readonly objectType = \"builder-sum-score-variable\";\n readonly id: SumScoreVariableID;\n private _useAvg = true;\n private _name = \"\";\n private _description = \"\";\n private _error = \"\";\n private _usedIn: ReadonlyArray<BuilderPage> = [];\n // private _basedOn = new Map<pageId: Page>()\n get usedIn() {\n return [...this._usedIn];\n }\n\n // private _basedOn: Array<{ varId: string }> = [];\n public static readonly create = (data: {\n name: string;\n description: string;\n useAvg: boolean;\n }): SumScoreVariable => {\n const id = SumScoreVariableID.create();\n return new SumScoreVariable({ id, ...data });\n };\n\n get hasErrors() {\n return this._error.length !== 0;\n }\n\n public static fromDto = (dto: SumScoreVariableDto): SumScoreVariable => {\n return new SumScoreVariable(dto);\n };\n\n private constructor(dto: SumScoreVariableDto) {\n super(dto);\n this.id = dto.id;\n this._name = dto.name;\n this._useAvg = dto.useAvg;\n this._description = dto.description;\n }\n toJson(): SumScoreVariableDto {\n const dto: SumScoreVariableDto = {\n description: this.description,\n id: this.id,\n name: this.name,\n useAvg: this.useAvg,\n };\n return dto;\n }\n clone(): SumScoreVariableDto {\n const id = SumScoreVariableID.create();\n const dto = this.toJson();\n return { ...dto, id };\n }\n\n /** @internal*/\n _update(data: { name?: string; description?: string; useAvg?: boolean }) {\n const d = data ?? {};\n if (DUtil.isString(d.name)) {\n this._name = d.name;\n }\n if (DUtil.isString(d.description)) {\n this._description = d.description;\n }\n if (DUtil.isBool(d.useAvg)) {\n this._useAvg = d.useAvg;\n }\n }\n\n /**\n * @internal - used by sum-score-variable-collection.\n */\n _setError(error: \"\" | \"Duplicate name\") {\n this._error = error;\n }\n /** @internal - used by sum-score-variable-collection */\n _setUsedInPages(pages: BuilderPage[]) {\n this._usedIn = [...pages];\n }\n\n get name() {\n return this._name;\n }\n get description() {\n return this._description;\n }\n get useAvg() {\n return this._useAvg;\n }\n}\n","import { SumScoreVariable, SumScoreVariableDto } from \"./sum-score-variable\";\nimport { SumScoreVariableID } from \"../primitives/ID\";\n\nexport class SumScoreVariableCollection implements Iterable<SumScoreVariable> {\n private _all: Array<SumScoreVariable> = [];\n\n [Symbol.iterator]() {\n const list = [...this._all];\n return list[Symbol.iterator]();\n }\n\n asArray(): ReadonlyArray<SumScoreVariable> {\n return [...this._all];\n }\n\n public static readonly create = (\n variables?: SumScoreVariableDto[],\n ): SumScoreVariableCollection => {\n return new SumScoreVariableCollection(variables);\n };\n\n private constructor(sumScoreVariables?: SumScoreVariableDto[]) {\n const all = Array.isArray(sumScoreVariables) ? sumScoreVariables : [];\n this._all = all.map((dto) => SumScoreVariable.fromDto(dto));\n this.checkForErrors();\n }\n\n init(variables: SumScoreVariableDto[]) {\n this._all = variables.map((variable) => SumScoreVariable.fromDto(variable));\n this.checkForErrors();\n }\n addNew(options: { name: string; description: string; useAvg: boolean }) {\n // console.log(options);\n const newVariable = SumScoreVariable.create({ ...options });\n this._all.push(newVariable);\n this.checkForErrors();\n return newVariable;\n }\n\n get size() {\n return this._all.length;\n }\n\n get errorsCount() {\n return this._all.filter((variable) => variable.hasErrors).length;\n }\n\n toJson() {\n return this._all.map((item) => item.toJson());\n }\n\n /**\n *\n */\n _deleteVariable(id: SumScoreVariableID) {\n const initialSize = this._all.length;\n this._all = this._all.filter((variable) => variable.id !== id);\n this.checkForErrors();\n return initialSize === this.size + 1;\n }\n\n /**\n * @internal\n */\n _updateOne(\n id: SumScoreVariableID,\n updates: { name?: string; description?: string; useAvg?: boolean },\n ): boolean {\n const variable = this._all.find((variable) => variable.id === id);\n if (variable) {\n variable._update(updates);\n this.checkForErrors();\n return true;\n } else {\n return false;\n }\n }\n\n /** @internal */\n _getVariableById(id: SumScoreVariableID): SumScoreVariable | undefined {\n return this._all.find((variable) => variable.id === id);\n }\n\n private checkForErrors() {\n const nameMap = new Map<string, SumScoreVariable[]>();\n this._all.forEach((v) => {\n const array = nameMap.get(v.name) ?? [];\n array.push(v);\n nameMap.set(v.name, array);\n });\n nameMap.forEach((sameNameArray) => {\n sameNameArray.forEach((sameNameItem) => {\n if (sameNameArray.length > 1) {\n sameNameItem._setError(\"Duplicate name\");\n } else {\n sameNameItem._setError(\"\");\n }\n });\n });\n }\n}\n","import { BuilderObject } from \"../BuilderObject\";\nimport { TagID } from \"../primitives/ID\";\n\nexport interface BuilderTagDto {\n readonly id: TagID;\n readonly tag: string;\n readonly description: string;\n}\n\nexport class BuilderTag extends BuilderObject<\"builder-tag\", BuilderTagDto> {\n readonly objectType: \"builder-tag\" = \"builder-tag\";\n readonly id: TagID;\n tagText = \"\";\n tagDescription = \"\";\n public static readonly MAX_LENGTH = 20;\n public static readonly MIN_LENGTH = 1;\n\n public static readonly create = (tag: string, description: string = \"\") => {\n const id = TagID.create();\n const dto: BuilderTagDto = {\n id,\n tag,\n description,\n };\n return new BuilderTag(dto);\n };\n public static readonly fromDto = (dto: BuilderTagDto) => {\n return new BuilderTag(dto);\n };\n protected constructor(dto: BuilderTagDto) {\n const id = TagID.validateOrCreate(dto.id);\n const withId = { ...dto, id };\n super(withId);\n this.id = id;\n this.tagText = dto.tag ?? \"\";\n this.tagDescription = dto.description ?? \"\";\n }\n clone(): BuilderTagDto {\n return this.toJson();\n }\n\n toJson(): BuilderTagDto {\n return { tag: this.tagText, description: this.tagDescription, id: this.id };\n }\n}\n","import { BuilderTag, BuilderTagDto } from \"./BuilderTag\";\n\nexport class TagCollection implements Iterable<BuilderTag> {\n private readonly _tags = new Set<BuilderTag>();\n public static readonly create = () => {\n return new TagCollection([]);\n };\n\n [Symbol.iterator]() {\n const list = [...this._tags];\n return list[Symbol.iterator]();\n }\n\n private constructor(initialTags: ReadonlyArray<BuilderTag>) {\n initialTags.forEach((tag) => {\n this._tags.add(tag);\n });\n }\n\n init(tags: ReadonlyArray<BuilderTagDto>) {\n const dtoList: ReadonlyArray<BuilderTagDto> = Array.isArray(tags) ? tags : [];\n const all = dtoList.map(BuilderTag.fromDto);\n all.forEach((tag) => {\n this._tags.add(tag);\n });\n }\n\n add(tag: BuilderTag) {\n this._tags.add(tag);\n }\n\n /**\n * Delete this tag from collection;\n * @param tag\n */\n delete(tag: BuilderTag) {\n this._tags.delete(tag);\n }\n\n toJson(): ReadonlyArray<BuilderTagDto> {\n const list = [...this._tags];\n const dtoList = list.map((t) => t.toJson());\n return dtoList;\n }\n\n deleteAll(tags: Iterable<BuilderTag>) {\n const l = tags[Symbol.iterator]();\n const asList = [...tags];\n asList.forEach((t) => {\n this.delete(t);\n });\n }\n}\n","import { DUtil } from \"@media-quest/engine\";\nimport { BuilderPage, BuilderPageDto } from \"./Builder-page\";\nimport { PageID, PagePrefix, SumScoreVariableID } from \"../public-api\";\nimport { SumScoreVariableCollection } from \"../sum-score/sum-score-variable-collection\";\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\n\nconst U = DUtil;\nexport type BuilderPageType = \"info-page\" | \"question\";\n\nexport class BuilderPageCollection implements Iterable<BuilderPage> {\n private _all: Array<BuilderPage> = [];\n\n public static create(pages: BuilderPageDto[]) {\n const page = new BuilderPageCollection(pages);\n page._all = pages.map((p) => BuilderPage.fromJson(p));\n return page;\n }\n private constructor(initialPages: BuilderPageDto[]) {}\n\n /** @internal - used by Schema*/\n _init(pages: BuilderPageDto[]) {\n this._all = pages.map(BuilderPage.fromJson);\n }\n\n add(type: BuilderPageType, atIndex = -1): BuilderPage {\n const pagePrefix = PagePrefix.create();\n const newPage = BuilderPage.create(type, pagePrefix.value);\n if (atIndex >= 0 && atIndex < this._all.length) {\n this._all.splice(atIndex, 0, newPage);\n } else {\n this._all.push(newPage);\n }\n return newPage;\n }\n\n deleteById(id: PageID) {\n const index = this._all.findIndex((p) => p.id === id);\n if (index !== -1) {\n this._all.splice(index, 1);\n return true;\n } else {\n return false;\n }\n }\n\n private getPageById(pageId: PageID) {\n const maybePage = this._all.find((p) => p.id === pageId);\n return maybePage ?? false;\n }\n get size() {\n return this._all.length;\n }\n get pages(): ReadonlyArray<BuilderPage> {\n return [...this._all];\n }\n toJson(): ReadonlyArray<BuilderPageDto> {\n return this._all.map((p) => p.toJson());\n }\n\n [Symbol.iterator]() {\n const list = [...this._all];\n return list[Symbol.iterator]();\n }\n\n movePage(page: BuilderPage, toIndex: number) {\n const index = this._all.indexOf(page);\n if (index < 0) {\n return false;\n }\n const isValidIndex = U.isInRange(0, this._all.length - 1);\n if (!isValidIndex(toIndex)) {\n return false;\n }\n // console.log('Moving from :' + index + ' to: ' + toIndex);\n this._all.splice(index, 1);\n this._all.splice(toIndex, 0, page);\n return true;\n }\n\n insertPage(page: BuilderPage, atIndex: number) {\n const isValidIndex = U.isInRange(0, this._all.length - 1);\n if (!isValidIndex(atIndex)) {\n return false;\n }\n const exists = !!this._all.find((p) => p.id === page.id);\n if (exists) {\n return false;\n }\n this._all.splice(atIndex, 0, page);\n return true;\n }\n\n addSumScoreVariable(sumScoreVariable: SumScoreVariable, pageId: PageID, weight: number) {\n const maybePage = this.getPageById(pageId);\n if (!maybePage) return false;\n maybePage.sumScoreVariableSet(sumScoreVariable, weight);\n\n // maybePage.addSumScoreVariable(maybeVariable, weight);\n return true;\n }\n\n updateRelationShips(context: { sumScoreVariables: ReadonlyArray<SumScoreVariable> }) {\n const { sumScoreVariables } = context;\n\n // Update all relationships in pages.\n this._all.forEach((p) => {\n p.updateRelationShips(context.sumScoreVariables);\n });\n\n // Set the used in pages array on every variable.\n sumScoreVariables.forEach((v) => {\n const usedInPages = this._all.filter((p) => p._isIncludedInSumScore(v.id));\n v._setUsedInPages(usedInPages);\n });\n }\n\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\n this._all.forEach((p) => {\n p.sumScoreVariableDelete(sumScoreVariableID);\n });\n }\n\n sumScoreVariableDeleteFromPage(pageId: PageID, sumScoreVariableId: SumScoreVariableID) {\n const maybePage = this.getPageById(pageId);\n if (!maybePage) return false;\n maybePage.sumScoreVariableDelete(sumScoreVariableId);\n return true;\n }\n}\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport { TextID } from \"./primitives/ID\";\r\n\r\nexport interface BuilderTextDto {\r\n readonly id: TextID;\r\n text: string;\r\n name: string;\r\n translationRequired: boolean;\r\n}\r\n\r\nexport class BuilderText extends BuilderObject<\"builder-text\", BuilderTextDto> {\r\n readonly objectType = \"builder-text\";\r\n id: TextID;\r\n text = \"\";\r\n name = \"\";\r\n translateRequired = false;\r\n // audio: {id: B}\r\n private constructor(dto: BuilderTextDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this.translateRequired = dto.translationRequired;\r\n this.name = dto.name;\r\n this.text = dto.text;\r\n }\r\n\r\n public static create(name: string) {\r\n const id = TextID.create();\r\n const dto: BuilderTextDto = {\r\n id,\r\n name,\r\n text: \"\",\r\n translationRequired: false,\r\n };\r\n const instance = new BuilderText(dto);\r\n return instance;\r\n }\r\n public static fromJson(dto: BuilderTextDto) {\r\n const instance = new BuilderText(dto);\r\n return instance;\r\n }\r\n\r\n clone(): BuilderTextDto {\r\n const dto = this.toJson();\r\n const withNewId: BuilderTextDto = { ...dto, id: TextID.create() };\r\n return withNewId;\r\n }\r\n\r\n toJson(): BuilderTextDto {\r\n const dto: BuilderTextDto = {\r\n id: this.id,\r\n name: this.name,\r\n text: this.text,\r\n translationRequired: this.translateRequired,\r\n };\r\n return dto;\r\n }\r\n}\r\n","import { SumScoreVariableDto } from \"./sum-score-variable\";\nimport { SumScoreVariableID } from \"../primitives/ID\";\nimport { SumScoreAnswer } from \"./sum-score-answer\";\nimport { CodeBook } from \"../code-book/codebook\";\nimport { BuilderSchemaDto } from \"../Builder-schema\";\n\n/**\n *\n * A constant Array that contains all legal\n */\nconst ALLOWED_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8];\nconst isAllowedValue = (num: number) => {\n const notNegative = num >= 0;\n const lessThanNine = num < 9;\n return notNegative && lessThanNine;\n};\n\ntype BasedOnEntry =\n | { kind: \"missing\"; varId: string }\n | { kind: \"invalid-variable\"; varId: string; message: string }\n | { kind: \"has-value\"; varId: string; value: number; weight: number; varLabel: string };\n\nexport interface SumScore {\n sumScore: number;\n avg: number; // Alle besvarte spørsmål som ikke er 9.\n useAvg: boolean;\n includedAnswerCount: number;\n missingAnswerCount: number;\n skippedBy9Count: number; // Antall vetikke / hopp over\n basedOn: Array<{ varId: string; value: number; weight: number; varLabel: string }>;\n errorMessages: string[];\n}\n\nconst calculateAll = (\n schemaDto: BuilderSchemaDto,\n answers: Array<SumScoreAnswer>,\n): ReadonlyArray<SumScore> => {\n const vs = schemaDto.sumScoreVariables ?? [];\n\n const basedOnMap = new Map<SumScoreVariableID, Array<{ varId: string; weight: number }>>();\n const codeBook = CodeBook.fromSchema(schemaDto);\n // codeBook.pageVariables.find(v => v.pageId === )\n const pages = schemaDto.pages;\n // const a: Array<{pageId: PageID, sumScoreVariableId: SumScoreVariableID, weight: number, varId: string}> = []\n\n pages.forEach((page) => {\n page.includedInSumScores.forEach((includedInScores) => {\n const variableId = includedInScores.sumScoreVariableId;\n const weight = includedInScores.weight;\n const p = codeBook.pageVariables.find((v) => v.pageId === page.id);\n if (p) {\n const currentBasedOnArray = basedOnMap.get(variableId) ?? [];\n currentBasedOnArray.push({ varId: p.varId, weight });\n basedOnMap.set(variableId, currentBasedOnArray);\n } else {\n // TODO - Global event-bus for errors?\n console.error(\"INVALID DATA in calculate all sum-scores.\");\n // throw Error(\"Invalid data...\");\n }\n });\n });\n // const pages = Array.isArray(schemaDto.pages) ? schemaDto.pages : [];\n const results: ReadonlyArray<SumScore> = vs.map((v) => {\n const basedOn = basedOnMap.get(v.id) ?? [];\n return calculate(v, basedOn, answers);\n });\n\n return results;\n};\nconst calculate = (\n sumScoreVariable: SumScoreVariableDto,\n basedOnVariables: Array<{ varId: string; weight: number }>,\n answers: Array<SumScoreAnswer>,\n): SumScore => {\n const legalValues: Array<number> = [...ALLOWED_VALUES];\n // CALCULATE THESE!!\n let includedAnswerCount = 0;\n let skippedBy9Count = 0;\n let missingAnswerCount = 0;\n let sumScore = 0;\n const errorMessages: string[] = [];\n const basedOn: SumScore[\"basedOn\"] = [];\n const useAvg = sumScoreVariable.useAvg;\n\n const basedOnEntries: BasedOnEntry[] = basedOnVariables.map((scv) => {\n const maybeAnswer = answers.find((v) => v.varId === scv.varId);\n let result: BasedOnEntry = { kind: \"missing\", varId: scv.varId };\n if (!maybeAnswer) {\n return result;\n }\n\n const value = maybeAnswer.value;\n const varLabel = maybeAnswer.varLabel;\n const weight = scv.weight ?? 1;\n const varId = maybeAnswer.varId;\n\n result = {\n kind: \"has-value\",\n varId,\n weight,\n value,\n varLabel,\n };\n\n return result;\n });\n\n basedOnEntries.forEach((entry) => {\n if (entry.kind === \"missing\") {\n missingAnswerCount++;\n }\n if (entry.kind === \"has-value\") {\n const { varId, varLabel, weight, value } = { ...entry };\n const isAllowed = isAllowedValue(value);\n if (isAllowed) {\n basedOn.push({ varId, weight, value, varLabel });\n sumScore += entry.value * entry.weight;\n includedAnswerCount++;\n }\n if (value === 9) {\n skippedBy9Count++;\n basedOn.push({ varId, weight, value, varLabel });\n }\n }\n if (entry.kind === \"invalid-variable\") {\n errorMessages.push(entry.message);\n }\n });\n\n const avg = sumScore / includedAnswerCount;\n const result: SumScore = {\n avg,\n useAvg,\n includedAnswerCount,\n skippedBy9Count,\n sumScore,\n basedOn,\n missingAnswerCount,\n errorMessages,\n };\n // Calculate avg\n\n return result;\n};\nconst createVariable = (): SumScoreVariableDto => {\n const id = SumScoreVariableID.create();\n return {\n id,\n name: \"\",\n useAvg: true,\n description: \"\",\n // basedOn: [],\n };\n};\nexport const SumScore = {\n ALLOWED_VALUES,\n calculate,\n calculateAll,\n isAllowedValue,\n createVariable,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACmBO,IAAe,gBAAf,MAA0E;AAAA,EAK5D;AAAA,EACT,YAAY,KAAU;AAC9B,SAAK,cAAc;AAAA,EAErB;AACF;;;AC5BA,IAAM,YAAY;AAGlB,IAAM,aAAa;AAInB,IAAM,OAAO,CAAyB,QAAW,OAA6B;AAC5E,MAAI,OAAO,OAAO;AAAU,WAAO;AACnC,SAAO,GAAG,UAAU;AACtB;AAEA,IAAM,iBAAiB,CAAyB,WAAqB;AACnE,QAAM,UAAU;AAChB,QAAM,MAAM,UAAU,QAAQ,YAAY;AAC1C,MAAI,SAAS;AAEb,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,UAAM,OAAO,IAAI,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM,CAAC;AAC9D,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AACA,IAAM,gBAAgB,CAAyB,QAAW,WAA0B;AAClF,SAAO,OAAO,OAAO,SAAS;AAChC;AAyBO,IAAM,yBAAyB,CAAyB,WAAqB;AAIlF,QAAM,SAAS,MAAa,eAAe,MAAM;AAMjD,QAAM,KAAK,CAAC,OAA4B,KAAK,QAAQ,EAAE;AAMvD,QAAM,kBAAkB,CAAC,OAAsB;AAC7C,QAAI,CAAC,GAAG,EAAE,GAAG;AACX,YAAM,IAAI,MAAM,eAAe,EAAE,EAAE;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AAKA,QAAM,OAAU;AAMhB,QAAM,mBAAmB,CAAC,OAAsB;AAC9C,WAAO,GAAG,EAAE,IAAI,KAAK,OAAO;AAAA,EAC9B;AAEA,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,IAAI,cAAc,QAAQ,GAAG;AACnC,QAAM,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE1C,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,OAAO,OAAO,EAAE,QAAQ,IAAI,kBAAkB,iBAAiB,MAAM,MAAM,CAAC;AACrF;AAGO,IAAM,WAAW,uBAAuB,QAAQ;AAGhD,IAAM,SAAS,uBAAuB,MAAM;AAG5C,IAAM,QAAQ,uBAAuB,KAAK;AAE1C,IAAM,WAAW,uBAAuB,QAAQ;AAGhD,IAAM,SAAS,uBAAuB,MAAM;AAE5C,IAAM,aAAa,uBAAuB,UAAU;AAGpD,IAAM,qBAAqB,uBAAuB,oBAAoB;;;ACzHtE,IAAM,gBAAN,MAAM,uBAAsB,cAA2D;AAAA,EACnF,aAAa;AAAA,EACtB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACA,kBAAqC;AAAA,EAC7C,IAAI,iBAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,eAAe,WAA8B;AAC/C,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEQ,YAAY,KAAuB;AACzC,UAAM,GAAG;AACT,SAAK,KAAK,IAAI;AACd,SAAK,QAAQ,IAAI;AACjB,SAAK,QAAQ,IAAI;AAAA,EAEnB;AAAA,EACA,OAAc,OAAO,OAAe,OAAe;AACjD,UAAM,KAAK,SAAS,OAAO;AAC3B,UAAM,MAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,WAAW,IAAI,eAAc,GAAG;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,OAAc,SAAS,KAAuB;AAC5C,UAAM,WAAW,IAAI,eAAc,GAAG;AACtC,WAAO;AAAA,EACT;AAAA,EAEA,SAA2B;AACzB,UAAM,MAAwB;AAAA,MAC5B,IAAI,KAAK;AAAA,MACT,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAA0B;AACxB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,WAA6B,EAAE,GAAG,KAAK,IAAI,SAAS,OAAO,EAAE;AACnE,WAAO;AAAA,EACT;AACF;;;ACxCO,IAAM,kBAAN,MAAM,yBAAwB,cAAsD;AAAA,EAChF,aAAa;AAAA,EACtB;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,UAA2B,CAAC;AAAA,EAC5B,SAAS;AAAA,EAET,OAAO,SAAS,CAAC,SAA8B;AAC7C,UAAM,KAAK,WAAW,OAAO;AAE7B,WAAO,IAAI,iBAAgB;AAAA,MACzB;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,CAAC;AAAA,MACV,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,OAAc,SAAS,KAA0C;AAC/D,UAAM,WAAW,IAAI,iBAAgB,GAAG;AACxC,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,KAAyB;AAC3C,UAAM,GAAG;AACT,SAAK,KAAK,WAAW,iBAAiB,IAAI,EAAE;AAC5C,SAAK,OAAO,IAAI;AAChB,SAAK,eAAe,IAAI;AACxB,SAAK,SAAS,IAAI;AAClB,SAAK,UAAU,IAAI,QAAQ,IAAI,CAAC,MAAM,cAAc,SAAS,CAAC,CAAC;AAAA,EACjE;AAAA,EAEA,UAAU,OAAe,OAAe,UAAU,IAAI;AACpD,UAAM,SAAS,cAAc,OAAO,OAAO,KAAK;AAChD,QAAI,WAAW,KAAK,UAAU,KAAK,QAAQ,QAAQ;AACjD,WAAK,QAAQ,OAAO,SAAS,GAAG,MAAM;AAAA,IACxC,OAAO;AACL,WAAK,QAAQ,KAAK,MAAM;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,QAAgC;AAC3C,UAAM,WAAW,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE;AAC9D,UAAM,YAAY,SAAS,WAAW,KAAK,QAAQ,SAAS;AAC5D,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEA,SAAS;AACP,UAAM,cAAc,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,UAAM,MAA0B;AAAA,MAC9B,IAAI,KAAK;AAAA,MACT,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,IACX;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAA4B;AAC1B,UAAM,UAAU,WAAW,OAAO;AAClC,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,eAAe,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACtD,UAAM,YAAgC;AAAA,MACpC,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,SAAS;AAAA,IACX;AACA,WAAO;AAAA,EACT;AACF;;;ACvFO,IAAM,kBAAN,MAAM,yBAAwB,cAAuD;AAAA,EAC/E,aAAkC;AAAA,EAC3C,WAAW;AAAA,EACH,aAAgC;AAAA,EACxC,gBAAgB;AAAA,EAEhB,OAAO;AAAA,EAEC,YAAY,KAAyB;AACzC,UAAM,GAAG;AACT,SAAK,aAAa,IAAI,aAAa;AACnC,SAAK,WAAW,IAAI,YAAY;AAChC,SAAK,gBAAgB,IAAI,iBAAiB;AAC1C,SAAK,OAAO,IAAI,QAAQ;AAAA,EAC5B;AAAA,EAEA,IAAI,yBAAyB;AACzB,UAAM,QAAQ,KAAK;AACnB,UAAM,IAAI,QAAQ;AAClB,UAAM,YAAY,EAAE,QAAQ,CAAC;AAC7B,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,cAAc;AACd,QAAI,CAAC,KAAK;AAAW,aAAO;AAE5B,UAAM,MAAM,KAAK,UAAU,SAAS,QAAQ,CAAC;AAC7C,WAAO,SAAS,MAAM;AAAA,EAC1B;AAAA,EAEA,OAAO,SAAS,KAA0C;AACtD,UAAM,WAAW,IAAI,iBAAgB,GAAG;AACxC,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,SAAS,MAAM;AAClB,UAAM,MAA0B;AAAA,MAC5B,UAAU;AAAA,MACV,eAAe;AAAA,MACf,WAAW;AAAA,MACX,MAAM;AAAA,IACV;AACA,WAAO,IAAI,iBAAgB,GAAG;AAAA,EAClC;AAAA,EAEA,QAA4B;AACxB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,QAAQ,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAC5C,WAAO;AAAA,EACX;AAAA,EAEA,SAA6B;AACzB,UAAM,MAA0B;AAAA,MAC5B,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,IACxB;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAA+B;AAC/B,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU,WAA8B;AACxC,QAAI,cAAc,OAAO;AACrB,WAAK,gBAAgB;AACrB,WAAK,WAAW;AAAA,IACpB;AACA,SAAK,aAAa;AAAA,EACtB;AACJ;;;AChFA,IAAM,yBAAyB;AAAA,EAC7B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,aAAa;AAAA,EACb,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AACZ;AAIO,IAAU;AAAA,CAAV,CAAUA,qBAAV;AACE,EAAMA,iBAAA,KAAK,CAAC,WAA+C;AAChE,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAO;AAAA,IACT;AACA,WAAO,OAAO,KAAK,sBAAsB,EAAE,SAAS,MAAM;AAAA,EAC5D;AAAA,GANe;;;ACnBV,IAAe,mBAAf,MAAmC;AAAA,EAe9B,YAAqB,MAAS;AAAT;AAC7B,SAAK,eAAe,KAAK,eAAe;AACxC,SAAK,WAAW,KAAK,WAAW;AAChC,SAAK,gBAAgB,KAAK,gBAAgB;AAAA,EAC5C;AAAA,EAlBiB;AAAA,EACA;AAAA,EACA;AAAA,EACjB,IAAI,cAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAUF;AAEO,IAAM,yBAAN,MAAM,gCAA+B,iBAA+B;AAAA,EAKzE,YAAqB,MAAoB;AACvC,UAAM,IAAI;AADS;AAEnB,SAAK,UAAU,KAAK,QAAQ,IAAI,qBAAqB,MAAM;AAAA,EAC7D;AAAA,EAPA,OAAc,SAAS,CAAC,SAAuB;AAC7C,WAAO,IAAI,wBAAuB,IAAI;AAAA,EACxC;AAAA,EACS;AAAA,EAMC,kBAA0B;AAClC,WAAO,KAAK,KAAK,QAAQ,KAAK,KAAK;AAAA,EACrC;AAAA,EAEA,iBAAyB;AACvB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,aAAqB;AACnB,WAAO,KAAK,KAAK;AAAA,EACnB;AACF;AAEO,IAAM,uBAAN,MAAM,8BAA6B,iBAAqC;AAAA,EAC7E,OAAc,SAAS,CAAC,WAA+B;AACrD,WAAO,IAAI,sBAAqB,MAAM;AAAA,EACxC;AAAA,EACQ,YAAY,QAA4B;AAC9C,UAAM,MAAM;AAAA,EACd;AAAA,EACU,kBAA0B;AAClC,WAAO;AAAA,EACT;AAAA,EAEU,iBAAyB;AACjC,WAAO,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK,QAAQ;AAAA,EACnD;AAAA,EAEU,aAAqB;AAC7B,WAAO;AAAA,EACT;AACF;AAEO,IAAM,qBAAN,MAAM,4BAA2B,iBAAuC;AAAA,EAC7E,OAAuB,KAAK,IAAI,oBAAmB,OAAO;AAAA,EAC1D,OAAuB,SAAS,IAAI,oBAAmB,UAAU;AAAA,EACjE,OAAuB,aAAa,CAClC,WAC+B;AAC/B,QAAI,WAAW,SAAS;AACtB,aAAO,oBAAmB;AAAA,IAC5B;AACA,QAAI,WAAW,YAAY;AACzB,aAAO,oBAAmB;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EACQ,YAAY,UAA2B;AAC7C,UAAM,QAAQ;AAAA,EAChB;AAAA,EAEU,kBAA0B;AAClC,WAAO;AAAA,EACT;AAAA,EAEU,iBAAyB;AACjC,UAAM,WAAW,KAAK;AACtB,QAAI,aAAa,SAAS;AACxB,aAAO;AAAA,IACT;AACA,QAAI,aAAa,YAAY;AAC3B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEU,aAAqB;AAC7B,UAAM,WAAW,KAAK;AACtB,QAAI,aAAa,SAAS;AACxB,aAAO;AAAA,IACT;AACA,QAAI,aAAa,YAAY;AAC3B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAN,MAAM,8BAA6B,iBAAmC;AAAA,EAC3E,OAAuB,SAAS,CAAC,aAC/B,IAAI,sBAAqB,QAAQ;AAAA,EACzB,YAAY,UAA4B;AAChD,UAAM,QAAQ;AAAA,EAChB;AAAA,EAEU,kBAA0B;AAClC,WAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,EAC1C;AAAA,EAEU,iBAAyB;AACjC,WAAO,KAAK,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa;AAAA,EAC9D;AAAA,EAEU,aAAqB;AAC7B,WAAO,KAAK,KAAK;AAAA,EACnB;AACF;;;ACtHO,IAAM,mBAAN,MAAM,0BAAyB,cAAwD;AAAA,EACnF,aAAkC;AAAA,EAC3C,OAAuB,mBAAsD;AAAA,IAC3E,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AAAA,EAEQ;AAAA,EACR,OAAO;AAAA,EAEP,OAAc,SAAS,CAAC,iBAA8C;AACpE,UAAM,YAAY,IAAI;AAAA,MACpB;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAc,UAAU,CAAC,KAA0B,cAA2C;AAC5F,UAAM,OAA4B;AAAA,MAChC,MAAM;AAAA,MACN,MAAM,IAAI,QAAQ;AAAA,MAClB,OAAO,IAAI,SAAS;AAAA,MACpB,UAAU,IAAI,YAAY;AAAA,MAC1B,YAAY,IAAI,cAAc;AAAA,IAChC;AACA,UAAM,WAAW,IAAI,kBAAiB,MAAM,SAAS;AACrD,WAAO;AAAA,EACT;AAAA,EACQ,YAAkC;AAAA,EAClC,YAAkC;AAAA,EAClC,SAAqC;AAAA,EACrC,gBAA6C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtD,IAAI,SAAS,UAAgC;AAC3C,QAAI,aAAa,KAAK,WAAW;AAC/B;AAAA,IACF;AACA,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,eAA2C;AACnD,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAoE;AAClE,QAAI,KAAK,cAAc,WAAW,GAAG;AACnC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AACA,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO,EAAE,SAAS,OAAO,SAAS,oCAAoC;AAAA,IACxE;AAEA,QAAI,CAAC,KAAK,QAAQ;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB;AAAA,EAEA,oBAA8C;AAC5C,UAAM,MAAM,KAAK;AACjB,UAAM,KAAK,KAAK;AAChB,UAAM,IAAI,KAAK;AACf,QAAI,CAAC;AAAK,aAAO;AACjB,QAAI,CAAC;AAAI,aAAO;AAChB,QAAI,CAAC;AAAG,aAAO;AACf,QAAI,OAAO,SAAS;AAClB,YAAM,kBAAoC;AAAA,QACxC,MAAM;AAAA,QACN,OAAO,IAAI;AAAA,QACX,YAAY,IAAI;AAAA,QAChB,aAAa,EAAE;AAAA,QACf,gBAAgB,EAAE;AAAA,QAClB,UAAU;AAAA,MACZ;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,uBAAuB,YAA0C;AACvE,UAAM,IAAI,KAAK,cAAc,KAAK,CAACC,OAAMA,GAAE,UAAU,UAAU;AAC/D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,UAAgC;AAC3C,QAAI,gBAAgB,GAAG,QAAQ,GAAG;AAChC,WAAK,YAAY;AAAA,IACnB,OAAO;AACL,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,YAAY,KAA0B,WAAwC;AACpF,UAAM,GAAG;AACT,SAAK,aAAa;AAClB,SAAK,OAAO,IAAI;AAChB,SAAK,iBAAiB,SAAS;AAAA,EACjC;AAAA,EAEA,IAAI,gCAAuE;AACzE,WAAO,KAAK,cAAc,IAAI,uBAAuB,MAAM;AAAA,EAC7D;AAAA,EAEA,IAAI,uBAA0D;AAC5D,WAAO,KAAK,YAAY,kBAAiB,mBAAmB,CAAC;AAAA,EAC/D;AAAA,EAEA,IAAI,mBAAwD;AAC1D,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO,CAAC;AAAA,IACV;AACA,UAAM,MAAM,KAAK,UAAU,QAAQ,IAAI,qBAAqB,MAAM;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,QAA6B;AAC3B,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEQ,iBAAiB,WAAiD;AACxE,SAAK,gBAAgB;AACrB,UAAM,IAAI,KAAK,cAAc,KAAK,CAACA,OAAMA,GAAE,UAAU,KAAK,YAAY,UAAU;AAChF,QAAI,CAAC,GAAG;AACN,WAAK,YAAY;AACjB,WAAK,YAAY;AACjB,WAAK,SAAS;AACd,aAAO;AAAA,IACT;AACA,SAAK,YAAY;AACjB,UAAM,KAAK,KAAK,YAAY;AAE5B,QAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,SAAK,YAAY;AACjB,UAAM,cAAc,EAAE,QAAQ,KAAK,CAACC,QAAOA,IAAG,UAAU,KAAK,YAAY,KAAK;AAC9E,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,SAA8B;AAC5B,UAAM,OAAO,KAAK;AAClB,UAAM,aAAa,KAAK,YAAY,KAAK,UAAU,QAAQ;AAC3D,UAAM,WAAW,KAAK,YAAY,KAAK,YAAY;AACnD,UAAM,QAAQ,KAAK,SAAS,KAAK,OAAO,QAAQ;AAChD,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC9MA,IAAM,qBAAqB;AAAA,EACzB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO;AACT;AAWO,IAAM,wBAAN,MAAM,+BAA8B,cAGzC;AAAA,EACA,OAAgB,uBAAuB,CAAC,UAAwD;AAC9F,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO;AAAA,IACT;AACA,UAAM,cAAc,OAAO,KAAK,kBAAkB;AAClD,WAAO,YAAY,SAAS,KAAK;AAAA,EACnC;AAAA,EAES,aAAwC;AAAA,EACzC;AAAA,EACR,OAAO;AAAA,EACU;AAAA,EACA;AAAA,EAEjB,OAAuB,UAAU,CAC/B,KACA,iBACG;AACH,WAAO,IAAI,uBAAsB,KAAK,YAAY;AAAA,EACpD;AAAA,EACU,YAAY,KAA+B,cAA2C;AAC9F,UAAM,GAAG;AACT,SAAK,OAAO,IAAI;AAChB,SAAK,QAAQ,IAAI;AACjB,UAAM,gBAAgB,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AACxE,SAAK,cAAc,cAAc,IAAI,CAACC,SAAQ,iBAAiB,QAAQA,MAAK,YAAY,CAAC;AACzF,SAAK,gBAAgB;AAAA,EACvB;AAAA,EACA,IAAI,aAA8C;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,eAAiC;AAC/B,UAAM,gBAAgB,iBAAiB,OAAO,KAAK,aAAa;AAChE,SAAK,YAAY,KAAK,aAAa;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,WAAsC;AAEpD,UAAM,QAAQ,KAAK,YAAY,QAAQ,SAAS;AAChD,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AACA,SAAK,YAAY,OAAO,OAAO,CAAC;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,QAAkC;AAChC,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,SAAmC;AACjC,UAAM,aAAiD;AAAA,MACrD,GAAG,KAAK,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAAA,IAC3C;AACA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX;AAAA,MACA,MAAM,KAAK;AAAA,MACX,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,2BAAsD;AACpD,UAAM,OAA0B;AAAA,MAC9B,MAAM;AAAA,MACN,KAAK,CAAC;AAAA,MACN,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,IACR;AACA,UAAM,aAAiC,CAAC;AACxC,SAAK,WAAW,QAAQ,CAAC,MAAM;AAC7B,YAAM,cAAc,EAAE,kBAAkB;AACxC,UAAI,aAAa;AACf,mBAAW,KAAK,WAAW;AAAA,MAC7B;AAAA,IACF,CAAC;AACD,QAAI,KAAK,UAAU,OAAO;AACxB,aAAO,EAAE,GAAG,MAAM,KAAK,WAAW;AAAA,IACpC;AACA,QAAI,KAAK,UAAU,OAAO;AACxB,aAAO,EAAE,GAAG,MAAM,MAAM,WAAW;AAAA,IACrC;AAEA,YAAQ,IAAI,6DAA6D;AAEzE,WAAO;AAAA,EACT;AAAA,EACA,IAAI,OAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,oBAAwC;AAC/C,QAAI,uBAAsB,qBAAqB,kBAAkB,GAAG;AAClE,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AACF;;;AC3HO,IAAe,kBAAf,MAAkC;AAAA,EAgB7B,YACC,MACT,YACA;AAFS;AAGT,SAAK,uBAAuB;AAC5B,SAAK,aAAa;AAClB,SAAK,gBAAgB,KAAK,gBAAgB;AAC1C,SAAK,WAAW,KAAK,WAAW;AAChC,SAAK,eAAe,KAAK,eAAe;AAAA,EAC1C;AAAA,EAxBiB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACV;AAAA,EACP,IAAI,cAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAcF;AAEO,IAAM,yBAAN,MAAM,gCAA+B,gBAAoC;AAAA,EAC9E,OAAuB,SAAS,CAAC,SAA6B,eAAwB;AACpF,WAAO,IAAI,wBAAuB,SAAS,UAAU;AAAA,EACvD;AAAA,EACU,YAAY,MAA0B,YAAqB;AACnE,UAAM,MAAM,UAAU;AAAA,EACxB;AAAA,EACU,kBAA0B;AAClC,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEU,iBAAyB;AACjC,WAAO,KAAK,KAAK,MAAM,OAAO,KAAK,KAAK,YAAY;AAAA,EACtD;AAAA,EAEU,aAAqB;AAC7B,WAAO,KAAK,KAAK,MAAM,gBAAgB,KAAK,KAAK,YAAY;AAAA,EAC/D;AACF;AAEO,IAAM,4BAAN,MAAM,mCAAkC,gBAAqC;AAAA,EAClF,OAAc,SAAS,CAAC,gBAAqC,eAAwB;AACnF,WAAO,IAAI,2BAA0B,gBAAgB,UAAU;AAAA,EACjE;AAAA,EAEU,YAAY,MAA2B,YAAqB;AACpE,UAAM,MAAM,UAAU;AAAA,EACxB;AAAA,EACU,kBAA0B;AAClC,WAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,EAC1C;AAAA,EAEU,iBAAyB;AACjC,WAAO,KAAK,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa;AAAA,EAC9D;AAAA,EAEU,aAAqB;AAC7B,WAAO,KAAK,KAAK;AAAA,EACnB;AACF;;;ACpEO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YACW,cACA,kBACT;AAFS;AACA;AAET,SAAK,oBAAoB,oBAAI,IAAI,CAAC,GAAG,gBAAgB,CAAC;AACtD,SAAK,cAAc,aAAa,IAAI,CAAC,QAAQ;AAC3C,YAAM,aAAa,KAAK,kBAAkB,IAAI,IAAI,GAAG;AACrD,aAAO,uBAAuB,OAAO,KAAK,UAAU;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EAXiB;AAAA,EACR;AAAA,EAWT,sBAA6C;AAC3C,UAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG;AAC7F,WAAO;AAAA,EACT;AAAA,EAEA,mBAAsD;AACpD,UAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS,KAAK,UAAU;AAClE,UAAM,aAAa,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI;AAC7C,WAAO,CAAC,GAAG,UAAU;AAAA,EACvB;AACF;;;ACtBO,IAAM,oBAAN,MAAwB;AAAA,EAI7B,YACW,cACA,kBACT;AAFS;AACA;AAET,SAAK,oBAAoB,oBAAI,IAAI,CAAC,GAAG,gBAAgB,CAAC;AACtD,SAAK,cAAc,aAAa,IAAI,CAAC,QAAQ;AAC3C,YAAM,aAAa,KAAK,kBAAkB,IAAI,IAAI,MAAM;AACxD,aAAO,0BAA0B,OAAO,KAAK,UAAU;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAZiB;AAAA,EACR;AAAA,EAaT,sBAA6C;AAC3C,UAAM,WAAW,KAAK,YACnB,OAAO,CAAC,SAAS,KAAK,UAAU,EAChC,IAAI,CAAC,QAAQ,IAAI,KAAK,MAAM;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,kBAAsD;AACpD,UAAM,cAAc,KAAK,YAAY,OAAO,CAAC,SAAS,KAAK,UAAU;AACrE,UAAM,UAAU,YAAY,IAAI,CAAC,SAAS,KAAK,IAAI;AACnD,WAAO,CAAC,GAAG,OAAO;AAAA,EACpB;AACF;;;AC7BO,IAAM,sBAAN,MAA0B;AAAA,EAG/B,YACmB,cACA,kBACjB;AAFiB;AACA;AAEjB,SAAK,UAAU,aAAa,IAAI,qBAAqB,MAAM;AAC3D,SAAK,YAAY,KAAK,aAAa,gBAAgB;AAAA,EACrD;AAAA,EARS;AAAA,EACD;AAAA,EAQR,IAAI,WAAyC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,UAAwC;AACnD,SAAK,YAAY,KAAK,aAAa,QAAQ;AAAA,EAC7C;AAAA,EACA,oBAAoC;AAClC,WAAO,KAAK,YAAY,KAAK,UAAU,KAAK,SAAS;AAAA,EACvD;AAAA,EACQ,aAAa,OAA8C;AACjE,QAAI,CAAC;AAAO,aAAO;AACnB,QAAI,iBAAiB,sBAAsB;AACzC,aAAO,KAAK,QAAQ,KAAK,CAAC,MAAM,MAAM,KAAK,KAAK;AAAA,IAClD;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,WAAW,KAAK,KAAK;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AACF;;;ACVO,IAAM,cAAN,MAAM,qBAAoB,cAA8C;AAAA,EAcnE,YACS,KACA,YACjB;AACA,UAAM,GAAG;AAHQ;AACA;AAGjB,UAAM,iBAAiB,KAAK,WAAW,kBAAkB;AACzD,SAAK,OAAO,IAAI,QAAQ;AACxB,SAAK,QAAQ,IAAI,QAAQ;AACzB,SAAK,cAAc,IAAI,WAAW;AAAA,MAChC,CAAC,KAAK,SAAS;AACb,YAAI,KAAK,SAAS,aAAa;AAC7B,gBAAM,YAAY,iBAAiB,QAAQ,MAAM,cAAc;AAC/D,cAAI,KAAK,SAAS;AAAA,QACpB;AACA,YAAI,KAAK,SAAS,mBAAmB;AACnC,gBAAM,iBAAiB,sBAAsB,QAAQ,MAAM,cAAc;AACzE,cAAI,KAAK,cAAc;AAAA,QACzB;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AAEA,SAAK,qBAAqB,IAAI;AAAA,MAC5B,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAEA,SAAK,oBAAoB,IAAI,iBAAiB,WAAW,qBAAqB,IAAI,WAAW;AAE7F,SAAK,sBAAsB,IAAI;AAAA,MAC7B,WAAW;AAAA,MACX,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EA/CS,aAA6B;AAAA,EAC9B,QAA4B;AAAA,EAC7B,OAAO;AAAA;AAAA,EAEG,cAA+D,CAAC;AAAA,EAEhE;AAAA,EACT;AAAA,EACC;AAAA,EACT,OAAuB,UAAU,CAAC,KAAqB,UAAkC;AACvF,WAAO,IAAI,aAAY,KAAK,KAAK;AAAA,EACnC;AAAA,EAsCA,IAAI,aAAsE;AACxE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB;AACd,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,sBAAsB;AACpB,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,IAAI,KAAK,MAA0B;AACjC,QAAI,sBAAsB,qBAAqB,IAAI,GAAG;AACpD,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB,WAA8D;AAC5E,UAAM,QAAQ,KAAK,YAAY,QAAQ,SAAS;AAChD,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AACA,SAAK,YAAY,OAAO,OAAO,CAAC;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,eAAiC;AAC/B,UAAM,YAAY,iBAAiB,OAAO,KAAK,WAAW,kBAAkB,CAAC;AAC7E,SAAK,YAAY,KAAK,SAAS;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,oBAA2C;AACzC,UAAM,MAAgC;AAAA,MACpC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY,CAAC;AAAA,IACf;AACA,UAAM,WAAW,sBAAsB,QAAQ,KAAK,KAAK,WAAW,YAAY;AAChF,SAAK,YAAY,KAAK,QAAQ;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,QAAwB;AACtB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,SAAyB;AACvB,UAAM,aAAa,KAAK,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACzD,UAAM,eAAe,KAAK,mBAAmB,oBAAoB;AACjE,UAAM,cAAc,KAAK,kBAAkB,oBAAoB;AAC/D,UAAM,aAAa,KAAK,oBAAoB,kBAAkB;AAC9D,UAAM,MAAsB;AAAA,MAC1B,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAA6B;AAC3B,UAAM,aAA0B,CAAC;AACjC,SAAK,YAAY,QAAQ,CAAC,MAAM;AAC9B,UAAI,GAAG;AACL,YAAI,aAAa,kBAAkB;AACjC,gBAAM,kBAAkB,EAAE,kBAAkB;AAC5C,cAAI,iBAAiB;AACnB,uBAAW,KAAK,eAAe;AAAA,UACjC;AAAA,QACF;AACA,YAAI,aAAa,uBAAuB;AACtC,gBAAM,mBAAmB,EAAE,yBAAyB;AACpD,cAAI;AAAkB,uBAAW,KAAK,gBAAgB;AAAA,QACxD;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,MAAmB,CAAC;AACxB,QAAI,OAAoB,CAAC;AAEzB,QAAI,KAAK,SAAS,OAAO;AACvB,YAAM,CAAC,GAAG,UAAU;AAAA,IACtB;AACA,UAAM,iBAA2C,CAAC;AAClD,UAAM,kBAAkB,KAAK,oBAAoB;AACjD,QAAI,iBAAiB;AACnB,qBAAe,KAAK,EAAE,MAAM,cAAc,QAAQ,gBAAgB,KAAK,OAAO,CAAC;AAAA,IACjF;AAEA,UAAM,sBAAsB,KAAK,mBAAmB,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AACzF,QAAI,oBAAoB,QAAQ;AAC9B,qBAAe,KAAK,EAAE,MAAM,mBAAmB,SAAS,CAAC,GAAG,mBAAmB,EAAE,CAAC;AAAA,IACpF;AACA,UAAM,cAAc,KAAK,kBAAkB,iBAAiB,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG;AACpF,QAAI,YAAY,QAAQ;AACtB,qBAAe,KAAK,EAAE,MAAM,gBAAgB,QAAQ,CAAC,GAAG,WAAW,EAAE,CAAC;AAAA,IACxE;AAEA,UAAM,OAAqB;AAAA,MACzB,aAAa,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,CAAC;AAAA,MACZ,WAAW;AAAA,IACb;AACA,WAAO;AAAA,EACT;AACF;;;ACtLO,IAAM,YAAN,MAAgB;AAAA,EACrB,YACmB,oBACA,kBACA,gBACA,aACA,cACjB;AALiB;AACA;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAEH,IAAI,eAA4C;AAC9C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAiD;AAC/C,WAAO,CAAC,GAAG,KAAK,cAAc,GAAG,KAAK,UAAU;AAAA,EAClD;AAAA,EAEA,uBAA4D;AAC1D,WAAO,KAAK,aAAa,IAAI,qBAAqB,MAAM;AAAA,EAC1D;AAAA,EAEA,IAAI,aAAgD;AAClD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,yBAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,sBAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,oBAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AACF;;;ACrCO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YACW,OACA,OACT;AAFS;AACA;AAAA,EACR;AACL;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAEhC,YACW,OACA,OACA,SACA,YACT;AAJS;AACA;AACA;AACA;AAAA,EACR;AAAA,EANM,OAA4B;AAOvC;AAEO,IAAM,qBAAN,MAAyB;AAAA,EAE9B,YACW,OACA,OACA,SACT;AAHS;AACA;AACA;AAAA,EACR;AAAA,EALM,OAAiC;AAM5C;;;ACpBA,oBAAsB;;;ACNf,IAAM,eAAN,MAAM,cAAa;AAAA,EA8ChB,YAAoB,QAA2B;AAA3B;AAAA,EAA4B;AAAA,EA7CxD,OAAuB,aAAa;AAAA,EACpC,OAAe,YAAY;AAAA,EAC3B,OAAuB,aAAa;AAAA,EAEpC,OAAc,YAAY,CAAC,UAA2C;AACpE,WAAO,IAAI,cAAa,KAAK;AAAA,EAC/B;AAAA,EAEA,OAAc,mBAAmB,CAAC,UAAgC;AAChE,QAAI,CAAC,cAAa,QAAQ,KAAK;AAAG,YAAM,IAAI,MAAM,gBAAgB;AAClE,WAAO,IAAI,cAAa,KAAK;AAAA,EAC/B;AAAA,EACA,OAAc,aAAa,CAAC,UAAwC;AAClE,QAAI,CAAC,cAAa,QAAQ,KAAK;AAAG,aAAO;AACzC,WAAO,IAAI,cAAa,KAAK;AAAA,EAC/B;AAAA,EACA,OAAc,qBAAqB,CAAC,UAAgC;AAClE,UAAM,IAAI,cAAa,QAAQ,KAAK,IAChC,QACA,mBAAsC,cAAa,SAAS;AAChE,WAAO,IAAI,cAAa,CAAC;AAAA,EAC3B;AAAA,EAEA,OAAc,UAAU,CAAC,WAAsD;AAC7E,QAAI,OAAO,WAAW;AAAU,aAAO;AACvC,QAAI,OAAO,SAAS,cAAa;AAAY,aAAO;AACpD,QAAI,OAAO,SAAS,cAAa;AAAY,aAAO;AACpD,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,cAAa,QAAQ,KAAK,MAAM;AAAA,EACzC;AAAA,EAEA,IAAI,MAAM,OAAe;AACvB,UAAM,SAAS;AACf,QAAI,OAAO,WAAW,UAAU;AAC9B,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAGF;;;AChDO,IAAM,qBAAqB,CAAyB,WAAsB;AAC/E,QAAM,UAAU;AAChB,QAAM,MAAM,UAAU,QAAQ,YAAY;AAC1C,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,OAAO,IAAI,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM,CAAC;AAC9D,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAEO,IAAM,aAAN,MAAM,YAAW;AAAA,EA2Cd,YAAoB,QAAyB;AAAzB;AAAA,EAA0B;AAAA,EA1CtD,OAAuB,aAAa;AAAA,EACpC,OAAe,YAAY;AAAA,EAC3B,OAAuB,aAAa;AAAA,EAEpC,OAAc,SAAS,MAAkB;AACvC,UAAM,IAAI,mBAAoC,YAAW,SAAS;AAClE,WAAO,IAAI,YAAW,CAAC;AAAA,EACzB;AAAA,EACA,OAAc,aAAa,CAAC,UAAsC;AAChE,QAAI,CAAC,YAAW,QAAQ,KAAK;AAAG,aAAO;AACvC,WAAO,IAAI,YAAW,KAAK;AAAA,EAC7B;AAAA,EAEA,OAAc,oBAAoB,CAAC,UAAmC;AACpE,QAAI,CAAC,YAAW,QAAQ,KAAK;AAAG,YAAM,IAAI,MAAM,gBAAgB;AAChE,WAAO;AAAA,EACT;AAAA,EACA,OAAc,qBAAqB,CAAC,UAA8B;AAChE,UAAM,IAAI,YAAW,QAAQ,KAAK,IAC9B,QACA,mBAAoC,YAAW,SAAS;AAC5D,WAAO,IAAI,YAAW,CAAC;AAAA,EACzB;AAAA,EAEA,OAAc,UAAU,CAAC,WAAoD;AAC3E,QAAI,OAAO,WAAW;AAAU,aAAO;AACvC,QAAI,OAAO,SAAS,aAAa;AAAY,aAAO;AACpD,WAAO,OAAO,UAAU,aAAa;AAAA,EACvC;AAAA,EAEA,IAAI,QAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,OAAe;AACvB,QAAI,CAAC,YAAW,QAAQ,KAAK,GAAG;AAC9B,cAAQ,IAAI,kBAAkB,KAAK;AAAA,IACrC,OAAO;AACL,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAGF;;;ACpDO,IAAM,QAAQ;AAAA,EACnB,QAAQ,CAAC,cAAiC,eAAuC;AAC/E,UAAM,QAAQ,eAAe,MAAM;AACnC,WAAO;AAAA,EACT;AACF;;;AHsBO,IAAM,cAAN,MAAM,qBAAoB,cAA8C;AAAA,EACpE,aAA6B;AAAA,EAC7B;AAAA,EACD;AAAA,EACA;AAAA,EACS;AAAA,EACT,mBAAmB;AAAA,EACnB,uBAQJ,oBAAI,IAAI;AAAA,EAEZ,YAA+D;AAAA,EAC/D;AAAA,EACA;AAAA,EACA,aAAa,cAAc,OAAO,IAAI,OAAO;AAAA,EAE7C,OAAc,OAAO,MAAuB,SAA0B;AACpE,UAAM,KAAK,OAAO,OAAO;AACzB,UAAM,cAAkC;AAAA,MACtC,MAAM;AAAA,MACN,WAAW;AAAA,MACX,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AACA,UAAM,gBAAgB,cAAc,OAAO,IAAI,uBAAuB,EAAE,OAAO;AAC/E,UAAM,qBAAqB,gBAAgB,OAAO,YAAY,EAAE,OAAO;AAEvE,UAAM,MAAsB;AAAA,MAC1B,OAAO;AAAA,MACP,kBAAkB,CAAC;AAAA,MACnB,iBAAiB;AAAA,MACjB;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,qBAAqB,CAAC;AAAA,MACtB,MAAM,CAAC;AAAA,IACT;AAEA,UAAM,OAAO,IAAI,aAAY,GAAG;AAChC,WAAO;AAAA,EACT;AAAA,EACA,OAAc,SAAS,KAAkC;AACvD,UAAM,OAAO,IAAI,aAAY,GAAG;AAChC,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,KAAqB;AACvC,UAAM,GAAG;AACT,SAAK,KAAK,IAAI;AACd,SAAK,YAAY,IAAI;AACrB,UAAM,iBAAiB,WAAW,mBAAmB,IAAI,MAAM;AAC/D,SAAK,UAAU;AACf,SAAK,WAAW,gBAAgB,SAAS,IAAI,QAAQ;AACrD,SAAK,aAAa,cAAc,SAAS,IAAI,UAAU;AACvD,SAAK,kBAAkB,gBAAgB,SAAS,IAAI,eAAe;AACnE,UAAM,UAAoB,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC;AAChE,UAAM,YAAY,MAAM,QAAQ,IAAI,mBAAmB,IAAI,IAAI,sBAAsB,CAAC;AACtF,cAAU,QAAQ,CAAC,SAAS;AAC1B,WAAK,qBAAqB,IAAI,KAAK,oBAAoB;AAAA,QACrD,oBAAoB,KAAK;AAAA,QACzB,QAAQ,KAAK;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AACD,SAAK,QAAQ,IAAI,IAAI,OAAO;AAC5B,QAAI,IAAI,WAAW;AACjB,WAAK,YAAY,IAAI;AAAA,IACvB;AAAA,EACF;AAAA,EAEO,OAAO,KAAa;AACzB,SAAK,MAAM,IAAI,GAAG;AAAA,EACpB;AAAA,EACO,UAAU,KAAa;AAC5B,SAAK,MAAM,OAAO,GAAG;AAAA,EACvB;AAAA,EAEA,IAAI,SAAS,OAAwB;AACnC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IAAI,sBAAsB;AACxB,WAAO,CAAC,GAAG,KAAK,qBAAqB,OAAO,CAAC;AAAA,EAC/C;AAAA,EAEA,qBACE,cACA,YACqC;AACrC,UAAM,YAAoC,CAAC;AAE3C,QAAI,KAAK,cAAc,YAAY;AACjC,YAAM,aAAa,KAAK;AACxB,YAAM,QAAQ,MAAM,OAAO,aAAa,OAAO,UAAU;AACzD,YAAM,QAAQ,KAAK,SAAS;AAC5B,YAAM,KAAK,KAAK,gBAAgB,QAAQ,IAAI,CAAC,MAAM;AACjD,cAAMC,SAAQ,EAAE;AAChB,cAAM,QAAQ,EAAE;AAChB,eAAO,IAAI,mBAAmBA,QAAO,KAAK;AAAA,MAC5C,CAAC;AACD,YAAM,YAAY,IAAI,qBAAqB,OAAO,OAAO,IAAI,UAAU;AACvE,gBAAU,KAAK,SAAS;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAA8B;AAChC,WAAO,CAAC,GAAG,KAAK,KAAK;AAAA,EACvB;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO,OAAwB;AACjC,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA;AAAA,EAGA,oBAAoB,kBAAoC,QAAgB;AACtE,UAAM,EAAE,IAAI,MAAM,YAAY,IAAI;AAElC,SAAK,qBAAqB,IAAI,iBAAiB,IAAI;AAAA,MACjD,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,oBAAoB,WAA4C;AAC9D,cAAU,QAAQ,CAAC,MAAM;AACvB,YAAM,gBAAgB,KAAK,qBAAqB,IAAI,EAAE,EAAE;AACxD,UAAI,eAAe;AACjB,aAAK,oBAAoB,GAAG,cAAc,MAAM;AAAA,MAClD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,SAAyB;AACvB,UAAM,WAAW,KAAK,SAAS,OAAO;AACtC,UAAM,aAAa,KAAK,WAAW,OAAO;AAC1C,UAAM,YAAY,KAAK;AACvB,UAAM,sBAAsB,KAAK,oBAAoB,IAAI,CAAC,EAAE,oBAAoB,OAAO,OAAO;AAAA,MAC5F;AAAA,MACA;AAAA,IACF,EAAE;AACF,UAAM,MAAsB;AAAA,MAC1B,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,kBAAkB,CAAC;AAAA,MACnB;AAAA,MACA,IAAI,KAAK;AAAA,MACT,MAAM,CAAC,GAAG,KAAK,IAAI;AAAA,MACnB;AAAA,MACA,QAAQ,KAAK,QAAQ;AAAA,MACrB,iBAAiB,KAAK,gBAAgB,OAAO;AAAA,IAC/C;AACA,QAAI,WAAW;AACb,UAAI,YAAY;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAwB;AACtB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,uBAAuB,KAAK,gBAAgB,MAAM;AACxD,UAAM,gBAAgB,KAAK,MAAM,KAAK,UAAU,KAAK,QAAQ,CAAC;AAC9D,UAAM,QAAQ,OAAO,OAAO;AAC5B,UAAM,QAAwB;AAAA,MAC5B,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACZ;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,gBAAgB,OAAe;AACjC,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,mBAAmB;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,YAAgC;AACpD,WAAO,KAAK,qBAAqB,IAAI,UAAU;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,oBAAwC;AAC7D,SAAK,qBAAqB,OAAO,kBAAkB;AAAA,EACrD;AACF;;;AItPO,IAAe,wBAAf,MAAkD;AAAA,EAC7C,YAA+B,OAAoB;AAApB;AAAA,EAAqB;AAEhE;;;ACHO,IAAU;AAAA,CAAV,CAAUC,gBAAV;AACE,EAAMA,YAAA,eAAe,CAC1B,OACA,UAAwE;AAAA,IACtE,SAAS;AAAA,IACT,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB,MACqB;AACrB,UAAM,UAAU,SAAS,WAAW;AACpC,UAAM,QAAQ,SAAS,SAAS;AAChC,UAAM,QAAQ,KAAK,IAAI,QAAQ,OAAO;AACtC,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,CAAC;AAAA,IACV;AACA,UAAM,cAAc,MAAM,SAAS;AACnC,UAAM,eAAe,QAAQ,oBAAoB,MAAM;AAEvD,QAAI,uBAAuB,MAAM,OAAO,CAAC,MAAM,SAAS;AACtD,YAAM,IAAI,KAAK,MAAM,KAAK;AAC1B,aAAO,OAAO;AAAA,IAChB,GAAG,CAAC;AAEJ,QAAI,SAAS;AACb,UAAM,OAAO,KAAK,IAAI,QAAQ,sBAAsB,CAAC;AACrD,UAAM,SAAS,OAAO;AAEtB,UAAM,QAAQ,CAAC,SAAS;AACtB,eAAS,SAAS;AAClB,YAAM,IAAI,KAAK,MAAM,KAAK;AAC1B,YAAM,IAAI;AACV,eAAS,SAAS;AAClB,WAAK,MAAM,IAAI;AACf,WAAK,MAAM,IAAI;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,EACT;AAEO,EAAMA,YAAA,UAAU,OAAwC;AAAA,IAC7D,GAAG;AAAA,IACH,WAAW;AAAA,EACb;AACO,EAAMA,YAAA,UAAU,OAAwC;AAAA,IAC7D,GAAG;AAAA,IACH,WAAW;AAAA,EACb;AAEO,EAAMA,YAAA,WAAW,OAA8C;AAAA,IACpE,GAAG;AAAA,IACH,GAAG;AAAA,IACH,WAAW;AAAA,EACb;AAAA,GApDe;;;ACHV,IAAM,WAAW;AAAA,EACtB,cACE;AAAA,EACF,UACE;AAAA,EACF,uBACE;AAAA,EAEF,sBACE;AAAA,EACF,mBACE;AAAA,EACF,cACE;AAAA,EACF,mBACE;AAAA,EAEF,eACE;AAAA,EACF,SACE;AAAA,EACF,iBACE;AAAA,EAEF,cACE;AAAA,EACF,aACE;AACJ;;;AC4BA,IAAU;AAAA,CAAV,CAAUC,wBAAV;AACE,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,SAAS;AACf,QAAM,MAAM;AACZ,QAAM,aAAa;AACnB,QAAM,QAAQ;AACd,QAAM,OAAO;AACb,QAAM,YAAY;AAClB,QAAM,mBAAmB;AACzB,QAAM,oBAAoB;AAC1B,QAAM,mBAA0C;AAChD,QAAM,aAAa;AACnB,QAAM,kBAAkB;AACxB,QAAM,cAAoC;AAC1C,QAAM,YAA8B;AAE7B,EAAMA,oBAAA,aAAa,MAA0B;AAClD,UAAM,cAAkC;AAAA,MACtC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,KAAK;AAAA,UACH,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb,WAAW;AAAA,YACX,UAAU,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,YAC1C,aAAa,EAAE,OAAO,MAAM,OAAO,iBAAiB;AAAA,YACpD,aAAa;AAAA,YACb,cAAc,EAAE,OAAO,mBAAmB,OAAO,KAAK;AAAA,YACtD,SAAS,EAAE,OAAO,MAAM,OAAO,GAAG;AAAA,YAClC,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,WAAW;AAAA,UACb;AAAA,UACA,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,UACnD,YAAY,EAAE,SAAS,GAAG,QAAQ,UAAU;AAAA,QAC9C;AAAA,QACA,SAAS,CAAC;AAAA,QACV,OAAO;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG;AAAA,UACH,YAAY;AAAA,UACZ,WAAW;AAAA,QACb;AAAA,QACA,OAAO,CAAC;AAAA,MACV;AAAA,MAEA,UAAU;AAAA,QACR,KAAK;AAAA,UACH,KAAK;AAAA,YACH,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb,WAAW;AAAA,YACX,UAAU,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,YAC1C,aAAa,EAAE,OAAO,MAAM,OAAO,iBAAiB;AAAA,YACpD,aAAa;AAAA,YACb,cAAc,EAAE,OAAO,mBAAmB,OAAO,KAAK;AAAA,YACtD,SAAS,EAAE,OAAO,MAAM,OAAO,GAAG;AAAA,YAClC,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,WAAW;AAAA,UACb;AAAA,UACA,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,UACnD,YAAY,EAAE,SAAS,GAAG,QAAQ,UAAU;AAAA,QAC9C;AAAA,QACA,OAAO;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU,EAAE,OAAO,MAAM,OAAO,UAAU;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG;AAAA,UACH,YAAY;AAAA,UACZ,WAAW;AAAA,QACb;AAAA,QACA,OAAO,CAAC;AAAA,QACR,SAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,GA1FQ;AA6FH,IAAM,eAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,IACX,YAAY;AAAA,MACV,SAAS,SAAS;AAAA,MAClB,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;AAAA,MAC/B,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,MACnD,YAAY,EAAE,SAAS,KAAK,QAAQ,UAAU;AAAA,IAChD;AAAA,IACA,aAAa;AAAA,MACX,SAAS,SAAS;AAAA,MAClB,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;AAAA,MAC/B,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,MACnD,YAAY,EAAE,SAAS,KAAK,QAAQ,UAAU;AAAA,IAChD;AAAA,IACA,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE;AAAA,EACtD;AAAA,EACA,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,EAAE;AAAA,EACxC,UAAU;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,QACJ,KAAK;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU,EAAE,OAAO,MAAM,OAAO,GAAG;AAAA,QACrC;AAAA,QACA,aAAa,CAAC;AAAA,QACd,YAAY,CAAC;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,KAAK;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QACA,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,QACnD,YAAY,EAAE,SAAS,KAAK,QAAQ,UAAU;AAAA,MAChD;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,QACJ,KAAK;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU,EAAE,OAAO,MAAM,OAAO,GAAG;AAAA,QACrC;AAAA,QACA,aAAa,CAAC;AAAA,QACd,YAAY,CAAC;AAAA,MACf;AAAA,MACA,OAAO;AAAA,QACL,KAAK;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QACA,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc;AAAA,QACnD,YAAY,EAAE,SAAS,KAAK,QAAQ,UAAU;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB,mBAAmB,WAAW;AAAA,EAC/C,iBAAiB,mBAAmB,WAAW;AACjD;;;ACzNA,IAAAC,iBAcO;AAKA,IAAM,uBAAN,cAAmC,sBAAqC;AAAA,EACpE,OAAO;AAAA,EACC,MAAM;AAAA,EACvB,cAAc;AACZ,UAAM,YAAY;AAAA,EACpB;AAAA,EAEQ,aAAa,QAA4D;AAC/E,UAAM,gBAAgB,cAAc,SAAS,MAAM;AACnD,UAAM,YAAY,cAAc,aAAa;AAC7C,UAAM,eAAiD,CAAC;AACxD,WAAO,MAAM,QAAQ,CAAC,SAAS;AAC7B,YAAM,aAAa,YAAY,QAAQ,MAAM,SAAS,EAAE,aAAa;AACrE,UAAI,CAAC,oBAAK,QAAQ,UAAU,GAAG;AAC7B,qBAAa,KAAK,UAAU;AAAA,MAC9B,OAAO;AACL,gBAAQ,IAAI,KAAK,KAAK,6BAA6B,KAAK,OAAO,MAAM,KAAK,IAAI;AAAA,MAChF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,QAAqC;AAC3C,UAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,MAAM,KAAK,YAAY,GAAG,OAAO,MAAM,CAAC;AACxE,UAAM,QAAQ,KAAK,aAAa,MAAM;AAEtC,UAAM,MAAiB;AAAA,MACrB,iBAAiB,OAAO;AAAA,MACxB,YAAY,OAAO;AAAA,MACnB,WAAW,OAAO;AAAA,MAClB,IAAI,OAAO;AAAA,MACX,eAAe,CAAC;AAAA,MAChB;AAAA,MACA,iBAAiB,CAAC;AAAA,MAClB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,MAAsB,cAA+B;AACvE,UAAM,OAAO,KAAK,QAAQ,CAAC;AAC3B,UAAM,EAAE,YAAY,UAAU,IAAI,WAAW,OAAO,OAAO,IAAI;AAC/D,UAAM,iBAAgC,CAAC;AACvC,QAAI,oBAAsD,CAAC;AAC3D,QAAI,uBAAyD,CAAC;AAC9D,UAAM,UAAmB;AAAA,MACvB,YAAY;AAAA,MACZ,YAAY,CAAC;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,CAAC;AAAA,MACf,MAAM,CAAC,GAAG,IAAI;AAAA,IAChB;AAEA,QAAI,KAAK,SAAS,WAAW;AAC3B,YAAM,WAAW,KAAK,SAAS;AAC/B,YAAM,gBAAgB,KAAK,SAAS;AACpC,YAAM,MAAM,KAAK,qBAAqB,KAAK,SAAS,WAAW,UAAU,aAAa;AACtF,0BAAoB,CAAC,GAAG,IAAI,YAAY;AACxC,cAAQ,WAAW,KAAK,GAAG,IAAI,UAAU;AAAA,IAC3C;AAEA,QAAI,UAAU,YAAY;AACxB,YAAM,aAAa,eAAe,MAAM,KAAK;AAC7C,YAAM,EAAE,YAAY,SAAS,IAAI,KAAK,gBAAgB,IAAI,MAAM,UAAU;AAC1E,cAAQ,WAAW,KAAK,GAAG,UAAU;AACrC,cAAQ,eAAe,KAAK,QAAQ;AAAA,IAGtC;AAEA,QAAI,UAAU,aAAa;AACzB,YAAM,WAAW,SAAS;AAC1B,YAAM,sBAAsB,KAAK,cAAc,YAAY;AAAA,QACzD,MAAM;AAAA,MACR,CAAC;AAED,YAAM,YAAY,YACd,aAAa,SAAS,UAAU,KAAK,MACrC,aAAa,SAAS,QAAQ,KAAK;AACvC,YAAM,kBAA+B;AAAA,QACnC,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AACA,cAAQ,eAAe,KAAK,eAAe;AAC3C,cAAQ,WAAW,KAAK,mBAAmB;AAAA,IAC7C;AACA,QAAI,aAAa,UAAU,SAAS,cAAc;AAChD,YAAM,mBAAmB,KAAK,aAAa,SAAS;AACpD,cAAQ,eAAe,KAAK,gBAAgB;AAAA,IAC9C;AAEA,QAAI,aAAa,UAAU,SAAS,cAAc;AAChD,YAAM,cAAc,KAAK,aAAa,SAAS;AAC/C,cAAQ,cAAc,YAAY;AAClC,cAAQ,WAAW,KAAK,GAAG,YAAY,UAAU;AACjD,6BAAuB,CAAC,GAAG,YAAY,aAAa;AAAA,IACtD;AAGA,YAAQ,aAAa,KAAK,GAAG,oBAAoB;AACjD,YAAQ,aAAa,KAAK,GAAG,iBAAiB;AAC9C,UAAM,QAAQ,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAChD,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,OAA4B;AAC/C,UAAM,MAAe;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,KAAK,MAAM,MAAM;AAAA,MACxB,KAAK,MAAM,KAAK;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,qBACN,WACA,UACA,eAIA;AACA,UAAM,IAAI,KAAK,MAAM;AACrB,UAAM,UAAU,UAAU;AAC1B,UAAM,UACJ;AAEF,UAAM,oBAA6B;AAAA,MACjC,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO,EAAE,GAAG,EAAE,UAAU,MAAM,IAAI;AAAA,IACpC;AAEA,UAAM,OAAsB;AAAA,MAC1B;AAAA,MACA,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,KAAK,UAAU;AAAA,IACjB;AAEA,QAAI,oBAAsD,CAAC;AAC3D,QAAI,UAAU;AACZ,YAAM,gBAA+B,EAAE,GAAG,MAAM,UAAU,eAAe;AACzE,0BAAoB,CAAC,aAAa;AAClC,UAAI,gBAAgB,GAAG;AACrB,cAAM,YAAuB;AAAA,UAC3B,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,gBAAgB;AAAA,QAClB;AACA,4BAAoB,CAAC,WAAW,aAAa;AAAA,MAC/C;AAAA,IACF;AAEA,UAAM,UAA4B;AAAA,MAChC,IAAI;AAAA,MACJ,SAAS,EAAE,MAAM,cAAc,KAAK;AAAA,IACtC;AAEA,WAAO,EAAE,YAAY,CAAC,OAAO,GAAG,cAAc,CAAC,GAAG,iBAAiB,EAAE;AAAA,EACvE;AAAA,EAEQ,aAAa,OAInB;AACA,UAAM,IAAI,KAAK,MAAM;AACrB,UAAM,OAAO,MAAM;AACnB,UAAM,aAAiC,CAAC;AAExC,QAAI,gBAAkD,CAAC;AAEvD,QAAI,oBAA2C;AAC/C,QAAI,oBAAuC;AAE3C,UAAM,iBAAgC;AAAA,MACpC,MAAM;AAAA,MACN,KAAK,MAAM,KAAK;AAAA,MAChB,SAAS,MAAM,KAAK;AAAA,MACpB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,MAAM,SAAS;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAEA,QAAI,MAAM,SAAS,cAAc,MAAM,SAAS,YAAY;AAC1D,0BAAoB,EAAE,GAAG,gBAAgB,UAAU,eAAe;AAClE,sBAAgB,CAAC,iBAAiB;AAClC,UAAI,MAAM,WAAW,GAAG;AACtB,4BAAoB;AAAA,UAClB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU,MAAM;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,gBAAgB;AAAA,QAClB;AACA,wBAAgB,CAAC,mBAAmB,iBAAiB;AAAA,MACvD;AAAA,IACF;AAEA,UAAM,cAAsC;AAAA,MAC1C,SAAS,MAAM,KAAK;AAAA,MACpB,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG;AAAA,IACtC;AACA,UAAM,aAA+B;AAAA,MACnC,IAAI;AAAA,QACF,MAAM;AAAA,QACN,KAAK,EAAE,WAAW;AAAA,QAClB,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,WAAW;AAAA,MAC3D;AAAA,MACA,SAAS,EAAE,MAAM,cAAc,MAAM,eAAe;AAAA,MACpD,eAAe,EAAE,YAAY,SAAS;AAAA,MACtC,iBAAiB,EAAE,YAAY,UAAU;AAAA,IAC3C;AACA,UAAM,WAA6B;AAAA,MACjC,IAAI;AAAA,QACF,MAAM;AAAA,QACN,OAAO;AAAA,UACL,GAAG,EAAE,YAAY;AAAA,UACjB,YAAY;AAAA,UACZ,GAAG,EAAE,YAAY;AAAA,QACnB;AAAA,QACA,KAAK,EAAE,YAAY;AAAA,MACrB;AAAA,MACA,SAAS,EAAE,MAAM,cAAc;AAAA,MAC/B,eAAe,EAAE,YAAY,UAAU;AAAA,MACvC,iBAAiB,EAAE,YAAY,SAAS;AAAA,IAC1C;AAEA,QAAI,SAAS,YAAY;AACvB,iBAAW,KAAK,UAAU;AAC1B,iBAAW,KAAK,QAAQ;AAAA,IAC1B;AACA,WAAO,EAAE,aAAa,YAAY,eAAe,CAAC,GAAG,aAAa,EAAE;AAAA,EACtE;AAAA,EACQ,gBACN,QACA,MACA,YAIA;AAGA,UAAM,IAAI,KAAK;AACf,UAAM,OAAO,KAAK,SAAS;AAC3B,UAAM,gBAAgB,KAAK,YACvB,aAAa,SAAS,UAAU,KAAK,MACrC,aAAa,SAAS,QAAQ,KAAK;AACvC,UAAM,WAAqB;AAAA,MACzB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AACA,UAAM,UAA8B,EAAE,QAAQ,IAAI,CAAC,MAAM;AACvD,YAAM,OAAO,KAAK,cAAc,GAAG;AAAA,QACjC,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AACD,UAAM,eAAe,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE;AAC5C,eAAW,aAAa,YAAY;AACpC,WAAO,EAAE,UAAU,YAAY,QAAQ;AAAA,EACzC;AAAA,EAEQ,cACN,WACA,SAGkB;AAClB,UAAM,EAAE,IAAI,OAAO,MAAM,IAAI;AAC7B,UAAM,gBACJ,QAAQ,SAAS,oBACb;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,aAAa,QAAQ;AAAA,QACrB,gBAAgB,QAAQ;AAAA,MAC1B;AAAA,IACF,IACA,EAAE,MAAM,YAAY;AAE1B,UAAM,YACJ,UAAU,IAAI,aAAa,gBAAgB,WAAW,aAAa,gBAAgB;AACrF,UAAM,MAAe;AAAA,MACnB,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MACA,OAAO,EAAE,GAAG,UAAU,IAAI,KAAK,GAAG,UAAU,IAAI,WAAW;AAAA,IAC7D;AAEA,QAAI,QAAQ,SAAS,eAAe;AAClC,UAAI,MAAM,IAAI;AACd,UAAI,MAAM,IAAI;AACd,UAAI,MAAM,YAAY;AAAA,IACxB;AACA,UAAM,YAA8B;AAAA,MAClC,IAAI;AAAA,MACJ,SAAS;AAAA,IACX;AACA,WAAO;AAAA,EACT;AACF;;;ACtVA,IAAAC,iBAAsB;;;ACLtB,IAAM,WAAW,CACf,MACA,mBACA,cACA,iBAC+B;AAC/B,QAAM,YAAwC,CAAC;AAE/C,MAAI,KAAK,UAAU,YAAY;AAE7B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAA+C,KAAK,gBAAgB,QAAQ,IAAI,CAAC,MAAM;AAC3F,WAAO,EAAE,OAAO,EAAE,OAAO,OAAO,EAAE,MAAM;AAAA,EAC1C,CAAC;AAED,QAAM,QAAQ,eAAe,MAAM,KAAK;AAExC,QAAM,sBAAsB,KAAK,oBAAoB,OAAO,CAAC,MAAM,IAAI;AAEvE,QAAM,WAAqC;AAAA,IACzC,MAAM;AAAA,IACN,OAAO,KAAK,SAAS;AAAA,IACrB,QAAQ,KAAK;AAAA,IACb,YAAY,KAAK;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,qBAAqB,CAAC;AAAA,EACxB;AAEA,YAAU,KAAK,QAAQ;AAEvB,SAAO;AACT;AAQA,IAAM,4BAA4B,CAChC,OACA,mBACA,iBAC+B;AAC/B,QAAM,YAAwC,CAAC;AAC/C,QAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,UAAM,gBAAgB,SAAS,MAAM,mBAAmB,OAAO,YAAY;AAC3E,cAAU,KAAK,GAAG,aAAa;AAAA,EACjC,CAAC;AACD,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,WAAuC;AACzD,QAAM,eAAe,OAAO;AAC5B,QAAM,oBAAoB,OAAO,qBAAqB,CAAC;AACvD,QAAM,gBAAgB,0BAA0B,OAAO,OAAO,mBAAmB,YAAY;AAC7F,QAAM,KAAK,OAAO;AAClB,QAAM,sBAAoD,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;AAC1E,SAAO,EAAE,eAAe,oBAAoB;AAC9C;AAEO,IAAM,YAAY;AAAA,EACvB;AACF;AAEO,IAAM,WAAW,OAAO,OAAO,SAAS;;;AClExC,IAAM,eAAe;AAAA,EAC1B,YAAY,CAAC,WAA2C;AACtD,UAAM,YAAY,OAAO,uBAAuB,CAAC;AACjD,WAAO;AAAA,MACL,UAAU,OAAO;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;;;ACtBA,IAAAC,iBAAsB;AASf,IAAM,mBAAN,MAAM,0BAAyB,cAGpC;AAAA,EACS,aAAa;AAAA,EACb;AAAA,EACD,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,SAAS;AAAA,EACT,UAAsC,CAAC;AAAA;AAAA,EAE/C,IAAI,SAAS;AACX,WAAO,CAAC,GAAG,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA,EAGA,OAAuB,SAAS,CAAC,SAIT;AACtB,UAAM,KAAK,mBAAmB,OAAO;AACrC,WAAO,IAAI,kBAAiB,EAAE,IAAI,GAAG,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EAEA,OAAc,UAAU,CAAC,QAA+C;AACtE,WAAO,IAAI,kBAAiB,GAAG;AAAA,EACjC;AAAA,EAEQ,YAAY,KAA0B;AAC5C,UAAM,GAAG;AACT,SAAK,KAAK,IAAI;AACd,SAAK,QAAQ,IAAI;AACjB,SAAK,UAAU,IAAI;AACnB,SAAK,eAAe,IAAI;AAAA,EAC1B;AAAA,EACA,SAA8B;AAC5B,UAAM,MAA2B;AAAA,MAC/B,aAAa,KAAK;AAAA,MAClB,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA,EACA,QAA6B;AAC3B,UAAM,KAAK,mBAAmB,OAAO;AACrC,UAAM,MAAM,KAAK,OAAO;AACxB,WAAO,EAAE,GAAG,KAAK,GAAG;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ,MAAiE;AACvE,UAAM,IAAI,QAAQ,CAAC;AACnB,QAAI,qBAAM,SAAS,EAAE,IAAI,GAAG;AAC1B,WAAK,QAAQ,EAAE;AAAA,IACjB;AACA,QAAI,qBAAM,SAAS,EAAE,WAAW,GAAG;AACjC,WAAK,eAAe,EAAE;AAAA,IACxB;AACA,QAAI,qBAAM,OAAO,EAAE,MAAM,GAAG;AAC1B,WAAK,UAAU,EAAE;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAA8B;AACtC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAEA,gBAAgB,OAAsB;AACpC,SAAK,UAAU,CAAC,GAAG,KAAK;AAAA,EAC1B;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AACF;;;AClGO,IAAM,6BAAN,MAAM,4BAAiE;AAAA,EACpE,OAAgC,CAAC;AAAA,EAEzC,CAAC,OAAO,QAAQ,IAAI;AAClB,UAAM,OAAO,CAAC,GAAG,KAAK,IAAI;AAC1B,WAAO,KAAK,OAAO,QAAQ,EAAE;AAAA,EAC/B;AAAA,EAEA,UAA2C;AACzC,WAAO,CAAC,GAAG,KAAK,IAAI;AAAA,EACtB;AAAA,EAEA,OAAuB,SAAS,CAC9B,cAC+B;AAC/B,WAAO,IAAI,4BAA2B,SAAS;AAAA,EACjD;AAAA,EAEQ,YAAY,mBAA2C;AAC7D,UAAM,MAAM,MAAM,QAAQ,iBAAiB,IAAI,oBAAoB,CAAC;AACpE,SAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,iBAAiB,QAAQ,GAAG,CAAC;AAC1D,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,KAAK,WAAkC;AACrC,SAAK,OAAO,UAAU,IAAI,CAAC,aAAa,iBAAiB,QAAQ,QAAQ,CAAC;AAC1E,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,OAAO,SAAiE;AAEtE,UAAM,cAAc,iBAAiB,OAAO,EAAE,GAAG,QAAQ,CAAC;AAC1D,SAAK,KAAK,KAAK,WAAW;AAC1B,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,KAAK,OAAO,CAAC,aAAa,SAAS,SAAS,EAAE;AAAA,EAC5D;AAAA,EAEA,SAAS;AACP,WAAO,KAAK,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,IAAwB;AACtC,UAAM,cAAc,KAAK,KAAK;AAC9B,SAAK,OAAO,KAAK,KAAK,OAAO,CAAC,aAAa,SAAS,OAAO,EAAE;AAC7D,SAAK,eAAe;AACpB,WAAO,gBAAgB,KAAK,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,WACE,IACA,SACS;AACT,UAAM,WAAW,KAAK,KAAK,KAAK,CAACC,cAAaA,UAAS,OAAO,EAAE;AAChE,QAAI,UAAU;AACZ,eAAS,QAAQ,OAAO;AACxB,WAAK,eAAe;AACpB,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,iBAAiB,IAAsD;AACrE,WAAO,KAAK,KAAK,KAAK,CAAC,aAAa,SAAS,OAAO,EAAE;AAAA,EACxD;AAAA,EAEQ,iBAAiB;AACvB,UAAM,UAAU,oBAAI,IAAgC;AACpD,SAAK,KAAK,QAAQ,CAAC,MAAM;AACvB,YAAM,QAAQ,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC;AACtC,YAAM,KAAK,CAAC;AACZ,cAAQ,IAAI,EAAE,MAAM,KAAK;AAAA,IAC3B,CAAC;AACD,YAAQ,QAAQ,CAAC,kBAAkB;AACjC,oBAAc,QAAQ,CAAC,iBAAiB;AACtC,YAAI,cAAc,SAAS,GAAG;AAC5B,uBAAa,UAAU,gBAAgB;AAAA,QACzC,OAAO;AACL,uBAAa,UAAU,EAAE;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;AC3FO,IAAM,aAAN,MAAM,oBAAmB,cAA4C;AAAA,EACjE,aAA4B;AAAA,EAC5B;AAAA,EACT,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,OAAuB,aAAa;AAAA,EACpC,OAAuB,aAAa;AAAA,EAEpC,OAAuB,SAAS,CAAC,KAAa,cAAsB,OAAO;AACzE,UAAM,KAAK,MAAM,OAAO;AACxB,UAAM,MAAqB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI,YAAW,GAAG;AAAA,EAC3B;AAAA,EACA,OAAuB,UAAU,CAAC,QAAuB;AACvD,WAAO,IAAI,YAAW,GAAG;AAAA,EAC3B;AAAA,EACU,YAAY,KAAoB;AACxC,UAAM,KAAK,MAAM,iBAAiB,IAAI,EAAE;AACxC,UAAM,SAAS,EAAE,GAAG,KAAK,GAAG;AAC5B,UAAM,MAAM;AACZ,SAAK,KAAK;AACV,SAAK,UAAU,IAAI,OAAO;AAC1B,SAAK,iBAAiB,IAAI,eAAe;AAAA,EAC3C;AAAA,EACA,QAAuB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,SAAwB;AACtB,WAAO,EAAE,KAAK,KAAK,SAAS,aAAa,KAAK,gBAAgB,IAAI,KAAK,GAAG;AAAA,EAC5E;AACF;;;AC1CO,IAAM,gBAAN,MAAM,eAA8C;AAAA,EACxC,QAAQ,oBAAI,IAAgB;AAAA,EAC7C,OAAuB,SAAS,MAAM;AACpC,WAAO,IAAI,eAAc,CAAC,CAAC;AAAA,EAC7B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAI;AAClB,UAAM,OAAO,CAAC,GAAG,KAAK,KAAK;AAC3B,WAAO,KAAK,OAAO,QAAQ,EAAE;AAAA,EAC/B;AAAA,EAEQ,YAAY,aAAwC;AAC1D,gBAAY,QAAQ,CAAC,QAAQ;AAC3B,WAAK,MAAM,IAAI,GAAG;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,KAAK,MAAoC;AACvC,UAAM,UAAwC,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC;AAC5E,UAAM,MAAM,QAAQ,IAAI,WAAW,OAAO;AAC1C,QAAI,QAAQ,CAAC,QAAQ;AACnB,WAAK,MAAM,IAAI,GAAG;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,KAAiB;AACnB,SAAK,MAAM,IAAI,GAAG;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,KAAiB;AACtB,SAAK,MAAM,OAAO,GAAG;AAAA,EACvB;AAAA,EAEA,SAAuC;AACrC,UAAM,OAAO,CAAC,GAAG,KAAK,KAAK;AAC3B,UAAM,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,MAA4B;AACpC,UAAM,IAAI,KAAK,OAAO,QAAQ,EAAE;AAChC,UAAM,SAAS,CAAC,GAAG,IAAI;AACvB,WAAO,QAAQ,CAAC,MAAM;AACpB,WAAK,OAAO,CAAC;AAAA,IACf,CAAC;AAAA,EACH;AACF;;;ACpDA,IAAAC,iBAAsB;AAMtB,IAAM,IAAI;AAGH,IAAM,wBAAN,MAAM,uBAAuD;AAAA,EAC1D,OAA2B,CAAC;AAAA,EAEpC,OAAc,OAAO,OAAyB;AAC5C,UAAM,OAAO,IAAI,uBAAsB,KAAK;AAC5C,SAAK,OAAO,MAAM,IAAI,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC;AACpD,WAAO;AAAA,EACT;AAAA,EACQ,YAAY,cAAgC;AAAA,EAAC;AAAA;AAAA,EAGrD,MAAM,OAAyB;AAC7B,SAAK,OAAO,MAAM,IAAI,YAAY,QAAQ;AAAA,EAC5C;AAAA,EAEA,IAAI,MAAuB,UAAU,IAAiB;AACpD,UAAM,aAAa,WAAW,OAAO;AACrC,UAAM,UAAU,YAAY,OAAO,MAAM,WAAW,KAAK;AACzD,QAAI,WAAW,KAAK,UAAU,KAAK,KAAK,QAAQ;AAC9C,WAAK,KAAK,OAAO,SAAS,GAAG,OAAO;AAAA,IACtC,OAAO;AACL,WAAK,KAAK,KAAK,OAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,IAAY;AACrB,UAAM,QAAQ,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AACpD,QAAI,UAAU,IAAI;AAChB,WAAK,KAAK,OAAO,OAAO,CAAC;AACzB,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,YAAY,QAAgB;AAClC,UAAM,YAAY,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM;AACvD,WAAO,aAAa;AAAA,EACtB;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EACA,IAAI,QAAoC;AACtC,WAAO,CAAC,GAAG,KAAK,IAAI;AAAA,EACtB;AAAA,EACA,SAAwC;AACtC,WAAO,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAAA,EACxC;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAI;AAClB,UAAM,OAAO,CAAC,GAAG,KAAK,IAAI;AAC1B,WAAO,KAAK,OAAO,QAAQ,EAAE;AAAA,EAC/B;AAAA,EAEA,SAAS,MAAmB,SAAiB;AAC3C,UAAM,QAAQ,KAAK,KAAK,QAAQ,IAAI;AACpC,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AACA,UAAM,eAAe,EAAE,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;AACxD,QAAI,CAAC,aAAa,OAAO,GAAG;AAC1B,aAAO;AAAA,IACT;AAEA,SAAK,KAAK,OAAO,OAAO,CAAC;AACzB,SAAK,KAAK,OAAO,SAAS,GAAG,IAAI;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAAmB,SAAiB;AAC7C,UAAM,eAAe,EAAE,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;AACxD,QAAI,CAAC,aAAa,OAAO,GAAG;AAC1B,aAAO;AAAA,IACT;AACA,UAAM,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,EAAE;AACvD,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA,SAAK,KAAK,OAAO,SAAS,GAAG,IAAI;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,kBAAoC,QAAgB,QAAgB;AACtF,UAAM,YAAY,KAAK,YAAY,MAAM;AACzC,QAAI,CAAC;AAAW,aAAO;AACvB,cAAU,oBAAoB,kBAAkB,MAAM;AAGtD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,SAAiE;AACnF,UAAM,EAAE,kBAAkB,IAAI;AAG9B,SAAK,KAAK,QAAQ,CAAC,MAAM;AACvB,QAAE,oBAAoB,QAAQ,iBAAiB;AAAA,IACjD,CAAC;AAGD,sBAAkB,QAAQ,CAAC,MAAM;AAC/B,YAAM,cAAc,KAAK,KAAK,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,CAAC;AACzE,QAAE,gBAAgB,WAAW;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,uBAAuB,oBAAwC;AAC7D,SAAK,KAAK,QAAQ,CAAC,MAAM;AACvB,QAAE,uBAAuB,kBAAkB;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEA,+BAA+B,QAAgB,oBAAwC;AACrF,UAAM,YAAY,KAAK,YAAY,MAAM;AACzC,QAAI,CAAC;AAAW,aAAO;AACvB,cAAU,uBAAuB,kBAAkB;AACnD,WAAO;AAAA,EACT;AACF;;;APlFO,IAAM,gBAAN,MAAM,eAAc;AAAA,EAgFjB,YACU,IACT,MACP,QACA;AAHgB;AACT;AAGP,SAAK,SAAS;AACd,SAAK,sBAAsB,2BAA2B,OAAO,CAAC,CAAC;AAC/D,SAAK,kBAAkB,sBAAsB,OAAO,CAAC,CAAC;AAAA,EAExD;AAAA,EAxFS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,kBAAkB;AAAA,EACD;AAAA,EACjB,YAA+B;AAAA,EAC/B,sBAAoD,CAAC;AAAA,EAC7C,SAAwB,CAAC;AAAA,EAChB;AAAA,EACjB,IAAI,QAAoC;AACtC,WAAO,CAAC,GAAG,KAAK,MAAM;AAAA,EACxB;AAAA,EACA,IAAI,QAAoC;AACtC,WAAO,CAAC,GAAG,KAAK,eAAe;AAAA,EACjC;AAAA,EAEA,IAAI,oBAAqD;AACvD,WAAO,CAAC,GAAG,KAAK,mBAAmB;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAMiB,iBAAgC,cAAc,OAAO;AAAA,EACtE,IAAI,OAAkC;AACpC,WAAO,CAAC,GAAG,KAAK,cAAc;AAAA,EAChC;AAAA,EACA,OAAc,OAAO,IAAc,MAAc,QAA2B;AAC1E,UAAM,eAAe,aAAa,mBAAmB,MAAM;AAC3D,WAAO,IAAI,eAAc,IAAI,MAAM,YAAY;AAAA,EACjD;AAAA,EAEA,OAAc,SAAS,KAAsC;AAC3D,UAAM,eAAe,aAAa,mBAAmB,IAAI,MAAM;AAC/D,UAAM,SAAS,IAAI,eAAc,IAAI,IAAI,IAAI,MAAM,YAAY;AAC/D,UAAM,oBAAoB,IAAI,oBAAoB,CAAC,GAAG,IAAI,iBAAiB,IAAI,CAAC;AAChF,UAAM,WAAW,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC;AAGzD,WAAO,eAAe,KAAK,IAAI,IAAI;AACnC,WAAO,oBAAoB,KAAK,iBAAiB;AAEjD,WAAO,kBAAkB,IAAI;AAC7B,WAAO,aAAa,IAAI;AACxB,WAAO,YAAY,IAAI;AACvB,WAAO,gBAAgB,MAAM,QAAQ;AACrC,WAAO,sBAAsB,IAAI,uBAAuB,CAAC;AACzD,WAAO,kBAAkB,IAAI;AAC7B,WAAO,YAAY,IAAI,aAAa;AACpC,UAAM,WAAW,IAAI,SAAS,CAAC;AAC/B,UAAM,YAAY,OAAO,aAAa;AACtC,WAAO,SAAS,SAAS,IAAI,CAAC,MAAM,YAAY,QAAQ,GAAG,SAAS,CAAC;AAErE,WAAO,wBAAwB;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,SAA2B;AACzB,UAAM,QAAQ,KAAK,gBAAgB,OAAO;AAC1C,UAAM,OAAO,KAAK,eAAe,OAAO;AACxC,UAAM,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;AACrD,UAAM,oBAAoB,KAAK,oBAAoB,OAAO;AAC1D,UAAM,MAAwB;AAAA,MAC5B,iBAAiB,KAAK;AAAA,MACtB,YAAY,KAAK;AAAA,MACjB,WAAW,KAAK;AAAA,MAChB,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,qBAAqB,KAAK;AAAA,MAC1B;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK,OAAO;AAAA,IACtB;AACA,WAAO;AAAA,EACT;AAAA,EAYA,QAAQ,MAAuB,UAAU,IAAiB;AACxD,WAAO,KAAK,gBAAgB,IAAI,MAAM,OAAO;AAAA,EAC/C;AAAA,EAEA,uBAAuB,SAAiE;AAGtF,UAAM,WAAW,KAAK,oBAAoB,OAAO,OAAO;AAExD,WAAO;AAAA,EACT;AAAA,EACA,0BAA0B,kBAAoC,MAAmB,QAAgB;AAC/F,UAAM,QAAQ,KAAK,gBAAgB,oBAAoB,kBAAkB,KAAK,IAAI,MAAM;AACxF,SAAK,wBAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ,0BAA0B;AAChC,UAAM,oBAAoB,KAAK,oBAAoB,QAAQ;AAC3D,SAAK,gBAAgB,oBAAoB,EAAE,kBAAkB,CAAC;AAAA,EAChE;AAAA,EAEA,uBAAuB,IAAwB,MAAoC;AACjF,UAAM,YAAY,KAAK,oBAAoB,WAAW,IAAI,IAAI;AAC9D,SAAK,wBAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,+BAA+B,QAAgB,oBAAwC;AACrF,SAAK,gBAAgB,+BAA+B,QAAQ,kBAAkB;AAC9E,SAAK,wBAAwB;AAAA,EAC/B;AAAA,EAEA,WAAW,MAAmB,SAA0B;AACtD,WAAO,KAAK,kBAAkB,MAAM,OAAO;AAAA,EAC7C;AAAA,EAEQ,kBAAkB,MAAmB,SAAiB;AAC5D,WAAO,KAAK,gBAAgB,WAAW,MAAM,OAAO;AAAA,EACtD;AAAA,EAEA,UAAU;AACR,UAAM,QAAQ,KAAK,aAAa;AAChC,UAAM,QAAQ,KAAK,OAAO,SAAS;AACnC,UAAM,OAAO,kBAAkB;AAC/B,UAAM,OAAO,YAAY;AAAA,MACvB;AAAA,QACE,YAAY,CAAC;AAAA,QACb,MAAM;AAAA,QACN;AAAA,QACA,aAAa,CAAC;AAAA,QACd,YAAY;AAAA,QACZ,cAAc,CAAC;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,SAAK,OAAO,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA,EACA,WAAW,MAAmB;AAC5B,SAAK,SAAS,KAAK,OAAO,OAAO,CAAC,MAAM,MAAM,IAAI;AAAA,EACpD;AAAA,EAEA,SAAS,MAAmB,SAA0B;AACpD,WAAO,KAAK,gBAAgB,SAAS,MAAM,OAAO;AAAA,EACpD;AAAA,EAEA,WAAW,MAA4B;AACrC,WAAO,KAAK,gBAAgB,WAAW,KAAK,EAAE;AAAA,EAChD;AAAA,EAEA,kBAAkB;AAChB,YAAQ,IAAI,0BAA0B;AACtC,UAAM,QAAQ,KAAK,aAAa;AAChC,UAAM,WAAW,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAClD,SAAK,SAAS,SAAS,IAAI,CAAC,QAAQ,YAAY,QAAQ,KAAK,KAAK,CAAC;AAAA,EACrE;AAAA,EAEA,eAA0B;AACxB,UAAM,QAAgC,CAAC;AACvC,UAAM,QAA8B,CAAC;AACrC,UAAM,gBAAuC,CAAC;AAC9C,UAAM,aAAmC,KAAK,KAAK,IAAI,CAAC,MAAM;AAC5D,YAAM,MAAM,EAAE;AACd,YAAM,YAAY,KAAK,gBAAgB,MAAM,OAAO,CAAC,OAAO,SAAS;AACnE,eAAO,KAAK,KAAK,SAAS,GAAG,IAAI,QAAQ,IAAI;AAAA,MAC/C,GAAG,CAAC;AACJ,YAAM,kBAAsC;AAAA,QAC1C,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,aAAa,EAAE;AAAA,MACjB;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,cAAkC,CAAC;AAEzC,SAAK,gBAAgB,MAAM,QAAQ,CAAC,MAAM,UAAU;AAClD,YAAM,gBAAgB,KAAK,qBAAqB,KAAK,QAAQ,KAAK;AAClE,YAAM,KAAK,GAAG,aAAa;AAC3B,YAAM,WAAW,KAAK,SAAS;AAC/B,YAAM,aAAa,KAAK;AACxB,YAAM,aAA+B;AAAA,QACnC,MAAM;AAAA,QACN,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,YAAY;AAAA,QACZ,UAAU,KAAK,SAAS;AAAA,MAC1B;AACA,YAAM,oBAAyC;AAAA,QAC7C,MAAM;AAAA,QACN,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AACA,kBAAY,KAAK,UAAU;AAC3B,oBAAc,KAAK,iBAAiB;AAAA,IACtC,CAAC;AACD,UAAM,YAAY,IAAI,UAAU,OAAO,OAAO,eAAe,YAAY,WAAW;AAEpF,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAAiC;AAC1C,SAAK,eAAe,UAAU,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,YAAwB;AAC7B,SAAK,eAAe,IAAI,UAAU;AAAA,EACpC;AAAA,EAEA,QACE,UAA0B,EAAE,uBAAuB,OAAO,oBAAoB,MAAM,GACpE;AAEhB,UAAM,gBAAgB,eAAc,SAAS,KAAK,OAAO,CAAC;AAG1D,kBAAc,gBAAgB,MAAM,QAAQ,CAAC,MAAM;AACjD,UAAI,QAAQ,uBAAuB;AACjC,UAAE,SAAS,WAAW;AAAA,MACxB;AACA,UAAI,QAAQ,sBAAsB,EAAE,WAAW;AAC7C,YAAI,EAAE,UAAU,SAAS,cAAc;AAErC,YAAE,UAAU,OAAO;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,YAAY,cAAc,OAAO;AACvC,UAAM,MAAM,IAAI,qBAAqB;AAErC,UAAM,WAAW,SAAS,WAAW,SAAS;AAC9C,UAAM,SAAS,IAAI,QAAQ,SAAS;AACpC,UAAM,eAAe,aAAa,WAAW,SAAS;AACtD,UAAM,SAAyB,EAAE,UAAU,QAAQ,aAAa;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,uBAAuB,IAAwB;AAC7C,UAAM,YAAY,KAAK,oBAAoB,gBAAgB,EAAE;AAC7D,UAAM,oBAAoB,CAAC,GAAG,KAAK,mBAAmB;AACtD,SAAK,gBAAgB,oBAAoB,EAAE,kBAAkB,CAAC;AAC9D,SAAK,gBAAgB,uBAAuB,EAAE;AAC9C,WAAO;AAAA,EACT;AACF;;;AQvSO,IAAM,cAAN,MAAM,qBAAoB,cAA8C;AAAA,EACpE,aAAa;AAAA,EACtB;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,oBAAoB;AAAA;AAAA,EAEZ,YAAY,KAAqB;AACvC,UAAM,GAAG;AACT,SAAK,KAAK,IAAI;AACd,SAAK,oBAAoB,IAAI;AAC7B,SAAK,OAAO,IAAI;AAChB,SAAK,OAAO,IAAI;AAAA,EAClB;AAAA,EAEA,OAAc,OAAO,MAAc;AACjC,UAAM,KAAK,OAAO,OAAO;AACzB,UAAM,MAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,qBAAqB;AAAA,IACvB;AACA,UAAM,WAAW,IAAI,aAAY,GAAG;AACpC,WAAO;AAAA,EACT;AAAA,EACA,OAAc,SAAS,KAAqB;AAC1C,UAAM,WAAW,IAAI,aAAY,GAAG;AACpC,WAAO;AAAA,EACT;AAAA,EAEA,QAAwB;AACtB,UAAM,MAAM,KAAK,OAAO;AACxB,UAAM,YAA4B,EAAE,GAAG,KAAK,IAAI,OAAO,OAAO,EAAE;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,SAAyB;AACvB,UAAM,MAAsB;AAAA,MAC1B,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,qBAAqB,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;;;AC9CA,IAAM,iBAAiB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACjD,IAAM,iBAAiB,CAAC,QAAgB;AACtC,QAAM,cAAc,OAAO;AAC3B,QAAM,eAAe,MAAM;AAC3B,SAAO,eAAe;AACxB;AAkBA,IAAM,eAAe,CACnB,WACA,YAC4B;AAC5B,QAAM,KAAK,UAAU,qBAAqB,CAAC;AAE3C,QAAM,aAAa,oBAAI,IAAkE;AACzF,QAAM,WAAW,SAAS,WAAW,SAAS;AAE9C,QAAM,QAAQ,UAAU;AAGxB,QAAM,QAAQ,CAAC,SAAS;AACtB,SAAK,oBAAoB,QAAQ,CAAC,qBAAqB;AACrD,YAAM,aAAa,iBAAiB;AACpC,YAAM,SAAS,iBAAiB;AAChC,YAAM,IAAI,SAAS,cAAc,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,EAAE;AACjE,UAAI,GAAG;AACL,cAAM,sBAAsB,WAAW,IAAI,UAAU,KAAK,CAAC;AAC3D,4BAAoB,KAAK,EAAE,OAAO,EAAE,OAAO,OAAO,CAAC;AACnD,mBAAW,IAAI,YAAY,mBAAmB;AAAA,MAChD,OAAO;AAEL,gBAAQ,MAAM,2CAA2C;AAAA,MAE3D;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,UAAmC,GAAG,IAAI,CAAC,MAAM;AACrD,UAAM,UAAU,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC;AACzC,WAAO,UAAU,GAAG,SAAS,OAAO;AAAA,EACtC,CAAC;AAED,SAAO;AACT;AACA,IAAM,YAAY,CAChB,kBACA,kBACA,YACa;AACb,QAAM,cAA6B,CAAC,GAAG,cAAc;AAErD,MAAI,sBAAsB;AAC1B,MAAI,kBAAkB;AACtB,MAAI,qBAAqB;AACzB,MAAI,WAAW;AACf,QAAM,gBAA0B,CAAC;AACjC,QAAM,UAA+B,CAAC;AACtC,QAAM,SAAS,iBAAiB;AAEhC,QAAM,iBAAiC,iBAAiB,IAAI,CAAC,QAAQ;AACnE,UAAM,cAAc,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK;AAC7D,QAAIC,UAAuB,EAAE,MAAM,WAAW,OAAO,IAAI,MAAM;AAC/D,QAAI,CAAC,aAAa;AAChB,aAAOA;AAAA,IACT;AAEA,UAAM,QAAQ,YAAY;AAC1B,UAAM,WAAW,YAAY;AAC7B,UAAM,SAAS,IAAI,UAAU;AAC7B,UAAM,QAAQ,YAAY;AAE1B,IAAAA,UAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAOA;AAAA,EACT,CAAC;AAED,iBAAe,QAAQ,CAAC,UAAU;AAChC,QAAI,MAAM,SAAS,WAAW;AAC5B;AAAA,IACF;AACA,QAAI,MAAM,SAAS,aAAa;AAC9B,YAAM,EAAE,OAAO,UAAU,QAAQ,MAAM,IAAI,EAAE,GAAG,MAAM;AACtD,YAAM,YAAY,eAAe,KAAK;AACtC,UAAI,WAAW;AACb,gBAAQ,KAAK,EAAE,OAAO,QAAQ,OAAO,SAAS,CAAC;AAC/C,oBAAY,MAAM,QAAQ,MAAM;AAChC;AAAA,MACF;AACA,UAAI,UAAU,GAAG;AACf;AACA,gBAAQ,KAAK,EAAE,OAAO,QAAQ,OAAO,SAAS,CAAC;AAAA,MACjD;AAAA,IACF;AACA,QAAI,MAAM,SAAS,oBAAoB;AACrC,oBAAc,KAAK,MAAM,OAAO;AAAA,IAClC;AAAA,EACF,CAAC;AAED,QAAM,MAAM,WAAW;AACvB,QAAM,SAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,SAAO;AACT;AACA,IAAM,iBAAiB,MAA2B;AAChD,QAAM,KAAK,mBAAmB,OAAO;AACrC,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA;AAAA,EAEf;AACF;AACO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["BuilderOperator","v","op","dto","label","ThemeUtils","BuilderOptionTheme","import_engine","import_engine","import_engine","variable","import_engine","result"]}