@media-quest/builder 0.0.39 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/public-api.d.ts +82 -99
  2. package/dist/public-api.js +36 -101
  3. package/dist/public-api.js.map +1 -1
  4. package/package.json +29 -29
  5. package/src/{theme → ARKIV}/button-bar/button-text-utils.ts +233 -233
  6. package/src/{theme → ARKIV}/button-bar/text-utils.spec.ts +105 -105
  7. package/src/Builder-option.ts +78 -62
  8. package/src/Builder-question.ts +98 -98
  9. package/src/Builder-schema.spec.ts +348 -348
  10. package/src/Builder-schema.ts +308 -306
  11. package/src/builder-compiler.ts +14 -20
  12. package/src/code-book/codebook-variable.ts +27 -27
  13. package/src/code-book/codebook.ts +89 -89
  14. package/src/media-files.ts +28 -32
  15. package/src/page/Builder-page-collection.spec.ts +219 -219
  16. package/src/page/Builder-page-collection.ts +129 -129
  17. package/src/page/Builder-page.spec.ts +177 -177
  18. package/src/page/Builder-page.ts +250 -250
  19. package/src/primitives/ID.ts +135 -135
  20. package/src/public-api.ts +29 -30
  21. package/src/rulebuilder/RuleAction.ts +105 -105
  22. package/src/schema-config.ts +25 -26
  23. package/src/sum-score/sum-score-variable-collection.spec.ts +68 -68
  24. package/src/sum-score/sum-score-variable-collection.ts +101 -101
  25. package/src/sum-score/sum-score-variable.ts +0 -1
  26. package/src/sum-score/sum-score.ts +166 -167
  27. package/src/tag/BuilderTag.ts +45 -45
  28. package/src/tag/Tag-Collection.ts +53 -53
  29. package/src/theme/Default-theme.ts +173 -188
  30. package/src/theme/IDefault-theme.ts +125 -125
  31. package/src/theme/ThemeCompiler.ts +10 -11
  32. package/src/theme/default-theme-compiler.spec.ts +31 -31
  33. package/src/theme/default-theme-compiler.ts +655 -652
  34. package/src/theme/icon-urls.ts +29 -29
  35. package/src/theme/icons.ts +117 -117
  36. package/src/theme/theme-utils.spec.ts +52 -52
  37. package/src/theme/theme-utils.ts +56 -56
  38. package/src/theme/theme2.ts +388 -386
  39. package/tsconfig.json +19 -19
  40. package/src/Builder-schema-dto.spec.ts +0 -155
  41. package/src/Builder-schema-dto.ts +0 -86
@@ -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/icon-urls.ts","../src/theme/Default-theme.ts","../src/theme/default-theme-compiler.ts","../src/theme/icons.ts","../src/theme/theme2.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-schema-dto.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 } 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\";\nexport * from \"./theme/Default-theme\";\nexport { BuilderSchemaDto } from \"./Builder-schema-dto\";\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\";\nimport { AudioFile } from \"./media-files\";\nimport { OptionID } from \"./primitives/ID\";\n\nexport interface BuilderOptionDto {\n readonly id: OptionID;\n readonly value: number;\n readonly label: string;\n readonly labelAudio?: AudioFile;\n}\n\nexport class BuilderOption extends BuilderObject<\"builder-question-option\", BuilderOptionDto> {\n readonly objectType = \"builder-question-option\";\n id: OptionID;\n value: number;\n label = \"\";\n private _labelAudioFile: AudioFile | false = false;\n get labelAudioFile() {\n return this._labelAudioFile;\n }\n set labelAudioFile(audioFile: AudioFile | false) {\n this._labelAudioFile = audioFile;\n }\n\n private constructor(dto: BuilderOptionDto) {\n super(dto);\n this.id = dto.id;\n this.value = dto.value;\n this.label = dto.label;\n // this.theme = dto.theme;\n }\n public static create(value: number, label: string) {\n const id = OptionID.create();\n const dto: BuilderOptionDto = {\n id,\n value,\n label,\n };\n const instance = new BuilderOption(dto);\n return instance;\n }\n\n public static fromJson(dto: BuilderOptionDto) {\n const instance = new BuilderOption(dto);\n return instance;\n }\n\n toJson(): BuilderOptionDto {\n const dto: BuilderOptionDto = {\n id: this.id,\n value: this.value,\n label: this.label,\n };\n return dto;\n }\n\n clone(): BuilderOptionDto {\n const dto = this.toJson();\n const cloneDto: BuilderOptionDto = { ...dto, id: OptionID.create() };\n return cloneDto;\n }\n}\n","import type { BuilderOptionDto } from \"./Builder-option\";\nimport { BuilderOption } from \"./Builder-option\";\nimport { BuilderObject } from \"./BuilderObject\";\nimport { QuestionID } from \"./primitives/ID\";\n\nexport type BuilderQuestionType =\n | \"select-one\"\n | \"select-many\"\n | \"text\"\n | \"time\"\n | \"textarea\"\n | \"date\"\n | \"numeric-range\"\n | \"duration\";\n\nexport interface BuilderQuestionDto {\n readonly id: QuestionID;\n _type: BuilderQuestionType;\n text: string;\n options: ReadonlyArray<BuilderOptionDto>;\n prefix: string;\n}\n\nexport class BuilderQuestion extends BuilderObject<\"builder-question\", BuilderQuestionDto> {\n readonly objectType = \"builder-question\";\n id: QuestionID;\n type: BuilderQuestionType;\n questionText = \"\";\n options: BuilderOption[] = [];\n prefix = \"\";\n\n static create = (type: BuilderQuestionType) => {\n const id = QuestionID.create();\n\n return new BuilderQuestion({\n id,\n _type: type,\n text: \"\",\n options: [],\n prefix: \"\",\n });\n };\n\n public static fromJson(dto: BuilderQuestionDto): BuilderQuestion {\n const question = new BuilderQuestion(dto);\n return question;\n }\n\n private constructor(dto: BuilderQuestionDto) {\n super(dto);\n this.id = QuestionID.validateOrCreate(dto.id);\n this.type = dto._type;\n this.questionText = dto.text;\n this.prefix = dto.prefix;\n this.options = dto.options.map((o) => BuilderOption.fromJson(o));\n }\n\n addOption(label: string, value: number, atIndex = -1) {\n const option = BuilderOption.create(value, label);\n if (atIndex >= 0 && atIndex < this.options.length) {\n this.options.splice(atIndex, 0, option);\n } else {\n this.options.push(option);\n }\n return option;\n }\n\n deleteOption(option: BuilderOption): boolean {\n const filtered = this.options.filter((o) => o.id !== option.id);\n const didDelete = filtered.length === this.options.length - 1;\n this.options = filtered;\n return didDelete;\n }\n\n toJson() {\n const optionsJson = this.options.map((o) => o.toJson());\n const dto: BuilderQuestionDto = {\n id: this.id,\n prefix: this.prefix,\n _type: this.type,\n text: this.questionText,\n options: optionsJson,\n };\n return dto;\n }\n\n clone(): BuilderQuestionDto {\n const cloneId = QuestionID.create();\n const dto = this.toJson();\n const optionsClone = this.options.map((o) => o.clone());\n const clonedDto: BuilderQuestionDto = {\n ...dto,\n id: cloneId,\n options: optionsClone,\n };\n return clonedDto;\n }\n}\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","export const IconUrls = {\n ispeWhitePng:\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\",\n pauseSvg:\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\",\n pauseCircleOutlineSvg:\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\",\n\n pauseCircleFilledSvg:\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\",\n playCircleRegular:\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\",\n playArrowSvg:\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\",\n playCircleOutline:\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\",\n\n stopCircleSvg:\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\",\n stopSvg:\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\",\n replayCircleSvg:\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\",\n\n volumeOffSvg:\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\",\n volumeUpSvg:\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","import { DCss, DStyle, PStyle } from \"@media-quest/engine\";\nimport { IconUrls } from \"./icon-urls\";\nimport { BuilderOptionTheme, IDefaultTheme } from \"./IDefault-theme\";\nimport { CssTheme } from \"./css-theme\";\n\nnamespace BuilderOptionTheme {\n const GREEN = \"#70AD47\";\n const YELLOW = \"#FFC000\";\n const ORANGE = \"#F4902C\";\n const RED = \"#FF0000\";\n const LIGHT_BLUE = \"#42719C\";\n const WHITE = \"#ffffff\";\n const BLUE = \"#2F5597\";\n const BTN_BORDER_WIDTH = 3;\n const BTN_BORDER_RADIUS = 10;\n const BTN_HEIGHT = 130;\n const BTN_WIDTH_LONG: DCss.Percent = { _unit: \"percent\", value: 19 };\n const BTN_WIDTH_SHORT: DCss.Percent = { _unit: \"percent\", value: 15 };\n const BTN_BORDER_STYLE: DStyle[\"borderStyle\"] = \"solid\";\n const FONT_WEIGHT: DStyle[\"fontWeight\"] = 500;\n const FONT_SIZE: DCss.Px[\"value\"] = 36;\n\n const BTN_PADDING_LEFT = 10;\n const BTN_PADDING_TOP = 10;\n\n const buttonBaseCss = (): CssTheme => ({\n css: {\n fontWeight: FONT_WEIGHT,\n\n fontSize: { _unit: \"px\", value: FONT_SIZE },\n letterSpacing: { _unit: \"px\", value: 2 },\n paddingLeft: { _unit: \"px\", value: BTN_PADDING_LEFT },\n paddingTop: { _unit: \"px\", value: BTN_PADDING_TOP },\n paddingBottom: { _unit: \"px\", value: BTN_PADDING_TOP },\n paddingRight: { _unit: \"px\", value: BTN_PADDING_LEFT },\n borderRadius: { _unit: \"px\", value: BTN_BORDER_RADIUS },\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\n width: BTN_WIDTH_LONG,\n height: { _unit: \"px\", value: BTN_HEIGHT },\n borderStyle: BTN_BORDER_STYLE,\n // boxShadow: \"3px 3px gray\",\n position: \"relative\",\n display: \"block\",\n },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\n });\n\n export const blueButton = (): BuilderOptionTheme => {\n const base = buttonBaseCss();\n const { css, cssEnabled, cssDisabled } = base;\n const optionTheme: BuilderOptionTheme = {\n name: \"blue-button-theme\",\n normal: {\n btn: {\n css: {\n ...css,\n backgroundColor: BLUE,\n borderColor: BLUE,\n textColor: WHITE,\n },\n cssDisabled,\n cssEnabled,\n },\n divider: {},\n text1: {},\n text2: {},\n },\n\n dontKnow: {\n btn: {\n css: {\n ...css,\n backgroundColor: WHITE,\n borderColor: LIGHT_BLUE,\n textColor: BLUE,\n width: BTN_WIDTH_SHORT,\n },\n cssDisabled,\n cssEnabled,\n },\n text1: {},\n text2: {},\n divider: {},\n },\n };\n\n return optionTheme;\n };\n}\n\nconst MAIN_TEXT_FONT_SIZE: DCss.Px = { _unit: \"px\", value: 40 };\nconst MAIN_TEXT_WIDTH: DCss.Percent = { _unit: \"percent\", value: 76 };\nconst textHighTop = 30;\nconst textLowTop = 72;\nconst audioHighTop = 30;\nconst audioLowTop = 72;\n\nconst textBase: PStyle = {\n width: MAIN_TEXT_WIDTH,\n // backgroundColor: \"red\",\n top: textHighTop,\n left: 14,\n lineHeight: 1.2,\n textAlign: \"left\",\n textColor: \"black\",\n transform: \"translate(0, -50%)\",\n fontSize: MAIN_TEXT_FONT_SIZE,\n};\n\nconst textHigh: PStyle = { ...textBase, top: textHighTop };\nconst textLow: PStyle = { ...textHigh, top: textLowTop };\n\nconst audioBase: PStyle = {\n height: 6,\n width: 6,\n left: 4,\n top: audioHighTop,\n cursor: \"pointer\",\n opacity: 0.8,\n transform: \"translate(0, -50%)\",\n visibility: \"visible\",\n};\nconst audioHigh: PStyle = { ...audioBase, top: audioHighTop };\nconst audioLow: PStyle = { ...audioBase, top: audioLowTop };\n\nexport const DefaultTheme: IDefaultTheme = {\n name: \"default-theme\",\n schemaBackgroundColor: \"white\",\n dimensions: { baseHeight: 1300, baseWidth: 1024 },\n videoPlayer: {\n playButton: {\n iconUrl: IconUrls.playCircleRegular,\n css: { w: 5, h: 5, y: 48, x: 4 },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n },\n pauseButton: {\n iconUrl: IconUrls.pauseSvg,\n css: { w: 5, h: 5, y: 48, x: 4 },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n },\n videoElement: { css: { height: 41, top: 3, x: 0 } },\n },\n image: { style: { h: 50, w: 100, x: 0 } },\n mainText: {\n base: {\n text: { ...textBase },\n audio: {\n iconUrl: IconUrls.volumeUpSvg,\n css: { ...audioBase },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n },\n },\n notMediaHasAudio: {\n text: { ...textHigh },\n audio: { ...audioHigh },\n },\n hasMediaNotAudio: {\n text: { ...textHigh },\n },\n notMediaNotAudio: { text: { ...textHigh } },\n hasMediaHasAudio: { text: { ...textLow }, audio: { ...audioLow } },\n },\n\n buttonBar: {\n vibrateMs: false,\n container: {\n base: {\n display: \"flex\",\n justifyContent: \"space-evenly\",\n position: \"absolute\",\n width: 100,\n height: 15,\n bottom: 0,\n left: 0, // h: 10,\n alignItems: \"center\",\n // backgroundColor: \"yellow\",\n },\n whenSingle: { justifyContent: \"space-evenly\" },\n whenMany: { justifyContent: \"space-evenly\" },\n },\n nextButtonTheme: BuilderOptionTheme.blueButton(),\n responseButtons: BuilderOptionTheme.blueButton(),\n },\n};\n","import { ThemeCompiler } from \"./ThemeCompiler\";\nimport { BuilderSchema } from \"../Builder-schema\";\nimport type { BuilderPageDto } from \"../page/Builder-page\";\nimport { DefaultTheme } from \"./Default-theme\";\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\nimport {\n ButtonClickAction,\n DButtonDto,\n DDivDto,\n DelayTask,\n DElementDto,\n DImgDto,\n DTextDto,\n PageDto,\n PlayAudioTask,\n PlayVideoTask,\n PStyle,\n Rule,\n RuleActionPageQue,\n SchemaDto,\n} from \"@media-quest/engine\";\n\nimport { AudioFile } from \"../media-files\";\nimport { BuilderRule } from \"../rulebuilder\";\nimport { IDefaultTheme } from \"./IDefault-theme\";\nimport { Theme2 } from \"./theme2\";\nimport { BuilderSchemaDto } from \"../Builder-schema-dto\";\n\nexport class DefaultThemeCompiler implements ThemeCompiler<IDefaultTheme> {\n readonly name = \"Ispe default theme.\";\n readonly defaultTheme = DefaultTheme;\n readonly theme2 = Theme2;\n currentTheme = DefaultTheme;\n allThemes = [DefaultTheme, Theme2];\n private readonly TAG = \"[ DEFAULT_THEME_COMPILER ]: \";\n\n setTheme(theme: IDefaultTheme) {\n this.currentTheme = theme;\n }\n\n constructor() {}\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 t = this.currentTheme;\n const themeName = t.name;\n const schema = source.name;\n const tag = schema + \"-\" + themeName + \" compile\";\n const TAG = tag.toUpperCase();\n // console.group(TAG);\n const numberOfPages = source.pages.length;\n const pages = source.pages.map((p, index) => {\n return this.compilePage(p, index, numberOfPages, source.prefix);\n });\n\n let baseHeight = source.baseHeight;\n let baseWidth = source.baseWidth;\n let backgroundColor = source.backgroundColor;\n if (t.dimensions.baseHeight) {\n baseHeight = t.dimensions.baseHeight;\n }\n if (t.dimensions.baseWidth) {\n baseWidth = t.dimensions.baseWidth;\n }\n if (t.dimensions.baseWidth) {\n baseWidth = t.dimensions.baseWidth;\n }\n if (t.schemaBackgroundColor) {\n backgroundColor = t.schemaBackgroundColor;\n }\n\n const rules = this.compileRules(source);\n\n const dto: SchemaDto = {\n id: source.id,\n backgroundColor,\n baseHeight,\n baseWidth,\n pageSequences: [],\n pages,\n predefinedFacts: [],\n rules,\n };\n // console.groupEnd();\n return dto;\n }\n\n private compilePage(\n page: BuilderPageDto,\n pageIndex: number,\n totalNumberOfPages: number,\n modulePrefix: string,\n ): PageDto {\n const pageNumber = pageIndex + 1;\n const tags = page.tags ?? [];\n const { nextButton, mainText, id, mainMedia, _type, prefix } = page;\n const t = this.currentTheme;\n const hasMainMedia = !!mainMedia;\n const hasMainTextAudio = !!mainText.audioFile;\n\n const elements: DElementDto[] = [];\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\n let initialVideoTaskList: Array<PlayVideoTask | DelayTask> = [];\n const newPage: PageDto = {\n background: \"white\",\n pageNumber,\n elements,\n id,\n prefix,\n initialTasks: [],\n tags: [...tags],\n };\n const bg = t.pageBackGround;\n if (bg) {\n const pageBackGround: DDivDto = {\n style: bg.style,\n _tag: \"div\",\n children: [],\n };\n elements.push(pageBackGround);\n }\n\n const bgArea1 = t.backGroundArea1;\n\n if (bgArea1) {\n const backgroundArea1: DDivDto = {\n style: bgArea1.style,\n _tag: \"div\",\n children: [],\n };\n elements.push(backgroundArea1);\n }\n\n if (t.progressBar) {\n // console.log(\"ADDED PROGRESS.\");\n const progressInPercent = pageNumber / totalNumberOfPages;\n // const a =\n const baseStyles: PStyle = {\n bottom: t.progressBar.bottom,\n left: t.progressBar.left,\n height: t.progressBar.height,\n width: t.progressBar.width,\n };\n const progressBackGround: DDivDto = {\n style: {\n ...baseStyles,\n ...t.progressBar.backgroundStyles,\n },\n _tag: \"div\",\n children: [],\n };\n\n const currentProgress = t.progressBar.width * progressInPercent;\n const progressIndicator: DDivDto = {\n style: { ...baseStyles, ...t.progressBar.progressStyles, w: currentProgress },\n _tag: \"div\",\n children: [],\n };\n const pText = t.progressBar.text;\n\n elements.push(progressBackGround);\n elements.push(progressIndicator);\n if (pText) {\n const progressText: DTextDto = {\n _tag: \"p\",\n innerText: \"side \" + pageNumber + \" av \" + totalNumberOfPages,\n style: pText.style,\n };\n elements.push(progressText);\n }\n }\n\n if (page.mainText.audioFile) {\n const autoPlay = page.mainText.autoplay;\n const autoPlayDelay = page.mainText.autoplayDelay;\n const res = this.compileMainTextAudio(\n page.mainText.audioFile,\n autoPlay,\n autoPlayDelay,\n hasMainMedia,\n );\n // console.log(page.mainText.text);\n initialAudioTasks = [...res.initialTasks];\n newPage.elements.push(...res.components);\n }\n\n if (_type === \"question\") {\n const variableId = modulePrefix + \"_\" + page.prefix;\n const qRes = this.compileQuestion(id, page, variableId, hasMainMedia);\n newPage.elements.push(qRes.buttonBar, qRes.question);\n\n // newPage.elements.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 nextButtonBar = this.compileButtonBar([\n this.compileButton(nextButton, { kind: \"next-button\" }),\n ]);\n const infoTextElement = this.compileMainText(infoText, hasMainTextAudio, hasMainMedia);\n\n // const textBase =\n newPage.elements.push(infoTextElement, nextButtonBar);\n // newPage.components.push(nextButtonComponent);\n }\n if (mainMedia && mainMedia.kind === \"main-image\") {\n const mainImageElement = this.compileImage(mainMedia);\n newPage.elements.push(mainImageElement);\n }\n\n if (mainMedia && mainMedia.kind === \"main-video\") {\n const videoOutput = this.compileVideo(mainMedia);\n // newPage.videoPlayer?.playUrl\n newPage.videoPlayer = videoOutput.videoPlayer;\n newPage.elements.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)) as PageDto;\n return clone;\n }\n\n private compileImage(image: BuilderMainImageDto) {\n const img: DImgDto = {\n _tag: \"img\",\n style: this.currentTheme.image.style,\n url: image.file.downloadUrl,\n };\n return img;\n }\n\n private compileMainText(text: string, hasAudio: boolean, hasMainMedia: boolean): DTextDto {\n const t = this.currentTheme;\n const { base, hasMediaNotAudio, notMediaHasAudio, notMediaNotAudio, hasMediaHasAudio } =\n t.mainText;\n let style = base.text;\n if (hasMainMedia && hasAudio) style = { ...style, ...hasMediaHasAudio.text };\n if (!hasMainMedia && hasAudio) style = { ...style, ...notMediaHasAudio.text };\n if (hasMainMedia && !hasAudio) style = { ...style, ...hasMediaNotAudio.text };\n if (!hasMainMedia && !hasAudio) style = { ...style, ...notMediaNotAudio.text };\n // console.log(style.textColor);\n return {\n _tag: \"p\",\n innerText: text,\n style,\n };\n }\n\n private compileMainTextAudio(\n audioFile: AudioFile,\n autoPlay: boolean,\n autoPlayDelay: number,\n hasMainMedia: boolean,\n ): {\n components: DElementDto[];\n initialTasks: Array<PlayAudioTask | DelayTask>;\n } {\n const t = this.currentTheme.mainText;\n const audioId = audioFile.id;\n const iconUrl = this.currentTheme.mainText.base.audio.iconUrl;\n const baseIconStyles = t.base.audio;\n const addedStyles = hasMainMedia ? t.hasMediaHasAudio.audio : t.notMediaHasAudio.audio;\n\n const audioIconStyle = { ...baseIconStyles.css, ...addedStyles };\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 const playMainTextAudio: DImgDto = {\n _tag: \"img\",\n url: iconUrl,\n style: { ...audioIconStyle },\n onClick: { kind: \"play-audio\", task },\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\n return { components: [playMainTextAudio], initialTasks: [...initialAudioTasks] };\n }\n\n private compileVideo(video: BuilderMainVideoDto): {\n videoPlayer: PageDto[\"videoPlayer\"];\n components: DElementDto[];\n autoPlayTasks: Array<PlayVideoTask | DelayTask>;\n } {\n const t = this.currentTheme.videoPlayer;\n const hasReplayButton = !!t.replayButton;\n\n const mode = video.mode;\n // const components: DElementDto[] = [];\n\n let autoPlayTasks: Array<PlayVideoTask | DelayTask> = [];\n\n let autoplayVideoTask: PlayVideoTask | false = false;\n let autoplayDelayTask: DelayTask | false = false;\n\n let buttonBar: DDivDto | false = false;\n let playButton: DImgDto | false = false;\n let playButtonText: DTextDto | false = false;\n let replayButton: DImgDto | false = false;\n let replayButtonText: DTextDto | false = false;\n let pauseButton: DImgDto | false = false;\n let pauseButtonText: DTextDto | false = false;\n let unmuteButton: DImgDto | false = false;\n let unmuteButtonText: DTextDto | false = false;\n let muteButton: DImgDto | false = false;\n let muteButtonText: DTextDto | false = false;\n\n const showWhenEnded: Partial<DElementDto> = {\n whenVideoEnded: { visibility: \"visible\" },\n whenVideoEndedAndMuted: { visibility: \"visible\" },\n whenVideoPlaying: { visibility: \"hidden\" },\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"hidden\" },\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\n };\n\n const showWhenPlayingOrPaused: Partial<DElementDto> = {\n whenVideoEnded: { visibility: \"visible\" },\n whenVideoEndedAndMuted: { visibility: \"visible\" },\n whenVideoPlaying: { visibility: \"visible\" },\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\n };\n\n const showWhenPlaying: Partial<DElementDto> = {\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n whenVideoPlaying: { visibility: \"visible\" },\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\n };\n\n const showWhenPaused: Partial<DElementDto> = {\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n whenVideoPlaying: { visibility: \"hidden\" },\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"visible\" },\n whenVideoPausedAndMuted: { visibility: \"visible\" },\n };\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: t.videoElement.css,\n // style: { h: 45, w: 100, x: 0, y: 55 },\n };\n\n if (t.buttonBar) {\n buttonBar = {\n _tag: \"div\",\n style: { ...t.buttonBar },\n children: [],\n };\n }\n\n playButton = {\n ...showWhenPaused,\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 };\n if (t.playButton.text) {\n playButtonText = {\n ...showWhenPaused,\n _tag: \"p\",\n style: t.playButton.text.css,\n innerText: t.playButton.text.text,\n };\n // components.push({\n //\n // });\n }\n\n pauseButton = {\n ...showWhenPlaying,\n _tag: \"img\",\n style: {\n ...t.pauseButton.css,\n visibility: \"hidden\",\n ...t.pauseButton.cssEnabled,\n },\n url: t.pauseButton.iconUrl,\n onClick: { kind: \"pause-video\" },\n };\n\n if (t.pauseButton.text) {\n pauseButtonText = {\n ...showWhenPlaying,\n _tag: \"p\",\n style: t.pauseButton.text.css,\n innerText: t.pauseButton.text.text,\n };\n }\n if (t.unMuteButton) {\n unmuteButton = {\n _tag: \"img\",\n style: { ...t.unMuteButton.css },\n url: t.unMuteButton.iconUrl,\n onClick: { kind: \"un-mute-video\" },\n whenVideoPausedAndMuted: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\n whenVideoPlaying: { visibility: \"hidden\" },\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n };\n if (t.unMuteButton.text) {\n unmuteButtonText = {\n _tag: \"p\",\n style: t.unMuteButton.text.css,\n innerText: t.unMuteButton.text.text,\n whenVideoPausedAndMuted: { visibility: \"visible\" },\n whenVideoPaused: { visibility: \"hidden\" },\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\n whenVideoPlaying: { visibility: \"hidden\" },\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n };\n }\n }\n if (t.muteButton) {\n muteButton = {\n _tag: \"img\",\n style: { ...t.muteButton.css },\n url: t.muteButton.iconUrl,\n onClick: { kind: \"mute-video\" },\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"visible\" },\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\n whenVideoPlaying: { visibility: \"visible\" },\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n };\n\n if (t.muteButton.text) {\n muteButtonText = {\n _tag: \"p\",\n style: t.muteButton.text.css,\n innerText: t.muteButton.text.text,\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\n whenVideoPaused: { visibility: \"visible\" },\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\n whenVideoPlaying: { visibility: \"visible\" },\n whenVideoEnded: { visibility: \"hidden\" },\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\n };\n }\n }\n\n if (t.replayButton) {\n replayButton = {\n ...showWhenEnded,\n _tag: \"img\",\n style: { ...t.replayButton.css },\n url: t.replayButton.iconUrl,\n onClick: { kind: \"play-video\", task: playButtonTask },\n };\n if (t.replayButton.text) {\n replayButtonText = {\n ...showWhenEnded,\n _tag: \"p\",\n style: t.replayButton.text.css,\n innerText: t.replayButton.text.text,\n };\n }\n }\n\n const componentsSet = new Set<DElementDto>();\n const addComponent = (maybeComponent: DElementDto | false) => {\n if (maybeComponent) {\n componentsSet.add(maybeComponent);\n }\n };\n\n if (mode !== \"gif-mode\") {\n addComponent(buttonBar);\n addComponent(unmuteButton);\n addComponent(unmuteButtonText);\n addComponent(muteButton);\n addComponent(muteButtonText);\n addComponent(playButton);\n addComponent(playButtonText);\n addComponent(pauseButton);\n addComponent(pauseButtonText);\n addComponent(replayButton);\n addComponent(replayButtonText);\n }\n // components = []\n return { videoPlayer, components: [...componentsSet], autoPlayTasks: [...autoPlayTasks] };\n }\n private compileQuestion(\n pageId: string,\n page: BuilderPageDto,\n variableId: string,\n hasMainMedia: boolean,\n ): {\n question: DTextDto;\n buttonBar: DDivDto;\n } {\n // TODO REFACTORE DEFAULT QUESTION TO - (REMOVE USE TEXT1)\n // console.log(page);\n const t = this.currentTheme;\n const q = page.defaultQuestion;\n const text = page.mainText.text;\n\n const questionElement = this.compileMainText(text, !!page.mainText.audioFile, hasMainMedia);\n // initialTasks: Array<PlayAudioTask | DelayTask>;\n const buttons: DButtonDto[] = 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 buttonBar = this.compileButtonBar(buttons);\n return {\n question: questionElement,\n buttonBar,\n };\n }\n\n private compileButtonBar(buttons: Array<DButtonDto>): DDivDto {\n const t = this.currentTheme;\n const isSingle = buttons.length < 2;\n const style: PStyle = isSingle\n ? { ...t.buttonBar.container.base, ...t.buttonBar.container.whenSingle }\n : { ...t.buttonBar.container.base, ...t.buttonBar.container.whenMany };\n // console.log(t);\n const buttonBar: DDivDto = {\n _tag: \"div\",\n children: [...buttons],\n style,\n };\n return buttonBar;\n }\n private compileButton(\n buttonDto: BuilderPageDto[\"nextButton\"],\n options:\n | { kind: \"response-button\"; questionId: string; questionText: string }\n | { kind: \"next-button\" },\n ): DButtonDto {\n const { id, value, label } = buttonDto;\n const t = this.currentTheme;\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 ? t.buttonBar.responseButtons.dontKnow : t.buttonBar.responseButtons.normal;\n if (t.buttonBar.vibrateMs) {\n onclickAction.vibrateMs = t.buttonBar.vibrateMs;\n }\n\n const btn: DButtonDto = {\n _tag: \"button\",\n innerText: label,\n style: { ...btnStyles.btn.css, ...btnStyles.btn.cssEnabled },\n onClick: onclickAction,\n };\n\n return btn;\n }\n}\n","const UN_MUTE = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 15.5661V23.4339H13.3333L20 29.9903V9.00969L13.3333 15.5661H8ZM26 19.5C26 17.179 24.64 15.1859 22.6667 14.2155V24.7714C24.64 23.8141 26 21.821 26 19.5ZM22.6667 8V10.7013C26.52 11.829 29.3333 15.3432 29.3333 19.5C29.3333 23.6568 26.52 27.171 22.6667 28.2987V31C28.0133 29.8067 32 25.1123 32 19.5C32 13.8877 28.0133 9.19327 22.6667 8Z\" fill=\"#164AC4\"/>\n</svg>`;\n\nconst MUTE = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M26 20C26 17.64 24.64 15.6133 22.6667 14.6267V17.5733L25.9333 20.84C25.9733 20.5733 26 20.2933 26 20ZM29.3333 20C29.3333 21.2533 29.0667 22.4267 28.6133 23.52L30.6267 25.5333C31.5067 23.88 32 22 32 20C32 14.2933 28.0133 9.52 22.6667 8.30667V11.0533C26.52 12.2 29.3333 15.7733 29.3333 20ZM9.69333 8L8 9.69333L14.3067 16H8V24H13.3333L20 30.6667V21.6933L25.6667 27.36C24.7733 28.0533 23.7733 28.6 22.6667 28.9333V31.68C24.5067 31.2667 26.1733 30.4133 27.5867 29.2667L30.3067 32L32 30.3067L20 18.3067L9.69333 8ZM20 9.33333L17.2133 12.12L20 14.9067V9.33333Z\" fill=\"#164AC4\"/>\n</svg>`;\n\nconst PLAY_SOUND = `\n\n<svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_1_299)\">\n <path d=\"M13.5 19.5C16.8137 19.5 19.5 16.8137 19.5 13.5C19.5 10.1863 16.8137 7.5 13.5 7.5C10.1863 7.5 7.5 10.1863 7.5 13.5C7.5 16.8137 10.1863 19.5 13.5 19.5Z\" fill=\"#164AC4\"/>\n <path d=\"M13.5 22.5C9.495 22.5 1.5 24.51 1.5 28.5V31.5H25.5V28.5C25.5 24.51 17.505 22.5 13.5 22.5ZM25.14 8.04L22.62 10.575C23.88 12.345 23.88 14.64 22.62 16.41L25.14 18.945C28.17 15.915 28.17 11.34 25.14 8.04ZM30.105 3L27.66 5.445C31.815 9.975 31.815 16.785 27.66 21.555L30.105 24C35.955 18.165 35.97 9.075 30.105 3Z\" fill=\"#164AC4\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1_299\">\n <rect width=\"36\" height=\"36\" fill=\"white\"/>\n </clipPath>\n </defs>\n</svg>`;\n\nconst CLOSE = `\n<svg width=\"40\" height=\"41\" viewBox=\"0 0 40 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 0.799988C8.94 0.799988 0 9.73999 0 20.8C0 31.86 8.94 40.8 20 40.8C31.06 40.8 40 31.86 40 20.8C40 9.73999 31.06 0.799988 20 0.799988ZM30 27.98L27.18 30.8L20 23.62L12.82 30.8L10 27.98L17.18 20.8L10 13.62L12.82 10.8L20 17.98L27.18 10.8L30 13.62L22.82 20.8L30 27.98Z\" fill=\"white\"/>\n</svg>`;\n\nconst COMPLETED = `\n<svg width=\"36\" height=\"27\" viewBox=\"0 0 36 27\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.2 21.2L2.8 12.8L0 15.6L11.2 26.8L35.2 2.8L32.4 0L11.2 21.2Z\" fill=\"white\"/>\n</svg>`;\n\nconst VIDEO_PLAY = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 12V28L29 20L16 12Z\" fill=\"#164AC4\"/>\n</svg>`;\n\nconst VIDEO_REPLAY = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 12.8V8L13.75 14L20 20V15.2C24.1375 15.2 27.5 18.428 27.5 22.4C27.5 26.372 24.1375 29.6 20 29.6C15.8625 29.6 12.5 26.372 12.5 22.4H10C10 27.704 14.475 32 20 32C25.525 32 30 27.704 30 22.4C30 17.096 25.525 12.8 20 12.8Z\" fill=\"#164AC4\"/>\n</svg>`;\n\nconst HELP = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 0C8.96 0 0 8.96 0 20C0 31.04 8.96 40 20 40C31.04 40 40 31.04 40 20C40 8.96 31.04 0 20 0ZM22 34H18V30H22V34ZM26.14 18.5L24.34 20.34C22.9 21.8 22 23 22 26H18V25C18 22.8 18.9 20.8 20.34 19.34L22.82 16.82C23.56 16.1 24 15.1 24 14C24 11.8 22.2 10 20 10C17.8 10 16 11.8 16 14H12C12 9.58 15.58 6 20 6C24.42 6 28 9.58 28 14C28 15.76 27.28 17.36 26.14 18.5Z\" fill=\"#164AC4\"/>\n</svg>`;\n\nconst VIDEO_PAUSE = `\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 28H17.6667V12H13V28ZM22.3333 12V28H27V12H22.3333Z\" fill=\"#164AC4\"/>\n</svg>`;\n\n/**\n * Will only work in browsers (btoa-function.)\n * @param svg\n */\nconst createDataUrl = (svg: string) => {\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\nexport const THEME_2_ICONS = {\n unMute: {\n svg: UN_MUTE,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTggMTUuNTY2MVYyMy40MzM5SDEzLjMzMzNMMjAgMjkuOTkwM1Y5LjAwOTY5TDEzLjMzMzMgMTUuNTY2MUg4Wk0yNiAxOS41QzI2IDE3LjE3OSAyNC42NCAxNS4xODU5IDIyLjY2NjcgMTQuMjE1NVYyNC43NzE0QzI0LjY0IDIzLjgxNDEgMjYgMjEuODIxIDI2IDE5LjVaTTIyLjY2NjcgOFYxMC43MDEzQzI2LjUyIDExLjgyOSAyOS4zMzMzIDE1LjM0MzIgMjkuMzMzMyAxOS41QzI5LjMzMzMgMjMuNjU2OCAyNi41MiAyNy4xNzEgMjIuNjY2NyAyOC4yOTg3VjMxQzI4LjAxMzMgMjkuODA2NyAzMiAyNS4xMTIzIDMyIDE5LjVDMzIgMTMuODg3NyAyOC4wMTMzIDkuMTkzMjcgMjIuNjY2NyA4WiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\n },\n\n mute: {\n svg: MUTE,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTI2IDIwQzI2IDE3LjY0IDI0LjY0IDE1LjYxMzMgMjIuNjY2NyAxNC42MjY3VjE3LjU3MzNMMjUuOTMzMyAyMC44NEMyNS45NzMzIDIwLjU3MzMgMjYgMjAuMjkzMyAyNiAyMFpNMjkuMzMzMyAyMEMyOS4zMzMzIDIxLjI1MzMgMjkuMDY2NyAyMi40MjY3IDI4LjYxMzMgMjMuNTJMMzAuNjI2NyAyNS41MzMzQzMxLjUwNjcgMjMuODggMzIgMjIgMzIgMjBDMzIgMTQuMjkzMyAyOC4wMTMzIDkuNTIgMjIuNjY2NyA4LjMwNjY3VjExLjA1MzNDMjYuNTIgMTIuMiAyOS4zMzMzIDE1Ljc3MzMgMjkuMzMzMyAyMFpNOS42OTMzMyA4TDggOS42OTMzM0wxNC4zMDY3IDE2SDhWMjRIMTMuMzMzM0wyMCAzMC42NjY3VjIxLjY5MzNMMjUuNjY2NyAyNy4zNkMyNC43NzMzIDI4LjA1MzMgMjMuNzczMyAyOC42IDIyLjY2NjcgMjguOTMzM1YzMS42OEMyNC41MDY3IDMxLjI2NjcgMjYuMTczMyAzMC40MTMzIDI3LjU4NjcgMjkuMjY2N0wzMC4zMDY3IDMyTDMyIDMwLjMwNjdMMjAgMTguMzA2N0w5LjY5MzMzIDhaTTIwIDkuMzMzMzNMMTcuMjEzMyAxMi4xMkwyMCAxNC45MDY3VjkuMzMzMzNaIiBmaWxsPSIjMTY0QUM0Ii8+Cjwvc3ZnPg==\",\n },\n\n audioPlay: {\n svg: PLAY_SOUND,\n dataUrl:\n \"data:image/svg+xml;base64,Cgo8c3ZnIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xXzI5OSkiPgogICAgPHBhdGggZD0iTTEzLjUgMTkuNUMxNi44MTM3IDE5LjUgMTkuNSAxNi44MTM3IDE5LjUgMTMuNUMxOS41IDEwLjE4NjMgMTYuODEzNyA3LjUgMTMuNSA3LjVDMTAuMTg2MyA3LjUgNy41IDEwLjE4NjMgNy41IDEzLjVDNy41IDE2LjgxMzcgMTAuMTg2MyAxOS41IDEzLjUgMTkuNVoiIGZpbGw9IiMxNjRBQzQiLz4KICAgIDxwYXRoIGQ9Ik0xMy41IDIyLjVDOS40OTUgMjIuNSAxLjUgMjQuNTEgMS41IDI4LjVWMzEuNUgyNS41VjI4LjVDMjUuNSAyNC41MSAxNy41MDUgMjIuNSAxMy41IDIyLjVaTTI1LjE0IDguMDRMMjIuNjIgMTAuNTc1QzIzLjg4IDEyLjM0NSAyMy44OCAxNC42NCAyMi42MiAxNi40MUwyNS4xNCAxOC45NDVDMjguMTcgMTUuOTE1IDI4LjE3IDExLjM0IDI1LjE0IDguMDRaTTMwLjEwNSAzTDI3LjY2IDUuNDQ1QzMxLjgxNSA5Ljk3NSAzMS44MTUgMTYuNzg1IDI3LjY2IDIxLjU1NUwzMC4xMDUgMjRDMzUuOTU1IDE4LjE2NSAzNS45NyA5LjA3NSAzMC4xMDUgM1oiIGZpbGw9IiMxNjRBQzQiLz4KICA8L2c+CiAgPGRlZnM+CiAgICA8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMjk5Ij4KICAgICAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsPSJ3aGl0ZSIvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+Cjwvc3ZnPg==\",\n },\n\n videoPause: {\n svg: VIDEO_PAUSE,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTEzIDI4SDE3LjY2NjdWMTJIMTNWMjhaTTIyLjMzMzMgMTJWMjhIMjdWMTJIMjIuMzMzM1oiIGZpbGw9IiMxNjRBQzQiLz4KPC9zdmc+\",\n },\n\n videoPlay: {\n svg: VIDEO_PLAY,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTE2IDEyVjI4TDI5IDIwTDE2IDEyWiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\n },\n\n videoReplay: {\n svg: VIDEO_REPLAY,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDEyLjhWOEwxMy43NSAxNEwyMCAyMFYxNS4yQzI0LjEzNzUgMTUuMiAyNy41IDE4LjQyOCAyNy41IDIyLjRDMjcuNSAyNi4zNzIgMjQuMTM3NSAyOS42IDIwIDI5LjZDMTUuODYyNSAyOS42IDEyLjUgMjYuMzcyIDEyLjUgMjIuNEgxMEMxMCAyNy43MDQgMTQuNDc1IDMyIDIwIDMyQzI1LjUyNSAzMiAzMCAyNy43MDQgMzAgMjIuNEMzMCAxNy4wOTYgMjUuNTI1IDEyLjggMjAgMTIuOFoiIGZpbGw9IiMxNjRBQzQiLz4KPC9zdmc+\",\n },\n\n close: {\n svg: CLOSE,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQxIiB2aWV3Qm94PSIwIDAgNDAgNDEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDAuNzk5OTg4QzguOTQgMC43OTk5ODggMCA5LjczOTk5IDAgMjAuOEMwIDMxLjg2IDguOTQgNDAuOCAyMCA0MC44QzMxLjA2IDQwLjggNDAgMzEuODYgNDAgMjAuOEM0MCA5LjczOTk5IDMxLjA2IDAuNzk5OTg4IDIwIDAuNzk5OTg4Wk0zMCAyNy45OEwyNy4xOCAzMC44TDIwIDIzLjYyTDEyLjgyIDMwLjhMMTAgMjcuOThMMTcuMTggMjAuOEwxMCAxMy42MkwxMi44MiAxMC44TDIwIDE3Ljk4TDI3LjE4IDEwLjhMMzAgMTMuNjJMMjIuODIgMjAuOEwzMCAyNy45OFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPg==\",\n },\n\n complete: {\n svg: COMPLETED,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjM2IiBoZWlnaHQ9IjI3IiB2aWV3Qm94PSIwIDAgMzYgMjciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTExLjIgMjEuMkwyLjggMTIuOEwwIDE1LjZMMTEuMiAyNi44TDM1LjIgMi44TDMyLjQgMEwxMS4yIDIxLjJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4=\",\n },\n\n help: {\n svg: HELP,\n dataUrl:\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDBDOC45NiAwIDAgOC45NiAwIDIwQzAgMzEuMDQgOC45NiA0MCAyMCA0MEMzMS4wNCA0MCA0MCAzMS4wNCA0MCAyMEM0MCA4Ljk2IDMxLjA0IDAgMjAgMFpNMjIgMzRIMThWMzBIMjJWMzRaTTI2LjE0IDE4LjVMMjQuMzQgMjAuMzRDMjIuOSAyMS44IDIyIDIzIDIyIDI2SDE4VjI1QzE4IDIyLjggMTguOSAyMC44IDIwLjM0IDE5LjM0TDIyLjgyIDE2LjgyQzIzLjU2IDE2LjEgMjQgMTUuMSAyNCAxNEMyNCAxMS44IDIyLjIgMTAgMjAgMTBDMTcuOCAxMCAxNiAxMS44IDE2IDE0SDEyQzEyIDkuNTggMTUuNTggNiAyMCA2QzI0LjQyIDYgMjggOS41OCAyOCAxNEMyOCAxNS43NiAyNy4yOCAxNy4zNiAyNi4xNCAxOC41WiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\n },\n};\n","// import { IconUrls } from \"./icon-urls\";\nimport { BuilderOptionTheme, IDefaultTheme } from \"./IDefault-theme\";\nimport { CssTheme } from \"./css-theme\";\nimport { PStyle } from \"@media-quest/engine\";\nimport { THEME_2_ICONS } from \"./icons\";\n\nconst translate = (pos: { x?: number; y?: number }) => {\n const x = pos.x || 0;\n const y = pos.y || 0;\n return `translate(${x}%, ${y}%)`;\n};\nexport const translateY50 = translate({ y: 50 });\nexport const translateX50 = translate({ x: -50 });\nconst translateX50Y50 = translate({ x: -50, y: 50 });\n\nconst Colors = {\n primary: \"#164AC4\",\n secondary: \"#E8F0FE\",\n text: \"#0D1E45\",\n white: \"#ffffff\",\n backgroundGray: \"#F0F0F0\",\n backgroundWhite: \"white\",\n // progressBackGround: \"#164AC4\",\n // progressForGround: \"#F5F5F5\",\n\n // red: \"red\",\n // yellow: \"yellow\",\n};\n\nconst MAIN_TEXT_FONT_SIZE = 35;\nconst MAIN_TEXT_LINE_HEIGHT = 1.2;\nconst fraction = 472.6 / 600;\n\nconst LAYER_0 = 0;\nconst LAYER_1 = 1;\nconst LAYER_2 = 2;\nconst LAYER_3 = 3;\nconst LAYER_4 = 4;\nconst LAYER_5 = 5;\nconst W_M1 = 6;\nconst W_M2 = 4.5;\nconst W_M3 = 3;\n\nconst W_M4 = 1.5;\n\nconst H_M1 = 5;\nconst H_M2 = 3.75;\nconst H_M3 = 2.5;\n\nconst H_M4 = 1.25;\n\nconst W_MAX = 100 - W_M1 * 2;\n\nconst PROGRESS_BAR_HEIGHT = 2;\n\nconst AUDIO_ICON_WIDTH = 10;\nconst AUDIO_ICON_HEIGHT = AUDIO_ICON_WIDTH * fraction;\n// const AUDIO_ICON_HEIGHT = AUDIO_ICON_WIDTH * fraction;\nconst AUDIO_ICON_LEFT = W_M1 + W_M2 + W_M3;\n\nconst Q_AREA_HEIGHT = 32;\nconst Q_AREA_BOTTOM = 2 * H_M1 + H_M2;\nconst Q_AREA_LEFT = W_M1 + W_M2;\nconst Q_AREA_WIDTH = W_MAX - W_M2 - W_M2;\nconst Q_AREA_TOP = 100 - Q_AREA_HEIGHT - Q_AREA_BOTTOM;\n\nconst MEDIA_HEIGHT = 34;\n// const MEDIA_WIDTH = 100 - 2 * W_M1 - 2 * W_M2;\nconst MEDIA_TOP = H_M1 + H_M2;\nconst MEDIA_BOTTOM = MEDIA_TOP + MEDIA_HEIGHT;\n\nconst MEDIA_LEFT = W_M1 + W_M2;\n\nconst VIDEO_BUTTONS_WIDTH = 8;\nconst VIDEO_BUTTONS_HEIGHT = VIDEO_BUTTONS_WIDTH * fraction;\nconst VIDEO_CONTROLS_WIDTH = VIDEO_BUTTONS_WIDTH * 2 + 4 * W_M4;\nconst VIDEO_CONTROLS_HEIGHT = VIDEO_BUTTONS_HEIGHT + 2 * H_M4 + 2;\nconst VIDEO_CONTROLS_LEFT = 50 - VIDEO_CONTROLS_WIDTH / 2;\nconst VIDEO_CONTROLS_RIGHT = 50 - VIDEO_CONTROLS_WIDTH / 2;\nconst VIDEO_CONTROLS_TOP = MEDIA_BOTTOM - 1;\nconst VIDEO_CONTROLS_BOTTOM = 100 - VIDEO_CONTROLS_HEIGHT - VIDEO_CONTROLS_TOP;\n\nconst PAGE_BACKGROUND_BOTTOM = H_M1 + H_M1;\nconst PAGE_BACKGROUND_HEIGHT = 100 - PAGE_BACKGROUND_BOTTOM - H_M1;\nconst BUTTON_BAR_WIDTH = Q_AREA_WIDTH - 2 * W_M3;\nconst MAIN_TEXT_WIDE = Q_AREA_WIDTH - 2 * W_M3;\nconst MAIN_TEXT_NARROW = MAIN_TEXT_WIDE - AUDIO_ICON_WIDTH - W_M3;\n\nconst btnTextBase: PStyle = {\n fontSize: { _unit: \"px\", value: 25 },\n bottom: VIDEO_CONTROLS_BOTTOM + 1.2,\n zIndex: LAYER_5,\n width: VIDEO_CONTROLS_WIDTH / 2,\n textAlign: \"center\",\n visibility: \"hidden\",\n margin: { _unit: \"px\", value: 0 },\n // backgroundColor: Colors.yellow,\n};\n\nconst muteUnmuteText: PStyle = { ...btnTextBase, right: VIDEO_CONTROLS_RIGHT };\nconst playPauseText: PStyle = { ...btnTextBase, left: VIDEO_CONTROLS_LEFT };\nconst replayText: PStyle = {\n ...btnTextBase,\n width: VIDEO_CONTROLS_WIDTH,\n left: VIDEO_CONTROLS_LEFT,\n // backgroundColor: Colors.yellow,\n visibility: \"hidden\",\n};\n\nconst playPauseBase: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle } = {\n css: {\n width: VIDEO_BUTTONS_WIDTH,\n height: VIDEO_BUTTONS_HEIGHT,\n top: MEDIA_BOTTOM,\n left: VIDEO_CONTROLS_LEFT + W_M4,\n zIndex: LAYER_5,\n visibility: \"hidden\",\n },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n};\n\nconst replayButtonStyles: PStyle = {\n width: VIDEO_BUTTONS_WIDTH,\n height: VIDEO_BUTTONS_HEIGHT,\n top: MEDIA_BOTTOM,\n // backgroundColor: \"red\",\n left: VIDEO_CONTROLS_LEFT + VIDEO_CONTROLS_WIDTH / 2,\n transform: translateX50,\n zIndex: LAYER_5,\n visibility: \"hidden\",\n cursor: \"pointer\",\n};\n\nconst muteUnMuteStyles: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle } = {\n css: {\n width: VIDEO_BUTTONS_WIDTH,\n height: VIDEO_BUTTONS_HEIGHT,\n top: MEDIA_BOTTOM,\n right: VIDEO_CONTROLS_RIGHT + W_M4,\n zIndex: LAYER_5,\n cursor: \"pointer\",\n // transform: \"translateX: 100%\",\n },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n};\n\nconst FONT_QUESTION = 20;\nconst FONT_ = 20;\nconst responseButtonBaseCss = (): CssTheme => ({\n css: {\n backgroundColor: Colors.primary,\n borderColor: Colors.primary,\n textColor: Colors.white,\n fontWeight: 600,\n fontSize: { _unit: \"px\", value: 28 },\n lineHeight: 1.1,\n maxWidth: 25,\n // width: 20,\n // flex: \"0 0 auto\",\n paddingLeft: { _unit: \"px\", value: 10 },\n paddingTop: { _unit: \"px\", value: 5 },\n paddingBottom: { _unit: \"px\", value: 5 },\n paddingRight: { _unit: \"px\", value: 10 },\n borderRadius: { _unit: \"px\", value: 20 },\n borderStyle: \"solid\",\n boxShadow: \"3px 3px gray\",\n position: \"relative\",\n display: \"block\",\n cursor: \"pointer\",\n // maxWidth: { _unit: \"percent\", value: 10 },\n },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\n});\nexport const primaryButton = (overridesCss: PStyle): BuilderOptionTheme => {\n const base = responseButtonBaseCss();\n const optionTheme: BuilderOptionTheme = {\n name: \"primary-button\",\n normal: {\n btn: {\n css: {\n ...base.css,\n ...overridesCss,\n backgroundColor: Colors.primary,\n borderColor: Colors.primary,\n textColor: Colors.white,\n },\n cssDisabled: base.cssDisabled,\n cssEnabled: base.cssEnabled,\n },\n divider: {},\n text1: {},\n text2: {},\n },\n\n dontKnow: {\n btn: {\n css: {\n ...base.css,\n ...overridesCss,\n backgroundColor: Colors.secondary,\n borderColor: Colors.secondary,\n textColor: Colors.primary,\n },\n cssEnabled: base.cssEnabled,\n cssDisabled: base.cssDisabled,\n },\n text1: {},\n text2: {},\n divider: {},\n },\n };\n\n return optionTheme;\n};\n\nexport const Theme2: IDefaultTheme = {\n name: \"theme2\",\n schemaBackgroundColor: Colors.white,\n dimensions: { baseHeight: 1300, baseWidth: 1024 },\n pageBackGround: {\n style: {\n height: PAGE_BACKGROUND_HEIGHT,\n width: W_MAX,\n bottom: PAGE_BACKGROUND_BOTTOM,\n left: W_M1,\n backgroundColor: Colors.backgroundGray,\n },\n },\n backGroundArea1: {\n style: {\n height: Q_AREA_HEIGHT,\n width: Q_AREA_WIDTH,\n left: Q_AREA_LEFT,\n bottom: Q_AREA_BOTTOM,\n backgroundColor: Colors.white,\n },\n },\n progressBar: {\n width: W_MAX,\n height: PROGRESS_BAR_HEIGHT,\n bottom: H_M1,\n left: W_M1,\n backgroundStyles: {\n backgroundColor: Colors.backgroundGray,\n borderRadius: { _unit: \"px\", value: 10 },\n },\n progressStyles: {\n backgroundColor: Colors.primary,\n borderRadius: { _unit: \"px\", value: 10 },\n },\n text: {\n textType: \"page-progress\",\n style: { fontSize: { _unit: \"px\", value: 20 }, x: 81.5, y: 2.5 },\n },\n },\n videoPlayer: {\n playButton: {\n text: { text: \"Spill av\", css: { ...playPauseText } },\n iconUrl: THEME_2_ICONS.videoPlay.dataUrl,\n ...playPauseBase,\n },\n pauseButton: {\n text: { text: \"Pause\", css: { ...playPauseText } },\n iconUrl: THEME_2_ICONS.videoPause.dataUrl,\n ...playPauseBase,\n },\n buttonBar: {\n width: VIDEO_CONTROLS_WIDTH,\n zIndex: LAYER_4,\n top: VIDEO_CONTROLS_TOP,\n left: VIDEO_CONTROLS_LEFT,\n backgroundColor: Colors.white,\n height: VIDEO_CONTROLS_HEIGHT,\n borderRadius: { _unit: \"px\", value: 16 },\n },\n muteButton: {\n text: { text: \"Lyd av\", css: { ...muteUnmuteText } },\n iconUrl: THEME_2_ICONS.mute.dataUrl,\n css: muteUnMuteStyles.css,\n },\n\n unMuteButton: {\n iconUrl: THEME_2_ICONS.unMute.dataUrl,\n css: muteUnMuteStyles.css,\n text: { text: \"Lyd på\", css: { ...muteUnmuteText } },\n },\n\n replayButton: {\n css: replayButtonStyles,\n cssDisabled: {},\n cssEnabled: {},\n iconUrl: THEME_2_ICONS.videoReplay.dataUrl,\n text: { text: \"Spill av på nytt\", css: replayText },\n },\n\n videoElement: {\n css: {\n height: MEDIA_HEIGHT,\n top: MEDIA_TOP,\n transform: translateX50,\n left: 50,\n width: 100,\n zIndex: LAYER_2,\n visibility: \"visible\",\n },\n },\n },\n image: {\n style: {\n height: MEDIA_HEIGHT,\n // Center image, with dynamic width.\n left: 50,\n transform: translateX50,\n top: MEDIA_TOP,\n boxShadow: \"3px 3px\",\n },\n },\n\n mainText: {\n base: {\n text: {\n width: MAIN_TEXT_WIDE,\n left: W_M1 + W_M2 + W_M3,\n top: Q_AREA_TOP + H_M3,\n backgroundColor: Colors.white,\n textAlign: \"left\",\n textColor: \"black\",\n fontSize: { _unit: \"px\", value: 35 },\n lineHeight: 1.2,\n },\n audio: {\n iconUrl: THEME_2_ICONS.audioPlay.dataUrl,\n css: {\n height: AUDIO_ICON_HEIGHT,\n width: AUDIO_ICON_WIDTH,\n top: Q_AREA_TOP + H_M3,\n left: W_M1 + W_M2 + W_M3,\n cursor: \"pointer\",\n // transform: \"translateY(100%)\",\n opacity: 0.8,\n visibility: \"visible\",\n // backgroundColor: \"green\",\n },\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\n },\n },\n notMediaHasAudio: {\n text: { width: MAIN_TEXT_NARROW, left: W_M1 + W_M2 + W_M3 + AUDIO_ICON_WIDTH + W_M3 },\n audio: {},\n },\n hasMediaHasAudio: {\n text: {\n width: MAIN_TEXT_NARROW,\n left: W_M1 + W_M2 + W_M3 + AUDIO_ICON_WIDTH + W_M3,\n },\n audio: {},\n },\n notMediaNotAudio: { text: {} },\n hasMediaNotAudio: { text: {} },\n },\n buttonBar: {\n vibrateMs: 60,\n container: {\n base: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n width: BUTTON_BAR_WIDTH,\n height: 6,\n bottom: Q_AREA_BOTTOM + H_M3,\n left: Q_AREA_LEFT + W_M3,\n // backgroundColor: \"green\",\n gap: { _unit: \"px\", value: 40 },\n alignItems: \"stretch\",\n },\n whenSingle: { justifyContent: \"center\" },\n whenMany: { justifyContent: \"flex-start\" },\n },\n\n nextButtonTheme: primaryButton({}),\n responseButtons: primaryButton({}),\n },\n};\n","import type { BuilderPageType } from \"./page/Builder-page\";\nimport { BuilderPage } from \"./page/Builder-page\";\nimport type {\n ExcludeByPageAction,\n ExcludeByTagAction,\n JumpToPageAction,\n RuleCustomVariable,\n} from \"./rulebuilder\";\nimport { BuilderRule, RuleInput } from \"./rulebuilder\";\nimport type { RuleQuestionVariable } from \"./rulebuilder/RuleVariable\";\nimport { BuilderTag } from \"./tag/BuilderTag\";\nimport { DefaultThemeCompiler } from \"./theme/default-theme-compiler\";\nimport { ImageFile } from \"./media-files\";\nimport { DUtil } from \"@media-quest/engine\";\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\";\nimport { BuilderMainVideoDto } from \"./BuilderMainVideoDto\";\nimport { BuilderMainImageDto } from \"./BuilderMainImageDto\";\nimport { BuilderSchemaDto } from \"./Builder-schema-dto\";\n\nconst U = DUtil;\n\nexport class BuilderSchema {\n readonly prefix: SchemaPrefix;\n public readonly compiler = new DefaultThemeCompiler();\n\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 = {\n blockAutoplayQuestion: false,\n blockAutoplayVideo: false,\n mediaAssets: null,\n },\n ): CompilerOutput {\n // const moduleDto = this.toJson();\n let builderSchema = BuilderSchema.fromJson(this.toJson());\n\n // Override with compiler options.\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\n let moduleDto = builderSchema.toJson();\n console.log(options.mediaAssets);\n if (options.mediaAssets) {\n const { videoFilesBaseUrl, audioFilesBaseUrl, imageFilesBaseUrl } = options.mediaAssets;\n moduleDto = BuilderSchemaDto.overrideAllMediaUrls(moduleDto, {\n videoFilesBaseUrl,\n audioFilesBaseUrl,\n imageFilesBaseUrl,\n });\n }\n\n const codebook = CodeBook.fromSchema(moduleDto);\n const schema = this.compiler.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 { CodeBookQuestionVariable, CodebookPredefinedVariable } from \"./codebook-variable\";\nimport { SumScoreVariableDto } from \"../sum-score/sum-score-variable\";\nimport { BuilderSchemaDto } from \"../Builder-schema-dto\";\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 const pageIncludedInSumScoresArray = page.includedInSumScores ?? [];\n\n const includedInSumScores: SumScoreVariableDto[] = [];\n pageIncludedInSumScoresArray.forEach((p) => {\n sumScoreVariables.forEach((ssv) => {\n if (p.sumScoreVariableId === ssv.id) {\n includedInSumScores.push(ssv);\n }\n });\n });\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\";\n\nimport { BuilderSchemaDto } from \"./Builder-schema-dto\";\n\n/**\n * This interface is ment to define all information that a schema-admin app\n * needs to generate a dynamic form for setting values for predefined variables.\n */\nexport interface SchemaConfig {\n readonly schemaName: string;\n readonly schemaId: string;\n readonly schemaPrefix: string;\n readonly variables: ReadonlyArray<CodebookPredefinedVariable>;\n}\n\nexport const SchemaConfig = {\n fromSchema: (schema: BuilderSchemaDto): SchemaConfig => {\n const variables = schema.predefinedVariables ?? [];\n return {\n schemaId: schema.id,\n schemaName: schema.name,\n schemaPrefix: schema.prefix,\n variables,\n };\n },\n} as const;\n","import { PageID, SumScoreVariableID } from \"../primitives/ID\";\r\nimport { BuilderObject } from \"../BuilderObject\";\r\nimport { DUtil } from \"@media-quest/engine\";\r\nimport { BuilderPage } from \"../page/Builder-page\";\r\n\r\nexport interface SumScoreVariableDto {\r\n id: SumScoreVariableID;\r\n name: string;\r\n description: string;\r\n useAvg: boolean;\r\n}\r\nexport class SumScoreVariable extends BuilderObject<\r\n \"builder-sum-score-variable\",\r\n SumScoreVariableDto\r\n> {\r\n readonly objectType = \"builder-sum-score-variable\";\r\n readonly id: SumScoreVariableID;\r\n private _useAvg = true;\r\n private _name = \"\";\r\n private _description = \"\";\r\n private _error = \"\";\r\n private _usedIn: ReadonlyArray<BuilderPage> = [];\r\n // private _basedOn = new Map<pageId: Page>()\r\n get usedIn() {\r\n return [...this._usedIn];\r\n }\r\n\r\n // private _basedOn: Array<{ varId: string }> = [];\r\n public static readonly create = (data: {\r\n name: string;\r\n description: string;\r\n useAvg: boolean;\r\n }): SumScoreVariable => {\r\n const id = SumScoreVariableID.create();\r\n return new SumScoreVariable({ id, ...data });\r\n };\r\n\r\n get hasErrors() {\r\n return this._error.length !== 0;\r\n }\r\n\r\n public static fromDto = (dto: SumScoreVariableDto): SumScoreVariable => {\r\n return new SumScoreVariable(dto);\r\n };\r\n\r\n private constructor(dto: SumScoreVariableDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this._name = dto.name;\r\n this._useAvg = dto.useAvg;\r\n this._description = dto.description;\r\n }\r\n toJson(): SumScoreVariableDto {\r\n const dto: SumScoreVariableDto = {\r\n description: this.description,\r\n id: this.id,\r\n name: this.name,\r\n useAvg: this.useAvg,\r\n };\r\n return dto;\r\n }\r\n clone(): SumScoreVariableDto {\r\n const id = SumScoreVariableID.create();\r\n const dto = this.toJson();\r\n return { ...dto, id };\r\n }\r\n\r\n /** @internal*/\r\n _update(data: { name?: string; description?: string; useAvg?: boolean }) {\r\n const d = data ?? {};\r\n\r\n if (DUtil.isString(d.name)) {\r\n this._name = d.name;\r\n }\r\n if (DUtil.isString(d.description)) {\r\n this._description = d.description;\r\n }\r\n if (DUtil.isBool(d.useAvg)) {\r\n this._useAvg = d.useAvg;\r\n }\r\n }\r\n\r\n /**\r\n * @internal - used by sum-score-variable-collection.\r\n */\r\n _setError(error: \"\" | \"Duplicate name\") {\r\n this._error = error;\r\n }\r\n /** @internal - used by sum-score-variable-collection */\r\n _setUsedInPages(pages: BuilderPage[]) {\r\n this._usedIn = [...pages];\r\n }\r\n\r\n get name() {\r\n return this._name;\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n get useAvg() {\r\n return this._useAvg;\r\n }\r\n}\r\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 { SchemaID } from \"./primitives/ID\";\nimport { SchemaPrefixValue } from \"./primitives/schema-prefix\";\nimport { AudioFile, ImageFile } from \"./media-files\";\nimport type { BuilderPageDto } from \"./page/Builder-page\";\nimport { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\nimport { SumScoreVariableDto } from \"./sum-score/sum-score-variable\";\nimport type { BuilderRuleDto } from \"./rulebuilder\";\nimport type { BuilderTagDto } from \"./tag/BuilderTag\";\n\nconst setUrl = <T extends { downloadUrl: string }>(dto: T, newUrl: string): T => {\n return { ...dto, downloadUrl: newUrl };\n};\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\nconst blockAutoplayVideo = (dto: BuilderPageDto): BuilderPageDto => {\n if (dto.mainMedia && dto.mainMedia.kind === \"main-video\") {\n dto.mainMedia.mode = \"optional\";\n }\n return dto;\n};\n\nconst overrideVideoUrl = (dto: BuilderPageDto, baseUrl: string): BuilderPageDto => {\n const mainMedia = dto.mainMedia;\n if (mainMedia && mainMedia.kind === \"main-video\") {\n const url = [baseUrl, mainMedia.file.id].join(\"/\");\n const file = { ...mainMedia.file, downloadUrl: url };\n dto.mainMedia = { ...mainMedia, file };\n }\n return dto;\n};\nconst overrideImageUrl = (dto: BuilderPageDto, baseUrl: string): BuilderPageDto => {\n const mainMedia = dto.mainMedia;\n if (mainMedia && mainMedia.kind === \"main-image\") {\n const url = [baseUrl, mainMedia.file.id].join(\"/\");\n const file = { ...mainMedia.file, downloadUrl: url };\n dto.mainMedia = { ...mainMedia, file };\n }\n return dto;\n};\nconst overrideAudioUrl = (dto: BuilderPageDto, baseUrl: string): BuilderPageDto => {\n const newAudioFile = { ...dto };\n const audioFile = newAudioFile.mainText.audioFile;\n if (audioFile) {\n const url = [baseUrl, audioFile.id].join(\"/\");\n dto.mainText.audioFile = { ...audioFile, downloadUrl: url };\n }\n return dto;\n};\n\nconst overrideAllMediaUrls = (\n schema: BuilderSchemaDto,\n options: {\n videoFilesBaseUrl: string;\n audioFilesBaseUrl: string;\n imageFilesBaseUrl: string;\n },\n): BuilderSchemaDto => {\n // const videoFolder = [options.baseUrl, options.videoFileFolder].join(\"/\");\n // const audioFolder = [options.baseUrl, options.audioFileFolder].join(\"/\");\n // const imageFolder = [options.baseUrl, options.imageFileFolder].join(\"/\");\n const pages = schema.pages.map((page) => {\n page = overrideVideoUrl(page, options.videoFilesBaseUrl);\n page = overrideImageUrl(page, options.imageFilesBaseUrl);\n page = overrideAudioUrl(page, options.audioFilesBaseUrl);\n return page;\n });\n return { ...schema, pages };\n};\nexport const BuilderSchemaDto = {\n blockAutoplayVideo,\n overrideAllMediaUrls,\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\";\n\nimport { BuilderSchemaDto } from \"../Builder-schema-dto\";\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 readonly sumScoreVariableId: SumScoreVariableID;\n readonly name: string;\n readonly description: string;\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 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 sumScoreVariableId: sumScoreVariable.id,\n name: sumScoreVariable.name,\n description: sumScoreVariable.description,\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","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/icon-urls.ts","../src/theme/Default-theme.ts","../src/theme/default-theme-compiler.ts","../src/theme/icons.ts","../src/theme/theme2.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\";\r\nexport { type BuilderPageDto, type BuilderPageType, BuilderPage } from \"./page/Builder-page\";\r\nexport {\r\n type BuilderQuestionDto,\r\n BuilderQuestion,\r\n type BuilderQuestionType,\r\n} from \"./Builder-question\";\r\nexport { BuilderSchema, type BuilderSchemaDto } from \"./Builder-schema\";\r\nexport { BuilderText, type BuilderTextDto } from \"./Builder-text\";\r\nexport { type BuilderMainImageDto } from \"./BuilderMainImageDto\";\r\nexport { BuilderMainText, type BuilderMainTextDto } from \"./BuilderMainText\";\r\nexport { type BuilderMainVideoDto } from \"./BuilderMainVideoDto\";\r\nexport { type BuilderTagDto, BuilderTag } from \"./tag/BuilderTag\";\r\nexport { type AudioFile, type ImageFile, type VideoFile } from \"./media-files\";\r\n// Public Api of rule-builder\r\nexport * from \"./rulebuilder\";\r\nexport { PagePrefix, PagePrefixValue } from \"./primitives/page-prefix\";\r\nexport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\r\nexport * from \"./schema-config\";\r\nexport * from \"./code-book/codebook\";\r\nexport { VarID } from \"./primitives/varID\";\r\nexport * from \"./primitives/ID\";\r\nexport * from \"./code-book/codebook-variable\";\r\nexport * from \"./builder-compiler\";\r\nexport * from \"./sum-score/sum-score\";\r\nexport { SumScoreVariableDto, SumScoreVariable } from \"./sum-score/sum-score-variable\";\r\nexport { SumScoreAnswer } from \"./sum-score/sum-score-answer\";\r\nexport { TagCollection } from \"./tag/Tag-Collection\";\r\nexport * from \"./theme/Default-theme\";\r\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\r\nconst ID_LENGTH = 32;\r\n\r\n// The minimum length of an ID\r\nconst MIN_LENGTH = 10;\r\n\r\nexport type ID<B extends string> = string & { __ID__: B };\r\n\r\nconst isID = <const B extends string>(idName: B, id?: string): id is ID<B> => {\r\n if (typeof id !== \"string\") return false;\r\n return id.length >= MIN_LENGTH;\r\n};\r\n\r\nconst createIDByName = <const B extends string>(idName: B): ID<B> => {\r\n const letters = \"abcdefghijklmnopqrstuvyz\";\r\n const all = letters + letters.toUpperCase();\r\n let result = \"\";\r\n\r\n for (let i = 0; i < ID_LENGTH; i++) {\r\n const char = all.charAt(Math.floor(Math.random() * all.length));\r\n result += char;\r\n }\r\n\r\n return result as ID<B>;\r\n};\r\nconst createDummyID = <const B extends string>(idName: B, letter: string): ID<B> => {\r\n return letter.repeat(ID_LENGTH) as ID<B>;\r\n};\r\ninterface Id<T extends string> {\r\n name: T;\r\n is: (id: string) => id is ID<T>;\r\n validateOrCreate: (id: string) => ID<T>;\r\n validateOrThrow: (id: string) => ID<T>;\r\n create: () => ID<T>;\r\n dummy: {\r\n a: ID<T>;\r\n b: ID<T>;\r\n c: ID<T>;\r\n d: ID<T>;\r\n e: ID<T>;\r\n f: ID<T>;\r\n g: ID<T>;\r\n h: ID<T>;\r\n i: ID<T>;\r\n j: ID<T>;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a object with helper functions for a specific ID type\r\n * @param idName\r\n */\r\nexport const createTypedIdSingleton = <const B extends string>(idName: B): Id<B> => {\r\n /**\r\n * Creates a new ID of the correct type\r\n */\r\n const create = (): ID<B> => createIDByName(idName);\r\n\r\n /**\r\n * Checks if the id is of the correct type\r\n * @param id\r\n */\r\n const is = (id: string): id is ID<B> => isID(idName, id);\r\n\r\n /**\r\n * Checks if the id is of the correct type, if not it throws an error\r\n * @param id\r\n */\r\n const validateOrThrow = (id: string): ID<B> => {\r\n if (!is(id)) {\r\n throw new Error(`Invalid id: ${id}`);\r\n }\r\n return id;\r\n };\r\n\r\n /**\r\n * The lowercase name of the id (SCHEMA, PAGE, etc)\r\n */\r\n const name: B = idName;\r\n\r\n /**\r\n * Ensures that the id is of the correct type, if not it creates a new one\r\n * @param id\r\n */\r\n const validateOrCreate = (id: string): ID<B> => {\r\n return is(id) ? id : create();\r\n };\r\n\r\n const a = createDummyID(idName, \"a\");\r\n const b = createDummyID(idName, \"b\");\r\n const c = createDummyID(idName, \"c\");\r\n const d = createDummyID(idName, \"d\");\r\n const e = createDummyID(idName, \"e\");\r\n const f = createDummyID(idName, \"f\");\r\n const g = createDummyID(idName, \"g\");\r\n const h = createDummyID(idName, \"h\");\r\n const i = createDummyID(idName, \"i\");\r\n const j = createDummyID(idName, \"j\");\r\n const list = [a, b, c, d, e, f, g, h, i, j];\r\n\r\n const dummy = {\r\n a,\r\n b,\r\n c,\r\n d,\r\n e,\r\n f,\r\n g,\r\n h,\r\n i,\r\n j,\r\n list,\r\n };\r\n\r\n return Object.freeze({ create, is, validateOrCreate, validateOrThrow, name, dummy });\r\n};\r\n\r\nexport type SchemaID = ID<\"SCHEMA\">;\r\nexport const SchemaID = createTypedIdSingleton(\"SCHEMA\");\r\n\r\nexport type PageID = ID<\"PAGE\">;\r\nexport const PageID = createTypedIdSingleton(\"PAGE\");\r\n\r\nexport type TagID = ID<\"TAG\">;\r\nexport const TagID = createTypedIdSingleton(\"TAG\");\r\nexport type OptionID = ID<\"OPTION\">;\r\nexport const OptionID = createTypedIdSingleton(\"OPTION\");\r\n\r\nexport type TextID = ID<\"TEXT\">;\r\nexport const TextID = createTypedIdSingleton(\"TEXT\");\r\nexport type QuestionID = ID<\"QUESTION\">;\r\nexport const QuestionID = createTypedIdSingleton(\"QUESTION\");\r\n\r\nexport type SumScoreVariableID = ID<\"SUM_SCORE_VARIABLE\">;\r\nexport const SumScoreVariableID = createTypedIdSingleton(\"SUM_SCORE_VARIABLE\");\r\n","import { BuilderObject } from \"./BuilderObject\";\r\nimport { AudioFile } from \"./media-files\";\r\nimport { OptionID } from \"./primitives/ID\";\r\nimport { PStyle } from \"@media-quest/engine\";\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 readonly cssOverride?: PStyle;\r\n}\r\n\r\nexport class BuilderOption extends BuilderObject<\"builder-question-option\", BuilderOptionDto> {\r\n readonly objectType = \"builder-question-option\";\r\n\r\n id: OptionID;\r\n\r\n value: number;\r\n\r\n label = \"\";\r\n\r\n cssOverride: PStyle = {}\r\n\r\n private _labelAudioFile: AudioFile | false = false;\r\n\r\n get labelAudioFile() {\r\n return this._labelAudioFile;\r\n }\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 if(dto.cssOverride) {\r\n this.cssOverride = { ...dto.cssOverride };\r\n }\r\n // this.theme = dto.theme;\r\n }\r\n public static create(value: number, label: string, css: PStyle = {}) {\r\n const id = OptionID.create();\r\n const dto: BuilderOptionDto = {\r\n id,\r\n value,\r\n label,\r\n cssOverride: css\r\n };\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 cssOverride: {...this.cssOverride}\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\";\r\nimport { BuilderQuestion } from \"../Builder-question\";\r\nimport { BuilderObject } from \"../BuilderObject\";\r\nimport type { BuilderOptionDto } from \"../Builder-option\";\r\nimport { BuilderOption } from \"../Builder-option\";\r\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\r\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\r\nimport type { BuilderMainTextDto } from \"../BuilderMainText\";\r\nimport { BuilderMainText } from \"../BuilderMainText\";\r\nimport { RuleVariableOption, RuleQuestionVariable } from \"../rulebuilder\";\r\nimport { DUtil } from \"@media-quest/engine\";\r\nimport { PagePrefix, PagePrefixValue } from \"../primitives/page-prefix\";\r\nimport { VarID } from \"../primitives/varID\";\r\nimport { SchemaPrefix } from \"../primitives/schema-prefix\";\r\nimport { PageID, SumScoreVariableID } from \"../primitives/ID\";\r\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\r\n\r\nconst U = DUtil;\r\nexport type BuilderPageType = \"info-page\" | \"question\";\r\n\r\nexport interface BuilderPageDto {\r\n readonly id: PageID;\r\n readonly prefix: PagePrefixValue;\r\n _type: BuilderPageType;\r\n mainText: BuilderMainTextDto;\r\n nextButton: BuilderOptionDto;\r\n defaultQuestion: BuilderQuestionDto;\r\n mainMedia?: BuilderMainImageDto | BuilderMainVideoDto;\r\n includedInSumScores: Array<{ sumScoreVariableId: SumScoreVariableID; weight: number }>;\r\n autoplaySequence: Array<string>;\r\n tags: ReadonlyArray<string>;\r\n}\r\n\r\nexport class BuilderPage extends BuilderObject<\"builder-page\", BuilderPageDto> {\r\n readonly objectType: \"builder-page\" = \"builder-page\";\r\n readonly id: PageID;\r\n private _pageType: BuilderPageType;\r\n private _prefix: PagePrefix;\r\n private readonly _tags: Set<string>;\r\n private _backgroundColor = \"#FFFFFF\";\r\n private _includedInSumScores: Map<\r\n SumScoreVariableID,\r\n {\r\n sumScoreVariableId: SumScoreVariableID;\r\n weight: number;\r\n name: string;\r\n description: string;\r\n }\r\n > = new Map();\r\n\r\n mainMedia: BuilderMainVideoDto | BuilderMainImageDto | false = false;\r\n defaultQuestion: BuilderQuestion;\r\n mainText: BuilderMainText;\r\n nextButton = BuilderOption.create(-1, \"Neste\");\r\n\r\n public static create(type: BuilderPageType, _prefix: PagePrefixValue) {\r\n const id = PageID.create();\r\n const mainTextDto: BuilderMainTextDto = {\r\n text: \"\",\r\n audioFile: false,\r\n autoplay: false,\r\n autoplayDelay: 0,\r\n };\r\n const nextButtonDto = BuilderOption.create(-1, \"page-next-button-text\").toJson();\r\n const defaultQuestionDto = BuilderQuestion.create(\"select-one\").toJson();\r\n\r\n const dto: BuilderPageDto = {\r\n _type: type,\r\n autoplaySequence: [],\r\n defaultQuestion: defaultQuestionDto,\r\n id,\r\n nextButton: nextButtonDto,\r\n mainText: mainTextDto,\r\n prefix: _prefix,\r\n includedInSumScores: [],\r\n tags: [],\r\n };\r\n\r\n const page = new BuilderPage(dto);\r\n return page;\r\n }\r\n public static fromJson(dto: BuilderPageDto): BuilderPage {\r\n const page = new BuilderPage(dto);\r\n return page;\r\n }\r\n\r\n private constructor(dto: BuilderPageDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this._pageType = dto._type;\r\n const prefixInstance = PagePrefix.castOrCreateRandom(dto.prefix);\r\n this._prefix = prefixInstance;\r\n this.mainText = BuilderMainText.fromJson(dto.mainText);\r\n this.nextButton = BuilderOption.fromJson(dto.nextButton);\r\n this.defaultQuestion = BuilderQuestion.fromJson(dto.defaultQuestion);\r\n const tagList: string[] = Array.isArray(dto.tags) ? dto.tags : [];\r\n const sumScores = Array.isArray(dto.includedInSumScores) ? dto.includedInSumScores : [];\r\n sumScores.forEach((item) => {\r\n this._includedInSumScores.set(item.sumScoreVariableId, {\r\n sumScoreVariableId: item.sumScoreVariableId,\r\n weight: item.weight,\r\n name: \"\",\r\n description: \"\",\r\n });\r\n });\r\n this._tags = new Set(tagList);\r\n if (dto.mainMedia) {\r\n this.mainMedia = dto.mainMedia;\r\n }\r\n }\r\n\r\n public addTag(tag: string) {\r\n this._tags.add(tag);\r\n }\r\n public deleteTag(tag: string) {\r\n this._tags.delete(tag);\r\n }\r\n\r\n set pageType(value: BuilderPageType) {\r\n this._pageType = value;\r\n }\r\n\r\n get includedInSumScores() {\r\n return [...this._includedInSumScores.values()];\r\n }\r\n\r\n getQuestionVariables(\r\n modulePrefix: SchemaPrefix,\r\n pageNumber: number,\r\n ): ReadonlyArray<RuleQuestionVariable> {\r\n const variables: RuleQuestionVariable[] = [];\r\n\r\n if (this._pageType === \"question\") {\r\n const pagePrefix = this.prefix;\r\n const varId = VarID.create(modulePrefix.value, pagePrefix);\r\n const label = this.mainText.text;\r\n const op = this.defaultQuestion.options.map((o) => {\r\n const label = o.label;\r\n const value = o.value;\r\n return new RuleVariableOption(label, value);\r\n });\r\n const singleVar = new RuleQuestionVariable(varId, label, op, pageNumber);\r\n variables.push(singleVar);\r\n }\r\n return variables;\r\n }\r\n\r\n get tags(): ReadonlyArray<string> {\r\n return [...this._tags];\r\n }\r\n get pageType() {\r\n return this._pageType;\r\n }\r\n\r\n get prefix() {\r\n return this._prefix.value;\r\n }\r\n\r\n set prefix(value: PagePrefixValue) {\r\n this._prefix.value = value;\r\n }\r\n\r\n /** @internal */\r\n sumScoreVariableSet(sumScoreVariable: SumScoreVariable, weight: number) {\r\n const { id, name, description } = sumScoreVariable;\r\n\r\n this._includedInSumScores.set(sumScoreVariable.id, {\r\n sumScoreVariableId: id,\r\n weight,\r\n name,\r\n description,\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n updateRelationShips(variables: ReadonlyArray<SumScoreVariable>) {\r\n variables.forEach((v) => {\r\n const sumScoreEntry = this._includedInSumScores.get(v.id);\r\n if (sumScoreEntry) {\r\n this.sumScoreVariableSet(v, sumScoreEntry.weight);\r\n }\r\n });\r\n }\r\n\r\n toJson(): BuilderPageDto {\r\n const mainText = this.mainText.toJson();\r\n const nextButton = this.nextButton.toJson();\r\n const mainMedia = this.mainMedia;\r\n const includedInSumScores = this.includedInSumScores.map(({ sumScoreVariableId, weight }) => ({\r\n sumScoreVariableId,\r\n weight,\r\n }));\r\n const dto: BuilderPageDto = {\r\n _type: this.pageType,\r\n mainText,\r\n autoplaySequence: [],\r\n nextButton,\r\n id: this.id,\r\n tags: [...this.tags],\r\n includedInSumScores,\r\n prefix: this._prefix.value,\r\n defaultQuestion: this.defaultQuestion.toJson(),\r\n };\r\n if (mainMedia) {\r\n dto.mainMedia = mainMedia;\r\n }\r\n return dto;\r\n }\r\n\r\n clone(): BuilderPageDto {\r\n const dto = this.toJson();\r\n const defaultQuestionClone = this.defaultQuestion.clone();\r\n const mainTextClone = JSON.parse(JSON.stringify(this.mainText));\r\n const newId = PageID.create();\r\n const clone: BuilderPageDto = {\r\n ...dto,\r\n id: newId,\r\n defaultQuestion: defaultQuestionClone,\r\n mainText: mainTextClone,\r\n };\r\n // const cloneDto\r\n return clone;\r\n }\r\n\r\n get backgroundColor() {\r\n return this._backgroundColor;\r\n }\r\n\r\n set backgroundColor(color: string) {\r\n if (typeof color === \"string\") {\r\n this._backgroundColor = color;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _isIncludedInSumScore(sumScoreId: SumScoreVariableID) {\r\n return this._includedInSumScores.has(sumScoreId);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\r\n this._includedInSumScores.delete(sumScoreVariableID);\r\n }\r\n}\r\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","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 { DCss, DStyle, PStyle } from \"@media-quest/engine\";\r\nimport { IconUrls } from \"./icon-urls\";\r\nimport { BuilderOptionTheme, IDefaultTheme } from \"./IDefault-theme\";\r\nimport { CssTheme } from \"./css-theme\";\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_BORDER_WIDTH = 3;\r\n const BTN_BORDER_RADIUS = 10;\r\n const BTN_BORDER_STYLE: DStyle[\"borderStyle\"] = \"solid\";\r\n const FONT_WEIGHT: DStyle[\"fontWeight\"] = 600;\r\n const FONT_SIZE: DCss.Px[\"value\"] = 50;\r\n const BTN_PADDING_LEFT = 40;\r\n const BTN_PADDING_TOP = 40;\r\n\r\n const buttonBaseCss = (): CssTheme => ({\r\n css: {\r\n fontWeight: FONT_WEIGHT,\r\n fontSize: { _unit: \"px\", value: FONT_SIZE },\r\n letterSpacing: { _unit: \"px\", value: 2 },\r\n paddingLeft: { _unit: \"px\", value: BTN_PADDING_LEFT },\r\n paddingTop: { _unit: \"px\", value: BTN_PADDING_TOP },\r\n paddingBottom: { _unit: \"px\", value: BTN_PADDING_TOP },\r\n paddingRight: { _unit: \"px\", value: BTN_PADDING_LEFT },\r\n borderRadius: { _unit: \"px\", value: BTN_BORDER_RADIUS },\r\n borderWidth: { _unit: \"px\", value: BTN_BORDER_WIDTH },\r\n borderStyle: BTN_BORDER_STYLE,\r\n // boxShadow: \"3px 3px gray\",\r\n position: \"relative\",\r\n display: \"block\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n });\r\n\r\n export const blueButton = (): BuilderOptionTheme => {\r\n const base = buttonBaseCss();\r\n const { css, cssEnabled, cssDisabled } = base;\r\n const optionTheme: BuilderOptionTheme = {\r\n name: \"blue-button-theme\",\r\n normal: {\r\n btn: {\r\n css: {\r\n ...css,\r\n backgroundColor: BLUE,\r\n borderColor: BLUE,\r\n textColor: WHITE,\r\n },\r\n cssDisabled,\r\n cssEnabled,\r\n },\r\n divider: {},\r\n text1: {},\r\n text2: {},\r\n },\r\n\r\n dontKnow: {\r\n btn: {\r\n css: {\r\n ...css,\r\n backgroundColor: WHITE,\r\n borderColor: LIGHT_BLUE,\r\n textColor: BLUE,\r\n },\r\n cssDisabled,\r\n cssEnabled,\r\n },\r\n text1: {},\r\n text2: {},\r\n divider: {},\r\n },\r\n };\r\n\r\n return optionTheme;\r\n };\r\n}\r\n\r\nconst textHighTop = 25;\r\nconst textLowTop = 55;\r\nconst audioHighTop = 20;\r\nconst audioLowTop = 55;\r\n\r\nconst textBase: PStyle = {\r\n width: 80,\r\n top: textHighTop,\r\n left: 10,\r\n textAlign: \"center\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 40 },\r\n};\r\nconst textHigh: PStyle = { ...textBase, top: textHighTop };\r\nconst textLow: PStyle = { ...textHigh, top: textLowTop };\r\n\r\nconst audioBase: PStyle = {\r\n height: 6,\r\n width: 6,\r\n left: 4,\r\n top: audioHighTop,\r\n cursor: \"pointer\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n};\r\nconst audioHigh: PStyle = { ...audioBase, top: audioHighTop };\r\nconst audioLow: PStyle = { ...audioBase, top: audioLowTop };\r\n\r\nexport const DefaultTheme: IDefaultTheme = {\r\n name: \"default-theme\",\r\n schemaBackgroundColor: \"white\",\r\n dimensions: { baseHeight: 1300, baseWidth: 1024 },\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: { height: 41, top: 3, x: 0 } },\r\n },\r\n image: { style: { h: 50, w: 100, x: 0 } },\r\n mainText: {\r\n base: {\r\n text: { ...textBase },\r\n audio: {\r\n iconUrl: IconUrls.volumeUpSvg,\r\n css: { ...audioBase },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n },\r\n },\r\n notMediaHasAudio: {\r\n text: { ...textHigh },\r\n audio: { ...audioHigh },\r\n },\r\n hasMediaNotAudio: {\r\n text: { ...textHigh },\r\n },\r\n notMediaNotAudio: { text: { ...textHigh } },\r\n hasMediaHasAudio: { text: { ...textLow }, audio: { ...audioLow } },\r\n },\r\n\r\n buttonBar: {\r\n vibrateMs: false,\r\n container: {\r\n base: {\r\n display: \"flex\",\r\n justifyContent: \"space-evenly\",\r\n position: \"absolute\",\r\n width: 100,\r\n height: 15,\r\n bottom: 0,\r\n left: 0, // h: 10,\r\n alignItems: \"center\",\r\n backgroundColor: \"yellow\",\r\n },\r\n whenSingle: { justifyContent: \"space-evenly\" },\r\n whenMany: { justifyContent: \"space-evenly\" },\r\n },\r\n nextButtonTheme: BuilderOptionTheme.blueButton(),\r\n responseButtons: BuilderOptionTheme.blueButton(),\r\n },\r\n};\r\n","import { ThemeCompiler } from \"./ThemeCompiler\";\r\nimport type { BuilderSchemaDto } from \"../Builder-schema\";\r\nimport { BuilderSchema } from \"../Builder-schema\";\r\nimport type { BuilderPageDto } from \"../page/Builder-page\";\r\nimport { DefaultTheme } from \"./Default-theme\";\r\nimport type { BuilderMainImageDto } from \"../BuilderMainImageDto\";\r\nimport type { BuilderMainVideoDto } from \"../BuilderMainVideoDto\";\r\nimport {\r\n ButtonClickAction,\r\n DButtonDto,\r\n DDivDto,\r\n DelayTask,\r\n DElementDto,\r\n DImgDto,\r\n DTextDto,\r\n PageDto,\r\n PlayAudioTask,\r\n PlayVideoTask,\r\n PStyle,\r\n Rule,\r\n RuleActionPageQue,\r\n SchemaDto,\r\n} from \"@media-quest/engine\";\r\n\r\nimport { AudioFile } from \"../media-files\";\r\nimport { BuilderRule } from \"../rulebuilder\";\r\nimport { IDefaultTheme } from \"./IDefault-theme\";\r\nimport { Theme2 } from \"./theme2\";\r\n\r\nexport class DefaultThemeCompiler implements ThemeCompiler<IDefaultTheme> {\r\n readonly name = \"Ispe default theme.\";\r\n readonly defaultTheme = DefaultTheme;\r\n readonly theme2 = Theme2;\r\n currentTheme = Theme2;\r\n allThemes = [DefaultTheme, Theme2];\r\n private readonly TAG = \"[ DEFAULT_THEME_COMPILER ]: \";\r\n\r\n setTheme(theme: IDefaultTheme) {\r\n this.currentTheme = theme;\r\n }\r\n\r\n constructor() {}\r\n\r\n private compileRules(source: BuilderSchemaDto): Rule<RuleActionPageQue, never>[] {\r\n const builderSchema = BuilderSchema.fromJson(source);\r\n const ruleInput = builderSchema.getRuleInput();\r\n const pageQueRules: Rule<RuleActionPageQue, never>[] = [];\r\n source.rules.forEach((rule) => {\r\n const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule();\r\n if (!Rule.isEmpty(engineRule)) {\r\n pageQueRules.push(engineRule);\r\n } else {\r\n console.log(this.TAG, \"Throws away empty rule. \" + rule.type + \" \" + rule.name);\r\n }\r\n });\r\n return pageQueRules;\r\n }\r\n\r\n compile(source: BuilderSchemaDto): SchemaDto {\r\n const t = this.currentTheme;\r\n const themeName = t.name;\r\n const schema = source.name;\r\n const tag = schema + \"-\" + themeName + \" compile\";\r\n const TAG = tag.toUpperCase();\r\n // console.group(TAG);\r\n const numberOfPages = source.pages.length;\r\n const pages = source.pages.map((p, index) => {\r\n return this.compilePage(p, index, numberOfPages, source.prefix);\r\n });\r\n\r\n let baseHeight = source.baseHeight;\r\n let baseWidth = source.baseWidth;\r\n let backgroundColor = source.backgroundColor;\r\n if (t.dimensions.baseHeight) {\r\n baseHeight = t.dimensions.baseHeight;\r\n }\r\n if (t.dimensions.baseWidth) {\r\n baseWidth = t.dimensions.baseWidth;\r\n }\r\n if (t.dimensions.baseWidth) {\r\n baseWidth = t.dimensions.baseWidth;\r\n }\r\n if (t.schemaBackgroundColor) {\r\n backgroundColor = t.schemaBackgroundColor;\r\n }\r\n\r\n const rules = this.compileRules(source);\r\n\r\n const dto: SchemaDto = {\r\n id: source.id,\r\n backgroundColor,\r\n baseHeight,\r\n baseWidth,\r\n pageSequences: [],\r\n pages,\r\n predefinedFacts: [],\r\n rules,\r\n };\r\n // console.groupEnd();\r\n return dto;\r\n }\r\n\r\n private compilePage(\r\n page: BuilderPageDto,\r\n pageIndex: number,\r\n totalNumberOfPages: number,\r\n modulePrefix: string,\r\n ): PageDto {\r\n const pageNumber = pageIndex + 1;\r\n const tags = page.tags ?? [];\r\n const { nextButton, mainText, id, mainMedia, _type, prefix } = page;\r\n const t = this.currentTheme;\r\n const hasMainMedia = !!mainMedia;\r\n const hasMainTextAudio = !!mainText.audioFile;\r\n\r\n const elements: DElementDto[] = [];\r\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\r\n let initialVideoTaskList: Array<PlayVideoTask | DelayTask> = [];\r\n const newPage: PageDto = {\r\n background: \"white\",\r\n elements,\r\n id,\r\n prefix,\r\n initialTasks: [],\r\n tags: [...tags],\r\n };\r\n const bg = t.pageBackGround;\r\n if (bg) {\r\n const pageBackGround: DDivDto = {\r\n style: bg.style,\r\n _tag: \"div\",\r\n children: [],\r\n };\r\n elements.push(pageBackGround);\r\n }\r\n\r\n const bgArea1 = t.backGroundArea1;\r\n\r\n if (bgArea1) {\r\n const backgroundArea1: DDivDto = {\r\n style: bgArea1.style,\r\n _tag: \"div\",\r\n children: [],\r\n };\r\n elements.push(backgroundArea1);\r\n }\r\n\r\n if (t.progressBar) {\r\n // console.log(\"ADDED PROGRESS.\");\r\n const progressInPercent = pageNumber / totalNumberOfPages;\r\n // const a =\r\n const baseStyles: PStyle = {\r\n bottom: t.progressBar.bottom,\r\n left: t.progressBar.left,\r\n height: t.progressBar.height,\r\n width: t.progressBar.width,\r\n };\r\n const progressBackGround: DDivDto = {\r\n style: {\r\n ...baseStyles,\r\n ...t.progressBar.backgroundStyles,\r\n },\r\n _tag: \"div\",\r\n children: [],\r\n };\r\n\r\n const currentProgress = t.progressBar.width * progressInPercent;\r\n const progressIndicator: DDivDto = {\r\n style: { ...baseStyles, ...t.progressBar.progressStyles, w: currentProgress },\r\n _tag: \"div\",\r\n children: [],\r\n };\r\n const pText = t.progressBar.text;\r\n\r\n elements.push(progressBackGround);\r\n elements.push(progressIndicator);\r\n if (pText) {\r\n const progressText: DTextDto = {\r\n _tag: \"p\",\r\n innerText: \"side \" + pageNumber + \" av \" + totalNumberOfPages,\r\n style: pText.style,\r\n };\r\n elements.push(progressText);\r\n }\r\n }\r\n\r\n if (page.mainText.audioFile) {\r\n const autoPlay = page.mainText.autoplay;\r\n const autoPlayDelay = page.mainText.autoplayDelay;\r\n const res = this.compileMainTextAudio(\r\n page.mainText.audioFile,\r\n autoPlay,\r\n autoPlayDelay,\r\n hasMainMedia,\r\n );\r\n // console.log(page.mainText.text);\r\n initialAudioTasks = [...res.initialTasks];\r\n newPage.elements.push(...res.components);\r\n }\r\n\r\n if (_type === \"question\") {\r\n const variableId = modulePrefix + \"_\" + page.prefix;\r\n const qRes = this.compileQuestion(id, page, variableId, hasMainMedia);\r\n newPage.elements.push(qRes.buttonBar, qRes.question);\r\n\r\n // newPage.elements.push(question);\r\n // console.log(question);\r\n // elements.push(...buttons, question);\r\n }\r\n\r\n if (_type === \"info-page\") {\r\n const infoText = mainText.text;\r\n const nextButtonBar = this.compileButtonBar([\r\n this.compileButton(nextButton, { kind: \"next-button\" }),\r\n ]);\r\n const infoTextElement = this.compileMainText(infoText, hasMainTextAudio, hasMainMedia);\r\n\r\n // const textBase =\r\n newPage.elements.push(infoTextElement, nextButtonBar);\r\n // newPage.components.push(nextButtonComponent);\r\n }\r\n if (mainMedia && mainMedia.kind === \"main-image\") {\r\n const mainImageElement = this.compileImage(mainMedia);\r\n newPage.elements.push(mainImageElement);\r\n }\r\n\r\n if (mainMedia && mainMedia.kind === \"main-video\") {\r\n const videoOutput = this.compileVideo(mainMedia);\r\n // newPage.videoPlayer?.playUrl\r\n newPage.videoPlayer = videoOutput.videoPlayer;\r\n newPage.elements.push(...videoOutput.components);\r\n initialVideoTaskList = [...videoOutput.autoPlayTasks];\r\n }\r\n\r\n // ADDING INITIAL TASKS IN CORRECT ORDER\r\n newPage.initialTasks.push(...initialVideoTaskList);\r\n newPage.initialTasks.push(...initialAudioTasks);\r\n const clone = JSON.parse(JSON.stringify(newPage)) as PageDto;\r\n return clone;\r\n }\r\n\r\n private compileImage(image: BuilderMainImageDto) {\r\n const img: DImgDto = {\r\n _tag: \"img\",\r\n style: this.currentTheme.image.style,\r\n url: image.file.downloadUrl,\r\n };\r\n return img;\r\n }\r\n\r\n private compileMainText(text: string, hasAudio: boolean, hasMainMedia: boolean): DTextDto {\r\n const t = this.currentTheme;\r\n const { base, hasMediaNotAudio, notMediaHasAudio, notMediaNotAudio, hasMediaHasAudio } =\r\n t.mainText;\r\n let style = base.text;\r\n if (hasMainMedia && hasAudio) style = { ...style, ...hasMediaHasAudio.text };\r\n if (!hasMainMedia && hasAudio) style = { ...style, ...notMediaHasAudio.text };\r\n if (hasMainMedia && !hasAudio) style = { ...style, ...hasMediaNotAudio.text };\r\n if (!hasMainMedia && !hasAudio) style = { ...style, ...notMediaNotAudio.text };\r\n // console.log(style.textColor);\r\n return {\r\n _tag: \"p\",\r\n innerText: text,\r\n style,\r\n };\r\n }\r\n\r\n private compileMainTextAudio(\r\n audioFile: AudioFile,\r\n autoPlay: boolean,\r\n autoPlayDelay: number,\r\n hasMainMedia: boolean,\r\n ): {\r\n components: DElementDto[];\r\n initialTasks: Array<PlayAudioTask | DelayTask>;\r\n } {\r\n const t = this.currentTheme.mainText;\r\n const audioId = audioFile.id;\r\n const iconUrl = this.currentTheme.mainText.base.audio.iconUrl;\r\n const baseIconStyles = t.base.audio;\r\n const addedStyles = hasMainMedia ? t.hasMediaHasAudio.audio : t.notMediaHasAudio.audio;\r\n\r\n const audioIconStyle = { ...baseIconStyles.css, ...addedStyles };\r\n const task: PlayAudioTask = {\r\n audioId,\r\n blockAudio: false,\r\n blockFormInput: false,\r\n blockResponseButton: false,\r\n blockVideo: false,\r\n kind: \"play-audio-task\",\r\n priority: \"replace-all\",\r\n url: audioFile.downloadUrl,\r\n };\r\n\r\n const playMainTextAudio: DImgDto = {\r\n _tag: \"img\",\r\n url: iconUrl,\r\n style: { ...audioIconStyle },\r\n onClick: { kind: \"play-audio\", task },\r\n };\r\n\r\n let initialAudioTasks: Array<PlayAudioTask | DelayTask> = [];\r\n if (autoPlay) {\r\n const playAudioTask: PlayAudioTask = { ...task, priority: \"follow-queue\" };\r\n initialAudioTasks = [playAudioTask];\r\n if (autoPlayDelay > 0) {\r\n const delayTask: DelayTask = {\r\n kind: \"delay-task\",\r\n priority: \"follow-queue\",\r\n duration: autoPlayDelay,\r\n blockVideo: false,\r\n blockAudio: false,\r\n blockResponseButton: false,\r\n blockFormInput: false,\r\n };\r\n initialAudioTasks = [delayTask, playAudioTask];\r\n }\r\n }\r\n // const autoplayTask =\r\n\r\n return { components: [playMainTextAudio], initialTasks: [...initialAudioTasks] };\r\n }\r\n\r\n private compileVideo(video: BuilderMainVideoDto): {\r\n videoPlayer: PageDto[\"videoPlayer\"];\r\n components: DElementDto[];\r\n autoPlayTasks: Array<PlayVideoTask | DelayTask>;\r\n } {\r\n const t = this.currentTheme.videoPlayer;\r\n const hasReplayButton = !!t.replayButton;\r\n\r\n const mode = video.mode;\r\n // const components: DElementDto[] = [];\r\n\r\n let autoPlayTasks: Array<PlayVideoTask | DelayTask> = [];\r\n\r\n let autoplayVideoTask: PlayVideoTask | false = false;\r\n let autoplayDelayTask: DelayTask | false = false;\r\n\r\n let buttonBar: DDivDto | false = false;\r\n let playButton: DImgDto | false = false;\r\n let playButtonText: DTextDto | false = false;\r\n let replayButton: DImgDto | false = false;\r\n let replayButtonText: DTextDto | false = false;\r\n let pauseButton: DImgDto | false = false;\r\n let pauseButtonText: DTextDto | false = false;\r\n let unmuteButton: DImgDto | false = false;\r\n let unmuteButtonText: DTextDto | false = false;\r\n let muteButton: DImgDto | false = false;\r\n let muteButtonText: DTextDto | false = false;\r\n\r\n const showWhenEnded: Partial<DElementDto> = {\r\n whenVideoEnded: { visibility: \"visible\" },\r\n whenVideoEndedAndMuted: { visibility: \"visible\" },\r\n whenVideoPlaying: { visibility: \"hidden\" },\r\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\r\n whenVideoPaused: { visibility: \"hidden\" },\r\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\r\n };\r\n\r\n const showWhenPlayingOrPaused: Partial<DElementDto> = {\r\n whenVideoEnded: { visibility: \"visible\" },\r\n whenVideoEndedAndMuted: { visibility: \"visible\" },\r\n whenVideoPlaying: { visibility: \"visible\" },\r\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\r\n whenVideoPaused: { visibility: \"hidden\" },\r\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\r\n };\r\n\r\n const showWhenPlaying: Partial<DElementDto> = {\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n whenVideoPlaying: { visibility: \"visible\" },\r\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\r\n whenVideoPaused: { visibility: \"hidden\" },\r\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\r\n };\r\n\r\n const showWhenPaused: Partial<DElementDto> = {\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n whenVideoPlaying: { visibility: \"hidden\" },\r\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\r\n whenVideoPaused: { visibility: \"visible\" },\r\n whenVideoPausedAndMuted: { visibility: \"visible\" },\r\n };\r\n\r\n const playButtonTask: PlayVideoTask = {\r\n kind: \"play-video-task\",\r\n url: video.file.downloadUrl,\r\n videoId: video.file.id,\r\n blockAudio: false,\r\n blockFormInput: false,\r\n blockResponseButton: false,\r\n loop: mode === \"gif-mode\",\r\n blockVideo: false,\r\n priority: \"replace-all\",\r\n };\r\n\r\n if (video.mode === \"autoplay\" || video.mode === \"gif-mode\") {\r\n autoplayVideoTask = { ...playButtonTask, priority: \"follow-queue\" };\r\n autoPlayTasks = [autoplayVideoTask];\r\n if (video.preDelay > 0) {\r\n autoplayDelayTask = {\r\n kind: \"delay-task\",\r\n priority: \"follow-queue\",\r\n duration: video.preDelay,\r\n blockVideo: false,\r\n blockAudio: false,\r\n blockResponseButton: false,\r\n blockFormInput: false,\r\n };\r\n autoPlayTasks = [autoplayDelayTask, autoplayVideoTask];\r\n }\r\n }\r\n\r\n const videoPlayer: PageDto[\"videoPlayer\"] = {\r\n playUrl: video.file.downloadUrl,\r\n style: t.videoElement.css,\r\n // style: { h: 45, w: 100, x: 0, y: 55 },\r\n };\r\n\r\n if (t.buttonBar) {\r\n buttonBar = {\r\n _tag: \"div\",\r\n style: { ...t.buttonBar },\r\n children: [],\r\n };\r\n }\r\n\r\n playButton = {\r\n ...showWhenPaused,\r\n _tag: \"img\",\r\n url: t.playButton.iconUrl,\r\n style: { ...t.playButton.css, ...t.playButton.cssEnabled },\r\n // },\r\n onClick: { kind: \"play-video\", task: playButtonTask },\r\n };\r\n if (t.playButton.text) {\r\n playButtonText = {\r\n ...showWhenPaused,\r\n _tag: \"p\",\r\n style: t.playButton.text.css,\r\n innerText: t.playButton.text.text,\r\n };\r\n // components.push({\r\n //\r\n // });\r\n }\r\n\r\n pauseButton = {\r\n ...showWhenPlaying,\r\n _tag: \"img\",\r\n style: {\r\n ...t.pauseButton.css,\r\n visibility: \"hidden\",\r\n ...t.pauseButton.cssEnabled,\r\n },\r\n url: t.pauseButton.iconUrl,\r\n onClick: { kind: \"pause-video\" },\r\n };\r\n\r\n if (t.pauseButton.text) {\r\n pauseButtonText = {\r\n ...showWhenPlaying,\r\n _tag: \"p\",\r\n style: t.pauseButton.text.css,\r\n innerText: t.pauseButton.text.text,\r\n };\r\n }\r\n if (t.unMuteButton) {\r\n unmuteButton = {\r\n _tag: \"img\",\r\n style: { ...t.unMuteButton.css },\r\n url: t.unMuteButton.iconUrl,\r\n onClick: { kind: \"un-mute-video\" },\r\n whenVideoPausedAndMuted: { visibility: \"visible\" },\r\n whenVideoPaused: { visibility: \"hidden\" },\r\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\r\n whenVideoPlaying: { visibility: \"hidden\" },\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n };\r\n if (t.unMuteButton.text) {\r\n unmuteButtonText = {\r\n _tag: \"p\",\r\n style: t.unMuteButton.text.css,\r\n innerText: t.unMuteButton.text.text,\r\n whenVideoPausedAndMuted: { visibility: \"visible\" },\r\n whenVideoPaused: { visibility: \"hidden\" },\r\n whenVideoPlayingAndMuted: { visibility: \"visible\" },\r\n whenVideoPlaying: { visibility: \"hidden\" },\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n };\r\n }\r\n }\r\n if (t.muteButton) {\r\n muteButton = {\r\n _tag: \"img\",\r\n style: { ...t.muteButton.css },\r\n url: t.muteButton.iconUrl,\r\n onClick: { kind: \"mute-video\" },\r\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\r\n whenVideoPaused: { visibility: \"visible\" },\r\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\r\n whenVideoPlaying: { visibility: \"visible\" },\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n };\r\n\r\n if (t.muteButton.text) {\r\n muteButtonText = {\r\n _tag: \"p\",\r\n style: t.muteButton.text.css,\r\n innerText: t.muteButton.text.text,\r\n whenVideoPausedAndMuted: { visibility: \"hidden\" },\r\n whenVideoPaused: { visibility: \"visible\" },\r\n whenVideoPlayingAndMuted: { visibility: \"hidden\" },\r\n whenVideoPlaying: { visibility: \"visible\" },\r\n whenVideoEnded: { visibility: \"hidden\" },\r\n whenVideoEndedAndMuted: { visibility: \"hidden\" },\r\n };\r\n }\r\n }\r\n\r\n if (t.replayButton) {\r\n replayButton = {\r\n ...showWhenEnded,\r\n _tag: \"img\",\r\n style: { ...t.replayButton.css },\r\n url: t.replayButton.iconUrl,\r\n onClick: { kind: \"play-video\", task: playButtonTask },\r\n };\r\n if (t.replayButton.text) {\r\n replayButtonText = {\r\n ...showWhenEnded,\r\n _tag: \"p\",\r\n style: t.replayButton.text.css,\r\n innerText: t.replayButton.text.text,\r\n };\r\n }\r\n }\r\n\r\n const componentsSet = new Set<DElementDto>();\r\n const addComponent = (maybeComponent: DElementDto | false) => {\r\n if (maybeComponent) {\r\n componentsSet.add(maybeComponent);\r\n }\r\n };\r\n\r\n if (mode !== \"gif-mode\") {\r\n addComponent(buttonBar);\r\n addComponent(unmuteButton);\r\n addComponent(unmuteButtonText);\r\n addComponent(muteButton);\r\n addComponent(muteButtonText);\r\n addComponent(playButton);\r\n addComponent(playButtonText);\r\n addComponent(pauseButton);\r\n addComponent(pauseButtonText);\r\n addComponent(replayButton);\r\n addComponent(replayButtonText);\r\n }\r\n // components = []\r\n return { videoPlayer, components: [...componentsSet], autoPlayTasks: [...autoPlayTasks] };\r\n }\r\n private compileQuestion(\r\n pageId: string,\r\n page: BuilderPageDto,\r\n variableId: string,\r\n hasMainMedia: boolean,\r\n ): {\r\n question: DTextDto;\r\n buttonBar: DDivDto;\r\n } {\r\n // TODO REFACTORE DEFAULT QUESTION TO - (REMOVE USE TEXT1)\r\n // console.log(page);\r\n const t = this.currentTheme;\r\n const q = page.defaultQuestion;\r\n const text = page.mainText.text;\r\n\r\n const questionElement = this.compileMainText(text, !!page.mainText.audioFile, hasMainMedia);\r\n // initialTasks: Array<PlayAudioTask | DelayTask>;\r\n const buttons: DButtonDto[] = q.options.map((o) => {\r\n const btns = this.compileButton(o, {\r\n kind: \"response-button\",\r\n questionId: variableId,\r\n questionText: text,\r\n });\r\n return btns;\r\n });\r\n const buttonBar = this.compileButtonBar(buttons);\r\n return {\r\n question: questionElement,\r\n buttonBar,\r\n };\r\n }\r\n\r\n private compileButtonBar(buttons: Array<DButtonDto>): DDivDto {\r\n const t = this.currentTheme;\r\n const isSingle = buttons.length < 2;\r\n const style: PStyle = isSingle\r\n ? { ...t.buttonBar.container.base, ...t.buttonBar.container.whenSingle }\r\n : { ...t.buttonBar.container.base, ...t.buttonBar.container.whenMany };\r\n // console.log(t);\r\n const buttonBar: DDivDto = {\r\n _tag: \"div\",\r\n children: [...buttons],\r\n style,\r\n };\r\n return buttonBar;\r\n }\r\n private compileButton(\r\n buttonDto: BuilderPageDto[\"nextButton\"],\r\n options:\r\n | { kind: \"response-button\"; questionId: string; questionText: string }\r\n | { kind: \"next-button\" },\r\n ): DButtonDto {\r\n const { id, value, label, cssOverride } = buttonDto;\r\n const t = this.currentTheme;\r\n const onclickAction: ButtonClickAction =\r\n options.kind === \"response-button\"\r\n ? {\r\n kind: \"submit-fact\",\r\n fact: {\r\n kind: \"numeric-fact\",\r\n label: label,\r\n value: value,\r\n referenceId: options.questionId,\r\n referenceLabel: options.questionText,\r\n },\r\n }\r\n : { kind: \"next-page\" };\r\n\r\n let btnStyles =\r\n value === 9 ? t.buttonBar.responseButtons.dontKnow : t.buttonBar.responseButtons.normal;\r\n if (t.buttonBar.vibrateMs) {\r\n onclickAction.vibrateMs = t.buttonBar.vibrateMs;\r\n }\r\n\r\n if(cssOverride) {\r\n btnStyles.btn.css = {...btnStyles.btn.css, ...cssOverride}\r\n }\r\n\r\n const btn: DButtonDto = {\r\n _tag: \"button\",\r\n innerText: label,\r\n style: { ...btnStyles.btn.css, ...btnStyles.btn.cssEnabled },\r\n onClick: onclickAction,\r\n };\r\n\r\n return btn;\r\n }\r\n}\r\n","const UN_MUTE = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8 15.5661V23.4339H13.3333L20 29.9903V9.00969L13.3333 15.5661H8ZM26 19.5C26 17.179 24.64 15.1859 22.6667 14.2155V24.7714C24.64 23.8141 26 21.821 26 19.5ZM22.6667 8V10.7013C26.52 11.829 29.3333 15.3432 29.3333 19.5C29.3333 23.6568 26.52 27.171 22.6667 28.2987V31C28.0133 29.8067 32 25.1123 32 19.5C32 13.8877 28.0133 9.19327 22.6667 8Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\nconst MUTE = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M26 20C26 17.64 24.64 15.6133 22.6667 14.6267V17.5733L25.9333 20.84C25.9733 20.5733 26 20.2933 26 20ZM29.3333 20C29.3333 21.2533 29.0667 22.4267 28.6133 23.52L30.6267 25.5333C31.5067 23.88 32 22 32 20C32 14.2933 28.0133 9.52 22.6667 8.30667V11.0533C26.52 12.2 29.3333 15.7733 29.3333 20ZM9.69333 8L8 9.69333L14.3067 16H8V24H13.3333L20 30.6667V21.6933L25.6667 27.36C24.7733 28.0533 23.7733 28.6 22.6667 28.9333V31.68C24.5067 31.2667 26.1733 30.4133 27.5867 29.2667L30.3067 32L32 30.3067L20 18.3067L9.69333 8ZM20 9.33333L17.2133 12.12L20 14.9067V9.33333Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\nconst PLAY_SOUND = `\r\n\r\n<svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_1_299)\">\r\n <path d=\"M13.5 19.5C16.8137 19.5 19.5 16.8137 19.5 13.5C19.5 10.1863 16.8137 7.5 13.5 7.5C10.1863 7.5 7.5 10.1863 7.5 13.5C7.5 16.8137 10.1863 19.5 13.5 19.5Z\" fill=\"#164AC4\"/>\r\n <path d=\"M13.5 22.5C9.495 22.5 1.5 24.51 1.5 28.5V31.5H25.5V28.5C25.5 24.51 17.505 22.5 13.5 22.5ZM25.14 8.04L22.62 10.575C23.88 12.345 23.88 14.64 22.62 16.41L25.14 18.945C28.17 15.915 28.17 11.34 25.14 8.04ZM30.105 3L27.66 5.445C31.815 9.975 31.815 16.785 27.66 21.555L30.105 24C35.955 18.165 35.97 9.075 30.105 3Z\" fill=\"#164AC4\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_299\">\r\n <rect width=\"36\" height=\"36\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n</svg>`;\r\n\r\nconst CLOSE = `\r\n<svg width=\"40\" height=\"41\" viewBox=\"0 0 40 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20 0.799988C8.94 0.799988 0 9.73999 0 20.8C0 31.86 8.94 40.8 20 40.8C31.06 40.8 40 31.86 40 20.8C40 9.73999 31.06 0.799988 20 0.799988ZM30 27.98L27.18 30.8L20 23.62L12.82 30.8L10 27.98L17.18 20.8L10 13.62L12.82 10.8L20 17.98L27.18 10.8L30 13.62L22.82 20.8L30 27.98Z\" fill=\"white\"/>\r\n</svg>`;\r\n\r\nconst COMPLETED = `\r\n<svg width=\"36\" height=\"27\" viewBox=\"0 0 36 27\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M11.2 21.2L2.8 12.8L0 15.6L11.2 26.8L35.2 2.8L32.4 0L11.2 21.2Z\" fill=\"white\"/>\r\n</svg>`;\r\n\r\nconst VIDEO_PLAY = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M16 12V28L29 20L16 12Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\nconst VIDEO_REPLAY = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20 12.8V8L13.75 14L20 20V15.2C24.1375 15.2 27.5 18.428 27.5 22.4C27.5 26.372 24.1375 29.6 20 29.6C15.8625 29.6 12.5 26.372 12.5 22.4H10C10 27.704 14.475 32 20 32C25.525 32 30 27.704 30 22.4C30 17.096 25.525 12.8 20 12.8Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\nconst HELP = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20 0C8.96 0 0 8.96 0 20C0 31.04 8.96 40 20 40C31.04 40 40 31.04 40 20C40 8.96 31.04 0 20 0ZM22 34H18V30H22V34ZM26.14 18.5L24.34 20.34C22.9 21.8 22 23 22 26H18V25C18 22.8 18.9 20.8 20.34 19.34L22.82 16.82C23.56 16.1 24 15.1 24 14C24 11.8 22.2 10 20 10C17.8 10 16 11.8 16 14H12C12 9.58 15.58 6 20 6C24.42 6 28 9.58 28 14C28 15.76 27.28 17.36 26.14 18.5Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\nconst VIDEO_PAUSE = `\r\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13 28H17.6667V12H13V28ZM22.3333 12V28H27V12H22.3333Z\" fill=\"#164AC4\"/>\r\n</svg>`;\r\n\r\n/**\r\n * Will only work in browsers (btoa-function.)\r\n * @param svg\r\n */\r\nconst createDataUrl = (svg: string) => {\r\n return `data:image/svg+xml;base64,${btoa(svg)}`;\r\n};\r\n\r\nexport const THEME_2_ICONS = {\r\n unMute: {\r\n svg: UN_MUTE,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTggMTUuNTY2MVYyMy40MzM5SDEzLjMzMzNMMjAgMjkuOTkwM1Y5LjAwOTY5TDEzLjMzMzMgMTUuNTY2MUg4Wk0yNiAxOS41QzI2IDE3LjE3OSAyNC42NCAxNS4xODU5IDIyLjY2NjcgMTQuMjE1NVYyNC43NzE0QzI0LjY0IDIzLjgxNDEgMjYgMjEuODIxIDI2IDE5LjVaTTIyLjY2NjcgOFYxMC43MDEzQzI2LjUyIDExLjgyOSAyOS4zMzMzIDE1LjM0MzIgMjkuMzMzMyAxOS41QzI5LjMzMzMgMjMuNjU2OCAyNi41MiAyNy4xNzEgMjIuNjY2NyAyOC4yOTg3VjMxQzI4LjAxMzMgMjkuODA2NyAzMiAyNS4xMTIzIDMyIDE5LjVDMzIgMTMuODg3NyAyOC4wMTMzIDkuMTkzMjcgMjIuNjY2NyA4WiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\r\n },\r\n\r\n mute: {\r\n svg: MUTE,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTI2IDIwQzI2IDE3LjY0IDI0LjY0IDE1LjYxMzMgMjIuNjY2NyAxNC42MjY3VjE3LjU3MzNMMjUuOTMzMyAyMC44NEMyNS45NzMzIDIwLjU3MzMgMjYgMjAuMjkzMyAyNiAyMFpNMjkuMzMzMyAyMEMyOS4zMzMzIDIxLjI1MzMgMjkuMDY2NyAyMi40MjY3IDI4LjYxMzMgMjMuNTJMMzAuNjI2NyAyNS41MzMzQzMxLjUwNjcgMjMuODggMzIgMjIgMzIgMjBDMzIgMTQuMjkzMyAyOC4wMTMzIDkuNTIgMjIuNjY2NyA4LjMwNjY3VjExLjA1MzNDMjYuNTIgMTIuMiAyOS4zMzMzIDE1Ljc3MzMgMjkuMzMzMyAyMFpNOS42OTMzMyA4TDggOS42OTMzM0wxNC4zMDY3IDE2SDhWMjRIMTMuMzMzM0wyMCAzMC42NjY3VjIxLjY5MzNMMjUuNjY2NyAyNy4zNkMyNC43NzMzIDI4LjA1MzMgMjMuNzczMyAyOC42IDIyLjY2NjcgMjguOTMzM1YzMS42OEMyNC41MDY3IDMxLjI2NjcgMjYuMTczMyAzMC40MTMzIDI3LjU4NjcgMjkuMjY2N0wzMC4zMDY3IDMyTDMyIDMwLjMwNjdMMjAgMTguMzA2N0w5LjY5MzMzIDhaTTIwIDkuMzMzMzNMMTcuMjEzMyAxMi4xMkwyMCAxNC45MDY3VjkuMzMzMzNaIiBmaWxsPSIjMTY0QUM0Ii8+Cjwvc3ZnPg==\",\r\n },\r\n\r\n audioPlay: {\r\n svg: PLAY_SOUND,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cgo8c3ZnIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xXzI5OSkiPgogICAgPHBhdGggZD0iTTEzLjUgMTkuNUMxNi44MTM3IDE5LjUgMTkuNSAxNi44MTM3IDE5LjUgMTMuNUMxOS41IDEwLjE4NjMgMTYuODEzNyA3LjUgMTMuNSA3LjVDMTAuMTg2MyA3LjUgNy41IDEwLjE4NjMgNy41IDEzLjVDNy41IDE2LjgxMzcgMTAuMTg2MyAxOS41IDEzLjUgMTkuNVoiIGZpbGw9IiMxNjRBQzQiLz4KICAgIDxwYXRoIGQ9Ik0xMy41IDIyLjVDOS40OTUgMjIuNSAxLjUgMjQuNTEgMS41IDI4LjVWMzEuNUgyNS41VjI4LjVDMjUuNSAyNC41MSAxNy41MDUgMjIuNSAxMy41IDIyLjVaTTI1LjE0IDguMDRMMjIuNjIgMTAuNTc1QzIzLjg4IDEyLjM0NSAyMy44OCAxNC42NCAyMi42MiAxNi40MUwyNS4xNCAxOC45NDVDMjguMTcgMTUuOTE1IDI4LjE3IDExLjM0IDI1LjE0IDguMDRaTTMwLjEwNSAzTDI3LjY2IDUuNDQ1QzMxLjgxNSA5Ljk3NSAzMS44MTUgMTYuNzg1IDI3LjY2IDIxLjU1NUwzMC4xMDUgMjRDMzUuOTU1IDE4LjE2NSAzNS45NyA5LjA3NSAzMC4xMDUgM1oiIGZpbGw9IiMxNjRBQzQiLz4KICA8L2c+CiAgPGRlZnM+CiAgICA8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMjk5Ij4KICAgICAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsPSJ3aGl0ZSIvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+Cjwvc3ZnPg==\",\r\n },\r\n\r\n videoPause: {\r\n svg: VIDEO_PAUSE,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTEzIDI4SDE3LjY2NjdWMTJIMTNWMjhaTTIyLjMzMzMgMTJWMjhIMjdWMTJIMjIuMzMzM1oiIGZpbGw9IiMxNjRBQzQiLz4KPC9zdmc+\",\r\n },\r\n\r\n videoPlay: {\r\n svg: VIDEO_PLAY,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTE2IDEyVjI4TDI5IDIwTDE2IDEyWiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\r\n },\r\n\r\n videoReplay: {\r\n svg: VIDEO_REPLAY,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDEyLjhWOEwxMy43NSAxNEwyMCAyMFYxNS4yQzI0LjEzNzUgMTUuMiAyNy41IDE4LjQyOCAyNy41IDIyLjRDMjcuNSAyNi4zNzIgMjQuMTM3NSAyOS42IDIwIDI5LjZDMTUuODYyNSAyOS42IDEyLjUgMjYuMzcyIDEyLjUgMjIuNEgxMEMxMCAyNy43MDQgMTQuNDc1IDMyIDIwIDMyQzI1LjUyNSAzMiAzMCAyNy43MDQgMzAgMjIuNEMzMCAxNy4wOTYgMjUuNTI1IDEyLjggMjAgMTIuOFoiIGZpbGw9IiMxNjRBQzQiLz4KPC9zdmc+\",\r\n },\r\n\r\n close: {\r\n svg: CLOSE,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQxIiB2aWV3Qm94PSIwIDAgNDAgNDEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDAuNzk5OTg4QzguOTQgMC43OTk5ODggMCA5LjczOTk5IDAgMjAuOEMwIDMxLjg2IDguOTQgNDAuOCAyMCA0MC44QzMxLjA2IDQwLjggNDAgMzEuODYgNDAgMjAuOEM0MCA5LjczOTk5IDMxLjA2IDAuNzk5OTg4IDIwIDAuNzk5OTg4Wk0zMCAyNy45OEwyNy4xOCAzMC44TDIwIDIzLjYyTDEyLjgyIDMwLjhMMTAgMjcuOThMMTcuMTggMjAuOEwxMCAxMy42MkwxMi44MiAxMC44TDIwIDE3Ljk4TDI3LjE4IDEwLjhMMzAgMTMuNjJMMjIuODIgMjAuOEwzMCAyNy45OFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPg==\",\r\n },\r\n\r\n complete: {\r\n svg: COMPLETED,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjM2IiBoZWlnaHQ9IjI3IiB2aWV3Qm94PSIwIDAgMzYgMjciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTExLjIgMjEuMkwyLjggMTIuOEwwIDE1LjZMMTEuMiAyNi44TDM1LjIgMi44TDMyLjQgMEwxMS4yIDIxLjJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4=\",\r\n },\r\n\r\n help: {\r\n svg: HELP,\r\n dataUrl:\r\n \"data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIwIDAgNDAgNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIwIDBDOC45NiAwIDAgOC45NiAwIDIwQzAgMzEuMDQgOC45NiA0MCAyMCA0MEMzMS4wNCA0MCA0MCAzMS4wNCA0MCAyMEM0MCA4Ljk2IDMxLjA0IDAgMjAgMFpNMjIgMzRIMThWMzBIMjJWMzRaTTI2LjE0IDE4LjVMMjQuMzQgMjAuMzRDMjIuOSAyMS44IDIyIDIzIDIyIDI2SDE4VjI1QzE4IDIyLjggMTguOSAyMC44IDIwLjM0IDE5LjM0TDIyLjgyIDE2LjgyQzIzLjU2IDE2LjEgMjQgMTUuMSAyNCAxNEMyNCAxMS44IDIyLjIgMTAgMjAgMTBDMTcuOCAxMCAxNiAxMS44IDE2IDE0SDEyQzEyIDkuNTggMTUuNTggNiAyMCA2QzI0LjQyIDYgMjggOS41OCAyOCAxNEMyOCAxNS43NiAyNy4yOCAxNy4zNiAyNi4xNCAxOC41WiIgZmlsbD0iIzE2NEFDNCIvPgo8L3N2Zz4=\",\r\n },\r\n};\r\n","// import { IconUrls } from \"./icon-urls\";\r\nimport { BuilderOptionTheme, IDefaultTheme } from \"./IDefault-theme\";\r\nimport { CssTheme } from \"./css-theme\";\r\nimport { PStyle } from \"@media-quest/engine\";\r\nimport { THEME_2_ICONS } from \"./icons\";\r\n\r\nconst translate = (pos: { x?: number; y?: number }) => {\r\n const x = pos.x || 0;\r\n const y = pos.y || 0;\r\n return `translate(${x}%, ${y}%)`;\r\n};\r\nexport const translateY50 = translate({ y: 50 });\r\nexport const translateX50 = translate({ x: -50 });\r\nconst translateX50Y50 = translate({ x: -50, y: 50 });\r\n\r\nconst Colors = {\r\n primary: \"#164AC4\",\r\n secondary: \"#E8F0FE\",\r\n text: \"#0D1E45\",\r\n white: \"#ffffff\",\r\n backgroundGray: \"#F0F0F0\",\r\n backgroundWhite: \"white\",\r\n // progressBackGround: \"#164AC4\",\r\n // progressForGround: \"#F5F5F5\",\r\n // red: \"red\",\r\n // yellow: \"yellow\",\r\n};\r\n\r\nconst MAIN_TEXT_FONT_SIZE = 35;\r\nconst MAIN_TEXT_LINE_HEIGHT = 1.2;\r\nconst fraction = 472.6 / 600;\r\n\r\nconst LAYER_0 = 0;\r\nconst LAYER_1 = 1;\r\nconst LAYER_2 = 2;\r\nconst LAYER_3 = 3;\r\nconst LAYER_4 = 4;\r\nconst LAYER_5 = 5;\r\nconst W_M1 = 6;\r\nconst W_M2 = 4.5;\r\nconst W_M3 = 3;\r\n\r\nconst W_M4 = 1.5;\r\n\r\nconst H_M1 = 5;\r\nconst H_M2 = 3.75;\r\nconst H_M3 = 2.5;\r\n\r\nconst H_M4 = 1.25;\r\n\r\nconst W_MAX = 100 - W_M1 * 2;\r\n\r\nconst PROGRESS_BAR_HEIGHT = 2;\r\n\r\nconst AUDIO_ICON_WIDTH = 10;\r\nconst AUDIO_ICON_HEIGHT = AUDIO_ICON_WIDTH * fraction;\r\n// const AUDIO_ICON_HEIGHT = AUDIO_ICON_WIDTH * fraction;\r\nconst AUDIO_ICON_LEFT = W_M1 + W_M2 + W_M3;\r\n\r\nconst Q_AREA_HEIGHT = 32;\r\nconst Q_AREA_BOTTOM = 2 * H_M1 + H_M2;\r\nconst Q_AREA_LEFT = W_M1 + W_M2;\r\nconst Q_AREA_WIDTH = W_MAX - W_M2 - W_M2;\r\nconst Q_AREA_TOP = 100 - Q_AREA_HEIGHT - Q_AREA_BOTTOM;\r\n\r\nconst MEDIA_HEIGHT = 34;\r\n// const MEDIA_WIDTH = 100 - 2 * W_M1 - 2 * W_M2;\r\nconst MEDIA_TOP = H_M1 + H_M2;\r\nconst MEDIA_BOTTOM = MEDIA_TOP + MEDIA_HEIGHT;\r\n\r\nconst MEDIA_LEFT = W_M1 + W_M2;\r\n\r\nconst VIDEO_BUTTONS_WIDTH = 8;\r\nconst VIDEO_BUTTONS_HEIGHT = VIDEO_BUTTONS_WIDTH * fraction;\r\nconst VIDEO_CONTROLS_WIDTH = VIDEO_BUTTONS_WIDTH * 2 + 4 * W_M4;\r\nconst VIDEO_CONTROLS_HEIGHT = VIDEO_BUTTONS_HEIGHT + 2 * H_M4 + 2;\r\nconst VIDEO_CONTROLS_LEFT = 50 - VIDEO_CONTROLS_WIDTH / 2;\r\nconst VIDEO_CONTROLS_RIGHT = 50 - VIDEO_CONTROLS_WIDTH / 2;\r\nconst VIDEO_CONTROLS_TOP = MEDIA_BOTTOM - 1;\r\nconst VIDEO_CONTROLS_BOTTOM = 100 - VIDEO_CONTROLS_HEIGHT - VIDEO_CONTROLS_TOP;\r\n\r\nconst PAGE_BACKGROUND_BOTTOM = H_M1 + H_M1;\r\nconst PAGE_BACKGROUND_HEIGHT = 100 - PAGE_BACKGROUND_BOTTOM - H_M1;\r\nconst BUTTON_BAR_WIDTH = Q_AREA_WIDTH - 2 * W_M3;\r\nconst MAIN_TEXT_WIDE = Q_AREA_WIDTH - 2 * W_M3;\r\nconst MAIN_TEXT_NARROW = MAIN_TEXT_WIDE - AUDIO_ICON_WIDTH - W_M3;\r\n\r\nconst btnTextBase: PStyle = {\r\n fontSize: { _unit: \"px\", value: 25 },\r\n bottom: VIDEO_CONTROLS_BOTTOM + 1.2,\r\n zIndex: LAYER_5,\r\n width: VIDEO_CONTROLS_WIDTH / 2,\r\n textAlign: \"center\",\r\n visibility: \"hidden\",\r\n margin: { _unit: \"px\", value: 0 },\r\n // backgroundColor: Colors.yellow,\r\n};\r\n\r\nconst muteUnmuteText: PStyle = { ...btnTextBase, right: VIDEO_CONTROLS_RIGHT };\r\nconst playPauseText: PStyle = { ...btnTextBase, left: VIDEO_CONTROLS_LEFT };\r\nconst replayText: PStyle = {\r\n ...btnTextBase,\r\n width: VIDEO_CONTROLS_WIDTH,\r\n left: VIDEO_CONTROLS_LEFT,\r\n // backgroundColor: Colors.yellow,\r\n visibility: \"hidden\",\r\n};\r\n\r\nconst playPauseBase: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle } = {\r\n css: {\r\n width: VIDEO_BUTTONS_WIDTH,\r\n height: VIDEO_BUTTONS_HEIGHT,\r\n top: MEDIA_BOTTOM,\r\n left: VIDEO_CONTROLS_LEFT + W_M4,\r\n zIndex: LAYER_5,\r\n visibility: \"hidden\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n};\r\n\r\nconst replayButtonStyles: PStyle = {\r\n width: VIDEO_BUTTONS_WIDTH,\r\n height: VIDEO_BUTTONS_HEIGHT,\r\n top: MEDIA_BOTTOM,\r\n // backgroundColor: \"red\",\r\n left: VIDEO_CONTROLS_LEFT + VIDEO_CONTROLS_WIDTH / 2,\r\n transform: translateX50,\r\n zIndex: LAYER_5,\r\n visibility: \"hidden\",\r\n cursor: \"pointer\",\r\n};\r\n\r\nconst muteUnMuteStyles: { css: PStyle; cssDisabled: PStyle; cssEnabled: PStyle } = {\r\n css: {\r\n width: VIDEO_BUTTONS_WIDTH,\r\n height: VIDEO_BUTTONS_HEIGHT,\r\n top: MEDIA_BOTTOM,\r\n right: VIDEO_CONTROLS_RIGHT + W_M4,\r\n zIndex: LAYER_5,\r\n cursor: \"pointer\",\r\n // transform: \"translateX: 100%\",\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 0.8, cursor: \"pointer\" },\r\n};\r\n\r\nconst FONT_QUESTION = 20;\r\nconst FONT_ = 20;\r\nconst responseButtonBaseCss = (): CssTheme => ({\r\n css: {\r\n backgroundColor: Colors.primary,\r\n borderColor: Colors.primary,\r\n textColor: Colors.white,\r\n fontWeight: 600,\r\n fontSize: { _unit: \"px\", value: 28 },\r\n lineHeight: 1.1,\r\n\r\n // TODO Denne angir knappens max-bredde. Default bør være 25.\r\n maxWidth: 25,\r\n minWidth: 12,\r\n // width: 20,\r\n // flex: \"0 0 auto\",\r\n paddingLeft: { _unit: \"px\", value: 10 },\r\n paddingTop: { _unit: \"px\", value: 5 },\r\n paddingBottom: { _unit: \"px\", value: 5 },\r\n paddingRight: { _unit: \"px\", value: 10 },\r\n borderRadius: { _unit: \"px\", value: 20 },\r\n borderStyle: \"solid\",\r\n boxShadow: \"3px 3px gray\",\r\n position: \"relative\",\r\n display: \"block\",\r\n cursor: \"pointer\",\r\n // maxWidth: { _unit: \"percent\", value: 10 },\r\n },\r\n cssDisabled: { opacity: 0.3, cursor: \"not-allowed\" },\r\n cssEnabled: { opacity: 1, cursor: \"pointer\" },\r\n});\r\nexport const primaryButton = (overridesCss: PStyle): BuilderOptionTheme => {\r\n const base = responseButtonBaseCss();\r\n const optionTheme: BuilderOptionTheme = {\r\n name: \"primary-button\",\r\n normal: {\r\n btn: {\r\n css: {\r\n ...base.css,\r\n ...overridesCss,\r\n backgroundColor: Colors.primary,\r\n borderColor: Colors.primary,\r\n textColor: Colors.white,\r\n },\r\n cssDisabled: base.cssDisabled,\r\n cssEnabled: base.cssEnabled,\r\n },\r\n divider: {},\r\n text1: {},\r\n text2: {},\r\n },\r\n\r\n dontKnow: {\r\n btn: {\r\n css: {\r\n ...base.css,\r\n ...overridesCss,\r\n backgroundColor: Colors.secondary,\r\n borderColor: Colors.secondary,\r\n textColor: Colors.primary,\r\n },\r\n cssEnabled: base.cssEnabled,\r\n cssDisabled: base.cssDisabled,\r\n },\r\n text1: {},\r\n text2: {},\r\n divider: {},\r\n },\r\n };\r\n\r\n return optionTheme;\r\n};\r\n\r\nexport const Theme2: IDefaultTheme = {\r\n name: \"theme2\",\r\n schemaBackgroundColor: Colors.white,\r\n dimensions: { baseHeight: 1300, baseWidth: 1024 },\r\n pageBackGround: {\r\n style: {\r\n height: PAGE_BACKGROUND_HEIGHT,\r\n width: W_MAX,\r\n bottom: PAGE_BACKGROUND_BOTTOM,\r\n left: W_M1,\r\n backgroundColor: Colors.backgroundGray,\r\n },\r\n },\r\n backGroundArea1: {\r\n style: {\r\n height: Q_AREA_HEIGHT,\r\n width: Q_AREA_WIDTH,\r\n left: Q_AREA_LEFT,\r\n bottom: Q_AREA_BOTTOM,\r\n backgroundColor: Colors.white,\r\n },\r\n },\r\n progressBar: {\r\n width: W_MAX,\r\n height: PROGRESS_BAR_HEIGHT,\r\n bottom: H_M1,\r\n left: W_M1,\r\n backgroundStyles: {\r\n backgroundColor: Colors.backgroundGray,\r\n borderRadius: { _unit: \"px\", value: 10 },\r\n },\r\n progressStyles: {\r\n backgroundColor: Colors.primary,\r\n borderRadius: { _unit: \"px\", value: 10 },\r\n },\r\n text: {\r\n textType: \"page-progress\",\r\n style: { fontSize: { _unit: \"px\", value: 20 }, x: 81.5, y: 2.5 },\r\n },\r\n },\r\n videoPlayer: {\r\n playButton: {\r\n text: { text: \"Spill av\", css: { ...playPauseText } },\r\n iconUrl: THEME_2_ICONS.videoPlay.dataUrl,\r\n ...playPauseBase,\r\n },\r\n pauseButton: {\r\n text: { text: \"Pause\", css: { ...playPauseText } },\r\n iconUrl: THEME_2_ICONS.videoPause.dataUrl,\r\n ...playPauseBase,\r\n },\r\n buttonBar: {\r\n width: VIDEO_CONTROLS_WIDTH,\r\n zIndex: LAYER_4,\r\n top: VIDEO_CONTROLS_TOP,\r\n left: VIDEO_CONTROLS_LEFT,\r\n backgroundColor: Colors.white,\r\n height: VIDEO_CONTROLS_HEIGHT,\r\n borderRadius: { _unit: \"px\", value: 16 },\r\n },\r\n muteButton: {\r\n text: { text: \"Lyd av\", css: { ...muteUnmuteText } },\r\n iconUrl: THEME_2_ICONS.mute.dataUrl,\r\n css: muteUnMuteStyles.css,\r\n },\r\n\r\n unMuteButton: {\r\n iconUrl: THEME_2_ICONS.unMute.dataUrl,\r\n css: muteUnMuteStyles.css,\r\n text: { text: \"Lyd på\", css: { ...muteUnmuteText } },\r\n },\r\n\r\n replayButton: {\r\n css: replayButtonStyles,\r\n cssDisabled: {},\r\n cssEnabled: {},\r\n iconUrl: THEME_2_ICONS.videoReplay.dataUrl,\r\n text: { text: \"Spill av på nytt\", css: replayText },\r\n },\r\n\r\n videoElement: {\r\n css: {\r\n height: MEDIA_HEIGHT,\r\n top: MEDIA_TOP,\r\n transform: translateX50,\r\n left: 50,\r\n width: 100,\r\n zIndex: LAYER_2,\r\n visibility: \"visible\",\r\n },\r\n },\r\n },\r\n image: {\r\n style: {\r\n height: MEDIA_HEIGHT,\r\n // Center image, with dynamic width.\r\n left: 50,\r\n transform: translateX50,\r\n top: MEDIA_TOP,\r\n boxShadow: \"3px 3px\",\r\n },\r\n },\r\n\r\n mainText: {\r\n base: {\r\n text: {\r\n width: MAIN_TEXT_WIDE,\r\n left: W_M1 + W_M2 + W_M3,\r\n top: Q_AREA_TOP + H_M3,\r\n backgroundColor: Colors.white,\r\n textAlign: \"left\",\r\n textColor: \"black\",\r\n fontSize: { _unit: \"px\", value: 35 },\r\n lineHeight: 1.2,\r\n },\r\n audio: {\r\n iconUrl: THEME_2_ICONS.audioPlay.dataUrl,\r\n css: {\r\n height: AUDIO_ICON_HEIGHT,\r\n width: AUDIO_ICON_WIDTH,\r\n top: Q_AREA_TOP + H_M3,\r\n left: W_M1 + W_M2 + W_M3,\r\n cursor: \"pointer\",\r\n // transform: \"translateY(100%)\",\r\n opacity: 0.8,\r\n visibility: \"visible\",\r\n // backgroundColor: \"green\",\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 notMediaHasAudio: {\r\n text: { width: MAIN_TEXT_NARROW, left: W_M1 + W_M2 + W_M3 + AUDIO_ICON_WIDTH + W_M3 },\r\n audio: {},\r\n },\r\n hasMediaHasAudio: {\r\n text: {\r\n width: MAIN_TEXT_NARROW,\r\n left: W_M1 + W_M2 + W_M3 + AUDIO_ICON_WIDTH + W_M3,\r\n },\r\n audio: {},\r\n },\r\n notMediaNotAudio: { text: {} },\r\n hasMediaNotAudio: { text: {} },\r\n },\r\n buttonBar: {\r\n vibrateMs: 60,\r\n container: {\r\n base: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n width: BUTTON_BAR_WIDTH,\r\n height: 6,\r\n bottom: Q_AREA_BOTTOM + H_M3,\r\n left: Q_AREA_LEFT + W_M3,\r\n // backgroundColor: \"green\",\r\n gap: { _unit: \"px\", value: 40 },\r\n alignItems: \"stretch\",\r\n },\r\n whenSingle: { justifyContent: \"center\" },\r\n whenMany: { justifyContent: \"flex-start\" },\r\n },\r\n\r\n nextButtonTheme: primaryButton({}),\r\n responseButtons: primaryButton({}),\r\n },\r\n};\r\n","import type { BuilderPageDto, BuilderPageType } from \"./page/Builder-page\";\r\nimport { BuilderPage } from \"./page/Builder-page\";\r\nimport type {\r\n BuilderRuleDto,\r\n ExcludeByPageAction,\r\n ExcludeByTagAction,\r\n JumpToPageAction,\r\n RuleCustomVariable,\r\n} from \"./rulebuilder\";\r\nimport { BuilderRule, RuleInput } from \"./rulebuilder\";\r\nimport type { RuleQuestionVariable } from \"./rulebuilder/RuleVariable\";\r\nimport type { BuilderTagDto } from \"./tag/BuilderTag\";\r\nimport { BuilderTag } from \"./tag/BuilderTag\";\r\nimport { DefaultThemeCompiler } from \"./theme/default-theme-compiler\";\r\nimport { ImageFile } from \"./media-files\";\r\nimport { DUtil } from \"@media-quest/engine\";\r\nimport { PagePrefix } from \"./primitives/page-prefix\";\r\nimport { SchemaPrefix, SchemaPrefixValue } from \"./primitives/schema-prefix\";\r\nimport { CodeBook } from \"./code-book/codebook\";\r\nimport { CodebookPredefinedVariable } from \"./code-book/codebook-variable\";\r\nimport { SchemaConfig } from \"./schema-config\";\r\nimport { CompilerOption, CompilerOutput } from \"./builder-compiler\";\r\n\r\nimport { SumScoreVariable, SumScoreVariableDto } from \"./sum-score/sum-score-variable\";\r\nimport { PageID, SchemaID, SumScoreVariableID } from \"./primitives/ID\";\r\nimport { SumScoreVariableCollection } from \"./sum-score/sum-score-variable-collection\";\r\nimport { TagCollection } from \"./tag/Tag-Collection\";\r\nimport { BuilderPageCollection } from \"./page/Builder-page-collection\";\r\n\r\nconst U = DUtil;\r\n\r\nexport interface BuilderSchemaDto {\r\n readonly id: SchemaID;\r\n readonly prefix: SchemaPrefixValue;\r\n readonly mainImage: ImageFile | false;\r\n readonly backgroundColor: string;\r\n readonly name: string;\r\n readonly pages: ReadonlyArray<BuilderPageDto>;\r\n readonly baseHeight: number;\r\n readonly baseWidth: number;\r\n readonly predefinedVariables?: Array<CodebookPredefinedVariable>;\r\n readonly sumScoreVariables?: ReadonlyArray<SumScoreVariableDto>;\r\n readonly rules: ReadonlyArray<BuilderRuleDto>;\r\n readonly tags: ReadonlyArray<BuilderTagDto>;\r\n}\r\n\r\nexport class BuilderSchema {\r\n readonly prefix: SchemaPrefix;\r\n public readonly compiler = new DefaultThemeCompiler();\r\n\r\n baseHeight = 1300;\r\n baseWidth = 1024;\r\n backgroundColor = \"#000000\";\r\n private readonly _pageCollection: BuilderPageCollection;\r\n mainImage: ImageFile | false = false;\r\n predefinedVariables: CodebookPredefinedVariable[] = [];\r\n private _rules: BuilderRule[] = [];\r\n private readonly _sumScoreCollection;\r\n get rules(): ReadonlyArray<BuilderRule> {\r\n return [...this._rules];\r\n }\r\n get pages(): ReadonlyArray<BuilderPage> {\r\n return [...this._pageCollection];\r\n }\r\n\r\n get sumScoreVariables(): ReadonlyArray<SumScoreVariable> {\r\n return [...this._sumScoreCollection];\r\n }\r\n\r\n // get prefix(): SchemaPrefixValue {\r\n // return this._prefix.value;\r\n // }\r\n\r\n private readonly _tagCollection: TagCollection = TagCollection.create();\r\n get tags(): ReadonlyArray<BuilderTag> {\r\n return [...this._tagCollection];\r\n }\r\n public static create(id: SchemaID, name: string, prefix: SchemaPrefixValue) {\r\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(prefix);\r\n return new BuilderSchema(id, name, schemaPrefix);\r\n }\r\n\r\n public static fromJson(dto: BuilderSchemaDto): BuilderSchema {\r\n const schemaPrefix = SchemaPrefix.castOrCreateRandom(dto.prefix);\r\n const schema = new BuilderSchema(dto.id, dto.name, schemaPrefix);\r\n const sumScoreVariables = dto.sumScoreVariables ? [...dto.sumScoreVariables] : [];\r\n const pagesDto = Array.isArray(dto.pages) ? dto.pages : [];\r\n\r\n // Init collections.\r\n schema._tagCollection.init(dto.tags);\r\n schema._sumScoreCollection.init(sumScoreVariables);\r\n\r\n schema.backgroundColor = dto.backgroundColor;\r\n schema.baseHeight = dto.baseHeight;\r\n schema.baseWidth = dto.baseWidth;\r\n schema._pageCollection._init(pagesDto);\r\n schema.predefinedVariables = dto.predefinedVariables ?? [];\r\n schema.backgroundColor = dto.backgroundColor;\r\n schema.mainImage = dto.mainImage ?? false;\r\n const rulesDto = dto.rules ?? [];\r\n const ruleInput = schema.getRuleInput();\r\n schema._rules = rulesDto.map((r) => BuilderRule.fromDto(r, ruleInput));\r\n\r\n schema.updateSumScoreRelations();\r\n return schema;\r\n }\r\n\r\n toJson(): BuilderSchemaDto {\r\n const pages = this._pageCollection.toJson();\r\n const tags = this._tagCollection.toJson();\r\n const rules = this._rules.map((rule) => rule.toJson());\r\n const sumScoreVariables = this._sumScoreCollection.toJson();\r\n const dto: BuilderSchemaDto = {\r\n backgroundColor: this.backgroundColor,\r\n baseHeight: this.baseHeight,\r\n baseWidth: this.baseWidth,\r\n id: this.id,\r\n name: this.name,\r\n pages,\r\n rules,\r\n tags,\r\n predefinedVariables: this.predefinedVariables,\r\n sumScoreVariables,\r\n mainImage: this.mainImage,\r\n prefix: this.prefix.value,\r\n };\r\n return dto;\r\n }\r\n private constructor(\r\n public readonly id: SchemaID,\r\n public name: string,\r\n prefix: SchemaPrefix,\r\n ) {\r\n this.prefix = prefix;\r\n this._sumScoreCollection = SumScoreVariableCollection.create([]);\r\n this._pageCollection = BuilderPageCollection.create([]);\r\n // this\r\n }\r\n\r\n addPage(type: BuilderPageType, atIndex = -1): BuilderPage {\r\n return this._pageCollection.add(type, atIndex);\r\n }\r\n\r\n sumScoreVariableCreate(options: { name: string; description: string; useAvg: boolean }) {\r\n // TODO VALIDATE.\r\n // this._sumVariables.push({ ...variable });\r\n const variable = this._sumScoreCollection.addNew(options);\r\n\r\n return variable;\r\n }\r\n sumScoreVariableAddToPage(sumScoreVariable: SumScoreVariable, page: BuilderPage, weight: number) {\r\n const added = this._pageCollection.addSumScoreVariable(sumScoreVariable, page.id, weight);\r\n this.updateSumScoreRelations();\r\n return added;\r\n }\r\n\r\n private updateSumScoreRelations() {\r\n const sumScoreVariables = this._sumScoreCollection.asArray();\r\n this._pageCollection.updateRelationShips({ sumScoreVariables });\r\n }\r\n\r\n sumScoreVariableUpdate(id: SumScoreVariableID, data: Partial<SumScoreVariableDto>) {\r\n const didUpdate = this._sumScoreCollection._updateOne(id, data);\r\n this.updateSumScoreRelations();\r\n return didUpdate;\r\n }\r\n\r\n sumScoreVariableDeleteFromPage(pageId: PageID, sumScoreVariableId: SumScoreVariableID) {\r\n this._pageCollection.sumScoreVariableDeleteFromPage(pageId, sumScoreVariableId);\r\n this.updateSumScoreRelations();\r\n }\r\n\r\n insertPage(page: BuilderPage, atIndex: number): boolean {\r\n return this.insertPageAtIndex(page, atIndex);\r\n }\r\n\r\n private insertPageAtIndex(page: BuilderPage, atIndex: number) {\r\n return this._pageCollection.insertPage(page, atIndex);\r\n }\r\n\r\n addRule() {\r\n const input = this.getRuleInput();\r\n const count = this._rules.length + 1;\r\n const name = \"Rule-number: \" + count;\r\n const rule = BuilderRule.fromDto(\r\n {\r\n conditions: [],\r\n type: \"all\",\r\n name,\r\n excludeTags: [],\r\n jumpToPage: false,\r\n excludePages: [],\r\n },\r\n input,\r\n );\r\n this._rules.push(rule);\r\n return rule;\r\n }\r\n deleteRule(rule: BuilderRule) {\r\n this._rules = this._rules.filter((r) => r !== rule);\r\n }\r\n\r\n movePage(page: BuilderPage, toIndex: number): boolean {\r\n return this._pageCollection.movePage(page, toIndex);\r\n }\r\n\r\n deletePage(page: BuilderPage): boolean {\r\n return this._pageCollection.deleteById(page.id);\r\n }\r\n\r\n reevaluateRules() {\r\n console.log(\"Reevaluationg rulesInput\");\r\n const input = this.getRuleInput();\r\n const rulesDto = this._rules.map((r) => r.toJson());\r\n this._rules = rulesDto.map((dto) => BuilderRule.fromDto(dto, input));\r\n }\r\n\r\n getRuleInput(): RuleInput {\r\n const qVars: RuleQuestionVariable[] = [];\r\n const cVars: RuleCustomVariable[] = [];\r\n const pageIdActions: ExcludeByPageAction[] = [];\r\n const tagActions: ExcludeByTagAction[] = this.tags.map((t) => {\r\n const tag = t.tagText;\r\n const pageCount = this._pageCollection.pages.reduce((count, curr) => {\r\n return curr.tags.includes(tag) ? count + 1 : count;\r\n }, 0);\r\n const excludeByTagDto: ExcludeByTagAction = {\r\n kind: \"exclude-by-tag\",\r\n pageCount,\r\n tag,\r\n description: t.tagDescription,\r\n };\r\n return excludeByTagDto;\r\n });\r\n\r\n const jumpActions: JumpToPageAction[] = [];\r\n\r\n this._pageCollection.pages.forEach((page, index) => {\r\n const pageVariables = page.getQuestionVariables(this.prefix, index);\r\n qVars.push(...pageVariables);\r\n const mainText = page.mainText.text;\r\n const pagePrefix = page.prefix;\r\n const jumpAction: JumpToPageAction = {\r\n kind: \"jump-to-page\",\r\n pageId: page.id,\r\n pagePrefix,\r\n pageNumber: index,\r\n mainText: page.mainText.text,\r\n };\r\n const excludePageAction: ExcludeByPageAction = {\r\n kind: \"exclude-by-pageId\",\r\n pageId: page.id,\r\n pagePrefix,\r\n pageNumber: index,\r\n mainText,\r\n };\r\n jumpActions.push(jumpAction);\r\n pageIdActions.push(excludePageAction);\r\n });\r\n const ruleInput = new RuleInput(qVars, cVars, pageIdActions, tagActions, jumpActions);\r\n\r\n return ruleInput;\r\n }\r\n\r\n deleteTags(tags: ReadonlyArray<BuilderTag>) {\r\n this._tagCollection.deleteAll(tags);\r\n }\r\n\r\n addTag(builderTag: BuilderTag) {\r\n this._tagCollection.add(builderTag);\r\n }\r\n\r\n compile(\r\n options: CompilerOption = { blockAutoplayQuestion: false, blockAutoplayVideo: false },\r\n ): CompilerOutput {\r\n // const moduleDto = this.toJson();\r\n const builderSchema = BuilderSchema.fromJson(this.toJson());\r\n\r\n // Overriding the\r\n builderSchema._pageCollection.pages.forEach((p) => {\r\n if (options.blockAutoplayQuestion) {\r\n p.mainText.autoplay = false;\r\n }\r\n if (options.blockAutoplayVideo && p.mainMedia) {\r\n if (p.mainMedia.kind === \"main-video\") {\r\n // TODO autoplay as boolean, so that we know if video is optional or required when override.\r\n p.mainMedia.mode = \"optional\";\r\n }\r\n }\r\n });\r\n const moduleDto = builderSchema.toJson();\r\n // const imp = new DefaultThemeCompiler();\r\n\r\n const codebook = CodeBook.fromSchema(moduleDto);\r\n const schema = this.compiler.compile(moduleDto);\r\n const schemaConfig = SchemaConfig.fromSchema(moduleDto);\r\n const output: CompilerOutput = { codebook, schema, schemaConfig };\r\n return output;\r\n }\r\n\r\n sumScoreVariableDelete(id: SumScoreVariableID) {\r\n const didDelete = this._sumScoreCollection._deleteVariable(id);\r\n const sumScoreVariables = [...this._sumScoreCollection];\r\n this._pageCollection.updateRelationShips({ sumScoreVariables });\r\n this._pageCollection.sumScoreVariableDelete(id);\r\n return didDelete;\r\n }\r\n}\r\n","import { BuilderPageDto } from \"../page/Builder-page\";\r\nimport { BuilderSchemaDto } from \"../Builder-schema\";\r\nimport { CodeBookQuestionVariable, CodebookPredefinedVariable } from \"./codebook-variable\";\r\nimport { SumScoreVariableDto } from \"../sum-score/sum-score-variable\";\r\n\r\nexport interface Codebook {\r\n readonly predefinedVariables: ReadonlyArray<CodebookPredefinedVariable>;\r\n readonly pageVariables: ReadonlyArray<CodeBookQuestionVariable>;\r\n}\r\n\r\nconst fromPage = (\r\n page: BuilderPageDto,\r\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\r\n pagePosition: number,\r\n modulePrefix: string,\r\n): CodeBookQuestionVariable[] => {\r\n const variables: CodeBookQuestionVariable[] = [];\r\n\r\n if (page._type !== \"question\") {\r\n // TODO Implement form field variables\r\n return [];\r\n }\r\n\r\n const options: CodeBookQuestionVariable[\"options\"] = page.defaultQuestion.options.map((o) => {\r\n return { value: o.value, label: o.label };\r\n });\r\n\r\n const varId = modulePrefix + \"_\" + page.prefix;\r\n const pageIncludedInSumScoresArray = page.includedInSumScores ?? [];\r\n\r\n const includedInSumScores: SumScoreVariableDto[] = [];\r\n pageIncludedInSumScoresArray.forEach((p) => {\r\n sumScoreVariables.forEach((ssv) => {\r\n if (p.sumScoreVariableId === ssv.id) {\r\n includedInSumScores.push(ssv);\r\n }\r\n });\r\n });\r\n\r\n const variable: CodeBookQuestionVariable = {\r\n kind: \"codebook-question-variable\",\r\n label: page.mainText.text,\r\n pageId: page.id,\r\n pagePrefix: page.prefix,\r\n options,\r\n modulePrefix,\r\n pagePosition,\r\n varId,\r\n includedInSumScores,\r\n };\r\n\r\n variables.push(variable);\r\n\r\n return variables;\r\n};\r\n\r\n/**\r\n * Converts a list of pages into a list of question-variables\r\n * @param pages\r\n * @param sumScoreVariables\r\n * @param modulePrefix\r\n */\r\nconst getPageVariablesFromPages = (\r\n pages: ReadonlyArray<BuilderPageDto>,\r\n sumScoreVariables: ReadonlyArray<SumScoreVariableDto>,\r\n modulePrefix: string,\r\n): CodeBookQuestionVariable[] => {\r\n const variables: CodeBookQuestionVariable[] = [];\r\n pages.forEach((page, index) => {\r\n const pageVariables = fromPage(page, sumScoreVariables, index, modulePrefix);\r\n variables.push(...pageVariables);\r\n });\r\n return variables;\r\n};\r\n\r\nconst fromSchema = (schema: BuilderSchemaDto): Codebook => {\r\n const modulePrefix = schema.prefix;\r\n const sumScoreVariables = schema.sumScoreVariables ?? [];\r\n const pageVariables = getPageVariablesFromPages(schema.pages, sumScoreVariables, modulePrefix);\r\n const vs = schema.predefinedVariables;\r\n const predefinedVariables: CodebookPredefinedVariable[] = vs ? [...vs] : [];\r\n return { pageVariables, predefinedVariables };\r\n};\r\n\r\nexport const _CodeBook = {\r\n fromSchema,\r\n} as const;\r\n\r\nexport const CodeBook = Object.freeze(_CodeBook);\r\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\";\r\nimport { BuilderObject } from \"../BuilderObject\";\r\nimport { DUtil } from \"@media-quest/engine\";\r\nimport { BuilderPage } from \"../page/Builder-page\";\r\n\r\nexport interface SumScoreVariableDto {\r\n id: SumScoreVariableID;\r\n name: string;\r\n description: string;\r\n useAvg: boolean;\r\n}\r\nexport class SumScoreVariable extends BuilderObject<\r\n \"builder-sum-score-variable\",\r\n SumScoreVariableDto\r\n> {\r\n readonly objectType = \"builder-sum-score-variable\";\r\n readonly id: SumScoreVariableID;\r\n private _useAvg = true;\r\n private _name = \"\";\r\n private _description = \"\";\r\n private _error = \"\";\r\n private _usedIn: ReadonlyArray<BuilderPage> = [];\r\n // private _basedOn = new Map<pageId: Page>()\r\n get usedIn() {\r\n return [...this._usedIn];\r\n }\r\n\r\n // private _basedOn: Array<{ varId: string }> = [];\r\n public static readonly create = (data: {\r\n name: string;\r\n description: string;\r\n useAvg: boolean;\r\n }): SumScoreVariable => {\r\n const id = SumScoreVariableID.create();\r\n return new SumScoreVariable({ id, ...data });\r\n };\r\n\r\n get hasErrors() {\r\n return this._error.length !== 0;\r\n }\r\n\r\n public static fromDto = (dto: SumScoreVariableDto): SumScoreVariable => {\r\n return new SumScoreVariable(dto);\r\n };\r\n\r\n private constructor(dto: SumScoreVariableDto) {\r\n super(dto);\r\n this.id = dto.id;\r\n this._name = dto.name;\r\n this._useAvg = dto.useAvg;\r\n this._description = dto.description;\r\n }\r\n toJson(): SumScoreVariableDto {\r\n const dto: SumScoreVariableDto = {\r\n description: this.description,\r\n id: this.id,\r\n name: this.name,\r\n useAvg: this.useAvg,\r\n };\r\n return dto;\r\n }\r\n clone(): SumScoreVariableDto {\r\n const id = SumScoreVariableID.create();\r\n const dto = this.toJson();\r\n return { ...dto, id };\r\n }\r\n\r\n /** @internal*/\r\n _update(data: { name?: string; description?: string; useAvg?: boolean }) {\r\n const d = data ?? {};\r\n if (DUtil.isString(d.name)) {\r\n this._name = d.name;\r\n }\r\n if (DUtil.isString(d.description)) {\r\n this._description = d.description;\r\n }\r\n if (DUtil.isBool(d.useAvg)) {\r\n this._useAvg = d.useAvg;\r\n }\r\n }\r\n\r\n /**\r\n * @internal - used by sum-score-variable-collection.\r\n */\r\n _setError(error: \"\" | \"Duplicate name\") {\r\n this._error = error;\r\n }\r\n /** @internal - used by sum-score-variable-collection */\r\n _setUsedInPages(pages: BuilderPage[]) {\r\n this._usedIn = [...pages];\r\n }\r\n\r\n get name() {\r\n return this._name;\r\n }\r\n get description() {\r\n return this._description;\r\n }\r\n get useAvg() {\r\n return this._useAvg;\r\n }\r\n}\r\n","import { SumScoreVariable, SumScoreVariableDto } from \"./sum-score-variable\";\r\nimport { SumScoreVariableID } from \"../primitives/ID\";\r\n\r\nexport class SumScoreVariableCollection implements Iterable<SumScoreVariable> {\r\n private _all: Array<SumScoreVariable> = [];\r\n\r\n [Symbol.iterator]() {\r\n const list = [...this._all];\r\n return list[Symbol.iterator]();\r\n }\r\n\r\n asArray(): ReadonlyArray<SumScoreVariable> {\r\n return [...this._all];\r\n }\r\n\r\n public static readonly create = (\r\n variables?: SumScoreVariableDto[],\r\n ): SumScoreVariableCollection => {\r\n return new SumScoreVariableCollection(variables);\r\n };\r\n\r\n private constructor(sumScoreVariables?: SumScoreVariableDto[]) {\r\n const all = Array.isArray(sumScoreVariables) ? sumScoreVariables : [];\r\n this._all = all.map((dto) => SumScoreVariable.fromDto(dto));\r\n this.checkForErrors();\r\n }\r\n\r\n init(variables: SumScoreVariableDto[]) {\r\n this._all = variables.map((variable) => SumScoreVariable.fromDto(variable));\r\n this.checkForErrors();\r\n }\r\n addNew(options: { name: string; description: string; useAvg: boolean }) {\r\n // console.log(options);\r\n const newVariable = SumScoreVariable.create({ ...options });\r\n this._all.push(newVariable);\r\n this.checkForErrors();\r\n return newVariable;\r\n }\r\n\r\n get size() {\r\n return this._all.length;\r\n }\r\n\r\n get errorsCount() {\r\n return this._all.filter((variable) => variable.hasErrors).length;\r\n }\r\n\r\n toJson() {\r\n return this._all.map((item) => item.toJson());\r\n }\r\n\r\n /**\r\n *\r\n */\r\n _deleteVariable(id: SumScoreVariableID) {\r\n const initialSize = this._all.length;\r\n this._all = this._all.filter((variable) => variable.id !== id);\r\n this.checkForErrors();\r\n return initialSize === this.size + 1;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _updateOne(\r\n id: SumScoreVariableID,\r\n updates: { name?: string; description?: string; useAvg?: boolean },\r\n ): boolean {\r\n const variable = this._all.find((variable) => variable.id === id);\r\n if (variable) {\r\n variable._update(updates);\r\n this.checkForErrors();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** @internal */\r\n _getVariableById(id: SumScoreVariableID): SumScoreVariable | undefined {\r\n return this._all.find((variable) => variable.id === id);\r\n }\r\n\r\n private checkForErrors() {\r\n const nameMap = new Map<string, SumScoreVariable[]>();\r\n this._all.forEach((v) => {\r\n const array = nameMap.get(v.name) ?? [];\r\n array.push(v);\r\n nameMap.set(v.name, array);\r\n });\r\n nameMap.forEach((sameNameArray) => {\r\n sameNameArray.forEach((sameNameItem) => {\r\n if (sameNameArray.length > 1) {\r\n sameNameItem._setError(\"Duplicate name\");\r\n } else {\r\n sameNameItem._setError(\"\");\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { BuilderObject } from \"../BuilderObject\";\r\nimport { TagID } from \"../primitives/ID\";\r\n\r\nexport interface BuilderTagDto {\r\n readonly id: TagID;\r\n readonly tag: string;\r\n readonly description: string;\r\n}\r\n\r\nexport class BuilderTag extends BuilderObject<\"builder-tag\", BuilderTagDto> {\r\n readonly objectType: \"builder-tag\" = \"builder-tag\";\r\n readonly id: TagID;\r\n tagText = \"\";\r\n tagDescription = \"\";\r\n public static readonly MAX_LENGTH = 20;\r\n public static readonly MIN_LENGTH = 1;\r\n\r\n public static readonly create = (tag: string, description: string = \"\") => {\r\n const id = TagID.create();\r\n const dto: BuilderTagDto = {\r\n id,\r\n tag,\r\n description,\r\n };\r\n return new BuilderTag(dto);\r\n };\r\n public static readonly fromDto = (dto: BuilderTagDto) => {\r\n return new BuilderTag(dto);\r\n };\r\n protected constructor(dto: BuilderTagDto) {\r\n const id = TagID.validateOrCreate(dto.id);\r\n const withId = { ...dto, id };\r\n super(withId);\r\n this.id = id;\r\n this.tagText = dto.tag ?? \"\";\r\n this.tagDescription = dto.description ?? \"\";\r\n }\r\n clone(): BuilderTagDto {\r\n return this.toJson();\r\n }\r\n\r\n toJson(): BuilderTagDto {\r\n return { tag: this.tagText, description: this.tagDescription, id: this.id };\r\n }\r\n}\r\n","import { BuilderTag, BuilderTagDto } from \"./BuilderTag\";\r\n\r\nexport class TagCollection implements Iterable<BuilderTag> {\r\n private readonly _tags = new Set<BuilderTag>();\r\n public static readonly create = () => {\r\n return new TagCollection([]);\r\n };\r\n\r\n [Symbol.iterator]() {\r\n const list = [...this._tags];\r\n return list[Symbol.iterator]();\r\n }\r\n\r\n private constructor(initialTags: ReadonlyArray<BuilderTag>) {\r\n initialTags.forEach((tag) => {\r\n this._tags.add(tag);\r\n });\r\n }\r\n\r\n init(tags: ReadonlyArray<BuilderTagDto>) {\r\n const dtoList: ReadonlyArray<BuilderTagDto> = Array.isArray(tags) ? tags : [];\r\n const all = dtoList.map(BuilderTag.fromDto);\r\n all.forEach((tag) => {\r\n this._tags.add(tag);\r\n });\r\n }\r\n\r\n add(tag: BuilderTag) {\r\n this._tags.add(tag);\r\n }\r\n\r\n /**\r\n * Delete this tag from collection;\r\n * @param tag\r\n */\r\n delete(tag: BuilderTag) {\r\n this._tags.delete(tag);\r\n }\r\n\r\n toJson(): ReadonlyArray<BuilderTagDto> {\r\n const list = [...this._tags];\r\n const dtoList = list.map((t) => t.toJson());\r\n return dtoList;\r\n }\r\n\r\n deleteAll(tags: Iterable<BuilderTag>) {\r\n const l = tags[Symbol.iterator]();\r\n const asList = [...tags];\r\n asList.forEach((t) => {\r\n this.delete(t);\r\n });\r\n }\r\n}\r\n","import { DUtil } from \"@media-quest/engine\";\r\nimport { BuilderPage, BuilderPageDto } from \"./Builder-page\";\r\nimport { PageID, PagePrefix, SumScoreVariableID } from \"../public-api\";\r\nimport { SumScoreVariableCollection } from \"../sum-score/sum-score-variable-collection\";\r\nimport { SumScoreVariable } from \"../sum-score/sum-score-variable\";\r\n\r\nconst U = DUtil;\r\nexport type BuilderPageType = \"info-page\" | \"question\";\r\n\r\nexport class BuilderPageCollection implements Iterable<BuilderPage> {\r\n private _all: Array<BuilderPage> = [];\r\n\r\n public static create(pages: BuilderPageDto[]) {\r\n const page = new BuilderPageCollection(pages);\r\n page._all = pages.map((p) => BuilderPage.fromJson(p));\r\n return page;\r\n }\r\n private constructor(initialPages: BuilderPageDto[]) {}\r\n\r\n /** @internal - used by Schema*/\r\n _init(pages: BuilderPageDto[]) {\r\n this._all = pages.map(BuilderPage.fromJson);\r\n }\r\n\r\n add(type: BuilderPageType, atIndex = -1): BuilderPage {\r\n const pagePrefix = PagePrefix.create();\r\n const newPage = BuilderPage.create(type, pagePrefix.value);\r\n if (atIndex >= 0 && atIndex < this._all.length) {\r\n this._all.splice(atIndex, 0, newPage);\r\n } else {\r\n this._all.push(newPage);\r\n }\r\n return newPage;\r\n }\r\n\r\n deleteById(id: PageID) {\r\n const index = this._all.findIndex((p) => p.id === id);\r\n if (index !== -1) {\r\n this._all.splice(index, 1);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private getPageById(pageId: PageID) {\r\n const maybePage = this._all.find((p) => p.id === pageId);\r\n return maybePage ?? false;\r\n }\r\n get size() {\r\n return this._all.length;\r\n }\r\n get pages(): ReadonlyArray<BuilderPage> {\r\n return [...this._all];\r\n }\r\n toJson(): ReadonlyArray<BuilderPageDto> {\r\n return this._all.map((p) => p.toJson());\r\n }\r\n\r\n [Symbol.iterator]() {\r\n const list = [...this._all];\r\n return list[Symbol.iterator]();\r\n }\r\n\r\n movePage(page: BuilderPage, toIndex: number) {\r\n const index = this._all.indexOf(page);\r\n if (index < 0) {\r\n return false;\r\n }\r\n const isValidIndex = U.isInRange(0, this._all.length - 1);\r\n if (!isValidIndex(toIndex)) {\r\n return false;\r\n }\r\n // console.log('Moving from :' + index + ' to: ' + toIndex);\r\n this._all.splice(index, 1);\r\n this._all.splice(toIndex, 0, page);\r\n return true;\r\n }\r\n\r\n insertPage(page: BuilderPage, atIndex: number) {\r\n const isValidIndex = U.isInRange(0, this._all.length - 1);\r\n if (!isValidIndex(atIndex)) {\r\n return false;\r\n }\r\n const exists = !!this._all.find((p) => p.id === page.id);\r\n if (exists) {\r\n return false;\r\n }\r\n this._all.splice(atIndex, 0, page);\r\n return true;\r\n }\r\n\r\n addSumScoreVariable(sumScoreVariable: SumScoreVariable, pageId: PageID, weight: number) {\r\n const maybePage = this.getPageById(pageId);\r\n if (!maybePage) return false;\r\n maybePage.sumScoreVariableSet(sumScoreVariable, weight);\r\n\r\n // maybePage.addSumScoreVariable(maybeVariable, weight);\r\n return true;\r\n }\r\n\r\n updateRelationShips(context: { sumScoreVariables: ReadonlyArray<SumScoreVariable> }) {\r\n const { sumScoreVariables } = context;\r\n\r\n // Update all relationships in pages.\r\n this._all.forEach((p) => {\r\n p.updateRelationShips(context.sumScoreVariables);\r\n });\r\n\r\n // Set the used in pages array on every variable.\r\n sumScoreVariables.forEach((v) => {\r\n const usedInPages = this._all.filter((p) => p._isIncludedInSumScore(v.id));\r\n v._setUsedInPages(usedInPages);\r\n });\r\n }\r\n\r\n sumScoreVariableDelete(sumScoreVariableID: SumScoreVariableID) {\r\n this._all.forEach((p) => {\r\n p.sumScoreVariableDelete(sumScoreVariableID);\r\n });\r\n }\r\n\r\n sumScoreVariableDeleteFromPage(pageId: PageID, sumScoreVariableId: SumScoreVariableID) {\r\n const maybePage = this.getPageById(pageId);\r\n if (!maybePage) return false;\r\n maybePage.sumScoreVariableDelete(sumScoreVariableId);\r\n return true;\r\n }\r\n}\r\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\";\r\nimport { SumScoreVariableID } from \"../primitives/ID\";\r\nimport { SumScoreAnswer } from \"./sum-score-answer\";\r\nimport { CodeBook } from \"../code-book/codebook\";\r\nimport { BuilderSchemaDto } from \"../Builder-schema\";\r\n\r\n/**\r\n *\r\n * A constant Array that contains all legal\r\n */\r\nconst ALLOWED_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8];\r\nconst isAllowedValue = (num: number) => {\r\n const notNegative = num >= 0;\r\n const lessThanNine = num < 9;\r\n return notNegative && lessThanNine;\r\n};\r\n\r\ntype BasedOnEntry =\r\n | { kind: \"missing\"; varId: string }\r\n | { kind: \"invalid-variable\"; varId: string; message: string }\r\n | { kind: \"has-value\"; varId: string; value: number; weight: number; varLabel: string };\r\n\r\nexport interface SumScore {\r\n readonly sumScoreVariableId: SumScoreVariableID;\r\n readonly name: string;\r\n readonly description: string;\r\n sumScore: number;\r\n avg: number; // Alle besvarte spørsmål som ikke er 9.\r\n useAvg: boolean;\r\n includedAnswerCount: number;\r\n missingAnswerCount: number;\r\n skippedBy9Count: number; // Antall vetikke / hopp over\r\n basedOn: Array<{ varId: string; value: number; weight: number; varLabel: string }>;\r\n errorMessages: string[];\r\n}\r\n\r\nconst calculateAll = (\r\n schemaDto: BuilderSchemaDto,\r\n answers: Array<SumScoreAnswer>,\r\n): ReadonlyArray<SumScore> => {\r\n const vs = schemaDto.sumScoreVariables ?? [];\r\n\r\n const basedOnMap = new Map<SumScoreVariableID, Array<{ varId: string; weight: number }>>();\r\n const codeBook = CodeBook.fromSchema(schemaDto);\r\n // codeBook.pageVariables.find(v => v.pageId === )\r\n const pages = schemaDto.pages;\r\n // const a: Array<{pageId: PageID, sumScoreVariableId: SumScoreVariableID, weight: number, varId: string}> = []\r\n\r\n pages.forEach((page) => {\r\n page.includedInSumScores.forEach((includedInScores) => {\r\n const variableId = includedInScores.sumScoreVariableId;\r\n const weight = includedInScores.weight;\r\n const p = codeBook.pageVariables.find((v) => v.pageId === page.id);\r\n if (p) {\r\n const currentBasedOnArray = basedOnMap.get(variableId) ?? [];\r\n currentBasedOnArray.push({ varId: p.varId, weight });\r\n basedOnMap.set(variableId, currentBasedOnArray);\r\n } else {\r\n // TODO - Global event-bus for errors?\r\n console.error(\"INVALID DATA in calculate all sum-scores.\");\r\n // throw Error(\"Invalid data...\");\r\n }\r\n });\r\n });\r\n // const pages = Array.isArray(schemaDto.pages) ? schemaDto.pages : [];\r\n const results: ReadonlyArray<SumScore> = vs.map((v) => {\r\n const basedOn = basedOnMap.get(v.id) ?? [];\r\n return calculate(v, basedOn, answers);\r\n });\r\n\r\n return results;\r\n};\r\nconst calculate = (\r\n sumScoreVariable: SumScoreVariableDto,\r\n basedOnVariables: Array<{ varId: string; weight: number }>,\r\n answers: Array<SumScoreAnswer>,\r\n): SumScore => {\r\n const legalValues: Array<number> = [...ALLOWED_VALUES];\r\n // CALCULATE THESE!!\r\n let includedAnswerCount = 0;\r\n let skippedBy9Count = 0;\r\n let missingAnswerCount = 0;\r\n let sumScore = 0;\r\n const errorMessages: string[] = [];\r\n const basedOn: SumScore[\"basedOn\"] = [];\r\n const useAvg = sumScoreVariable.useAvg;\r\n const basedOnEntries: BasedOnEntry[] = basedOnVariables.map((scv) => {\r\n const maybeAnswer = answers.find((v) => v.varId === scv.varId);\r\n let result: BasedOnEntry = { kind: \"missing\", varId: scv.varId };\r\n if (!maybeAnswer) {\r\n return result;\r\n }\r\n\r\n const value = maybeAnswer.value;\r\n const varLabel = maybeAnswer.varLabel;\r\n const weight = scv.weight ?? 1;\r\n const varId = maybeAnswer.varId;\r\n\r\n result = {\r\n kind: \"has-value\",\r\n varId,\r\n weight,\r\n value,\r\n varLabel,\r\n };\r\n\r\n return result;\r\n });\r\n\r\n basedOnEntries.forEach((entry) => {\r\n if (entry.kind === \"missing\") {\r\n missingAnswerCount++;\r\n }\r\n if (entry.kind === \"has-value\") {\r\n const { varId, varLabel, weight, value } = { ...entry };\r\n const isAllowed = isAllowedValue(value);\r\n if (isAllowed) {\r\n basedOn.push({ varId, weight, value, varLabel });\r\n sumScore += entry.value * entry.weight;\r\n includedAnswerCount++;\r\n }\r\n if (value === 9) {\r\n skippedBy9Count++;\r\n basedOn.push({ varId, weight, value, varLabel });\r\n }\r\n }\r\n if (entry.kind === \"invalid-variable\") {\r\n errorMessages.push(entry.message);\r\n }\r\n });\r\n\r\n const avg = sumScore / includedAnswerCount;\r\n const result: SumScore = {\r\n sumScoreVariableId: sumScoreVariable.id,\r\n name: sumScoreVariable.name,\r\n description: sumScoreVariable.description,\r\n avg,\r\n useAvg,\r\n includedAnswerCount,\r\n skippedBy9Count,\r\n sumScore,\r\n basedOn,\r\n missingAnswerCount,\r\n errorMessages,\r\n };\r\n // Calculate avg\r\n\r\n return result;\r\n};\r\nconst createVariable = (): SumScoreVariableDto => {\r\n const id = SumScoreVariableID.create();\r\n return {\r\n id,\r\n name: \"\",\r\n useAvg: true,\r\n description: \"\",\r\n // basedOn: [],\r\n };\r\n};\r\nexport const SumScore = {\r\n ALLOWED_VALUES,\r\n calculate,\r\n calculateAll,\r\n isAllowedValue,\r\n createVariable,\r\n};\r\n"],"mappings":"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","names":["BuilderOperator","v","op","dto","label","BuilderOptionTheme","import_engine","import_engine","import_engine","variable","import_engine","result"]}