@case-framework/survey-core 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"survey-DJbgFVPz.mjs","names":[],"sources":["../src/utils.ts","../src/survey/utils/value-reference.ts","../src/expressions/expression.ts","../src/expressions/template-value.ts","../src/survey/responses/value-types.ts","../src/survey/items/utils.ts","../src/survey/items/survey-item.ts","../src/survey/items/types.ts","../src/survey/item-key.ts","../src/survey/utils/group-utils.ts","../src/survey/registry/built-in-items.ts","../src/survey/registry/item-registry.ts","../src/survey/survey-file-schema.ts","../src/survey/utils/translations.ts","../src/survey/survey.ts"],"sourcesContent":["\n/**\n * Shuffles an array of indices using the Fisher-Yates shuffle algorithm\n * @param length - The length of the array to create indices for\n * @returns A shuffled array of indices from 0 to length-1\n */\nexport function shuffleIndices(length: number): number[] {\n const shuffledIndices = Array.from({ length }, (_, i) => i);\n\n for (let i = shuffledIndices.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [shuffledIndices[i], shuffledIndices[j]] = [shuffledIndices[j], shuffledIndices[i]];\n }\n\n return shuffledIndices;\n}\n\nexport function structuredCloneMethod<T>(obj: T): T {\n if (typeof structuredClone !== 'undefined') {\n return structuredClone(obj);\n }\n // Fallback to JSON method\n return JSON.parse(JSON.stringify(obj));\n}\n\nconst ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\nexport function generateId(): string {\n const length = 10;\n const timestamp = Date.now();\n let encodedTimestamp = '';\n let t = timestamp;\n const base = ALPHABET.length;\n\n while (t > 0) {\n encodedTimestamp = ALPHABET.charAt(t % base) + encodedTimestamp;\n t = Math.floor(t / base);\n }\n\n let randomPart = '';\n for (let i = 0; i < length; i++) {\n randomPart += ALPHABET.charAt(Math.floor(Math.random() * base));\n }\n return randomPart + encodedTimestamp;\n}\n\n\n/** Alphanumeric chars without ambiguous ones (0/O, 1/I) for human-readable coding keys. */\nconst CODING_KEY_ALPHABET = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';\n\n/**\n * Generates a short random coding key suitable for item keys in exports/codebooks.\n * @param length - Key length (default 4)\n * @returns A random string of the specified length.\n */\nexport function generateCodingKey(length: number = 4): string {\n const base = CODING_KEY_ALPHABET.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += CODING_KEY_ALPHABET.charAt(Math.floor(Math.random() * base));\n }\n return key;\n}\n","const SEPARATOR = '...';\n\nexport enum ValueReferenceMethod {\n get = 'get',\n isDefined = 'isDefined',\n}\n\n\n\nexport class ValueReference {\n _itemId: string;\n _name: ValueReferenceMethod;\n _slotId: string;\n\n constructor(str: string) {\n const parts = str.split(SEPARATOR);\n if (parts.length !== 3) {\n throw new Error('Invalid value reference: ' + str);\n }\n this._itemId = parts[0];\n this._name = parts[1] as ValueReferenceMethod;\n this._slotId = parts[2];\n }\n\n get itemId(): string {\n return this._itemId;\n }\n\n get name(): ValueReferenceMethod {\n return this._name;\n }\n\n get slotId(): string {\n return this._slotId;\n }\n\n set itemId(itemId: string) {\n this._itemId = itemId;\n }\n\n toString(): string {\n return `${this._itemId}${SEPARATOR}${this._name}${this._slotId ? SEPARATOR + this._slotId : ''}`;\n }\n\n static fromParts(itemId: string, name: ValueReferenceMethod, slotId: string): ValueReference {\n return new ValueReference(`${itemId}${SEPARATOR}${name}${SEPARATOR}${slotId}`);\n }\n}\n\n\nexport enum ReferenceUsageType {\n displayConditions = 'displayConditions',\n templateValues = 'templateValues',\n validations = 'validations',\n disabledConditions = 'disabledConditions',\n}\n\nexport interface ReferenceUsage {\n itemId: string;\n fullComponentKey?: string;\n usageType?: ReferenceUsageType;\n valueReference: ValueReference;\n}\n","import { ResponseValue, ValueType, } from \"../survey/responses\";\nimport { ValueReference } from \"../survey/utils/value-reference\";\n\n\nexport const ExpressionType = {\n Const: 'const',\n ResponseVariable: 'responseVariable',\n ContextVariable: 'contextVariable',\n Function: 'function',\n} as const;\n\nexport type ExpressionType = (typeof ExpressionType)[keyof typeof ExpressionType];\n\nexport const ContextVariableType = {\n Locale: 'locale',\n ParticipantFlag: 'participantFlag',\n CustomValue: 'customValue',\n CustomExpression: 'customExpression'\n} as const;\n\nexport type ContextVariableType = (typeof ContextVariableType)[keyof typeof ContextVariableType];\n\nexport interface ExpressionEditorConfig {\n usedTemplate?: string;\n}\n\nexport interface JsonConstExpression {\n type: typeof ExpressionType.Const;\n value?: ResponseValue;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonResponseVariableExpression {\n type: typeof ExpressionType.ResponseVariable;\n variableRef: string;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonContextVariableExpression {\n type: typeof ExpressionType.ContextVariable;\n\n contextType: ContextVariableType;\n key?: JsonExpression;\n arguments?: Array<JsonExpression | undefined>;\n asType?: ValueType;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonFunctionExpression {\n type: typeof ExpressionType.Function;\n functionName: string;\n arguments: Array<JsonExpression | undefined>;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport type JsonExpression = JsonConstExpression | JsonResponseVariableExpression | JsonContextVariableExpression | JsonFunctionExpression;\n\n\n\n/**\n * Base class for all expressions.\n */\nexport abstract class Expression {\n type: ExpressionType;\n editorConfig?: ExpressionEditorConfig;\n\n constructor(type: ExpressionType, editorConfig?: ExpressionEditorConfig) {\n this.type = type;\n this.editorConfig = editorConfig;\n }\n\n static deserialize(json: JsonExpression | undefined): Expression | undefined {\n if (!json) {\n return undefined;\n }\n\n switch (json.type) {\n case ExpressionType.Const:\n return ConstExpression.deserialize(json);\n case ExpressionType.ResponseVariable:\n return ResponseVariableExpression.deserialize(json);\n case ExpressionType.ContextVariable:\n return ContextVariableExpression.deserialize(json);\n case ExpressionType.Function:\n return FunctionExpression.deserialize(json);\n }\n }\n\n /**\n * Returns all unique response variable references in the expression.\n * @returns A list of ValueReference objects.\n */\n abstract get responseVariableRefs(): ValueReference[]\n abstract serialize(): JsonExpression | undefined;\n\n clone(): Expression {\n return Expression.deserialize(this.serialize()) ?? (() => {\n throw new Error('Failed to clone expression');\n })();\n }\n}\n\nexport class ConstExpression extends Expression {\n declare type: typeof ExpressionType.Const;\n value?: ResponseValue;\n\n constructor(value?: ResponseValue, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.Const, editorConfig);\n this.value = value;\n this.type = ExpressionType.Const;\n }\n\n static deserialize(json: JsonExpression): ConstExpression {\n if (json.type !== ExpressionType.Const) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ConstExpression(json.value, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return [];\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n value: this.value,\n editorConfig: this.editorConfig\n }\n }\n\n updateItemKeyReferences(_oldItemKey: string, _newItemKey: string): boolean {\n // Const expressions don't have item references\n return false;\n }\n}\n\nexport class ResponseVariableExpression extends Expression {\n declare type: typeof ExpressionType.ResponseVariable;\n variableRef: string;\n\n constructor(variableRef: string, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.ResponseVariable, editorConfig);\n this.variableRef = variableRef;\n this.type = ExpressionType.ResponseVariable;\n }\n\n static deserialize(json: JsonExpression): ResponseVariableExpression {\n if (json.type !== ExpressionType.ResponseVariable) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ResponseVariableExpression(json.variableRef, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return [new ValueReference(this.variableRef)];\n }\n\n get responseVariableRef(): ValueReference {\n return new ValueReference(this.variableRef);\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n variableRef: this.variableRef,\n editorConfig: this.editorConfig\n }\n }\n}\n\nexport class ContextVariableExpression extends Expression {\n declare type: typeof ExpressionType.ContextVariable;\n\n contextType: ContextVariableType;\n key?: Expression;\n arguments?: Array<Expression | undefined>;\n asType?: ValueType;\n\n constructor(contextType: ContextVariableType, key?: Expression, args?: Array<Expression | undefined>, asType?: ValueType, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.ContextVariable, editorConfig);\n this.type = ExpressionType.ContextVariable;\n this.contextType = contextType;\n this.key = key;\n this.arguments = args;\n this.asType = asType;\n }\n\n static deserialize(json: JsonExpression): ContextVariableExpression {\n if (json.type !== ExpressionType.ContextVariable) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ContextVariableExpression(json.contextType, Expression.deserialize(json.key), json.arguments?.map(arg => Expression.deserialize(arg)), json.asType, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return this.arguments?.flatMap(arg => arg?.responseVariableRefs).filter(ref => ref !== undefined) ?? [];\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n contextType: this.contextType,\n key: this.key?.serialize(),\n arguments: this.arguments?.map(arg => arg?.serialize()),\n asType: this.asType,\n editorConfig: this.editorConfig\n }\n }\n}\n\n\nexport enum FunctionExpressionNames {\n and = 'and',\n or = 'or',\n not = 'not',\n\n list_contains = 'list_contains',\n\n // numeric functions\n eq = 'eq',\n gt = 'gt',\n gte = 'gte',\n lt = 'lt',\n lte = 'lte',\n in_range = 'in_range',\n\n sum = 'sum',\n min = 'min',\n max = 'max',\n\n\n\n\n // string functions\n str_eq = 'str_eq',\n\n // date functions\n date_eq = 'date_eq',\n}\n\nexport class FunctionExpression extends Expression {\n declare type: typeof ExpressionType.Function;\n functionName: FunctionExpressionNames;\n arguments: Array<Expression | undefined>;\n\n constructor(functionName: FunctionExpressionNames, args: Array<Expression | undefined>, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.Function);\n this.type = ExpressionType.Function;\n this.functionName = functionName;\n this.arguments = args;\n this.editorConfig = editorConfig;\n }\n\n static deserialize(json: JsonExpression): FunctionExpression {\n if (json.type !== ExpressionType.Function) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n const functionName = json.functionName as FunctionExpressionNames;\n if (!Object.values(FunctionExpressionNames).includes(functionName)) {\n throw new Error('Invalid function name: ' + functionName);\n }\n\n const expr = new FunctionExpression(functionName, json.arguments.map(arg => Expression.deserialize(arg)));\n expr.editorConfig = json.editorConfig;\n return expr;\n }\n\n get responseVariableRefs(): ValueReference[] {\n const refs = this.arguments.flatMap(arg => arg?.responseVariableRefs).filter(ref => ref !== undefined);\n const refStrings = refs.map(ref => ref.toString());\n return [...new Set(refStrings)].map(ref => new ValueReference(ref));\n }\n\n serialize(): JsonExpression | undefined {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.arguments.map(arg => arg?.serialize()),\n editorConfig: this.editorConfig\n }\n }\n}\n","import { ValueType } from \"../survey/responses\";\nimport { Expression, JsonExpression } from \"./expression\";\n\n\nexport enum TemplateDefTypes {\n Default = 'default',\n Date2String = 'date2string'\n}\n\nexport type TemplateValueBase = {\n type: TemplateDefTypes;\n returnType: ValueType;\n expression?: Expression;\n}\n\n\nexport type TemplateValueFormatDate = TemplateValueBase & {\n type: TemplateDefTypes.Date2String;\n returnType: typeof ValueType.string;\n dateFormat: string;\n}\n\nexport type TemplateValueDefinition = TemplateValueBase | TemplateValueFormatDate;\n\n\n\nexport const serializeTemplateValue = (templateValue: TemplateValueDefinition): JsonTemplateValue => {\n const json: JsonTemplateValue = {\n type: templateValue.type,\n returnType: templateValue.returnType,\n expression: templateValue.expression?.serialize(),\n }\n if (templateValue.type === TemplateDefTypes.Date2String) {\n json.dateFormat = (templateValue as TemplateValueFormatDate).dateFormat;\n }\n return json;\n}\n\nexport const serializeTemplateValues = (templateValues: Map<string, TemplateValueDefinition>): { [templateValueKey: string]: JsonTemplateValue } => {\n const json: { [templateValueKey: string]: JsonTemplateValue } = {};\n for (const [key, value] of templateValues.entries()) {\n json[key] = serializeTemplateValue(value);\n }\n return json;\n}\n\nexport const deserializeTemplateValue = (json: JsonTemplateValue): TemplateValueDefinition => {\n return {\n type: json.type,\n expression: json.expression ? Expression.deserialize(json.expression) : undefined,\n returnType: json.returnType,\n dateFormat: json.dateFormat\n }\n}\n\nexport const deserializeTemplateValues = (json: { [templateValueKey: string]: JsonTemplateValue }): Map<string, TemplateValueDefinition> => {\n return new Map(Object.entries(json).map(([key, value]) => [key, deserializeTemplateValue(value)]));\n}\n\nexport interface JsonTemplateValue {\n type: TemplateDefTypes;\n expression?: JsonExpression;\n returnType: ValueType;\n dateFormat?: string;\n}\n\n","export const ValueType = {\n string: 'string',\n duration: 'duration',\n reference: 'reference',\n number: 'number',\n boolean: 'boolean',\n date: 'date',\n stringArray: 'string[]',\n durationArray: 'duration[]',\n referenceArray: 'reference[]',\n numberArray: 'number[]',\n dateArray: 'date[]',\n} as const;\n\nexport type ValueType = (typeof ValueType)[keyof typeof ValueType];\n\n\nexport const DurationUnits = {\n seconds: 'seconds',\n minutes: 'minutes',\n hours: 'hours',\n days: 'days',\n weeks: 'weeks',\n months: 'months',\n years: 'years',\n} as const;\n\nexport type DurationUnit = (typeof DurationUnits)[keyof typeof DurationUnits];\n\n\nexport const NumberPrecision = {\n int: 'int',\n float: 'float',\n} as const;\n\nexport type NumberPrecision = (typeof NumberPrecision)[keyof typeof NumberPrecision];\n\n\nexport interface SlotResponseBase<TValueType extends ValueType> {\n type: TValueType;\n}\n\nexport interface StringResponse extends SlotResponseBase<typeof ValueType.string> {\n value: string;\n}\n\nexport interface DurationResponse extends SlotResponseBase<typeof ValueType.duration> {\n value: number;\n unit: DurationUnit;\n precision?: NumberPrecision;\n}\n\nexport interface NumberResponse extends SlotResponseBase<typeof ValueType.number> {\n value: number;\n precision?: NumberPrecision;\n}\n\nexport interface BooleanResponse extends SlotResponseBase<typeof ValueType.boolean> {\n value: boolean;\n}\n\nexport interface ReferenceResponse extends SlotResponseBase<typeof ValueType.reference> {\n value: string;\n}\n\nexport interface DateResponse extends SlotResponseBase<typeof ValueType.date> {\n value: number;\n}\n\nexport interface StringArrayResponse extends SlotResponseBase<typeof ValueType.stringArray> {\n value: string[];\n}\n\n\n\nexport interface DurationArrayResponse extends SlotResponseBase<typeof ValueType.durationArray> {\n value: number[];\n unit: DurationUnit;\n precision?: NumberPrecision;\n}\n\nexport interface NumberArrayResponse extends SlotResponseBase<typeof ValueType.numberArray> {\n value: number[];\n precision?: NumberPrecision;\n}\n\n\nexport interface DateArrayResponse extends SlotResponseBase<typeof ValueType.dateArray> {\n value: number[];\n}\n\n\nexport interface ReferenceArrayResponse extends SlotResponseBase<typeof ValueType.referenceArray> {\n value: string[];\n}\n\nexport type ResponseValue = StringResponse | DurationResponse | ReferenceResponse | NumberResponse | BooleanResponse | DateResponse | StringArrayResponse | DurationArrayResponse | NumberArrayResponse | DateArrayResponse | ReferenceArrayResponse;\n\n\nexport type ValueRefTypeLookup = {\n [valueRefString: string]: ValueType;\n}\n\n\n","import { Expression, JsonExpression } from \"../../expressions\";\n\nexport interface DisplayConditions {\n root?: Expression;\n components?: {\n [componentKey: string]: Expression | undefined;\n }\n}\n\nexport interface JsonDisplayConditions {\n root?: JsonExpression;\n components?: {\n [componentKey: string]: JsonExpression | undefined;\n }\n}\n\nexport interface JsonDisabledConditions {\n components?: {\n [componentKey: string]: JsonExpression | undefined;\n }\n}\n\nexport interface DisabledConditions {\n components?: {\n [componentKey: string]: Expression | undefined;\n }\n}\n\nexport const displayConditionsFromJson = (json: JsonDisplayConditions): DisplayConditions => {\n return {\n root: json.root ? Expression.deserialize(json.root) : undefined,\n components: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined\n }\n}\n\nexport const displayConditionsToJson = (displayConditions: DisplayConditions): JsonDisplayConditions => {\n return {\n root: displayConditions.root ? displayConditions.root.serialize() : undefined,\n components: displayConditions.components ? Object.fromEntries(Object.entries(displayConditions.components).map(([key, value]) => [key, value?.serialize()])) : undefined\n }\n}\n\nexport const disabledConditionsFromJson = (json: JsonDisabledConditions): DisabledConditions => {\n return {\n components: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined\n }\n}\n\nexport const disabledConditionsToJson = (disabledConditions: DisabledConditions): JsonDisabledConditions => {\n return {\n components: disabledConditions.components ? Object.fromEntries(Object.entries(disabledConditions.components).map(([key, value]) => [key, value?.serialize()])) : undefined\n }\n}\n","import { Expression } from \"../../expressions\";\nimport { RawSurveyItem } from \"../items\";\nimport { ResponseSlotDefinition } from \"../responses/slot-definition\";\nimport { ValueRefTypeLookup, ValueType } from \"../responses/value-types\";\nimport { ReferenceUsage, ReferenceUsageType, ValueReferenceMethod } from \"../utils/value-reference\";\nimport { DisabledConditions, disabledConditionsFromJson, DisplayConditions, displayConditionsFromJson } from \"./utils\";\n\n/**\n * Core contract for survey item handlers.\n * Every item type (built-in and plugin) is represented by a handler class implementing this interface.\n * The core uses these methods without any casting.\n */\nexport interface SurveyItemCoreType<TConfig = unknown> {\n readonly type: string;\n readonly id: string;\n readonly key: string;\n readonly config: TConfig;\n\n isInteractive(): boolean;\n getResponseSlotDefinitions(): ResponseSlotDefinition[];\n getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;\n}\n\n/**\n * Base class for survey item handlers.\n * Each handler holds type, id, key, and config (properly typed) and implements core methods.\n * Subclass for each item type; the core works with SurveyItemHandler only—no casting needed.\n */\nexport abstract class SurveyItemCore<\n TType extends string = string,\n TConfig = unknown\n> implements SurveyItemCoreType<TConfig> {\n abstract readonly type: TType;\n readonly id: string;\n key: string;\n config: TConfig;\n\n private _rawItem: RawSurveyItem;\n\n displayConditions?: DisplayConditions;\n disabledConditions?: DisabledConditions;\n validations?: {\n [validationKey: string]: Expression | undefined;\n }\n prefillRules?: Array<Expression | undefined>;\n\n\n constructor(rawItem: RawSurveyItem) {\n this._rawItem = rawItem;\n this.updateExpressions();\n this.id = this._rawItem.id;\n this.key = this._rawItem.key;\n this.config = this.parseConfig(this._rawItem.config);\n }\n\n /** Parse raw config from JSON into typed config. Override in subclasses. */\n abstract parseConfig(rawConfig: unknown): TConfig;\n abstract isInteractive(): boolean;\n abstract getResponseSlotDefinitions(): ResponseSlotDefinition[];\n\n protected getAdditionalResponseValueSlots(): ValueRefTypeLookup {\n return {};\n }\n\n getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup {\n const valueRefs: ValueRefTypeLookup = {};\n\n for (const slot of this.getResponseSlotDefinitions()) {\n valueRefs[`${this.id}...${ValueReferenceMethod.get}...${slot.slotId}`] = slot.valueType;\n valueRefs[`${this.id}...${ValueReferenceMethod.isDefined}...${slot.slotId}`] = ValueType.boolean;\n }\n\n Object.assign(valueRefs, this.getAdditionalResponseValueSlots());\n\n if (!byType) {\n return valueRefs;\n }\n\n return Object.fromEntries(\n Object.entries(valueRefs).filter(([, valueType]) => valueType === byType)\n );\n }\n\n get rawItem(): RawSurveyItem {\n return this._rawItem;\n }\n\n get metadata(): { [key: string]: string } {\n return this._rawItem.metadata ?? {};\n }\n\n set metadata(metadata: { [key: string]: string }) {\n this.updateRawItem({\n ...this._rawItem,\n metadata: metadata,\n });\n }\n\n updateRawItem(rawItem: RawSurveyItem) {\n if (rawItem.id !== this.id) {\n throw new Error('Cannot update raw item with a different id');\n }\n this._rawItem = rawItem;\n this.updateExpressions();\n this.key = rawItem.key;\n this.config = this.parseConfig(rawItem.config);\n }\n\n private updateExpressions() {\n this.displayConditions = this._rawItem.displayConditions ? displayConditionsFromJson(this._rawItem.displayConditions) : undefined;\n this.disabledConditions = this._rawItem.disabledConditions ? disabledConditionsFromJson(this._rawItem.disabledConditions) : undefined;\n this.validations = this._rawItem.validations ? Object.fromEntries(Object.entries(this._rawItem.validations).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined;\n this.prefillRules = this._rawItem.prefillRules ? this._rawItem.prefillRules.map(rule => rule ? Expression.deserialize(rule) : undefined) : undefined;\n }\n\n getReferenceUsages(): ReferenceUsage[] {\n const usages: ReferenceUsage[] = [];\n\n if (this.displayConditions) {\n // root\n for (const ref of this.displayConditions.root?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n usageType: ReferenceUsageType.displayConditions,\n valueReference: ref,\n });\n }\n\n // components\n for (const [componentKey, expression] of Object.entries(this.displayConditions.components || {})) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: componentKey,\n usageType: ReferenceUsageType.displayConditions,\n valueReference: ref,\n });\n }\n }\n }\n\n if (this.disabledConditions) {\n for (const [componentKey, expression] of Object.entries(this.disabledConditions.components || {})) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: componentKey,\n usageType: ReferenceUsageType.disabledConditions,\n valueReference: ref,\n });\n }\n }\n }\n\n if (this.validations) {\n for (const [validationKey, expression] of Object.entries(this.validations)) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: validationKey,\n usageType: ReferenceUsageType.validations,\n valueReference: ref,\n });\n }\n }\n }\n\n return usages;\n }\n}\n\n\n/**\n * Constructor type for handler classes. Used by the registry to instantiate handlers.\n */\nexport type ItemCoreConstructor<TType extends string = string, TConfig = unknown> = new (\n rawItem: RawSurveyItem\n) => SurveyItemCore<TType, TConfig>;\n","export enum ReservedSurveyItemTypes {\n Group = 'group',\n PageBreak = 'page-break',\n}\n\n","\n/**\n * SurveyItemKey stores the key of the item and the path to the item.\n */\n\nexport class SurveyItemKey {\n private _itemKey: string;\n private _path: Array<string>;\n private _keySeparator: string;\n\n constructor(itemKey: string, path: string[] | undefined, keySeparator: string = '.') {\n this._itemKey = itemKey;\n this._path = path ?? [];\n this._keySeparator = keySeparator;\n }\n\n get itemKey(): string {\n return this._itemKey;\n }\n\n get path(): Array<string> {\n return this._path;\n }\n\n get parentFullKey(): string {\n return this._path.join(this._keySeparator);\n }\n\n get fullKey(): string {\n return [...this._path, this._itemKey].join(this._keySeparator);\n }\n\n get isRoot(): boolean {\n return this._path.length === 0;\n }\n\n get keySeparator(): string {\n return this._keySeparator;\n }\n\n set keySeparator(keySeparator: string) {\n this._keySeparator = keySeparator;\n }\n}\n\n","/**\n * Shared utilities for array operations.\n */\n\n/**\n * Swap two elements in an array by index.\n * @returns A new array with the elements swapped\n */\nexport function swapArrayElements<T>(arr: T[], fromIndex: number, toIndex: number): T[] {\n const result = [...arr];\n [result[fromIndex], result[toIndex]] = [result[toIndex], result[fromIndex]];\n return result;\n}\n\n/**\n * Move an element from one index to another.\n * @returns A new array with the element moved\n */\nexport function moveArrayElement<T>(arr: T[], fromIndex: number, toIndex: number): T[] {\n const result = [...arr];\n const [moved] = result.splice(fromIndex, 1);\n result.splice(toIndex, 0, moved);\n return result;\n}\n","import { ReservedSurveyItemTypes } from \"../items/types\";\nimport { ItemCoreConstructor, SurveyItemCore } from \"../items/survey-item\";\nimport { moveArrayElement, swapArrayElements } from \"../utils/group-utils\";\n\n\n/**\n * Group item core.\n */\nexport type GroupConfig = {\n items?: string[];\n shuffleItems?: boolean;\n isRoot?: boolean;\n};\n\nexport class GroupItemCore extends SurveyItemCore<\n typeof ReservedSurveyItemTypes.Group,\n GroupConfig\n> {\n readonly type = ReservedSurveyItemTypes.Group;\n\n parseConfig(rawConfig: unknown): GroupConfig {\n const cfg = (rawConfig ?? {}) as Partial<GroupConfig>;\n return {\n items: cfg.items,\n shuffleItems: cfg.shuffleItems,\n isRoot: cfg.isRoot,\n };\n }\n\n serializeConfig(): unknown {\n return this.config;\n }\n\n isInteractive(): boolean {\n return false;\n }\n\n getResponseSlotDefinitions() {\n return [];\n }\n\n isRoot(): boolean {\n return this.config.isRoot ?? false;\n }\n\n get items(): string[] {\n return this.config.items ?? [];\n }\n\n /**\n * Add a child item id to this group at the given index.\n * @param itemId The id of the item to add to this group.\n * @param index The index at which to add the item. If not provided, the item is added to the end of the group.\n */\n addChild(itemId: string, index?: number): void {\n const items = this.config.items ??= [];\n const insertIndex = index !== undefined ? Math.min(index, items.length) : items.length;\n items.splice(insertIndex, 0, itemId);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Remove a child item id from this group.\n * @param itemId The id of the item to remove from this group.\n */\n removeChild(itemId: string): void {\n const items = this.config.items ??= [];\n const index = items.indexOf(itemId);\n if (index !== -1) {\n items.splice(index, 1);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n }\n\n /**\n * Check if an item is a direct child of this group.\n */\n hasChild(itemId: string): boolean {\n return this.items.includes(itemId);\n }\n\n /** Whether items in this group should be shuffled. */\n get shuffleItems(): boolean {\n return this.config.shuffleItems ?? false;\n }\n\n set shuffleItems(value: boolean) {\n this.config.shuffleItems = value;\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Get the ordered list of child item ids.\n */\n getChildrenIds(): string[] {\n return [...this.items];\n }\n\n /**\n * Swap two items by their positions in the group.\n * @throws Error if indices are out of bounds\n */\n swapItemsByIndex(from: number, to: number): void {\n const items = this.items;\n if (from < 0 || from >= items.length || to < 0 || to >= items.length) {\n throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n }\n if (from === to) return;\n this.config.items = swapArrayElements(items, from, to);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Swap two items by their ids.\n * @throws Error if either id is not found in this group\n */\n swapItemsById(id: string, withId: string): void {\n const items = this.items;\n const index1 = items.indexOf(id);\n const index2 = items.indexOf(withId);\n if (index1 === -1) {\n throw new Error(`Item '${id}' not found in group '${this.key}'`);\n }\n if (index2 === -1) {\n throw new Error(`Item '${withId}' not found in group '${this.key}'`);\n }\n this.swapItemsByIndex(index1, index2);\n }\n\n /**\n * Move an item by id to a specific index.\n * @throws Error if the item is not found or index is out of bounds\n */\n moveItemToIndex(id: string, index: number): void {\n const items = this.items;\n const fromIndex = items.indexOf(id);\n if (fromIndex === -1) {\n throw new Error(`Item '${id}' not found in group '${this.key}'`);\n }\n if (index < 0 || index >= items.length) {\n throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n }\n if (fromIndex === index) return;\n this.config.items = moveArrayElement(items, fromIndex, index);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n}\n\n/**\n * Page break item core.\n */\nexport type PageBreakConfig = Record<string, never>;\n\nexport class PageBreakItemCore extends SurveyItemCore<\n typeof ReservedSurveyItemTypes.PageBreak,\n PageBreakConfig\n> {\n readonly type = ReservedSurveyItemTypes.PageBreak;\n\n parseConfig(_rawConfig: unknown): PageBreakConfig {\n return {};\n }\n\n serializeConfig(): unknown {\n return undefined;\n }\n\n isInteractive(): boolean {\n return false;\n }\n\n getResponseSlotDefinitions() {\n return [];\n }\n}\n\n/**\n * Built-in item type.\n */\nexport type BuiltInItemType = typeof ReservedSurveyItemTypes.Group | typeof ReservedSurveyItemTypes.PageBreak;\n\nexport const builtInItemCoreRegistry: Record<BuiltInItemType, ItemCoreConstructor> = {\n [ReservedSurveyItemTypes.Group]: GroupItemCore,\n [ReservedSurveyItemTypes.PageBreak]: PageBreakItemCore,\n};\n\nexport const isBuiltInItemType = (itemType: string): itemType is BuiltInItemType =>\n itemType in builtInItemCoreRegistry;\n","import { ItemCoreConstructor, SurveyItemCore } from \"../items/survey-item\";\nimport { RawSurveyItem } from \"../items/survey-item-json\";\nimport { builtInItemCoreRegistry, isBuiltInItemType } from \"./built-in-items\";\n\n/**\n * Registry maps item type name → handler constructor.\n * Plugins extend this with their own handler classes.\n */\nexport type ItemTypeRegistry = Record<string, new (rawItem: RawSurveyItem) => SurveyItemCore>;\n\n/** Item type identifier (e.g. \"singleChoiceQuestion\", \"display\"). */\nexport type ItemTypeName = string;\n\n/** Capabilities of an item type (interactive, supports children). */\nexport interface ItemTypeCapabilities {\n interactive?: boolean;\n supportsChildren?: boolean;\n}\n\n/**\n * Definition of an item type: its name, constructor, and optional capabilities.\n * Used by editor/UI layers to compose registries.\n */\nexport interface ItemTypeDefinition {\n itemType: ItemTypeName;\n constructor: ItemCoreConstructor;\n capabilities?: ItemTypeCapabilities;\n}\n\n/** Registry mapping item type name → definition. */\nexport type ItemTypeDefinitionRegistry = Record<ItemTypeName, ItemTypeDefinition>;\n\n/** Convert constructor registry to explicit definitions for higher-layer composition. */\nexport function toItemTypeDefinitionRegistry(registry: ItemTypeRegistry): ItemTypeDefinitionRegistry {\n return Object.fromEntries(\n Object.entries(registry).map(([itemType, constructor]) => [\n itemType,\n { itemType, constructor },\n ])\n );\n}\n\n\n/**\n * Creates a handler instance for a raw survey item.\n * Uses built-in registry for group/page-break, otherwise the provided plugin registry.\n */\nexport function createItemCore(\n rawItem: RawSurveyItem,\n pluginRegistry?: ItemTypeRegistry\n): SurveyItemCore {\n if (isBuiltInItemType(rawItem.itemType)) {\n const HandlerClass = builtInItemCoreRegistry[rawItem.itemType];\n return new HandlerClass(rawItem);\n }\n\n if (pluginRegistry && rawItem.itemType in pluginRegistry) {\n const HandlerClass = pluginRegistry[rawItem.itemType];\n return new HandlerClass(rawItem);\n }\n\n throw new Error(`Unknown item type: ${rawItem.itemType}`);\n}\n\n/**\n * Merge built-in handlers with plugin registry for a complete registry.\n */\nexport function createFullRegistry(pluginRegistry?: ItemTypeRegistry): ItemTypeRegistry {\n return {\n ...builtInItemCoreRegistry,\n ...pluginRegistry,\n };\n}\n\n/** Build full registry as explicit definitions for editor/ui composition. */\nexport function createItemTypeDefinitionRegistry(pluginRegistry?: ItemTypeRegistry): ItemTypeDefinitionRegistry {\n return toItemTypeDefinitionRegistry(createFullRegistry(pluginRegistry));\n}\n","import { JsonTemplateValue } from \"../expressions/template-value\";\nimport { RawSurveyItem } from \"./items\";\nimport { JsonSurveyTranslations } from \"./utils/translations\";\n\nexport const CURRENT_SURVEY_SCHEMA = 'https://github.com/case-framework/case-survey-toolkit/packages/survey-core/schemas/survey-schema.json';\n// TODO: generate schema from survey-core.ts\n\n\nexport interface SurveyVersion {\n id?: string;\n surveyKey: string;\n published?: number;\n unpublished?: number;\n versionId?: string;\n survey: RawSurvey;\n}\n\nexport type RawSurvey = {\n $schema: string;\n maxItemsPerPage?: { large: number, small: number };\n\n surveyItems: Array<RawSurveyItem>;\n\n metadata?: {\n [key: string]: string\n }\n templateValues?: {\n [templateValueKey: string]: JsonTemplateValue;\n };\n translations?: JsonSurveyTranslations;\n}\n","import { structuredCloneMethod } from \"../../utils\";\nimport { Content } from \"./content\";\n\n\nexport const validateLocale = (locale: string): void => {\n if (locale.trim() === '') {\n throw new Error('Locale cannot be empty');\n }\n}\n\nexport class SurveyItemTranslations {\n private _translations?: {\n [locale: string]: JsonComponentContent;\n };\n\n constructor() {\n this._translations = {};\n }\n\n setContent(locale: string, contentKey: string, content?: Content): void {\n validateLocale(locale);\n if (!this._translations?.[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations![locale] = {};\n }\n if (!content) {\n delete this._translations![locale][contentKey];\n } else {\n this._translations![locale][contentKey] = content;\n }\n }\n\n setAllForLocale(locale: string, content?: JsonComponentContent): void {\n validateLocale(locale);\n if (!this._translations?.[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations![locale] = {};\n }\n this._translations![locale] = content || {};\n }\n\n get locales(): string[] {\n return Object.keys(this._translations || {});\n }\n\n getAllForLocale(locale: string): JsonComponentContent | undefined {\n return this._translations?.[locale];\n }\n\n getContent(locale: string, contentKey: string, fallbackLocale?: string): Content | undefined {\n const content = this._translations?.[locale]?.[contentKey];\n if (content) {\n return content;\n }\n if (fallbackLocale) {\n return this._translations?.[fallbackLocale]?.[contentKey];\n }\n return undefined;\n }\n}\n\nexport interface SurveyCardTranslations {\n [locale: string]: SurveyCardContent;\n}\n\n\nexport class SurveyTranslations {\n private _translations: JsonSurveyTranslations;\n\n constructor(translations?: JsonSurveyTranslations) {\n this._translations = translations || {};\n }\n\n\n serialize(): JsonSurveyTranslations | undefined {\n if (this.locales.length === 0) {\n return undefined;\n }\n return this._translations;\n }\n\n get locales(): string[] {\n return Object.keys(this._translations);\n }\n\n removeLocale(locale: string): void {\n validateLocale(locale);\n delete this._translations[locale];\n }\n\n renameLocale(oldLocale: string, newLocale: string): void {\n validateLocale(oldLocale);\n validateLocale(newLocale);\n if (this._translations[oldLocale]) {\n this._translations[newLocale] = this._translations[oldLocale];\n delete this._translations[oldLocale];\n }\n }\n\n cloneLocaleAs(locale: string, newLocale: string): void {\n validateLocale(locale);\n validateLocale(newLocale);\n if (this._translations[locale]) {\n this._translations[newLocale] = structuredCloneMethod(this._translations[locale]);\n }\n }\n\n get surveyCardContent(): SurveyCardTranslations | undefined {\n const translations: SurveyCardTranslations = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.surveyCardContent;\n if (contentForLocale) {\n translations[locale] = contentForLocale as SurveyCardContent;\n }\n }\n return translations;\n }\n\n get navigationContent(): { [locale: string]: NavigationContent } | undefined {\n const translations: { [locale: string]: NavigationContent } = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.navigationContent;\n if (contentForLocale) {\n translations[locale] = contentForLocale as NavigationContent;\n }\n }\n return translations;\n }\n\n get validationMessages(): { [locale: string]: { invalidResponse?: Content } } | undefined {\n const translations: { [locale: string]: { invalidResponse?: Content } } = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.validationMessages;\n if (contentForLocale) {\n translations[locale] = contentForLocale as { invalidResponse?: Content };\n }\n }\n return translations;\n }\n\n setSurveyCardContent(locale: string, content?: SurveyCardContent): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].surveyCardContent = content;\n }\n\n setNavigationContent(locale: string, content?: NavigationContent): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].navigationContent = content;\n }\n\n setValidationMessages(locale: string, content?: { invalidResponse?: Content }): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].validationMessages = content;\n }\n\n getItemTranslations(itemId: string): SurveyItemTranslations | undefined {\n const itemTranslations: SurveyItemTranslations = new SurveyItemTranslations();\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale].itemTranslations?.[itemId];\n itemTranslations.setAllForLocale(locale, contentForLocale as JsonComponentContent);\n }\n return itemTranslations;\n }\n\n setItemTranslations(itemId: string, itemContent?: SurveyItemTranslations): void {\n itemContent?.locales.forEach(locale => validateLocale(locale));\n if (!itemContent) {\n for (const locale of this.locales) {\n if (this._translations[locale].itemTranslations?.[itemId]) {\n delete this._translations[locale].itemTranslations?.[itemId];\n }\n }\n } else {\n const localesInUpdate = itemContent.locales;\n // Add new locales to the translations\n for (const locale of localesInUpdate) {\n if (!this.locales.includes(locale)) {\n this._translations[locale] = {};\n }\n }\n for (const locale of this.locales) {\n if (localesInUpdate.includes(locale)) {\n if (!this._translations[locale]) {\n this._translations[locale] = {};\n }\n if (!this._translations[locale].itemTranslations) {\n this._translations[locale].itemTranslations = {};\n }\n this._translations[locale].itemTranslations![itemId] = itemContent.getAllForLocale(locale) ?? {};\n } else {\n delete this._translations[locale].itemTranslations![itemId];\n }\n }\n }\n }\n\n /**\n * Rename a component key (within an item) - update key in all translations and remove old key\n * @param itemKey - The key of the item\n * @param oldKey - The old key of the component\n * @param newKey - The new key of the component\n */\n onComponentKeyChanged(itemKey: string, oldKey: string, newKey: string): void {\n for (const locale of this.locales) {\n const itemTranslations = this._translations?.[locale].itemTranslations?.[itemKey] as JsonComponentContent;\n if (itemTranslations) {\n for (const key of Object.keys(itemTranslations)) {\n if (key.startsWith(oldKey + '.') || key === oldKey) {\n itemTranslations[key.replace(oldKey, newKey)] = { ...itemTranslations[key] };\n delete itemTranslations[key];\n }\n }\n }\n }\n }\n\n /**\n * Remove all translations for a component\n * @param itemId - The id of the item\n * @param componentKey - The key of the component\n */\n onComponentDeleted(itemId: string, componentKey: string): void {\n for (const locale of this.locales) {\n const itemTranslations = this._translations?.[locale].itemTranslations?.[itemId];\n if (itemTranslations) {\n for (const key of Object.keys(itemTranslations)) {\n if (key.startsWith(componentKey + '.') || key === componentKey) {\n delete itemTranslations[key as keyof typeof itemTranslations];\n }\n }\n }\n }\n }\n\n /**\n * Remove all translations for an item\n * @param id - The id of the item\n */\n onItemDeleted(id: string): void {\n for (const locale of this.locales) {\n delete this._translations![locale].itemTranslations?.[id];\n }\n }\n}\n\n\n/**\n * Json Schemas for translations\n */\nexport type JsonComponentContent = {\n [contentKey: string]: Content;\n}\n\n\nexport interface SurveyCardContent {\n name?: Content;\n description?: Content;\n typicalDuration?: Content;\n}\n\nexport interface NavigationContent {\n previousButtonText?: Content;\n nextButtonText?: Content;\n submitButtonText?: Content;\n submitBoxMessage?: Content;\n}\n\nexport interface JsonSurveyTranslations {\n [locale: string]: {\n surveyCardContent?: SurveyCardContent;\n navigationContent?: NavigationContent;\n validationMessages?: {\n invalidResponse?: Content;\n }\n itemTranslations?: {\n [itemId: string]: JsonComponentContent;\n }\n }\n}\n","import { CURRENT_SURVEY_SCHEMA, RawSurvey, } from \"./survey-file-schema\";\nimport { SurveyItemTranslations, SurveyTranslations } from \"./utils/translations\";\nimport { SurveyItemCore, RawSurveyItem, ReservedSurveyItemTypes } from \"./items\";\nimport { ReferenceUsage, ReferenceUsageType } from \"./utils/value-reference\";\nimport { SurveyItemKey } from \"./item-key\";\nimport { deserializeTemplateValues, serializeTemplateValues, TemplateValueDefinition } from \"../expressions/template-value\";\nimport { ValueRefTypeLookup, ValueType } from \"./responses/value-types\";\nimport { ResponseSlotDefinition } from \"./responses/slot-definition\";\nimport { createItemCore, ItemTypeRegistry } from \"./registry/item-registry\";\nimport { GroupItemCore } from \"./registry/built-in-items\";\nimport { generateCodingKey, generateId } from \"../utils\";\n\n\nexport class Survey {\n maxItemsPerPage?: { large: number, small: number };\n metadata?: {\n [key: string]: string\n }\n surveyItems: Map<string, SurveyItemCore> = new Map();\n private _templateValues?: Map<string, TemplateValueDefinition> = new Map();\n\n private _translations?: SurveyTranslations;\n\n constructor(\n private readonly pluginRegistry?: ItemTypeRegistry\n ) {\n this._translations = new SurveyTranslations();\n }\n\n /** Plugin registry used when parsing items. Exposed for editors that re-parse without their own registry. */\n getPluginRegistry(): ItemTypeRegistry | undefined {\n return this.pluginRegistry;\n }\n\n /**\n * Create a survey item from raw JSON data.\n * Uses the survey's plugin registry when available.\n */\n createItemFromRaw(rawItem: RawSurveyItem): SurveyItemCore {\n return createItemCore(rawItem, this.pluginRegistry);\n }\n\n /**\n * Create a minimal blank survey with a root group and one empty page.\n */\n static createBlankSurvey(\n pluginRegistry?: ItemTypeRegistry,\n surveyKey?: string,\n ): Survey {\n const newKey = surveyKey ?? generateCodingKey();\n const rawSurvey: RawSurvey = {\n $schema: CURRENT_SURVEY_SCHEMA,\n surveyItems: [\n {\n id: generateId(),\n key: newKey,\n itemType: ReservedSurveyItemTypes.Group,\n config: { isRoot: true, items: [], shuffleItems: false },\n },\n ],\n };\n\n return Survey.fromJson(rawSurvey, pluginRegistry);\n }\n\n static fromJson(json: RawSurvey, pluginRegistry?: ItemTypeRegistry): Survey {\n const survey = new Survey(pluginRegistry);\n const rawSurvey = json as RawSurvey;\n if (rawSurvey.$schema !== CURRENT_SURVEY_SCHEMA) {\n throw new Error(`Unsupported survey schema: ${rawSurvey.$schema}`);\n }\n\n survey.surveyItems = new Map();\n if (!rawSurvey.surveyItems || rawSurvey.surveyItems.length === 0) {\n throw new Error('surveyItems is required');\n }\n rawSurvey.surveyItems.forEach(item => {\n const surveyItem = createItemCore(item, pluginRegistry);\n survey.surveyItems.set(surveyItem.id, surveyItem);\n });\n\n // Parse other fields\n if (rawSurvey.templateValues) {\n survey._templateValues = deserializeTemplateValues(rawSurvey.templateValues);\n }\n\n survey._translations = new SurveyTranslations(rawSurvey.translations);\n\n if (rawSurvey.maxItemsPerPage) {\n survey.maxItemsPerPage = rawSurvey.maxItemsPerPage;\n }\n\n if (rawSurvey.metadata) {\n survey.metadata = rawSurvey.metadata;\n }\n\n return survey;\n }\n\n serialize(): RawSurvey {\n const json: RawSurvey = {\n $schema: CURRENT_SURVEY_SCHEMA,\n surveyItems: Array.from(this.surveyItems.values()).map(item => item.rawItem),\n };\n\n // Export other fields\n json.translations = this._translations?.serialize();\n\n if (this._templateValues) {\n json.templateValues = serializeTemplateValues(this._templateValues);\n }\n\n if (this.maxItemsPerPage) {\n json.maxItemsPerPage = this.maxItemsPerPage;\n }\n if (this.metadata) {\n json.metadata = this.metadata;\n }\n\n return json;\n }\n\n get surveyKey(): string | undefined {\n const rootItem = this.rootItem;\n if (!rootItem) {\n return undefined;\n }\n return this.rootItem.key;\n }\n\n get locales(): string[] {\n return this._translations?.locales || [];\n }\n\n get rootItem(): GroupItemCore | undefined {\n const rootItem = Array.from(this.surveyItems.values()).find(item => item instanceof GroupItemCore && item.isRoot) as GroupItemCore | undefined;\n return rootItem;\n }\n\n\n get keyIndex(): Array<{ itemId: string, key: string, keyPath: string[], path: string[] }> {\n const index: Array<{ itemId: string, key: string, keyPath: string[], path: string[] }> = [];\n for (const item of this.surveyItems.values()) {\n const path = this.getItemPath(item.id);\n index.push({\n itemId: item.id, key: item.key,\n keyPath: path.map(id => this.surveyItems.get(id)?.key ?? ''),\n path: path\n });\n }\n return index;\n }\n\n getItemPath(itemId: string): string[] {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n throw new Error(`Item ${itemId} not found`);\n }\n\n if (item instanceof GroupItemCore && item.isRoot()) {\n return [];\n }\n\n // find parent item for the given item id\n const parentItem = this.getParentItem(itemId);\n if (!parentItem) {\n throw new Error(`Parent item for ${itemId} not found`);\n }\n return [...this.getItemPath(parentItem.id), parentItem.id];\n }\n\n getItemKey(itemId: string): SurveyItemKey | undefined {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n return undefined;\n }\n const idPath = this.getItemPath(itemId);\n const keyPath = idPath.map(id => this.surveyItems.get(id)?.key ?? '');\n return new SurveyItemKey(item.key, keyPath);\n }\n\n getParentItem(itemId: string): GroupItemCore | undefined {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n throw new Error(`Item ${itemId} not found`);\n }\n if (item instanceof GroupItemCore && item.isRoot()) {\n return undefined;\n }\n const parentItem = Array.from(this.surveyItems.values()).find(item => item instanceof GroupItemCore && item.config.items?.includes(itemId)) as GroupItemCore | undefined;\n if (!parentItem) {\n return undefined;\n }\n return parentItem;\n }\n\n getChildrenItems(parentId: string): SurveyItemCore[] {\n const parentItem = this.surveyItems.get(parentId);\n if (!parentItem || !(parentItem instanceof GroupItemCore)) {\n return [];\n }\n return (parentItem as GroupItemCore).config.items?.map(id => this.surveyItems.get(id))?.filter(item => item !== undefined) as SurveyItemCore[] || [];\n }\n\n getSiblings(itemId: string): SurveyItemCore[] {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n return [];\n }\n const parentItem = this.getParentItem(itemId);\n return parentItem?.items?.map(id => this.surveyItems.get(id))?.filter(item => item !== undefined) as SurveyItemCore[] || [];\n }\n\n get translations(): SurveyTranslations {\n if (!this._translations) {\n this._translations = new SurveyTranslations();\n }\n return this._translations;\n }\n\n getItemTranslations(id: string): SurveyItemTranslations | undefined {\n const item = this.surveyItems.get(id);\n if (!item) {\n throw new Error(`Item ${id} not found`);\n }\n\n return this._translations?.getItemTranslations(id);\n }\n\n getTemplateValue(templateValueKey: string): TemplateValueDefinition | undefined {\n return this._templateValues?.get(templateValueKey);\n }\n\n setTemplateValue(templateValueKey: string, templateValue: TemplateValueDefinition) {\n if (!this._templateValues) {\n this._templateValues = new Map();\n }\n this._templateValues?.set(templateValueKey, templateValue);\n }\n\n deleteTemplateValue(templateValueKey: string) {\n this._templateValues?.delete(templateValueKey);\n }\n\n getTemplateValueKeys(): string[] {\n return Array.from(this._templateValues?.keys() || []);\n }\n\n getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup {\n let valueRefs: ValueRefTypeLookup = {};\n for (const item of this.surveyItems.values()) {\n valueRefs = { ...valueRefs, ...item.getAvailableResponseValueSlots(byType) };\n }\n return valueRefs;\n }\n\n getResponseSlotDefinitions(): Array<{ itemId: string; slots: ResponseSlotDefinition[] }> {\n return Array.from(this.surveyItems.values()).map((item) => ({\n itemId: item.id,\n slots: item.getResponseSlotDefinitions(),\n }));\n }\n\n /**\n * Get all reference usages for the survey\n * @param forItemId - optional item id to filter usages for a specific item and its children (if not provided, all usages are returned)\n * @returns all reference usages for the survey (or for a specific item and its children)\n */\n getReferenceUsages(forItemId?: string): ReferenceUsage[] {\n const usages: ReferenceUsage[] = [];\n for (const item of this.surveyItems.values()) {\n if (forItemId && item.id !== forItemId && !this.isDescendantOf(item.id, forItemId)) {\n continue;\n }\n usages.push(...item.getReferenceUsages());\n }\n\n if (this._templateValues) {\n for (const [templateValueKey, templateValue] of this._templateValues.entries()) {\n for (const ref of templateValue.expression?.responseVariableRefs || []) {\n usages.push({\n itemId: templateValueKey,\n usageType: ReferenceUsageType.templateValues,\n valueReference: ref,\n });\n }\n }\n }\n\n return usages;\n }\n\n // Helper method to check if targetId is a descendant of ancestorId\n isDescendantOf(targetId: string, ancestorId: string): boolean {\n if (targetId === ancestorId) {\n return true;\n }\n const targetPath = this.getItemPath(targetId);\n return targetPath.includes(ancestorId);\n }\n}\n"],"mappings":"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"}
@@ -75,6 +75,14 @@ type ValueRefTypeLookup = {
75
75
  [valueRefString: string]: ValueType;
76
76
  };
77
77
  //#endregion
78
+ //#region src/survey/responses/slot-definition.d.ts
79
+ interface ResponseSlotDefinition {
80
+ slotId: string;
81
+ key: string;
82
+ keyPath: string[];
83
+ valueType: ValueType;
84
+ }
85
+ //#endregion
78
86
  //#region src/survey/utils/value-reference.d.ts
79
87
  declare enum ValueReferenceMethod {
80
88
  get = "get",
@@ -276,7 +284,8 @@ interface SurveyItemCoreType<TConfig = unknown> {
276
284
  readonly key: string;
277
285
  readonly config: TConfig;
278
286
  isInteractive(): boolean;
279
- getAvailableResponseValueSlots(): ValueRefTypeLookup;
287
+ getResponseSlotDefinitions(): ResponseSlotDefinition[];
288
+ getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;
280
289
  }
281
290
  /**
282
291
  * Base class for survey item handlers.
@@ -299,8 +308,16 @@ declare abstract class SurveyItemCore<TType extends string = string, TConfig = u
299
308
  /** Parse raw config from JSON into typed config. Override in subclasses. */
300
309
  abstract parseConfig(rawConfig: unknown): TConfig;
301
310
  abstract isInteractive(): boolean;
302
- abstract getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;
311
+ abstract getResponseSlotDefinitions(): ResponseSlotDefinition[];
312
+ protected getAdditionalResponseValueSlots(): ValueRefTypeLookup;
313
+ getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;
303
314
  get rawItem(): RawSurveyItem;
315
+ get metadata(): {
316
+ [key: string]: string;
317
+ };
318
+ set metadata(metadata: {
319
+ [key: string]: string;
320
+ });
304
321
  updateRawItem(rawItem: RawSurveyItem): void;
305
322
  private updateExpressions;
306
323
  getReferenceUsages(): ReferenceUsage[];
@@ -498,10 +515,41 @@ declare class SurveyItemKey {
498
515
  //#endregion
499
516
  //#region src/survey/registry/item-registry.d.ts
500
517
  /**
501
- * Registry maps item type string -> Handler constructor.
518
+ * Registry maps item type name handler constructor.
502
519
  * Plugins extend this with their own handler classes.
503
520
  */
504
521
  type ItemTypeRegistry = Record<string, new (rawItem: RawSurveyItem) => SurveyItemCore>;
522
+ /** Item type identifier (e.g. "singleChoiceQuestion", "display"). */
523
+ type ItemTypeName = string;
524
+ /** Capabilities of an item type (interactive, supports children). */
525
+ interface ItemTypeCapabilities {
526
+ interactive?: boolean;
527
+ supportsChildren?: boolean;
528
+ }
529
+ /**
530
+ * Definition of an item type: its name, constructor, and optional capabilities.
531
+ * Used by editor/UI layers to compose registries.
532
+ */
533
+ interface ItemTypeDefinition {
534
+ itemType: ItemTypeName;
535
+ constructor: ItemCoreConstructor;
536
+ capabilities?: ItemTypeCapabilities;
537
+ }
538
+ /** Registry mapping item type name → definition. */
539
+ type ItemTypeDefinitionRegistry = Record<ItemTypeName, ItemTypeDefinition>;
540
+ /** Convert constructor registry to explicit definitions for higher-layer composition. */
541
+ declare function toItemTypeDefinitionRegistry(registry: ItemTypeRegistry): ItemTypeDefinitionRegistry;
542
+ /**
543
+ * Creates a handler instance for a raw survey item.
544
+ * Uses built-in registry for group/page-break, otherwise the provided plugin registry.
545
+ */
546
+ declare function createItemCore(rawItem: RawSurveyItem, pluginRegistry?: ItemTypeRegistry): SurveyItemCore;
547
+ /**
548
+ * Merge built-in handlers with plugin registry for a complete registry.
549
+ */
550
+ declare function createFullRegistry(pluginRegistry?: ItemTypeRegistry): ItemTypeRegistry;
551
+ /** Build full registry as explicit definitions for editor/ui composition. */
552
+ declare function createItemTypeDefinitionRegistry(pluginRegistry?: ItemTypeRegistry): ItemTypeDefinitionRegistry;
505
553
  //#endregion
506
554
  //#region src/survey/registry/built-in-items.d.ts
507
555
  /**
@@ -517,7 +565,7 @@ declare class GroupItemCore extends SurveyItemCore<typeof ReservedSurveyItemType
517
565
  parseConfig(rawConfig: unknown): GroupConfig;
518
566
  serializeConfig(): unknown;
519
567
  isInteractive(): boolean;
520
- getAvailableResponseValueSlots(): {};
568
+ getResponseSlotDefinitions(): never[];
521
569
  isRoot(): boolean;
522
570
  get items(): string[];
523
571
  /**
@@ -558,6 +606,23 @@ declare class GroupItemCore extends SurveyItemCore<typeof ReservedSurveyItemType
558
606
  */
559
607
  moveItemToIndex(id: string, index: number): void;
560
608
  }
609
+ /**
610
+ * Page break item core.
611
+ */
612
+ type PageBreakConfig = Record<string, never>;
613
+ declare class PageBreakItemCore extends SurveyItemCore<typeof ReservedSurveyItemTypes.PageBreak, PageBreakConfig> {
614
+ readonly type = ReservedSurveyItemTypes.PageBreak;
615
+ parseConfig(_rawConfig: unknown): PageBreakConfig;
616
+ serializeConfig(): unknown;
617
+ isInteractive(): boolean;
618
+ getResponseSlotDefinitions(): never[];
619
+ }
620
+ /**
621
+ * Built-in item type.
622
+ */
623
+ type BuiltInItemType = typeof ReservedSurveyItemTypes.Group | typeof ReservedSurveyItemTypes.PageBreak;
624
+ declare const builtInItemCoreRegistry: Record<BuiltInItemType, ItemCoreConstructor>;
625
+ declare const isBuiltInItemType: (itemType: string) => itemType is BuiltInItemType;
561
626
  //#endregion
562
627
  //#region src/survey/survey.d.ts
563
628
  declare class Survey {
@@ -573,11 +638,17 @@ declare class Survey {
573
638
  private _templateValues?;
574
639
  private _translations?;
575
640
  constructor(pluginRegistry?: ItemTypeRegistry | undefined);
641
+ /** Plugin registry used when parsing items. Exposed for editors that re-parse without their own registry. */
642
+ getPluginRegistry(): ItemTypeRegistry | undefined;
576
643
  /**
577
644
  * Create a survey item from raw JSON data.
578
645
  * Uses the survey's plugin registry when available.
579
646
  */
580
647
  createItemFromRaw(rawItem: RawSurveyItem): SurveyItemCore;
648
+ /**
649
+ * Create a minimal blank survey with a root group and one empty page.
650
+ */
651
+ static createBlankSurvey(pluginRegistry?: ItemTypeRegistry, surveyKey?: string): Survey;
581
652
  static fromJson(json: RawSurvey, pluginRegistry?: ItemTypeRegistry): Survey;
582
653
  serialize(): RawSurvey;
583
654
  get surveyKey(): string | undefined;
@@ -601,6 +672,10 @@ declare class Survey {
601
672
  deleteTemplateValue(templateValueKey: string): void;
602
673
  getTemplateValueKeys(): string[];
603
674
  getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;
675
+ getResponseSlotDefinitions(): Array<{
676
+ itemId: string;
677
+ slots: ResponseSlotDefinition[];
678
+ }>;
604
679
  /**
605
680
  * Get all reference usages for the survey
606
681
  * @param forItemId - optional item id to filter usages for a specific item and its children (if not provided, all usages are returned)
@@ -610,5 +685,5 @@ declare class Survey {
610
685
  isDescendantOf(targetId: string, ancestorId: string): boolean;
611
686
  }
612
687
  //#endregion
613
- export { BooleanResponse as $, TemplateValueFormatDate as A, ExpressionType as B, ItemCoreConstructor as C, TemplateDefTypes as D, JsonTemplateValue as E, ConstExpression as F, JsonExpression as G, FunctionExpressionNames as H, ContextVariableExpression as I, ResponseVariableExpression as J, JsonFunctionExpression as K, ContextVariableType as L, deserializeTemplateValues as M, serializeTemplateValue as N, TemplateValueBase as O, serializeTemplateValues as P, ValueReferenceMethod as Q, Expression as R, RawSurveyItem as S, SurveyItemCoreType as T, JsonConstExpression as U, FunctionExpression as V, JsonContextVariableExpression as W, ReferenceUsageType as X, ReferenceUsage as Y, ValueReference as Z, ContentType as _, JsonComponentContent as a, DurationUnits as at, TemplateAttribution as b, SurveyCardContent as c, NumberResponse as ct, SurveyTranslations as d, ResponseValue as dt, DateArrayResponse as et, validateLocale as f, SlotResponseBase as ft, Content as g, ValueType as gt, CQMContent as h, ValueRefTypeLookup as ht, RawSurvey as i, DurationUnit as it, deserializeTemplateValue as j, TemplateValueDefinition as k, SurveyCardTranslations as l, ReferenceArrayResponse as lt, AttributionType as m, StringResponse as mt, ItemTypeRegistry as n, DurationArrayResponse as nt, JsonSurveyTranslations as o, NumberArrayResponse as ot, Attribution as p, StringArrayResponse as pt, JsonResponseVariableExpression as q, SurveyItemKey as r, DurationResponse as rt, NavigationContent as s, NumberPrecision as st, Survey as t, DateResponse as tt, SurveyItemTranslations as u, ReferenceResponse as ut, MDContent as v, SurveyItemCore as w, ReservedSurveyItemTypes as x, StyleAttribution as y, ExpressionEditorConfig as z };
614
- //# sourceMappingURL=survey-TUPUXiXl.d.mts.map
688
+ export { Expression as $, CQMContent as A, StringResponse as At, SurveyItemCoreType as B, SurveyCardContent as C, NumberPrecision as Ct, validateLocale as D, ResponseValue as Dt, SurveyTranslations as E, ReferenceResponse as Et, TemplateAttribution as F, TemplateValueFormatDate as G, TemplateDefTypes as H, ReservedSurveyItemTypes as I, serializeTemplateValue as J, deserializeTemplateValue as K, RawSurveyItem as L, ContentType as M, ValueType as Mt, MDContent as N, Attribution as O, SlotResponseBase as Ot, StyleAttribution as P, ContextVariableType as Q, ItemCoreConstructor as R, NavigationContent as S, NumberArrayResponse as St, SurveyItemTranslations as T, ReferenceArrayResponse as Tt, TemplateValueBase as U, JsonTemplateValue as V, TemplateValueDefinition as W, ConstExpression as X, serializeTemplateValues as Y, ContextVariableExpression as Z, toItemTypeDefinitionRegistry as _, DateResponse as _t, PageBreakConfig as a, JsonContextVariableExpression as at, JsonComponentContent as b, DurationUnit as bt, isBuiltInItemType as c, JsonResponseVariableExpression as ct, ItemTypeDefinitionRegistry as d, ReferenceUsageType as dt, ExpressionEditorConfig as et, ItemTypeName as f, ValueReference as ft, createItemTypeDefinitionRegistry as g, DateArrayResponse as gt, createItemCore as h, BooleanResponse as ht, GroupItemCore as i, JsonConstExpression as it, Content as j, ValueRefTypeLookup as jt, AttributionType as k, StringArrayResponse as kt, ItemTypeCapabilities as l, ResponseVariableExpression as lt, createFullRegistry as m, ResponseSlotDefinition as mt, BuiltInItemType as n, FunctionExpression as nt, PageBreakItemCore as o, JsonExpression as ot, ItemTypeRegistry as p, ValueReferenceMethod as pt, deserializeTemplateValues as q, GroupConfig as r, FunctionExpressionNames as rt, builtInItemCoreRegistry as s, JsonFunctionExpression as st, Survey as t, ExpressionType as tt, ItemTypeDefinition as u, ReferenceUsage as ut, SurveyItemKey as v, DurationArrayResponse as vt, SurveyCardTranslations as w, NumberResponse as wt, JsonSurveyTranslations as x, DurationUnits as xt, RawSurvey as y, DurationResponse as yt, SurveyItemCore as z };
689
+ //# sourceMappingURL=survey-wnGyIY66.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"survey-wnGyIY66.d.mts","names":[],"sources":["../src/survey/responses/value-types.ts","../src/survey/responses/slot-definition.ts","../src/survey/utils/value-reference.ts","../src/expressions/expression.ts","../src/expressions/template-value.ts","../src/survey/items/utils.ts","../src/survey/items/survey-item.ts","../src/survey/items/survey-item-json.ts","../src/survey/items/types.ts","../src/survey/utils/content.ts","../src/survey/utils/translations.ts","../src/survey/survey-file-schema.ts","../src/survey/item-key.ts","../src/survey/registry/item-registry.ts","../src/survey/registry/built-in-items.ts","../src/survey/survey.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@case-framework/survey-core",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Implementation of the survey core to use in typescript/javascript projects.",
5
5
  "type": "module",
6
6
  "files": [
@@ -12,14 +12,14 @@
12
12
  "author": "phev8",
13
13
  "license": "ISC",
14
14
  "devDependencies": {
15
- "@eslint/js": "^9.39.2",
15
+ "@eslint/js": "^9.39.4",
16
16
  "@types/jest": "^30.0.0",
17
- "eslint": "^9.39.2",
18
- "jest": "^30.0.2",
17
+ "eslint": "^9.39.4",
18
+ "jest": "^30.3.0",
19
19
  "ts-jest": "^29.4.6",
20
- "tsdown": "^0.20.1",
20
+ "tsdown": "^0.21.4",
21
21
  "typescript": "^5.8.3",
22
- "typescript-eslint": "^8.54.0"
22
+ "typescript-eslint": "^8.57.1"
23
23
  },
24
24
  "dependencies": {
25
25
  "date-fns": "^4.1.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"survey-C3ZHI-5z.mjs","names":[],"sources":["../src/utils.ts","../src/survey/utils/value-reference.ts","../src/expressions/expression.ts","../src/expressions/template-value.ts","../src/survey/items/utils.ts","../src/survey/items/survey-item.ts","../src/survey/items/types.ts","../src/survey/item-key.ts","../src/survey/survey-file-schema.ts","../src/survey/utils/translations.ts","../src/survey/utils/group-utils.ts","../src/survey/registry/built-in-items.ts","../src/survey/registry/item-registry.ts","../src/survey/survey.ts"],"sourcesContent":["\n/**\n * Shuffles an array of indices using the Fisher-Yates shuffle algorithm\n * @param length - The length of the array to create indices for\n * @returns A shuffled array of indices from 0 to length-1\n */\nexport function shuffleIndices(length: number): number[] {\n const shuffledIndices = Array.from({ length }, (_, i) => i);\n\n for (let i = shuffledIndices.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [shuffledIndices[i], shuffledIndices[j]] = [shuffledIndices[j], shuffledIndices[i]];\n }\n\n return shuffledIndices;\n}\n\nexport function structuredCloneMethod<T>(obj: T): T {\n if (typeof structuredClone !== 'undefined') {\n return structuredClone(obj);\n }\n // Fallback to JSON method\n return JSON.parse(JSON.stringify(obj));\n}\n\nconst ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\nexport function generateId(): string {\n const length = 10;\n const timestamp = Date.now();\n let encodedTimestamp = '';\n let t = timestamp;\n const base = ALPHABET.length;\n\n while (t > 0) {\n encodedTimestamp = ALPHABET.charAt(t % base) + encodedTimestamp;\n t = Math.floor(t / base);\n }\n\n let randomPart = '';\n for (let i = 0; i < length; i++) {\n randomPart += ALPHABET.charAt(Math.floor(Math.random() * base));\n }\n return randomPart + encodedTimestamp;\n}","const SEPARATOR = '...';\n\nexport enum ValueReferenceMethod {\n get = 'get',\n isDefined = 'isDefined',\n}\n\n\n\nexport class ValueReference {\n _itemId: string;\n _name: ValueReferenceMethod;\n _slotId: string;\n\n constructor(str: string) {\n const parts = str.split(SEPARATOR);\n if (parts.length !== 3) {\n throw new Error('Invalid value reference: ' + str);\n }\n this._itemId = parts[0];\n this._name = parts[1] as ValueReferenceMethod;\n this._slotId = parts[2];\n }\n\n get itemId(): string {\n return this._itemId;\n }\n\n get name(): ValueReferenceMethod {\n return this._name;\n }\n\n get slotId(): string {\n return this._slotId;\n }\n\n set itemId(itemId: string) {\n this._itemId = itemId;\n }\n\n toString(): string {\n return `${this._itemId}${SEPARATOR}${this._name}${this._slotId ? SEPARATOR + this._slotId : ''}`;\n }\n\n static fromParts(itemId: string, name: ValueReferenceMethod, slotId: string): ValueReference {\n return new ValueReference(`${itemId}${SEPARATOR}${name}${SEPARATOR}${slotId}`);\n }\n}\n\n\nexport enum ReferenceUsageType {\n displayConditions = 'displayConditions',\n templateValues = 'templateValues',\n validations = 'validations',\n disabledConditions = 'disabledConditions',\n}\n\nexport interface ReferenceUsage {\n itemId: string;\n fullComponentKey?: string;\n usageType?: ReferenceUsageType;\n valueReference: ValueReference;\n}\n","import { ResponseValue, ValueType, } from \"../survey/responses\";\nimport { ValueReference } from \"../survey/utils/value-reference\";\n\n\nexport const ExpressionType = {\n Const: 'const',\n ResponseVariable: 'responseVariable',\n ContextVariable: 'contextVariable',\n Function: 'function',\n} as const;\n\nexport type ExpressionType = (typeof ExpressionType)[keyof typeof ExpressionType];\n\nexport const ContextVariableType = {\n Locale: 'locale',\n ParticipantFlag: 'participantFlag',\n CustomValue: 'customValue',\n CustomExpression: 'customExpression'\n} as const;\n\nexport type ContextVariableType = (typeof ContextVariableType)[keyof typeof ContextVariableType];\n\nexport interface ExpressionEditorConfig {\n usedTemplate?: string;\n}\n\nexport interface JsonConstExpression {\n type: typeof ExpressionType.Const;\n value?: ResponseValue;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonResponseVariableExpression {\n type: typeof ExpressionType.ResponseVariable;\n variableRef: string;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonContextVariableExpression {\n type: typeof ExpressionType.ContextVariable;\n\n contextType: ContextVariableType;\n key?: JsonExpression;\n arguments?: Array<JsonExpression | undefined>;\n asType?: ValueType;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport interface JsonFunctionExpression {\n type: typeof ExpressionType.Function;\n functionName: string;\n arguments: Array<JsonExpression | undefined>;\n\n editorConfig?: ExpressionEditorConfig;\n}\n\nexport type JsonExpression = JsonConstExpression | JsonResponseVariableExpression | JsonContextVariableExpression | JsonFunctionExpression;\n\n\n\n/**\n * Base class for all expressions.\n */\nexport abstract class Expression {\n type: ExpressionType;\n editorConfig?: ExpressionEditorConfig;\n\n constructor(type: ExpressionType, editorConfig?: ExpressionEditorConfig) {\n this.type = type;\n this.editorConfig = editorConfig;\n }\n\n static deserialize(json: JsonExpression | undefined): Expression | undefined {\n if (!json) {\n return undefined;\n }\n\n switch (json.type) {\n case ExpressionType.Const:\n return ConstExpression.deserialize(json);\n case ExpressionType.ResponseVariable:\n return ResponseVariableExpression.deserialize(json);\n case ExpressionType.ContextVariable:\n return ContextVariableExpression.deserialize(json);\n case ExpressionType.Function:\n return FunctionExpression.deserialize(json);\n }\n }\n\n /**\n * Returns all unique response variable references in the expression.\n * @returns A list of ValueReference objects.\n */\n abstract get responseVariableRefs(): ValueReference[]\n abstract serialize(): JsonExpression | undefined;\n\n clone(): Expression {\n return Expression.deserialize(this.serialize()) ?? (() => {\n throw new Error('Failed to clone expression');\n })();\n }\n}\n\nexport class ConstExpression extends Expression {\n declare type: typeof ExpressionType.Const;\n value?: ResponseValue;\n\n constructor(value?: ResponseValue, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.Const, editorConfig);\n this.value = value;\n this.type = ExpressionType.Const;\n }\n\n static deserialize(json: JsonExpression): ConstExpression {\n if (json.type !== ExpressionType.Const) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ConstExpression(json.value, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return [];\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n value: this.value,\n editorConfig: this.editorConfig\n }\n }\n\n updateItemKeyReferences(_oldItemKey: string, _newItemKey: string): boolean {\n // Const expressions don't have item references\n return false;\n }\n}\n\nexport class ResponseVariableExpression extends Expression {\n declare type: typeof ExpressionType.ResponseVariable;\n variableRef: string;\n\n constructor(variableRef: string, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.ResponseVariable, editorConfig);\n this.variableRef = variableRef;\n this.type = ExpressionType.ResponseVariable;\n }\n\n static deserialize(json: JsonExpression): ResponseVariableExpression {\n if (json.type !== ExpressionType.ResponseVariable) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ResponseVariableExpression(json.variableRef, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return [new ValueReference(this.variableRef)];\n }\n\n get responseVariableRef(): ValueReference {\n return new ValueReference(this.variableRef);\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n variableRef: this.variableRef,\n editorConfig: this.editorConfig\n }\n }\n}\n\nexport class ContextVariableExpression extends Expression {\n declare type: typeof ExpressionType.ContextVariable;\n\n contextType: ContextVariableType;\n key?: Expression;\n arguments?: Array<Expression | undefined>;\n asType?: ValueType;\n\n constructor(contextType: ContextVariableType, key?: Expression, args?: Array<Expression | undefined>, asType?: ValueType, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.ContextVariable, editorConfig);\n this.type = ExpressionType.ContextVariable;\n this.contextType = contextType;\n this.key = key;\n this.arguments = args;\n this.asType = asType;\n }\n\n static deserialize(json: JsonExpression): ContextVariableExpression {\n if (json.type !== ExpressionType.ContextVariable) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n return new ContextVariableExpression(json.contextType, Expression.deserialize(json.key), json.arguments?.map(arg => Expression.deserialize(arg)), json.asType, json.editorConfig);\n }\n\n get responseVariableRefs(): ValueReference[] {\n return this.arguments?.flatMap(arg => arg?.responseVariableRefs).filter(ref => ref !== undefined) ?? [];\n }\n\n serialize(): JsonExpression {\n return {\n type: this.type,\n contextType: this.contextType,\n key: this.key?.serialize(),\n arguments: this.arguments?.map(arg => arg?.serialize()),\n asType: this.asType,\n editorConfig: this.editorConfig\n }\n }\n}\n\n\nexport enum FunctionExpressionNames {\n and = 'and',\n or = 'or',\n not = 'not',\n\n list_contains = 'list_contains',\n\n // numeric functions\n eq = 'eq',\n gt = 'gt',\n gte = 'gte',\n lt = 'lt',\n lte = 'lte',\n in_range = 'in_range',\n\n sum = 'sum',\n min = 'min',\n max = 'max',\n\n\n\n\n // string functions\n str_eq = 'str_eq',\n\n // date functions\n date_eq = 'date_eq',\n}\n\nexport class FunctionExpression extends Expression {\n declare type: typeof ExpressionType.Function;\n functionName: FunctionExpressionNames;\n arguments: Array<Expression | undefined>;\n\n constructor(functionName: FunctionExpressionNames, args: Array<Expression | undefined>, editorConfig?: ExpressionEditorConfig) {\n super(ExpressionType.Function);\n this.type = ExpressionType.Function;\n this.functionName = functionName;\n this.arguments = args;\n this.editorConfig = editorConfig;\n }\n\n static deserialize(json: JsonExpression): FunctionExpression {\n if (json.type !== ExpressionType.Function) {\n throw new Error('Invalid expression type: ' + json.type);\n }\n\n const functionName = json.functionName as FunctionExpressionNames;\n if (!Object.values(FunctionExpressionNames).includes(functionName)) {\n throw new Error('Invalid function name: ' + functionName);\n }\n\n const expr = new FunctionExpression(functionName, json.arguments.map(arg => Expression.deserialize(arg)));\n expr.editorConfig = json.editorConfig;\n return expr;\n }\n\n get responseVariableRefs(): ValueReference[] {\n const refs = this.arguments.flatMap(arg => arg?.responseVariableRefs).filter(ref => ref !== undefined);\n const refStrings = refs.map(ref => ref.toString());\n return [...new Set(refStrings)].map(ref => new ValueReference(ref));\n }\n\n serialize(): JsonExpression | undefined {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.arguments.map(arg => arg?.serialize()),\n editorConfig: this.editorConfig\n }\n }\n}\n","import { ValueType } from \"../survey/responses\";\nimport { Expression, JsonExpression } from \"./expression\";\n\n\nexport enum TemplateDefTypes {\n Default = 'default',\n Date2String = 'date2string'\n}\n\nexport type TemplateValueBase = {\n type: TemplateDefTypes;\n returnType: ValueType;\n expression?: Expression;\n}\n\n\nexport type TemplateValueFormatDate = TemplateValueBase & {\n type: TemplateDefTypes.Date2String;\n returnType: typeof ValueType.string;\n dateFormat: string;\n}\n\nexport type TemplateValueDefinition = TemplateValueBase | TemplateValueFormatDate;\n\n\n\nexport const serializeTemplateValue = (templateValue: TemplateValueDefinition): JsonTemplateValue => {\n const json: JsonTemplateValue = {\n type: templateValue.type,\n returnType: templateValue.returnType,\n expression: templateValue.expression?.serialize(),\n }\n if (templateValue.type === TemplateDefTypes.Date2String) {\n json.dateFormat = (templateValue as TemplateValueFormatDate).dateFormat;\n }\n return json;\n}\n\nexport const serializeTemplateValues = (templateValues: Map<string, TemplateValueDefinition>): { [templateValueKey: string]: JsonTemplateValue } => {\n const json: { [templateValueKey: string]: JsonTemplateValue } = {};\n for (const [key, value] of templateValues.entries()) {\n json[key] = serializeTemplateValue(value);\n }\n return json;\n}\n\nexport const deserializeTemplateValue = (json: JsonTemplateValue): TemplateValueDefinition => {\n return {\n type: json.type,\n expression: json.expression ? Expression.deserialize(json.expression) : undefined,\n returnType: json.returnType,\n dateFormat: json.dateFormat\n }\n}\n\nexport const deserializeTemplateValues = (json: { [templateValueKey: string]: JsonTemplateValue }): Map<string, TemplateValueDefinition> => {\n return new Map(Object.entries(json).map(([key, value]) => [key, deserializeTemplateValue(value)]));\n}\n\nexport interface JsonTemplateValue {\n type: TemplateDefTypes;\n expression?: JsonExpression;\n returnType: ValueType;\n dateFormat?: string;\n}\n\n","import { Expression, JsonExpression } from \"../../expressions\";\n\nexport interface DisplayConditions {\n root?: Expression;\n components?: {\n [componentKey: string]: Expression | undefined;\n }\n}\n\nexport interface JsonDisplayConditions {\n root?: JsonExpression;\n components?: {\n [componentKey: string]: JsonExpression | undefined;\n }\n}\n\nexport interface JsonDisabledConditions {\n components?: {\n [componentKey: string]: JsonExpression | undefined;\n }\n}\n\nexport interface DisabledConditions {\n components?: {\n [componentKey: string]: Expression | undefined;\n }\n}\n\nexport const displayConditionsFromJson = (json: JsonDisplayConditions): DisplayConditions => {\n return {\n root: json.root ? Expression.deserialize(json.root) : undefined,\n components: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined\n }\n}\n\nexport const displayConditionsToJson = (displayConditions: DisplayConditions): JsonDisplayConditions => {\n return {\n root: displayConditions.root ? displayConditions.root.serialize() : undefined,\n components: displayConditions.components ? Object.fromEntries(Object.entries(displayConditions.components).map(([key, value]) => [key, value?.serialize()])) : undefined\n }\n}\n\nexport const disabledConditionsFromJson = (json: JsonDisabledConditions): DisabledConditions => {\n return {\n components: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined\n }\n}\n\nexport const disabledConditionsToJson = (disabledConditions: DisabledConditions): JsonDisabledConditions => {\n return {\n components: disabledConditions.components ? Object.fromEntries(Object.entries(disabledConditions.components).map(([key, value]) => [key, value?.serialize()])) : undefined\n }\n}\n","import { Expression } from \"../../expressions\";\nimport { RawSurveyItem } from \"../items\";\nimport { ValueRefTypeLookup, ValueType } from \"../responses/value-types\";\nimport { ReferenceUsage, ReferenceUsageType } from \"../utils/value-reference\";\nimport { DisabledConditions, disabledConditionsFromJson, DisplayConditions, displayConditionsFromJson } from \"./utils\";\n\n/**\n * Core contract for survey item handlers.\n * Every item type (built-in and plugin) is represented by a handler class implementing this interface.\n * The core uses these methods without any casting.\n */\nexport interface SurveyItemCoreType<TConfig = unknown> {\n readonly type: string;\n readonly id: string;\n readonly key: string;\n readonly config: TConfig;\n\n isInteractive(): boolean;\n getAvailableResponseValueSlots(): ValueRefTypeLookup;\n}\n\n/**\n * Base class for survey item handlers.\n * Each handler holds type, id, key, and config (properly typed) and implements core methods.\n * Subclass for each item type; the core works with SurveyItemHandler only—no casting needed.\n */\nexport abstract class SurveyItemCore<\n TType extends string = string,\n TConfig = unknown\n> implements SurveyItemCoreType<TConfig> {\n abstract readonly type: TType;\n readonly id: string;\n key: string;\n config: TConfig;\n\n private _rawItem: RawSurveyItem;\n\n displayConditions?: DisplayConditions;\n disabledConditions?: DisabledConditions;\n validations?: {\n [validationKey: string]: Expression | undefined;\n }\n prefillRules?: Array<Expression | undefined>;\n\n\n constructor(rawItem: RawSurveyItem) {\n this._rawItem = rawItem;\n this.updateExpressions();\n this.id = this._rawItem.id;\n this.key = this._rawItem.key;\n this.config = this.parseConfig(this._rawItem.config);\n }\n\n /** Parse raw config from JSON into typed config. Override in subclasses. */\n abstract parseConfig(rawConfig: unknown): TConfig;\n abstract isInteractive(): boolean;\n abstract getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup;\n\n get rawItem(): RawSurveyItem {\n return this._rawItem;\n }\n\n updateRawItem(rawItem: RawSurveyItem) {\n if (rawItem.id !== this.id) {\n throw new Error('Cannot update raw item with a different id');\n }\n this._rawItem = rawItem;\n this.updateExpressions();\n this.key = rawItem.key;\n this.config = this.parseConfig(rawItem.config);\n }\n\n private updateExpressions() {\n this.displayConditions = this._rawItem.displayConditions ? displayConditionsFromJson(this._rawItem.displayConditions) : undefined;\n this.disabledConditions = this._rawItem.disabledConditions ? disabledConditionsFromJson(this._rawItem.disabledConditions) : undefined;\n this.validations = this._rawItem.validations ? Object.fromEntries(Object.entries(this._rawItem.validations).map(([key, value]) => [key, Expression.deserialize(value)])) : undefined;\n this.prefillRules = this._rawItem.prefillRules ? this._rawItem.prefillRules.map(rule => rule ? Expression.deserialize(rule) : undefined) : undefined;\n }\n\n getReferenceUsages(): ReferenceUsage[] {\n const usages: ReferenceUsage[] = [];\n\n if (this.displayConditions) {\n // root\n for (const ref of this.displayConditions.root?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n usageType: ReferenceUsageType.displayConditions,\n valueReference: ref,\n });\n }\n\n // components\n for (const [componentKey, expression] of Object.entries(this.displayConditions.components || {})) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: componentKey,\n usageType: ReferenceUsageType.displayConditions,\n valueReference: ref,\n });\n }\n }\n }\n\n if (this.disabledConditions) {\n for (const [componentKey, expression] of Object.entries(this.disabledConditions.components || {})) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: componentKey,\n usageType: ReferenceUsageType.disabledConditions,\n valueReference: ref,\n });\n }\n }\n }\n\n if (this.validations) {\n for (const [validationKey, expression] of Object.entries(this.validations)) {\n for (const ref of expression?.responseVariableRefs || []) {\n usages.push({\n itemId: this.id,\n fullComponentKey: validationKey,\n usageType: ReferenceUsageType.validations,\n valueReference: ref,\n });\n }\n }\n }\n\n return usages;\n }\n}\n\n\n/**\n * Constructor type for handler classes. Used by the registry to instantiate handlers.\n */\nexport type ItemCoreConstructor<TType extends string = string, TConfig = unknown> = new (\n rawItem: RawSurveyItem\n) => SurveyItemCore<TType, TConfig>;\n","export enum ReservedSurveyItemTypes {\n Group = 'group',\n PageBreak = 'page-break',\n}\n\n","\n/**\n * SurveyItemKey stores the key of the item and the path to the item.\n */\n\nexport class SurveyItemKey {\n private _itemKey: string;\n private _path: Array<string>;\n private _keySeparator: string;\n\n constructor(itemKey: string, path: string[] | undefined, keySeparator: string = '.') {\n this._itemKey = itemKey;\n this._path = path ?? [];\n this._keySeparator = keySeparator;\n }\n\n get itemKey(): string {\n return this._itemKey;\n }\n\n get path(): Array<string> {\n return this._path;\n }\n\n get parentFullKey(): string {\n return this._path.join(this._keySeparator);\n }\n\n get fullKey(): string {\n return [...this._path, this._itemKey].join(this._keySeparator);\n }\n\n get isRoot(): boolean {\n return this._path.length === 0;\n }\n\n get keySeparator(): string {\n return this._keySeparator;\n }\n\n set keySeparator(keySeparator: string) {\n this._keySeparator = keySeparator;\n }\n}\n\n","import { JsonTemplateValue } from \"../expressions/template-value\";\nimport { RawSurveyItem } from \"./items\";\nimport { JsonSurveyTranslations } from \"./utils/translations\";\n\nexport const CURRENT_SURVEY_SCHEMA = 'https://github.com/case-framework/case-survey-toolkit/packages/survey-core/schemas/survey-schema.json';\n// TODO: generate schema from survey-core.ts\n\n\nexport interface SurveyVersion {\n id?: string;\n surveyKey: string;\n published?: number;\n unpublished?: number;\n versionId?: string;\n survey: RawSurvey;\n}\n\nexport type RawSurvey = {\n $schema: string;\n maxItemsPerPage?: { large: number, small: number };\n\n surveyItems: Array<RawSurveyItem>;\n\n metadata?: {\n [key: string]: string\n }\n templateValues?: {\n [templateValueKey: string]: JsonTemplateValue;\n };\n translations?: JsonSurveyTranslations;\n}\n","import { structuredCloneMethod } from \"../../utils\";\nimport { Content } from \"./content\";\n\n\nexport const validateLocale = (locale: string): void => {\n if (locale.trim() === '') {\n throw new Error('Locale cannot be empty');\n }\n}\n\nexport class SurveyItemTranslations {\n private _translations?: {\n [locale: string]: JsonComponentContent;\n };\n\n constructor() {\n this._translations = {};\n }\n\n setContent(locale: string, contentKey: string, content?: Content): void {\n validateLocale(locale);\n if (!this._translations?.[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations![locale] = {};\n }\n if (!content) {\n delete this._translations![locale][contentKey];\n } else {\n this._translations![locale][contentKey] = content;\n }\n }\n\n setAllForLocale(locale: string, content?: JsonComponentContent): void {\n validateLocale(locale);\n if (!this._translations?.[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations![locale] = {};\n }\n this._translations![locale] = content || {};\n }\n\n get locales(): string[] {\n return Object.keys(this._translations || {});\n }\n\n getAllForLocale(locale: string): JsonComponentContent | undefined {\n return this._translations?.[locale];\n }\n\n getContent(locale: string, contentKey: string, fallbackLocale?: string): Content | undefined {\n const content = this._translations?.[locale]?.[contentKey];\n if (content) {\n return content;\n }\n if (fallbackLocale) {\n return this._translations?.[fallbackLocale]?.[contentKey];\n }\n return undefined;\n }\n}\n\nexport interface SurveyCardTranslations {\n [locale: string]: SurveyCardContent;\n}\n\n\nexport class SurveyTranslations {\n private _translations: JsonSurveyTranslations;\n\n constructor(translations?: JsonSurveyTranslations) {\n this._translations = translations || {};\n }\n\n\n serialize(): JsonSurveyTranslations | undefined {\n if (this.locales.length === 0) {\n return undefined;\n }\n return this._translations;\n }\n\n get locales(): string[] {\n return Object.keys(this._translations);\n }\n\n removeLocale(locale: string): void {\n validateLocale(locale);\n delete this._translations[locale];\n }\n\n renameLocale(oldLocale: string, newLocale: string): void {\n validateLocale(oldLocale);\n validateLocale(newLocale);\n if (this._translations[oldLocale]) {\n this._translations[newLocale] = this._translations[oldLocale];\n delete this._translations[oldLocale];\n }\n }\n\n cloneLocaleAs(locale: string, newLocale: string): void {\n validateLocale(locale);\n validateLocale(newLocale);\n if (this._translations[locale]) {\n this._translations[newLocale] = structuredCloneMethod(this._translations[locale]);\n }\n }\n\n get surveyCardContent(): SurveyCardTranslations | undefined {\n const translations: SurveyCardTranslations = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.surveyCardContent;\n if (contentForLocale) {\n translations[locale] = contentForLocale as SurveyCardContent;\n }\n }\n return translations;\n }\n\n get navigationContent(): { [locale: string]: NavigationContent } | undefined {\n const translations: { [locale: string]: NavigationContent } = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.navigationContent;\n if (contentForLocale) {\n translations[locale] = contentForLocale as NavigationContent;\n }\n }\n return translations;\n }\n\n get validationMessages(): { [locale: string]: { invalidResponse?: Content } } | undefined {\n const translations: { [locale: string]: { invalidResponse?: Content } } = {};\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale]?.validationMessages;\n if (contentForLocale) {\n translations[locale] = contentForLocale as { invalidResponse?: Content };\n }\n }\n return translations;\n }\n\n setSurveyCardContent(locale: string, content?: SurveyCardContent): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].surveyCardContent = content;\n }\n\n setNavigationContent(locale: string, content?: NavigationContent): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].navigationContent = content;\n }\n\n setValidationMessages(locale: string, content?: { invalidResponse?: Content }): void {\n validateLocale(locale);\n if (!this._translations[locale]) {\n if (!content) {\n // No need to do anything if content is undefined\n return\n }\n this._translations[locale] = {};\n }\n this._translations[locale].validationMessages = content;\n }\n\n getItemTranslations(itemId: string): SurveyItemTranslations | undefined {\n const itemTranslations: SurveyItemTranslations = new SurveyItemTranslations();\n for (const locale of this.locales) {\n const contentForLocale = this._translations?.[locale].itemTranslations?.[itemId];\n itemTranslations.setAllForLocale(locale, contentForLocale as JsonComponentContent);\n }\n return itemTranslations;\n }\n\n setItemTranslations(itemId: string, itemContent?: SurveyItemTranslations): void {\n itemContent?.locales.forEach(locale => validateLocale(locale));\n if (!itemContent) {\n for (const locale of this.locales) {\n if (this._translations[locale].itemTranslations?.[itemId]) {\n delete this._translations[locale].itemTranslations?.[itemId];\n }\n }\n } else {\n const localesInUpdate = itemContent.locales;\n // Add new locales to the translations\n for (const locale of localesInUpdate) {\n if (!this.locales.includes(locale)) {\n this._translations[locale] = {};\n }\n }\n for (const locale of this.locales) {\n if (localesInUpdate.includes(locale)) {\n if (!this._translations[locale]) {\n this._translations[locale] = {};\n }\n if (!this._translations[locale].itemTranslations) {\n this._translations[locale].itemTranslations = {};\n }\n this._translations[locale].itemTranslations![itemId] = itemContent.getAllForLocale(locale) ?? {};\n } else {\n delete this._translations[locale].itemTranslations![itemId];\n }\n }\n }\n }\n\n /**\n * Rename a component key (within an item) - update key in all translations and remove old key\n * @param itemKey - The key of the item\n * @param oldKey - The old key of the component\n * @param newKey - The new key of the component\n */\n onComponentKeyChanged(itemKey: string, oldKey: string, newKey: string): void {\n for (const locale of this.locales) {\n const itemTranslations = this._translations?.[locale].itemTranslations?.[itemKey] as JsonComponentContent;\n if (itemTranslations) {\n for (const key of Object.keys(itemTranslations)) {\n if (key.startsWith(oldKey + '.') || key === oldKey) {\n itemTranslations[key.replace(oldKey, newKey)] = { ...itemTranslations[key] };\n delete itemTranslations[key];\n }\n }\n }\n }\n }\n\n /**\n * Remove all translations for a component\n * @param itemId - The id of the item\n * @param componentKey - The key of the component\n */\n onComponentDeleted(itemId: string, componentKey: string): void {\n for (const locale of this.locales) {\n const itemTranslations = this._translations?.[locale].itemTranslations?.[itemId];\n if (itemTranslations) {\n for (const key of Object.keys(itemTranslations)) {\n if (key.startsWith(componentKey + '.') || key === componentKey) {\n delete itemTranslations[key as keyof typeof itemTranslations];\n }\n }\n }\n }\n }\n\n /**\n * Remove all translations for an item\n * @param id - The id of the item\n */\n onItemDeleted(id: string): void {\n for (const locale of this.locales) {\n delete this._translations![locale].itemTranslations?.[id];\n }\n }\n}\n\n\n/**\n * Json Schemas for translations\n */\nexport type JsonComponentContent = {\n [contentKey: string]: Content;\n}\n\n\nexport interface SurveyCardContent {\n name?: Content;\n description?: Content;\n typicalDuration?: Content;\n}\n\nexport interface NavigationContent {\n previousButtonText?: Content;\n nextButtonText?: Content;\n submitButtonText?: Content;\n submitBoxMessage?: Content;\n}\n\nexport interface JsonSurveyTranslations {\n [locale: string]: {\n surveyCardContent?: SurveyCardContent;\n navigationContent?: NavigationContent;\n validationMessages?: {\n invalidResponse?: Content;\n }\n itemTranslations?: {\n [itemId: string]: JsonComponentContent;\n }\n }\n}\n","/**\n * Shared utilities for array operations.\n */\n\n/**\n * Swap two elements in an array by index.\n * @returns A new array with the elements swapped\n */\nexport function swapArrayElements<T>(arr: T[], fromIndex: number, toIndex: number): T[] {\n const result = [...arr];\n [result[fromIndex], result[toIndex]] = [result[toIndex], result[fromIndex]];\n return result;\n}\n\n/**\n * Move an element from one index to another.\n * @returns A new array with the element moved\n */\nexport function moveArrayElement<T>(arr: T[], fromIndex: number, toIndex: number): T[] {\n const result = [...arr];\n const [moved] = result.splice(fromIndex, 1);\n result.splice(toIndex, 0, moved);\n return result;\n}\n","import { ReservedSurveyItemTypes } from \"../items/types\";\nimport { ItemCoreConstructor, SurveyItemCore } from \"../items/survey-item\";\nimport { moveArrayElement, swapArrayElements } from \"../utils/group-utils\";\n\n\n/**\n * Group item core.\n */\nexport type GroupConfig = {\n items?: string[];\n shuffleItems?: boolean;\n isRoot?: boolean;\n};\n\nexport class GroupItemCore extends SurveyItemCore<\n typeof ReservedSurveyItemTypes.Group,\n GroupConfig\n> {\n readonly type = ReservedSurveyItemTypes.Group;\n\n parseConfig(rawConfig: unknown): GroupConfig {\n const cfg = (rawConfig ?? {}) as Partial<GroupConfig>;\n return {\n items: cfg.items,\n shuffleItems: cfg.shuffleItems,\n isRoot: cfg.isRoot,\n };\n }\n\n serializeConfig(): unknown {\n return this.config;\n }\n\n isInteractive(): boolean {\n return false;\n }\n\n getAvailableResponseValueSlots() {\n return {};\n }\n\n isRoot(): boolean {\n return this.config.isRoot ?? false;\n }\n\n get items(): string[] {\n return this.config.items ?? [];\n }\n\n /**\n * Add a child item id to this group at the given index.\n * @param itemId The id of the item to add to this group.\n * @param index The index at which to add the item. If not provided, the item is added to the end of the group.\n */\n addChild(itemId: string, index?: number): void {\n const items = this.config.items ??= [];\n const insertIndex = index !== undefined ? Math.min(index, items.length) : items.length;\n items.splice(insertIndex, 0, itemId);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Remove a child item id from this group.\n * @param itemId The id of the item to remove from this group.\n */\n removeChild(itemId: string): void {\n const items = this.config.items ??= [];\n const index = items.indexOf(itemId);\n if (index !== -1) {\n items.splice(index, 1);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n }\n\n /**\n * Check if an item is a direct child of this group.\n */\n hasChild(itemId: string): boolean {\n return this.items.includes(itemId);\n }\n\n /** Whether items in this group should be shuffled. */\n get shuffleItems(): boolean {\n return this.config.shuffleItems ?? false;\n }\n\n set shuffleItems(value: boolean) {\n this.config.shuffleItems = value;\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Get the ordered list of child item ids.\n */\n getChildrenIds(): string[] {\n return [...this.items];\n }\n\n /**\n * Swap two items by their positions in the group.\n * @throws Error if indices are out of bounds\n */\n swapItemsByIndex(from: number, to: number): void {\n const items = this.items;\n if (from < 0 || from >= items.length || to < 0 || to >= items.length) {\n throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n }\n if (from === to) return;\n this.config.items = swapArrayElements(items, from, to);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n\n /**\n * Swap two items by their ids.\n * @throws Error if either id is not found in this group\n */\n swapItemsById(id: string, withId: string): void {\n const items = this.items;\n const index1 = items.indexOf(id);\n const index2 = items.indexOf(withId);\n if (index1 === -1) {\n throw new Error(`Item '${id}' not found in group '${this.key}'`);\n }\n if (index2 === -1) {\n throw new Error(`Item '${withId}' not found in group '${this.key}'`);\n }\n this.swapItemsByIndex(index1, index2);\n }\n\n /**\n * Move an item by id to a specific index.\n * @throws Error if the item is not found or index is out of bounds\n */\n moveItemToIndex(id: string, index: number): void {\n const items = this.items;\n const fromIndex = items.indexOf(id);\n if (fromIndex === -1) {\n throw new Error(`Item '${id}' not found in group '${this.key}'`);\n }\n if (index < 0 || index >= items.length) {\n throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n }\n if (fromIndex === index) return;\n this.config.items = moveArrayElement(items, fromIndex, index);\n this.updateRawItem({\n ...this.rawItem,\n config: { ...this.config },\n });\n }\n}\n\n/**\n * Page break item core.\n */\nexport type PageBreakConfig = Record<string, never>;\n\nexport class PageBreakItemCore extends SurveyItemCore<\n typeof ReservedSurveyItemTypes.PageBreak,\n PageBreakConfig\n> {\n readonly type = ReservedSurveyItemTypes.PageBreak;\n\n parseConfig(_rawConfig: unknown): PageBreakConfig {\n return {};\n }\n\n serializeConfig(): unknown {\n return undefined;\n }\n\n isInteractive(): boolean {\n return false;\n }\n\n getAvailableResponseValueSlots() {\n return {};\n }\n}\n\n/**\n * Built-in item type.\n */\nexport type BuiltInItemType = typeof ReservedSurveyItemTypes.Group | typeof ReservedSurveyItemTypes.PageBreak;\n\nexport const builtInItemCoreRegistry: Record<BuiltInItemType, ItemCoreConstructor> = {\n [ReservedSurveyItemTypes.Group]: GroupItemCore,\n [ReservedSurveyItemTypes.PageBreak]: PageBreakItemCore,\n};\n\nexport const isBuiltInItemType = (itemType: string): itemType is BuiltInItemType =>\n itemType in builtInItemCoreRegistry;\n\n","import { SurveyItemCore } from \"../items/survey-item\";\nimport { RawSurveyItem } from \"../items/survey-item-json\";\nimport { builtInItemCoreRegistry, isBuiltInItemType } from \"./built-in-items\";\n\n/**\n * Registry maps item type string -> Handler constructor.\n * Plugins extend this with their own handler classes.\n */\nexport type ItemTypeRegistry = Record<string, new (rawItem: RawSurveyItem) => SurveyItemCore>;\n\n\n/**\n * Creates a handler instance for a raw survey item.\n * Uses built-in registry for group/page-break, otherwise the provided plugin registry.\n */\nexport function createItemCore(\n rawItem: RawSurveyItem,\n pluginRegistry?: ItemTypeRegistry\n): SurveyItemCore {\n if (isBuiltInItemType(rawItem.itemType)) {\n const HandlerClass = builtInItemCoreRegistry[rawItem.itemType];\n return new HandlerClass(rawItem);\n }\n\n if (pluginRegistry && rawItem.itemType in pluginRegistry) {\n const HandlerClass = pluginRegistry[rawItem.itemType];\n return new HandlerClass(rawItem);\n }\n\n throw new Error(`Unknown item type: ${rawItem.itemType}`);\n}\n\n/**\n * Merge built-in handlers with plugin registry for a complete registry.\n */\nexport function createFullRegistry(pluginRegistry?: ItemTypeRegistry): ItemTypeRegistry {\n return {\n ...builtInItemCoreRegistry,\n ...pluginRegistry,\n };\n}\n","import { CURRENT_SURVEY_SCHEMA, RawSurvey, } from \"./survey-file-schema\";\nimport { SurveyItemTranslations, SurveyTranslations } from \"./utils/translations\";\nimport { SurveyItemCore } from \"./items\";\nimport { RawSurveyItem } from \"./items\";\nimport { ReferenceUsage, ReferenceUsageType } from \"./utils/value-reference\";\nimport { SurveyItemKey } from \"./item-key\";\nimport { deserializeTemplateValues, serializeTemplateValues, TemplateValueDefinition } from \"../expressions/template-value\";\nimport { ValueRefTypeLookup, ValueType } from \"./responses/value-types\";\nimport { createItemCore, ItemTypeRegistry } from \"./registry/item-registry\";\nimport { GroupItemCore } from \"./registry/built-in-items\";\n\n\nexport class Survey {\n maxItemsPerPage?: { large: number, small: number };\n metadata?: {\n [key: string]: string\n }\n surveyItems: Map<string, SurveyItemCore> = new Map();\n private _templateValues?: Map<string, TemplateValueDefinition> = new Map();\n\n private _translations?: SurveyTranslations;\n\n constructor(\n private readonly pluginRegistry?: ItemTypeRegistry\n ) {\n this._translations = new SurveyTranslations();\n }\n\n /**\n * Create a survey item from raw JSON data.\n * Uses the survey's plugin registry when available.\n */\n createItemFromRaw(rawItem: RawSurveyItem): SurveyItemCore {\n return createItemCore(rawItem, this.pluginRegistry);\n }\n\n static fromJson(json: RawSurvey, pluginRegistry?: ItemTypeRegistry): Survey {\n const survey = new Survey(pluginRegistry);\n const rawSurvey = json as RawSurvey;\n if (rawSurvey.$schema !== CURRENT_SURVEY_SCHEMA) {\n throw new Error(`Unsupported survey schema: ${rawSurvey.$schema}`);\n }\n\n survey.surveyItems = new Map();\n if (!rawSurvey.surveyItems || rawSurvey.surveyItems.length === 0) {\n throw new Error('surveyItems is required');\n }\n rawSurvey.surveyItems.forEach(item => {\n const surveyItem = createItemCore(item, pluginRegistry);\n survey.surveyItems.set(surveyItem.id, surveyItem);\n });\n\n // Parse other fields\n if (rawSurvey.templateValues) {\n survey._templateValues = deserializeTemplateValues(rawSurvey.templateValues);\n }\n\n survey._translations = new SurveyTranslations(rawSurvey.translations);\n\n if (rawSurvey.maxItemsPerPage) {\n survey.maxItemsPerPage = rawSurvey.maxItemsPerPage;\n }\n\n if (rawSurvey.metadata) {\n survey.metadata = rawSurvey.metadata;\n }\n\n return survey;\n }\n\n serialize(): RawSurvey {\n const json: RawSurvey = {\n $schema: CURRENT_SURVEY_SCHEMA,\n surveyItems: Array.from(this.surveyItems.values()).map(item => item.rawItem),\n };\n\n // Export other fields\n json.translations = this._translations?.serialize();\n\n if (this._templateValues) {\n json.templateValues = serializeTemplateValues(this._templateValues);\n }\n\n if (this.maxItemsPerPage) {\n json.maxItemsPerPage = this.maxItemsPerPage;\n }\n if (this.metadata) {\n json.metadata = this.metadata;\n }\n\n return json;\n }\n\n get surveyKey(): string | undefined {\n const rootItem = this.rootItem;\n if (!rootItem) {\n return undefined;\n }\n return this.rootItem.key;\n }\n\n get locales(): string[] {\n return this._translations?.locales || [];\n }\n\n get rootItem(): GroupItemCore | undefined {\n const rootItem = Array.from(this.surveyItems.values()).find(item => item instanceof GroupItemCore && item.isRoot) as GroupItemCore | undefined;\n return rootItem;\n }\n\n\n get keyIndex(): Array<{ itemId: string, key: string, keyPath: string[], path: string[] }> {\n const index: Array<{ itemId: string, key: string, keyPath: string[], path: string[] }> = [];\n for (const item of this.surveyItems.values()) {\n const path = this.getItemPath(item.id);\n index.push({\n itemId: item.id, key: item.key,\n keyPath: path.map(id => this.surveyItems.get(id)?.key ?? ''),\n path: path\n });\n }\n return index;\n }\n\n getItemPath(itemId: string): string[] {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n throw new Error(`Item ${itemId} not found`);\n }\n\n if (item instanceof GroupItemCore && item.isRoot()) {\n return [];\n }\n\n // find parent item for the given item id\n const parentItem = this.getParentItem(itemId);\n if (!parentItem) {\n throw new Error(`Parent item for ${itemId} not found`);\n }\n return [...this.getItemPath(parentItem.id), parentItem.id];\n }\n\n getItemKey(itemId: string): SurveyItemKey | undefined {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n return undefined;\n }\n const idPath = this.getItemPath(itemId);\n const keyPath = idPath.map(id => this.surveyItems.get(id)?.key ?? '');\n return new SurveyItemKey(item.key, keyPath);\n }\n\n getParentItem(itemId: string): GroupItemCore | undefined {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n throw new Error(`Item ${itemId} not found`);\n }\n if (item instanceof GroupItemCore && item.isRoot()) {\n return undefined;\n }\n const parentItem = Array.from(this.surveyItems.values()).find(item => item instanceof GroupItemCore && item.config.items?.includes(itemId)) as GroupItemCore | undefined;\n if (!parentItem) {\n return undefined;\n }\n return parentItem;\n }\n\n getChildrenItems(parentId: string): SurveyItemCore[] {\n const parentItem = this.surveyItems.get(parentId);\n if (!parentItem || !(parentItem instanceof GroupItemCore)) {\n return [];\n }\n return (parentItem as GroupItemCore).config.items?.map(id => this.surveyItems.get(id))?.filter(item => item !== undefined) as SurveyItemCore[] || [];\n }\n\n getSiblings(itemId: string): SurveyItemCore[] {\n const item = this.surveyItems.get(itemId);\n if (!item) {\n return [];\n }\n const parentItem = this.getParentItem(itemId);\n return parentItem?.items?.map(id => this.surveyItems.get(id))?.filter(item => item !== undefined) as SurveyItemCore[] || [];\n }\n\n get translations(): SurveyTranslations {\n if (!this._translations) {\n this._translations = new SurveyTranslations();\n }\n return this._translations;\n }\n\n getItemTranslations(id: string): SurveyItemTranslations | undefined {\n const item = this.surveyItems.get(id);\n if (!item) {\n throw new Error(`Item ${id} not found`);\n }\n\n return this._translations?.getItemTranslations(id);\n }\n\n getTemplateValue(templateValueKey: string): TemplateValueDefinition | undefined {\n return this._templateValues?.get(templateValueKey);\n }\n\n setTemplateValue(templateValueKey: string, templateValue: TemplateValueDefinition) {\n if (!this._templateValues) {\n this._templateValues = new Map();\n }\n this._templateValues?.set(templateValueKey, templateValue);\n }\n\n deleteTemplateValue(templateValueKey: string) {\n this._templateValues?.delete(templateValueKey);\n }\n\n getTemplateValueKeys(): string[] {\n return Array.from(this._templateValues?.keys() || []);\n }\n\n getAvailableResponseValueSlots(byType?: ValueType): ValueRefTypeLookup {\n let valueRefs: ValueRefTypeLookup = {};\n for (const item of this.surveyItems.values()) {\n valueRefs = { ...valueRefs, ...item.getAvailableResponseValueSlots(byType) };\n }\n return valueRefs;\n }\n\n /**\n * Get all reference usages for the survey\n * @param forItemId - optional item id to filter usages for a specific item and its children (if not provided, all usages are returned)\n * @returns all reference usages for the survey (or for a specific item and its children)\n */\n getReferenceUsages(forItemId?: string): ReferenceUsage[] {\n const usages: ReferenceUsage[] = [];\n for (const item of this.surveyItems.values()) {\n if (forItemId && item.id !== forItemId && !this.isDescendantOf(item.id, forItemId)) {\n continue;\n }\n usages.push(...item.getReferenceUsages());\n }\n\n if (this._templateValues) {\n for (const [templateValueKey, templateValue] of this._templateValues.entries()) {\n for (const ref of templateValue.expression?.responseVariableRefs || []) {\n usages.push({\n itemId: templateValueKey,\n usageType: ReferenceUsageType.templateValues,\n valueReference: ref,\n });\n }\n }\n }\n\n return usages;\n }\n\n // Helper method to check if targetId is a descendant of ancestorId\n isDescendantOf(targetId: string, ancestorId: string): boolean {\n if (targetId === ancestorId) {\n return true;\n }\n const targetPath = this.getItemPath(targetId);\n return targetPath.includes(ancestorId);\n }\n}\n"],"mappings":";;;;;;AAMA,SAAgB,eAAe,QAA0B;CACvD,MAAM,kBAAkB,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAAM,EAAE;AAE3D,MAAK,IAAI,IAAI,gBAAgB,SAAS,GAAG,IAAI,GAAG,KAAK;EACnD,MAAM,IAAI,KAAK,MAAM,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC7C,GAAC,gBAAgB,IAAI,gBAAgB,MAAM,CAAC,gBAAgB,IAAI,gBAAgB,GAAG;;AAGrF,QAAO;;AAGT,SAAgB,sBAAyB,KAAW;AAClD,KAAI,OAAO,oBAAoB,YAC7B,QAAO,gBAAgB,IAAI;AAG7B,QAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;;AAGxC,MAAM,WAAW;AAEjB,SAAgB,aAAqB;CACnC,MAAM,SAAS;CACf,MAAM,YAAY,KAAK,KAAK;CAC5B,IAAI,mBAAmB;CACvB,IAAI,IAAI;CACR,MAAM,OAAO;AAEb,QAAO,IAAI,GAAG;AACZ,qBAAmB,SAAS,OAAO,IAAI,KAAK,GAAG;AAC/C,MAAI,KAAK,MAAM,IAAI,KAAK;;CAG1B,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,eAAc,SAAS,OAAO,KAAK,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC;AAEjE,QAAO,aAAa;;;;;AC3CtB,MAAM,YAAY;AAElB,IAAY,sEAAL;AACL;AACA;;;AAKF,IAAa,iBAAb,MAAa,eAAe;CAC1B;CACA;CACA;CAEA,YAAY,KAAa;EACvB,MAAM,QAAQ,IAAI,MAAM,UAAU;AAClC,MAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MAAM,8BAA8B,IAAI;AAEpD,OAAK,UAAU,MAAM;AACrB,OAAK,QAAQ,MAAM;AACnB,OAAK,UAAU,MAAM;;CAGvB,IAAI,SAAiB;AACnB,SAAO,KAAK;;CAGd,IAAI,OAA6B;AAC/B,SAAO,KAAK;;CAGd,IAAI,SAAiB;AACnB,SAAO,KAAK;;CAGd,IAAI,OAAO,QAAgB;AACzB,OAAK,UAAU;;CAGjB,WAAmB;AACjB,SAAO,GAAG,KAAK,UAAU,YAAY,KAAK,QAAQ,KAAK,UAAU,YAAY,KAAK,UAAU;;CAG9F,OAAO,UAAU,QAAgB,MAA4B,QAAgC;AAC3F,SAAO,IAAI,eAAe,GAAG,SAAS,YAAY,OAAO,YAAY,SAAS;;;AAKlF,IAAY,kEAAL;AACL;AACA;AACA;AACA;;;;;;AClDF,MAAa,iBAAiB;CAC5B,OAAO;CACP,kBAAkB;CAClB,iBAAiB;CACjB,UAAU;CACX;AAID,MAAa,sBAAsB;CACjC,QAAQ;CACR,iBAAiB;CACjB,aAAa;CACb,kBAAkB;CACnB;;;;AAgDD,IAAsB,aAAtB,MAAsB,WAAW;CAC/B;CACA;CAEA,YAAY,MAAsB,cAAuC;AACvE,OAAK,OAAO;AACZ,OAAK,eAAe;;CAGtB,OAAO,YAAY,MAA0D;AAC3E,MAAI,CAAC,KACH;AAGF,UAAQ,KAAK,MAAb;GACE,KAAK,eAAe,MAClB,QAAO,gBAAgB,YAAY,KAAK;GAC1C,KAAK,eAAe,iBAClB,QAAO,2BAA2B,YAAY,KAAK;GACrD,KAAK,eAAe,gBAClB,QAAO,0BAA0B,YAAY,KAAK;GACpD,KAAK,eAAe,SAClB,QAAO,mBAAmB,YAAY,KAAK;;;CAWjD,QAAoB;AAClB,SAAO,WAAW,YAAY,KAAK,WAAW,CAAC,WAAW;AACxD,SAAM,IAAI,MAAM,6BAA6B;MAC3C;;;AAIR,IAAa,kBAAb,MAAa,wBAAwB,WAAW;CAE9C;CAEA,YAAY,OAAuB,cAAuC;AACxE,QAAM,eAAe,OAAO,aAAa;AACzC,OAAK,QAAQ;AACb,OAAK,OAAO,eAAe;;CAG7B,OAAO,YAAY,MAAuC;AACxD,MAAI,KAAK,SAAS,eAAe,MAC/B,OAAM,IAAI,MAAM,8BAA8B,KAAK,KAAK;AAG1D,SAAO,IAAI,gBAAgB,KAAK,OAAO,KAAK,aAAa;;CAG3D,IAAI,uBAAyC;AAC3C,SAAO,EAAE;;CAGX,YAA4B;AAC1B,SAAO;GACL,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,cAAc,KAAK;GACpB;;CAGH,wBAAwB,aAAqB,aAA8B;AAEzE,SAAO;;;AAIX,IAAa,6BAAb,MAAa,mCAAmC,WAAW;CAEzD;CAEA,YAAY,aAAqB,cAAuC;AACtE,QAAM,eAAe,kBAAkB,aAAa;AACpD,OAAK,cAAc;AACnB,OAAK,OAAO,eAAe;;CAG7B,OAAO,YAAY,MAAkD;AACnE,MAAI,KAAK,SAAS,eAAe,iBAC/B,OAAM,IAAI,MAAM,8BAA8B,KAAK,KAAK;AAG1D,SAAO,IAAI,2BAA2B,KAAK,aAAa,KAAK,aAAa;;CAG5E,IAAI,uBAAyC;AAC3C,SAAO,CAAC,IAAI,eAAe,KAAK,YAAY,CAAC;;CAG/C,IAAI,sBAAsC;AACxC,SAAO,IAAI,eAAe,KAAK,YAAY;;CAG7C,YAA4B;AAC1B,SAAO;GACL,MAAM,KAAK;GACX,aAAa,KAAK;GAClB,cAAc,KAAK;GACpB;;;AAIL,IAAa,4BAAb,MAAa,kCAAkC,WAAW;CAGxD;CACA;CACA;CACA;CAEA,YAAY,aAAkC,KAAkB,MAAsC,QAAoB,cAAuC;AAC/J,QAAM,eAAe,iBAAiB,aAAa;AACnD,OAAK,OAAO,eAAe;AAC3B,OAAK,cAAc;AACnB,OAAK,MAAM;AACX,OAAK,YAAY;AACjB,OAAK,SAAS;;CAGhB,OAAO,YAAY,MAAiD;AAClE,MAAI,KAAK,SAAS,eAAe,gBAC/B,OAAM,IAAI,MAAM,8BAA8B,KAAK,KAAK;AAG1D,SAAO,IAAI,0BAA0B,KAAK,aAAa,WAAW,YAAY,KAAK,IAAI,EAAE,KAAK,WAAW,KAAI,QAAO,WAAW,YAAY,IAAI,CAAC,EAAE,KAAK,QAAQ,KAAK,aAAa;;CAGnL,IAAI,uBAAyC;AAC3C,SAAO,KAAK,WAAW,SAAQ,QAAO,KAAK,qBAAqB,CAAC,QAAO,QAAO,QAAQ,OAAU,IAAI,EAAE;;CAGzG,YAA4B;AAC1B,SAAO;GACL,MAAM,KAAK;GACX,aAAa,KAAK;GAClB,KAAK,KAAK,KAAK,WAAW;GAC1B,WAAW,KAAK,WAAW,KAAI,QAAO,KAAK,WAAW,CAAC;GACvD,QAAQ,KAAK;GACb,cAAc,KAAK;GACpB;;;AAKL,IAAY,4EAAL;AACL;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAGA;;;AAGF,IAAa,qBAAb,MAAa,2BAA2B,WAAW;CAEjD;CACA;CAEA,YAAY,cAAuC,MAAqC,cAAuC;AAC7H,QAAM,eAAe,SAAS;AAC9B,OAAK,OAAO,eAAe;AAC3B,OAAK,eAAe;AACpB,OAAK,YAAY;AACjB,OAAK,eAAe;;CAGtB,OAAO,YAAY,MAA0C;AAC3D,MAAI,KAAK,SAAS,eAAe,SAC/B,OAAM,IAAI,MAAM,8BAA8B,KAAK,KAAK;EAG1D,MAAM,eAAe,KAAK;AAC1B,MAAI,CAAC,OAAO,OAAO,wBAAwB,CAAC,SAAS,aAAa,CAChE,OAAM,IAAI,MAAM,4BAA4B,aAAa;EAG3D,MAAM,OAAO,IAAI,mBAAmB,cAAc,KAAK,UAAU,KAAI,QAAO,WAAW,YAAY,IAAI,CAAC,CAAC;AACzG,OAAK,eAAe,KAAK;AACzB,SAAO;;CAGT,IAAI,uBAAyC;EAE3C,MAAM,aADO,KAAK,UAAU,SAAQ,QAAO,KAAK,qBAAqB,CAAC,QAAO,QAAO,QAAQ,OAAU,CAC9E,KAAI,QAAO,IAAI,UAAU,CAAC;AAClD,SAAO,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,KAAI,QAAO,IAAI,eAAe,IAAI,CAAC;;CAGrE,YAAwC;AACtC,SAAO;GACL,MAAM,KAAK;GACX,cAAc,KAAK;GACnB,WAAW,KAAK,UAAU,KAAI,QAAO,KAAK,WAAW,CAAC;GACtD,cAAc,KAAK;GACpB;;;;;;AC5RL,IAAY,8DAAL;AACL;AACA;;;AAoBF,MAAa,0BAA0B,kBAA8D;CACnG,MAAM,OAA0B;EAC9B,MAAM,cAAc;EACpB,YAAY,cAAc;EAC1B,YAAY,cAAc,YAAY,WAAW;EAClD;AACD,KAAI,cAAc,SAAS,iBAAiB,YAC1C,MAAK,aAAc,cAA0C;AAE/D,QAAO;;AAGT,MAAa,2BAA2B,mBAA4G;CAClJ,MAAM,OAA0D,EAAE;AAClE,MAAK,MAAM,CAAC,KAAK,UAAU,eAAe,SAAS,CACjD,MAAK,OAAO,uBAAuB,MAAM;AAE3C,QAAO;;AAGT,MAAa,4BAA4B,SAAqD;AAC5F,QAAO;EACL,MAAM,KAAK;EACX,YAAY,KAAK,aAAa,WAAW,YAAY,KAAK,WAAW,GAAG;EACxE,YAAY,KAAK;EACjB,YAAY,KAAK;EAClB;;AAGH,MAAa,6BAA6B,SAAkG;AAC1I,QAAO,IAAI,IAAI,OAAO,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,yBAAyB,MAAM,CAAC,CAAC,CAAC;;;;;AC5BpG,MAAa,6BAA6B,SAAmD;AAC3F,QAAO;EACL,MAAM,KAAK,OAAO,WAAW,YAAY,KAAK,KAAK,GAAG;EACtD,YAAY,KAAK,aAAa,OAAO,YAAY,OAAO,QAAQ,KAAK,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,WAAW,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG;EACjJ;;AAUH,MAAa,8BAA8B,SAAqD;AAC9F,QAAO,EACL,YAAY,KAAK,aAAa,OAAO,YAAY,OAAO,QAAQ,KAAK,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,WAAW,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,QACjJ;;;;;;;;;;ACnBH,IAAsB,iBAAtB,MAGyC;CAEvC,AAAS;CACT;CACA;CAEA,AAAQ;CAER;CACA;CACA;CAGA;CAGA,YAAY,SAAwB;AAClC,OAAK,WAAW;AAChB,OAAK,mBAAmB;AACxB,OAAK,KAAK,KAAK,SAAS;AACxB,OAAK,MAAM,KAAK,SAAS;AACzB,OAAK,SAAS,KAAK,YAAY,KAAK,SAAS,OAAO;;CAQtD,IAAI,UAAyB;AAC3B,SAAO,KAAK;;CAGd,cAAc,SAAwB;AACpC,MAAI,QAAQ,OAAO,KAAK,GACtB,OAAM,IAAI,MAAM,6CAA6C;AAE/D,OAAK,WAAW;AAChB,OAAK,mBAAmB;AACxB,OAAK,MAAM,QAAQ;AACnB,OAAK,SAAS,KAAK,YAAY,QAAQ,OAAO;;CAGhD,AAAQ,oBAAoB;AAC1B,OAAK,oBAAoB,KAAK,SAAS,oBAAoB,0BAA0B,KAAK,SAAS,kBAAkB,GAAG;AACxH,OAAK,qBAAqB,KAAK,SAAS,qBAAqB,2BAA2B,KAAK,SAAS,mBAAmB,GAAG;AAC5H,OAAK,cAAc,KAAK,SAAS,cAAc,OAAO,YAAY,OAAO,QAAQ,KAAK,SAAS,YAAY,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,WAAW,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG;AAC3K,OAAK,eAAe,KAAK,SAAS,eAAe,KAAK,SAAS,aAAa,KAAI,SAAQ,OAAO,WAAW,YAAY,KAAK,GAAG,OAAU,GAAG;;CAG7I,qBAAuC;EACrC,MAAM,SAA2B,EAAE;AAEnC,MAAI,KAAK,mBAAmB;AAE1B,QAAK,MAAM,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,EAAE,CACvE,QAAO,KAAK;IACV,QAAQ,KAAK;IACb,WAAW,mBAAmB;IAC9B,gBAAgB;IACjB,CAAC;AAIJ,QAAK,MAAM,CAAC,cAAc,eAAe,OAAO,QAAQ,KAAK,kBAAkB,cAAc,EAAE,CAAC,CAC9F,MAAK,MAAM,OAAO,YAAY,wBAAwB,EAAE,CACtD,QAAO,KAAK;IACV,QAAQ,KAAK;IACb,kBAAkB;IAClB,WAAW,mBAAmB;IAC9B,gBAAgB;IACjB,CAAC;;AAKR,MAAI,KAAK,mBACP,MAAK,MAAM,CAAC,cAAc,eAAe,OAAO,QAAQ,KAAK,mBAAmB,cAAc,EAAE,CAAC,CAC/F,MAAK,MAAM,OAAO,YAAY,wBAAwB,EAAE,CACtD,QAAO,KAAK;GACV,QAAQ,KAAK;GACb,kBAAkB;GAClB,WAAW,mBAAmB;GAC9B,gBAAgB;GACjB,CAAC;AAKR,MAAI,KAAK,YACP,MAAK,MAAM,CAAC,eAAe,eAAe,OAAO,QAAQ,KAAK,YAAY,CACxE,MAAK,MAAM,OAAO,YAAY,wBAAwB,EAAE,CACtD,QAAO,KAAK;GACV,QAAQ,KAAK;GACb,kBAAkB;GAClB,WAAW,mBAAmB;GAC9B,gBAAgB;GACjB,CAAC;AAKR,SAAO;;;;;;ACnIX,IAAY,4EAAL;AACL;AACA;;;;;;;;;ACGF,IAAa,gBAAb,MAA2B;CACzB,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,SAAiB,MAA4B,eAAuB,KAAK;AACnF,OAAK,WAAW;AAChB,OAAK,QAAQ,QAAQ,EAAE;AACvB,OAAK,gBAAgB;;CAGvB,IAAI,UAAkB;AACpB,SAAO,KAAK;;CAGd,IAAI,OAAsB;AACxB,SAAO,KAAK;;CAGd,IAAI,gBAAwB;AAC1B,SAAO,KAAK,MAAM,KAAK,KAAK,cAAc;;CAG5C,IAAI,UAAkB;AACpB,SAAO,CAAC,GAAG,KAAK,OAAO,KAAK,SAAS,CAAC,KAAK,KAAK,cAAc;;CAGhE,IAAI,SAAkB;AACpB,SAAO,KAAK,MAAM,WAAW;;CAG/B,IAAI,eAAuB;AACzB,SAAO,KAAK;;CAGd,IAAI,aAAa,cAAsB;AACrC,OAAK,gBAAgB;;;;;;ACrCzB,MAAa,wBAAwB;;;;ACArC,MAAa,kBAAkB,WAAyB;AACtD,KAAI,OAAO,MAAM,KAAK,GACpB,OAAM,IAAI,MAAM,yBAAyB;;AAI7C,IAAa,yBAAb,MAAoC;CAClC,AAAQ;CAIR,cAAc;AACZ,OAAK,gBAAgB,EAAE;;CAGzB,WAAW,QAAgB,YAAoB,SAAyB;AACtE,iBAAe,OAAO;AACtB,MAAI,CAAC,KAAK,gBAAgB,SAAS;AACjC,OAAI,CAAC,QAEH;AAEF,QAAK,cAAe,UAAU,EAAE;;AAElC,MAAI,CAAC,QACH,QAAO,KAAK,cAAe,QAAQ;MAEnC,MAAK,cAAe,QAAQ,cAAc;;CAI9C,gBAAgB,QAAgB,SAAsC;AACpE,iBAAe,OAAO;AACtB,MAAI,CAAC,KAAK,gBAAgB,SAAS;AACjC,OAAI,CAAC,QAEH;AAEF,QAAK,cAAe,UAAU,EAAE;;AAElC,OAAK,cAAe,UAAU,WAAW,EAAE;;CAG7C,IAAI,UAAoB;AACtB,SAAO,OAAO,KAAK,KAAK,iBAAiB,EAAE,CAAC;;CAG9C,gBAAgB,QAAkD;AAChE,SAAO,KAAK,gBAAgB;;CAG9B,WAAW,QAAgB,YAAoB,gBAA8C;EAC3F,MAAM,UAAU,KAAK,gBAAgB,UAAU;AAC/C,MAAI,QACF,QAAO;AAET,MAAI,eACF,QAAO,KAAK,gBAAgB,kBAAkB;;;AAWpD,IAAa,qBAAb,MAAgC;CAC9B,AAAQ;CAER,YAAY,cAAuC;AACjD,OAAK,gBAAgB,gBAAgB,EAAE;;CAIzC,YAAgD;AAC9C,MAAI,KAAK,QAAQ,WAAW,EAC1B;AAEF,SAAO,KAAK;;CAGd,IAAI,UAAoB;AACtB,SAAO,OAAO,KAAK,KAAK,cAAc;;CAGxC,aAAa,QAAsB;AACjC,iBAAe,OAAO;AACtB,SAAO,KAAK,cAAc;;CAG5B,aAAa,WAAmB,WAAyB;AACvD,iBAAe,UAAU;AACzB,iBAAe,UAAU;AACzB,MAAI,KAAK,cAAc,YAAY;AACjC,QAAK,cAAc,aAAa,KAAK,cAAc;AACnD,UAAO,KAAK,cAAc;;;CAI9B,cAAc,QAAgB,WAAyB;AACrD,iBAAe,OAAO;AACtB,iBAAe,UAAU;AACzB,MAAI,KAAK,cAAc,QACrB,MAAK,cAAc,aAAa,sBAAsB,KAAK,cAAc,QAAQ;;CAIrF,IAAI,oBAAwD;EAC1D,MAAM,eAAuC,EAAE;AAC/C,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,SAAS;AACvD,OAAI,iBACF,cAAa,UAAU;;AAG3B,SAAO;;CAGT,IAAI,oBAAyE;EAC3E,MAAM,eAAwD,EAAE;AAChE,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,SAAS;AACvD,OAAI,iBACF,cAAa,UAAU;;AAG3B,SAAO;;CAGT,IAAI,qBAAsF;EACxF,MAAM,eAAoE,EAAE;AAC5E,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,SAAS;AACvD,OAAI,iBACF,cAAa,UAAU;;AAG3B,SAAO;;CAGT,qBAAqB,QAAgB,SAAmC;AACtE,iBAAe,OAAO;AACtB,MAAI,CAAC,KAAK,cAAc,SAAS;AAC/B,OAAI,CAAC,QAEH;AAEF,QAAK,cAAc,UAAU,EAAE;;AAEjC,OAAK,cAAc,QAAQ,oBAAoB;;CAGjD,qBAAqB,QAAgB,SAAmC;AACtE,iBAAe,OAAO;AACtB,MAAI,CAAC,KAAK,cAAc,SAAS;AAC/B,OAAI,CAAC,QAEH;AAEF,QAAK,cAAc,UAAU,EAAE;;AAEjC,OAAK,cAAc,QAAQ,oBAAoB;;CAGjD,sBAAsB,QAAgB,SAA+C;AACnF,iBAAe,OAAO;AACtB,MAAI,CAAC,KAAK,cAAc,SAAS;AAC/B,OAAI,CAAC,QAEH;AAEF,QAAK,cAAc,UAAU,EAAE;;AAEjC,OAAK,cAAc,QAAQ,qBAAqB;;CAGlD,oBAAoB,QAAoD;EACtE,MAAM,mBAA2C,IAAI,wBAAwB;AAC7E,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,QAAQ,mBAAmB;AACzE,oBAAiB,gBAAgB,QAAQ,iBAAyC;;AAEpF,SAAO;;CAGT,oBAAoB,QAAgB,aAA4C;AAC9E,eAAa,QAAQ,SAAQ,WAAU,eAAe,OAAO,CAAC;AAC9D,MAAI,CAAC,aACH;QAAK,MAAM,UAAU,KAAK,QACxB,KAAI,KAAK,cAAc,QAAQ,mBAAmB,QAChD,QAAO,KAAK,cAAc,QAAQ,mBAAmB;SAGpD;GACL,MAAM,kBAAkB,YAAY;AAEpC,QAAK,MAAM,UAAU,gBACnB,KAAI,CAAC,KAAK,QAAQ,SAAS,OAAO,CAChC,MAAK,cAAc,UAAU,EAAE;AAGnC,QAAK,MAAM,UAAU,KAAK,QACxB,KAAI,gBAAgB,SAAS,OAAO,EAAE;AACpC,QAAI,CAAC,KAAK,cAAc,QACtB,MAAK,cAAc,UAAU,EAAE;AAEjC,QAAI,CAAC,KAAK,cAAc,QAAQ,iBAC9B,MAAK,cAAc,QAAQ,mBAAmB,EAAE;AAElD,SAAK,cAAc,QAAQ,iBAAkB,UAAU,YAAY,gBAAgB,OAAO,IAAI,EAAE;SAEhG,QAAO,KAAK,cAAc,QAAQ,iBAAkB;;;;;;;;;CAY5D,sBAAsB,SAAiB,QAAgB,QAAsB;AAC3E,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,QAAQ,mBAAmB;AACzE,OAAI,kBACF;SAAK,MAAM,OAAO,OAAO,KAAK,iBAAiB,CAC7C,KAAI,IAAI,WAAW,SAAS,IAAI,IAAI,QAAQ,QAAQ;AAClD,sBAAiB,IAAI,QAAQ,QAAQ,OAAO,IAAI,EAAE,GAAG,iBAAiB,MAAM;AAC5E,YAAO,iBAAiB;;;;;;;;;;CAYlC,mBAAmB,QAAgB,cAA4B;AAC7D,OAAK,MAAM,UAAU,KAAK,SAAS;GACjC,MAAM,mBAAmB,KAAK,gBAAgB,QAAQ,mBAAmB;AACzE,OAAI,kBACF;SAAK,MAAM,OAAO,OAAO,KAAK,iBAAiB,CAC7C,KAAI,IAAI,WAAW,eAAe,IAAI,IAAI,QAAQ,aAChD,QAAO,iBAAiB;;;;;;;;CAWlC,cAAc,IAAkB;AAC9B,OAAK,MAAM,UAAU,KAAK,QACxB,QAAO,KAAK,cAAe,QAAQ,mBAAmB;;;;;;;;;;;;;ACnQ5D,SAAgB,kBAAqB,KAAU,WAAmB,SAAsB;CACpF,MAAM,SAAS,CAAC,GAAG,IAAI;AACvB,EAAC,OAAO,YAAY,OAAO,YAAY,CAAC,OAAO,UAAU,OAAO,WAAW;AAC3E,QAAO;;;;;;AAOX,SAAgB,iBAAoB,KAAU,WAAmB,SAAsB;CACnF,MAAM,SAAS,CAAC,GAAG,IAAI;CACvB,MAAM,CAAC,SAAS,OAAO,OAAO,WAAW,EAAE;AAC3C,QAAO,OAAO,SAAS,GAAG,MAAM;AAChC,QAAO;;;;;ACRX,IAAa,gBAAb,cAAmC,eAGjC;CACE,AAAS,OAAO,wBAAwB;CAExC,YAAY,WAAiC;EACzC,MAAM,MAAO,aAAa,EAAE;AAC5B,SAAO;GACH,OAAO,IAAI;GACX,cAAc,IAAI;GAClB,QAAQ,IAAI;GACf;;CAGL,kBAA2B;AACvB,SAAO,KAAK;;CAGhB,gBAAyB;AACrB,SAAO;;CAGX,iCAAiC;AAC7B,SAAO,EAAE;;CAGb,SAAkB;AACd,SAAO,KAAK,OAAO,UAAU;;CAGjC,IAAI,QAAkB;AAClB,SAAO,KAAK,OAAO,SAAS,EAAE;;;;;;;CAQlC,SAAS,QAAgB,OAAsB;EAC3C,MAAM,QAAQ,KAAK,OAAO,UAAU,EAAE;EACtC,MAAM,cAAc,UAAU,SAAY,KAAK,IAAI,OAAO,MAAM,OAAO,GAAG,MAAM;AAChF,QAAM,OAAO,aAAa,GAAG,OAAO;AACpC,OAAK,cAAc;GACf,GAAG,KAAK;GACR,QAAQ,EAAE,GAAG,KAAK,QAAQ;GAC7B,CAAC;;;;;;CAON,YAAY,QAAsB;EAC9B,MAAM,QAAQ,KAAK,OAAO,UAAU,EAAE;EACtC,MAAM,QAAQ,MAAM,QAAQ,OAAO;AACnC,MAAI,UAAU,IAAI;AACd,SAAM,OAAO,OAAO,EAAE;AACtB,QAAK,cAAc;IACf,GAAG,KAAK;IACR,QAAQ,EAAE,GAAG,KAAK,QAAQ;IAC7B,CAAC;;;;;;CAOV,SAAS,QAAyB;AAC9B,SAAO,KAAK,MAAM,SAAS,OAAO;;;CAItC,IAAI,eAAwB;AACxB,SAAO,KAAK,OAAO,gBAAgB;;CAGvC,IAAI,aAAa,OAAgB;AAC7B,OAAK,OAAO,eAAe;AAC3B,OAAK,cAAc;GACf,GAAG,KAAK;GACR,QAAQ,EAAE,GAAG,KAAK,QAAQ;GAC7B,CAAC;;;;;CAMN,iBAA2B;AACvB,SAAO,CAAC,GAAG,KAAK,MAAM;;;;;;CAO1B,iBAAiB,MAAc,IAAkB;EAC7C,MAAM,QAAQ,KAAK;AACnB,MAAI,OAAO,KAAK,QAAQ,MAAM,UAAU,KAAK,KAAK,MAAM,MAAM,OAC1D,OAAM,IAAI,MAAM,yCAAyC,MAAM,SAAS,IAAI;AAEhF,MAAI,SAAS,GAAI;AACjB,OAAK,OAAO,QAAQ,kBAAkB,OAAO,MAAM,GAAG;AACtD,OAAK,cAAc;GACf,GAAG,KAAK;GACR,QAAQ,EAAE,GAAG,KAAK,QAAQ;GAC7B,CAAC;;;;;;CAON,cAAc,IAAY,QAAsB;EAC5C,MAAM,QAAQ,KAAK;EACnB,MAAM,SAAS,MAAM,QAAQ,GAAG;EAChC,MAAM,SAAS,MAAM,QAAQ,OAAO;AACpC,MAAI,WAAW,GACX,OAAM,IAAI,MAAM,SAAS,GAAG,wBAAwB,KAAK,IAAI,GAAG;AAEpE,MAAI,WAAW,GACX,OAAM,IAAI,MAAM,SAAS,OAAO,wBAAwB,KAAK,IAAI,GAAG;AAExE,OAAK,iBAAiB,QAAQ,OAAO;;;;;;CAOzC,gBAAgB,IAAY,OAAqB;EAC7C,MAAM,QAAQ,KAAK;EACnB,MAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,MAAI,cAAc,GACd,OAAM,IAAI,MAAM,SAAS,GAAG,wBAAwB,KAAK,IAAI,GAAG;AAEpE,MAAI,QAAQ,KAAK,SAAS,MAAM,OAC5B,OAAM,IAAI,MAAM,yCAAyC,MAAM,SAAS,IAAI;AAEhF,MAAI,cAAc,MAAO;AACzB,OAAK,OAAO,QAAQ,iBAAiB,OAAO,WAAW,MAAM;AAC7D,OAAK,cAAc;GACf,GAAG,KAAK;GACR,QAAQ,EAAE,GAAG,KAAK,QAAQ;GAC7B,CAAC;;;AASV,IAAa,oBAAb,cAAuC,eAGrC;CACE,AAAS,OAAO,wBAAwB;CAExC,YAAY,YAAsC;AAC9C,SAAO,EAAE;;CAGb,kBAA2B;CAI3B,gBAAyB;AACrB,SAAO;;CAGX,iCAAiC;AAC7B,SAAO,EAAE;;;AASjB,MAAa,0BAAwE;EAChF,wBAAwB,QAAQ;EAChC,wBAAwB,YAAY;CACxC;AAED,MAAa,qBAAqB,aAC9B,YAAY;;;;;;;;AC3LhB,SAAgB,eACZ,SACA,gBACc;AACd,KAAI,kBAAkB,QAAQ,SAAS,EAAE;EACrC,MAAM,eAAe,wBAAwB,QAAQ;AACrD,SAAO,IAAI,aAAa,QAAQ;;AAGpC,KAAI,kBAAkB,QAAQ,YAAY,gBAAgB;EACtD,MAAM,eAAe,eAAe,QAAQ;AAC5C,SAAO,IAAI,aAAa,QAAQ;;AAGpC,OAAM,IAAI,MAAM,sBAAsB,QAAQ,WAAW;;;;;ACjB7D,IAAa,SAAb,MAAa,OAAO;CAClB;CACA;CAGA,8BAA2C,IAAI,KAAK;CACpD,AAAQ,kCAAyD,IAAI,KAAK;CAE1E,AAAQ;CAER,YACE,AAAiB,gBACjB;EADiB;AAEjB,OAAK,gBAAgB,IAAI,oBAAoB;;;;;;CAO/C,kBAAkB,SAAwC;AACxD,SAAO,eAAe,SAAS,KAAK,eAAe;;CAGrD,OAAO,SAAS,MAAiB,gBAA2C;EAC1E,MAAM,SAAS,IAAI,OAAO,eAAe;EACzC,MAAM,YAAY;AAClB,MAAI,UAAU,YAAY,sBACxB,OAAM,IAAI,MAAM,8BAA8B,UAAU,UAAU;AAGpE,SAAO,8BAAc,IAAI,KAAK;AAC9B,MAAI,CAAC,UAAU,eAAe,UAAU,YAAY,WAAW,EAC7D,OAAM,IAAI,MAAM,0BAA0B;AAE5C,YAAU,YAAY,SAAQ,SAAQ;GACpC,MAAM,aAAa,eAAe,MAAM,eAAe;AACvD,UAAO,YAAY,IAAI,WAAW,IAAI,WAAW;IACjD;AAGF,MAAI,UAAU,eACZ,QAAO,kBAAkB,0BAA0B,UAAU,eAAe;AAG9E,SAAO,gBAAgB,IAAI,mBAAmB,UAAU,aAAa;AAErE,MAAI,UAAU,gBACZ,QAAO,kBAAkB,UAAU;AAGrC,MAAI,UAAU,SACZ,QAAO,WAAW,UAAU;AAG9B,SAAO;;CAGT,YAAuB;EACrB,MAAM,OAAkB;GACtB,SAAS;GACT,aAAa,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAI,SAAQ,KAAK,QAAQ;GAC7E;AAGD,OAAK,eAAe,KAAK,eAAe,WAAW;AAEnD,MAAI,KAAK,gBACP,MAAK,iBAAiB,wBAAwB,KAAK,gBAAgB;AAGrE,MAAI,KAAK,gBACP,MAAK,kBAAkB,KAAK;AAE9B,MAAI,KAAK,SACP,MAAK,WAAW,KAAK;AAGvB,SAAO;;CAGT,IAAI,YAAgC;AAElC,MAAI,CADa,KAAK,SAEpB;AAEF,SAAO,KAAK,SAAS;;CAGvB,IAAI,UAAoB;AACtB,SAAO,KAAK,eAAe,WAAW,EAAE;;CAG1C,IAAI,WAAsC;AAExC,SADiB,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,MAAK,SAAQ,gBAAgB,iBAAiB,KAAK,OAAO;;CAKnH,IAAI,WAAsF;EACxF,MAAM,QAAmF,EAAE;AAC3F,OAAK,MAAM,QAAQ,KAAK,YAAY,QAAQ,EAAE;GAC5C,MAAM,OAAO,KAAK,YAAY,KAAK,GAAG;AACtC,SAAM,KAAK;IACT,QAAQ,KAAK;IAAI,KAAK,KAAK;IAC3B,SAAS,KAAK,KAAI,OAAM,KAAK,YAAY,IAAI,GAAG,EAAE,OAAO,GAAG;IACtD;IACP,CAAC;;AAEJ,SAAO;;CAGT,YAAY,QAA0B;EACpC,MAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,QAAQ,OAAO,YAAY;AAG7C,MAAI,gBAAgB,iBAAiB,KAAK,QAAQ,CAChD,QAAO,EAAE;EAIX,MAAM,aAAa,KAAK,cAAc,OAAO;AAC7C,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,mBAAmB,OAAO,YAAY;AAExD,SAAO,CAAC,GAAG,KAAK,YAAY,WAAW,GAAG,EAAE,WAAW,GAAG;;CAG5D,WAAW,QAA2C;EACpD,MAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,MAAI,CAAC,KACH;EAGF,MAAM,UADS,KAAK,YAAY,OAAO,CAChB,KAAI,OAAM,KAAK,YAAY,IAAI,GAAG,EAAE,OAAO,GAAG;AACrE,SAAO,IAAI,cAAc,KAAK,KAAK,QAAQ;;CAG7C,cAAc,QAA2C;EACvD,MAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,QAAQ,OAAO,YAAY;AAE7C,MAAI,gBAAgB,iBAAiB,KAAK,QAAQ,CAChD;EAEF,MAAM,aAAa,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,MAAK,SAAQ,gBAAgB,iBAAiB,KAAK,OAAO,OAAO,SAAS,OAAO,CAAC;AAC3I,MAAI,CAAC,WACH;AAEF,SAAO;;CAGT,iBAAiB,UAAoC;EACnD,MAAM,aAAa,KAAK,YAAY,IAAI,SAAS;AACjD,MAAI,CAAC,cAAc,EAAE,sBAAsB,eACzC,QAAO,EAAE;AAEX,SAAQ,WAA6B,OAAO,OAAO,KAAI,OAAM,KAAK,YAAY,IAAI,GAAG,CAAC,EAAE,QAAO,SAAQ,SAAS,OAAU,IAAwB,EAAE;;CAGtJ,YAAY,QAAkC;AAE5C,MAAI,CADS,KAAK,YAAY,IAAI,OAAO,CAEvC,QAAO,EAAE;AAGX,SADmB,KAAK,cAAc,OAAO,EAC1B,OAAO,KAAI,OAAM,KAAK,YAAY,IAAI,GAAG,CAAC,EAAE,QAAO,SAAQ,SAAS,OAAU,IAAwB,EAAE;;CAG7H,IAAI,eAAmC;AACrC,MAAI,CAAC,KAAK,cACR,MAAK,gBAAgB,IAAI,oBAAoB;AAE/C,SAAO,KAAK;;CAGd,oBAAoB,IAAgD;AAElE,MAAI,CADS,KAAK,YAAY,IAAI,GAAG,CAEnC,OAAM,IAAI,MAAM,QAAQ,GAAG,YAAY;AAGzC,SAAO,KAAK,eAAe,oBAAoB,GAAG;;CAGpD,iBAAiB,kBAA+D;AAC9E,SAAO,KAAK,iBAAiB,IAAI,iBAAiB;;CAGpD,iBAAiB,kBAA0B,eAAwC;AACjF,MAAI,CAAC,KAAK,gBACR,MAAK,kCAAkB,IAAI,KAAK;AAElC,OAAK,iBAAiB,IAAI,kBAAkB,cAAc;;CAG5D,oBAAoB,kBAA0B;AAC5C,OAAK,iBAAiB,OAAO,iBAAiB;;CAGhD,uBAAiC;AAC/B,SAAO,MAAM,KAAK,KAAK,iBAAiB,MAAM,IAAI,EAAE,CAAC;;CAGvD,+BAA+B,QAAwC;EACrE,IAAI,YAAgC,EAAE;AACtC,OAAK,MAAM,QAAQ,KAAK,YAAY,QAAQ,CAC1C,aAAY;GAAE,GAAG;GAAW,GAAG,KAAK,+BAA+B,OAAO;GAAE;AAE9E,SAAO;;;;;;;CAQT,mBAAmB,WAAsC;EACvD,MAAM,SAA2B,EAAE;AACnC,OAAK,MAAM,QAAQ,KAAK,YAAY,QAAQ,EAAE;AAC5C,OAAI,aAAa,KAAK,OAAO,aAAa,CAAC,KAAK,eAAe,KAAK,IAAI,UAAU,CAChF;AAEF,UAAO,KAAK,GAAG,KAAK,oBAAoB,CAAC;;AAG3C,MAAI,KAAK,gBACP,MAAK,MAAM,CAAC,kBAAkB,kBAAkB,KAAK,gBAAgB,SAAS,CAC5E,MAAK,MAAM,OAAO,cAAc,YAAY,wBAAwB,EAAE,CACpE,QAAO,KAAK;GACV,QAAQ;GACR,WAAW,mBAAmB;GAC9B,gBAAgB;GACjB,CAAC;AAKR,SAAO;;CAIT,eAAe,UAAkB,YAA6B;AAC5D,MAAI,aAAa,WACf,QAAO;AAGT,SADmB,KAAK,YAAY,SAAS,CAC3B,SAAS,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"survey-TUPUXiXl.d.mts","names":[],"sources":["../src/survey/responses/value-types.ts","../src/survey/utils/value-reference.ts","../src/expressions/expression.ts","../src/expressions/template-value.ts","../src/survey/items/utils.ts","../src/survey/items/survey-item.ts","../src/survey/items/survey-item-json.ts","../src/survey/items/types.ts","../src/survey/utils/content.ts","../src/survey/utils/translations.ts","../src/survey/survey-file-schema.ts","../src/survey/item-key.ts","../src/survey/registry/item-registry.ts","../src/survey/registry/built-in-items.ts","../src/survey/survey.ts"],"mappings":"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"}