@dynamicforms/vue-forms 0.5.0 → 0.6.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.
- package/dist/dynamicforms-vue-forms.js +530 -528
- package/dist/dynamicforms-vue-forms.js.map +1 -1
- package/dist/dynamicforms-vue-forms.umd.cjs +2 -2
- package/dist/dynamicforms-vue-forms.umd.cjs.map +1 -1
- package/dist/index.d.cts +603 -0
- package/dist/index.d.ts +103 -93
- package/package.json +26 -9
- package/readme.md +135 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamicforms-vue-forms.js","sources":["../src/display-mode.ts","../src/actions/field-action-base.ts","../src/field.interface.ts","../src/actions/value-changed-action.ts","../src/validators/validation-error.ts","../src/validators/validator.ts","../src/actions/actions-map.ts","../src/actions/conditional/conditional-statement-action.ts","../src/actions/conditional/operator.ts","../src/actions/enabled-actions.ts","../src/actions/valid-changed-action.ts","../src/actions/visibility-actions.ts","../src/field-base.ts","../src/actions/conditional/statement.ts","../src/actions/execute-action.ts","../src/actions/list-item-added-action.ts","../src/actions/list-item-removed-action.ts","../src/field.ts","../src/action.ts","../src/components/messages-widget.vue","../src/group.ts","../src/list.ts","../src/config.ts","../src/validators/error-message-builder.ts","../src/validators/validator-compare-to.ts","../src/validators/validator-in-allowed-values.ts","../src/validators/validator-required.ts","../src/validators/validator-min-max-range.ts","../src/validators/validator-min-max-range-length.ts","../src/validators/validator-pattern.ts"],"sourcesContent":["/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum DisplayMode {\n // This enum is actually declared in dynamicforms.mixins.field_render.py\n SUPPRESS = 1, // Field will be entirely suppressed. it will not render (not even to JSON) and will not parse for PUT\n HIDDEN = 5, // Field will render as <input type=\"hidden\"> or <tr data-field_name>\n INVISIBLE = 8, // Field will render completely, but with display: none. Equal to setting its style = {display: none}\n FULL = 10, // Field will render completely\n}\n\nexport const defaultDisplayMode = DisplayMode.FULL;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace DisplayMode {\n export function fromString(mode: string): DisplayMode {\n if (mode.toUpperCase() === 'SUPPRESS') return DisplayMode.SUPPRESS;\n if (mode.toUpperCase() === 'HIDDEN') return DisplayMode.HIDDEN;\n if (mode.toUpperCase() === 'INVISIBLE') return DisplayMode.INVISIBLE;\n return defaultDisplayMode;\n }\n\n export function fromAny(mode: any): DisplayMode {\n const input = typeof mode === 'number' ? mode : DisplayMode.fromString(mode as string);\n if (Object.values(DisplayMode).includes(input)) return input;\n return defaultDisplayMode;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = typeof mode === 'number' ? mode : DisplayMode.fromString(mode as string);\n return Object.values(DisplayMode).includes(check);\n }\n}\n\nObject.freeze(DisplayMode);\n\nexport default DisplayMode;\n","import { FieldActionExecute, type IField, type IFieldAction } from '@/field.interface';\n\ntype ActionExecutor = (field: IField, supr: FieldActionExecute, ...params: any[]) => any;\n\nexport default abstract class FieldActionBase implements IFieldAction {\n public static get classIdentifier(): symbol {\n throw new Error('classIdentifier must be declared');\n }\n\n public get classIdentifier(): symbol {\n return (<any>this.constructor).classIdentifier;\n }\n\n private readonly executorFn: ActionExecutor;\n\n constructor(executorFn: ActionExecutor) {\n this.executorFn = executorFn;\n }\n\n execute(field: IField, supr: IFieldAction['execute'], ...params: any[]): any {\n return this.executorFn(field, supr, ...params);\n }\n\n get eager() {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n boundToField(field: IField) {}\n\n unregister() {}\n}\n","import { ComputedRef } from 'vue';\n\nimport type DisplayMode from './display-mode';\nimport { type ValidationError } from './validators/validation-error';\n\nexport interface IField<T = any> {\n value: T;\n reactiveValue: ComputedRef<T>;\n fullValue: T;\n originalValue: T;\n valid: boolean;\n validating: boolean;\n errors: ValidationError[];\n enabled: boolean;\n visibility: DisplayMode;\n touched: boolean;\n\n parent?: any; // Group when member of a Group, parent will specify that group\n fieldName?: string; // when member of a Group, fieldName specifies the name of this field\n\n clone(overrides?: Partial<IField<T>>): IField<T>;\n\n // events\n registerAction(action: IFieldAction<T>): this;\n triggerAction<T2 extends IFieldAction<T>>(actionClass: abstract new (...args: any[]) => T2, ...params: any[]): any;\n\n // API\n validate(revalidate?: boolean): void;\n clearValidators(): void;\n isChanged: boolean;\n}\n\nexport interface IFieldConstructorActionsList<T = any> {\n actions?: IFieldAction<T>[];\n validators?: IFieldAction<T>[];\n}\n\nexport type IFieldConstructorParams<T = any> = IField<T> & IFieldConstructorActionsList<T>;\n\nexport class AbortEventHandlingException extends Error {}\n\nexport type FieldActionExecute<T = any> = (field: IField<T>, ...params: any[]) => any;\nexport interface IFieldAction<T = any> {\n execute(field: IField<T>, supr: FieldActionExecute<T>, ...params: any[]): any;\n}\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nexport const ValueChangedActionClassIdentifier = Symbol('ValueChangedAction');\n\nexport class ValueChangedAction<T = any> extends FieldActionBase {\n constructor(executorFn: (field: IField<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ValueChangedActionClassIdentifier;\n }\n\n execute(field: IField<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import { computed, ComputedRef, Ref, unref } from 'vue';\n\n/**\n * Marks content for markdown rendering\n */\nexport class MdString extends String {\n plugins?: any[];\n options?: any;\n\n constructor(value: string, options?: any, plugins?: any[]) {\n super(value);\n this.plugins = plugins;\n this.options = options;\n }\n}\n\n/**\n * Interface for custom component content definition\n */\nexport interface SimpleComponentDef {\n componentName: string;\n componentProps?: Record<any, any>;\n componentVHtml?: string;\n}\n\nexport type ClassType = string | string[] | Record<string, boolean>;\nexport type ClassTypes = ClassType | ClassType[];\n\nexport type RenderContentNonCallable = string | MdString | SimpleComponentDef;\nexport type RenderContentCallable = () => RenderContentNonCallable;\n/**\n * Type for different renderable content formats: plain string, markdown, or custom component\n */\nexport type RenderContent = RenderContentNonCallable | RenderContentCallable;\n/**\n * Type for different renderable content formats (supporting references): plain string, markdown, or custom component\n */\nexport type RenderContentRef = RenderContent | Ref<RenderContent>;\n\n/**\n * Type guard to check if content is a custom component definition\n * @param msg - Content to check\n * @returns True if content is a custom component definition\n */\nexport function isSimpleComponentDef(msg?: RenderContentRef): msg is SimpleComponentDef {\n const uMsg = unref(msg);\n return typeof uMsg === 'object' && 'componentName' in uMsg;\n}\n\nexport function isCallableFunction(msg?: RenderContentRef): msg is RenderContentCallable {\n return typeof unref(msg) === 'function';\n}\n\n/**\n * Base validation error class with component rendering capabilities\n */\n\nexport class ValidationError {\n get componentName() {\n return 'Comment';\n }\n\n get componentBindings() {\n return {};\n }\n\n get componentBody() {\n return '';\n }\n\n get extraClasses(): ClassTypes {\n return '';\n }\n}\n\n/**\n * Simple text-only ValidationError\n */\nexport class ValidationErrorText extends ValidationError {\n constructor(\n public text: string,\n public classes: ClassTypes = '',\n ) {\n super();\n }\n\n get componentName() {\n return 'template';\n }\n\n get componentBody() {\n return this.text;\n }\n\n get extraClasses() {\n return this.classes;\n }\n}\n\n/**\n * Validation error that supports multiple content types (plain text, markdown, component)\n */\nexport class ValidationErrorRenderContent extends ValidationError {\n private text: RenderContent | Ref<RenderContent>;\n\n private textType: ComputedRef<'string' | 'md' | 'component'>;\n\n constructor(\n text: RenderContentRef,\n public classes: ClassTypes = '',\n ) {\n super();\n this.text = text;\n this.textType = computed(() => this.getTextType);\n }\n\n get resolvedText() {\n const text = unref(this.text);\n return isCallableFunction(text) ? text() : text;\n }\n\n get getTextType() {\n const msg = this.resolvedText;\n\n if (!msg) return 'string';\n if (msg instanceof MdString) return 'md';\n if (isSimpleComponentDef(msg)) return 'component';\n return 'string';\n }\n\n get componentName() {\n switch (unref(this.textType)) {\n case 'string':\n return 'template';\n case 'md':\n return 'vue-markdown';\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentName;\n default:\n return 'template';\n }\n }\n\n get componentBindings() {\n switch (unref(this.textType)) {\n case 'string':\n return {};\n case 'md': {\n const text = this.resolvedText as MdString;\n return { source: text.toString(), options: text.options, plugins: text.plugins };\n }\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentProps || {};\n default:\n return {};\n }\n }\n\n get componentBody() {\n switch (unref(this.textType)) {\n case 'string':\n return this.resolvedText as string;\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentVHtml || '';\n default:\n return '';\n }\n }\n\n get extraClasses() {\n return this.classes;\n }\n}\n\n/**\n * A value, renderable three different ways (plain text, markdown, component) - alias for ValidationErrorRenderContent\n */\nexport class RenderableValue extends ValidationErrorRenderContent {}\n\n/** ********************************************************************************************************************\n *\n at some point there will be classes here that will support links or action buttons or something even more complex\n *\n ******************************************************************************************************************** */\n","import { isEqual } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { ValueChangedAction } from '../actions/value-changed-action';\nimport { type FieldBase } from '../field-base';\nimport { FieldActionExecute, type IField } from '../field.interface';\n\nimport {\n isCallableFunction,\n isSimpleComponentDef,\n MdString,\n RenderContentRef,\n ValidationError,\n} from './validation-error';\n\nexport type ValidationFunctionResult = ValidationError[] | null;\nexport type ValidationFunction<T = any> = (\n newValue: T,\n oldValue: T,\n field: IField<T>,\n) => ValidationFunctionResult | Promise<ValidationFunctionResult>;\n\ninterface SourceProp {\n source: symbol;\n}\n\nconst ValidatorClassIdentifier = Symbol('Validator');\n\n/**\n * Validator is a specialized action that performs validation when a field's value changes.\n * It automatically adds/removes validation errors from the field's errors array.\n */\nexport class Validator<T = any> extends ValueChangedAction {\n private readonly source: symbol;\n\n /**\n * Creates a new validator\n * @param validationFn Function that validates the field value and returns errors or null\n */\n constructor(validationFn: ValidationFunction<T>) {\n const executor = (field: IField<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T) => {\n const errors = validationFn(newValue, oldValue, field) || [];\n\n const processErrors = (err: ValidationFunctionResult) => {\n err?.forEach((e) =>\n Object.defineProperty(e, 'source', { value: this.source, enumerable: false, configurable: false }),\n );\n for (let i = field.errors.length - 1; i >= 0; i--) {\n const error = field.errors[i] as ValidationError & SourceProp;\n if (error.source === this.source) {\n const idx = err?.findIndex((e) => isEqual(e, error)) ?? -1;\n if (idx >= 0) err?.splice(idx, 1);\n else field.errors.splice(i, 1);\n }\n }\n\n if (err && err.length > 0) field.errors.push(...err);\n field.validate(); // Update the field's valid state\n };\n\n if (errors instanceof Promise) {\n // @ts-expect-error validatingCount is protected, but we want it internally\n field.validating = ++(<FieldBase>field).validatingCount > 0;\n errors\n .then((err) => processErrors(err))\n .finally(() => {\n // @ts-expect-error validatingCount is protected, but we want it internally\n (<FieldBase>field).validatingCount = Math.max(0, (<FieldBase>field).validatingCount - 1);\n // @ts-expect-error validatingCount is protected, but we want it internally\n field.validating = (<FieldBase>field).validatingCount > 0;\n });\n } else processErrors(errors);\n return supr(field, newValue, oldValue); // Continue the action chain\n };\n\n super(executor);\n\n // Create a unique symbol for this validator instance\n this.source = Symbol(this.constructor.name);\n }\n\n static get classIdentifier() {\n return ValidatorClassIdentifier;\n }\n\n get eager() {\n return true;\n }\n\n protected replacePlaceholdersFunction(text: RenderContentRef, replace: Record<string, any>): RenderContentRef {\n return () => {\n let ret = unref(text);\n while (isCallableFunction(ret)) {\n ret = unref(this.replacePlaceholders(ret(), replace));\n }\n return ret;\n };\n }\n\n protected replacePlaceholders(text: RenderContentRef, replace: Record<string, any>): RenderContentRef {\n if (isCallableFunction(text)) return this.replacePlaceholdersFunction(text, replace);\n\n if (isSimpleComponentDef(text)) return text;\n let ret = unref(text) as string | MdString;\n Object.keys(replace).forEach((key) => {\n ret = ret.replaceAll(`{${key}}`, replace[key]);\n });\n return text instanceof MdString ? new MdString(ret.toString(), text.options, text.plugins) : ret;\n }\n}\n","import { type FieldActionExecute, type IField, AbortEventHandlingException } from '../field.interface';\nimport { Validator } from '../validators/validator';\n\nimport FieldActionBase from './field-action-base';\nimport { ValueChangedActionClassIdentifier } from './value-changed-action';\n\nexport default class ActionsMap extends Map<symbol, FieldActionExecute> {\n private readonly eagerActions = new Set<symbol>();\n\n private readonly registeredActions: FieldActionBase[] = [];\n\n register(action: FieldActionBase) {\n if (!(action instanceof FieldActionBase)) throw new Error('Invalid action type');\n this.registeredActions.push(action);\n\n const actionType = action.classIdentifier;\n const existingExecute = this.get(actionType) || (() => null);\n\n function ex(field: IField, ...params: any[]) {\n return action.execute(field, existingExecute, ...params);\n }\n this.set(actionType, ex);\n if (action.eager) this.eagerActions.add(action.classIdentifier);\n }\n\n trigger<T extends FieldActionBase>(\n ActionClass: { new (...args: any[]): T; classIdentifier: symbol },\n field: IField,\n ...params: any[]\n ): any {\n const identifier = ActionClass.classIdentifier;\n if (identifier === ValueChangedActionClassIdentifier) this.triggerEager(field, ...params);\n const execute = this.get(identifier);\n try {\n if (execute) return execute(field, ...params);\n } catch (error) {\n if (!(error instanceof AbortEventHandlingException)) throw error;\n }\n return null;\n }\n\n triggerEager(field: IField, ...params: any[]): any {\n for (const identifier of this.eagerActions) {\n const execute = this.get(identifier);\n try {\n if (execute) execute(field, ...params);\n } catch (error) {\n if (!(error instanceof AbortEventHandlingException)) throw error;\n }\n }\n }\n\n clone(): ActionsMap {\n const newActions = new ActionsMap();\n this.registeredActions.forEach((action) => newActions.register(action));\n return newActions;\n }\n\n cloneWithoutValidators(): ActionsMap {\n const newActions = new ActionsMap();\n this.registeredActions.forEach((action) => {\n if (action instanceof Validator) action.unregister();\n else newActions.register(action);\n });\n return newActions;\n }\n}\n","import DisplayMode from '../../display-mode';\nimport { FieldActionExecute, IField } from '../../field.interface';\nimport { ValueChangedAction } from '../value-changed-action';\n\nimport { Statement } from './statement';\n\nconst ConditionalStatementActionClassIdentifier = Symbol('ConditionalStatementAction');\n\ntype ConditionalExecutorFn = (field: IField, currentResult: boolean, previousResult: boolean | undefined) => void;\n\nexport class ConditionalStatementAction extends ValueChangedAction {\n private lastResult: boolean | undefined = undefined;\n\n // boundField tracks the fields this action is bound to. so that it may perform the executorFn on them and not on the\n // ValueChangedAction fields that will call the actionExecutor\n private readonly boundFields: Set<IField> = new Set<IField>();\n\n constructor(statement: Statement, executorFn: ConditionalExecutorFn) {\n // Create ValueChangedAction executor that will evaluate statement and track changes\n const actionExecutor = (field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => {\n const currentResult = statement.evaluate();\n\n if (currentResult !== this.lastResult) {\n for (const fld of this.boundFields) {\n executorFn(fld, currentResult, this.lastResult);\n }\n this.lastResult = currentResult;\n }\n\n // Continue action chain\n return supr(field, newValue, oldValue);\n };\n\n super(actionExecutor);\n statement.collectFields().forEach((field) => field.registerAction(new ValueChangedAction(actionExecutor)));\n }\n\n static get classIdentifier() {\n return ConditionalStatementActionClassIdentifier;\n }\n\n get eager() {\n return true;\n }\n\n boundToField(field: IField) {\n this.boundFields.add(field);\n }\n}\n\n// Derived classes for visibility, enabled, and value changes\n\nexport class ConditionalVisibilityAction extends ConditionalStatementAction {\n constructor(statement: Statement) {\n super(statement, (field: IField, currentResult) => {\n field.visibility = currentResult ? DisplayMode.FULL : DisplayMode.SUPPRESS;\n });\n }\n}\n\nexport class ConditionalEnabledAction extends ConditionalStatementAction {\n constructor(statement: Statement) {\n super(statement, (field, currentResult) => {\n field.enabled = currentResult;\n });\n }\n}\n\nexport class ConditionalValueAction<T> extends ConditionalStatementAction {\n constructor(statement: Statement, trueValue: T) {\n super(statement, (field, currentResult) => {\n if (currentResult) field.value = trueValue;\n });\n }\n}\n","/**\n * Operators provides us a functionality for backend to send us complex condition upon which we send\n * dynamic visibility prop for form input fields\n */\nenum Operator {\n // Logic Operators\n NOT = 0,\n OR = 1,\n AND = 2,\n XOR = 3,\n NAND = 4,\n NOR = 5,\n\n // Comparators (comparison operators)\n EQUALS = -1,\n NOT_EQUALS = -2,\n GT = -3,\n LT = -4,\n GE = -5,\n LE = -6,\n IN = -7,\n NOT_IN = -8,\n INCLUDES = -9,\n NOT_INCLUDES = -10,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace Operator {\n export function fromString(operator: string): Operator {\n const op = operator.toLowerCase();\n if (op === 'not') return Operator.NOT;\n if (op === 'or') return Operator.OR;\n if (op === 'and') return Operator.AND;\n if (op === 'xor') return Operator.XOR;\n if (op === 'nand') return Operator.NAND;\n if (op === 'nor') return Operator.NOR;\n\n if (op === 'equals') return Operator.EQUALS;\n if (['not_equals', 'not-equals', 'not equals'].includes(op)) return Operator.NOT_EQUALS;\n if (op === 'gt') return Operator.GT;\n if (op === 'lt') return Operator.LT;\n if (op === 'ge') return Operator.GE;\n if (op === 'le') return Operator.LE;\n if (op === 'in') return Operator.IN;\n if (['not_in', 'not-in', 'not in'].includes(op)) return Operator.NOT_IN;\n if (op === 'includes') return Operator.INCLUDES;\n if (['not_includes', 'not-includes', 'not includes'].includes(op)) return Operator.NOT_INCLUDES;\n throw new Error(`Unrecognised operator ${op}`);\n }\n\n export function fromAny(mode: any): Operator {\n const input = typeof mode === 'number' ? mode : Operator.fromString(mode as string);\n if (Object.values(Operator).includes(input)) return input;\n throw new Error(`Unrecognised operator ${mode}`);\n }\n\n export function isDefined(operator: number | string): boolean {\n const check = typeof operator === 'number' ? operator : Operator.fromString(operator as string);\n return Object.values(Operator).includes(check);\n }\n\n // c8 bug: it doesn't matter what there is in the next line (e.g. console.log()).\n // it will always be a branch with one branch not covered\n export function isLogicOperator(operator: Operator): boolean {\n return operator >= 0;\n }\n}\n\nObject.freeze(Operator);\n\nexport default Operator;\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst EnabledChangingActionClassIdentifier = Symbol('EnabledChangingAction');\n\nexport class EnabledChangingAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => boolean) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return EnabledChangingActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): boolean {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n\nconst EnabledChangedActionClassIdentifier = Symbol('EnabledChangedAction');\n\nexport class EnabledChangedAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return EnabledChangedActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst ValidChangedActionClassIdentifier = Symbol('ValidChangedAction');\n\nexport class ValidChangedAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ValidChangedActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport DisplayMode from '@/display-mode';\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst VisibilityChangingActionClassIdentifier = Symbol('VisibilityChangingAction');\n\nexport class VisibilityChangingAction extends FieldActionBase {\n constructor(\n executorFn: (field: IField, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode) => DisplayMode,\n ) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return VisibilityChangingActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode): DisplayMode {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n\nconst VisibilityChangedActionClassIdentifier = Symbol('VisibilityChangedAction');\n\nexport class VisibilityChangedAction extends FieldActionBase {\n constructor(\n executorFn: (field: IField, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode) => void,\n ) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return VisibilityChangedActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import { isBoolean, isEqual } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport ActionsMap from './actions/actions-map';\nimport { EnabledChangedAction, EnabledChangingAction } from './actions/enabled-actions';\nimport FieldActionBase from './actions/field-action-base';\nimport { ValidChangedAction } from './actions/valid-changed-action';\nimport { VisibilityChangedAction, VisibilityChangingAction } from './actions/visibility-actions';\nimport DisplayMode from './display-mode';\nimport { IField, IFieldAction } from './field.interface';\nimport { type Group } from './group';\nimport { ValidationError } from './validators/validation-error';\n\nexport abstract class FieldBase<T = any> implements IField<T> {\n abstract get value(): T;\n abstract set value(newValue: T);\n\n abstract get touched(): boolean;\n abstract set touched(touched: boolean);\n\n public readonly reactiveValue = computed(() => this.value);\n\n abstract clone(overrides?: Partial<IField<T>>): IField<T>;\n\n declare originalValue: T; // contains original field value as was provided at creation\n\n protected validatingCount = 0;\n\n public readonly validating = false;\n\n protected _valid: boolean = true; // is current value valid as per FE and BE validators?\n\n errors: ValidationError[] = []; // list of errors\n\n declare parent?: Group; // when member of a Group, parent will specify that group\n\n declare fieldName?: string; // when member of a Group, fieldName specifies the name of this field\n\n protected actions: ActionsMap = new ActionsMap();\n\n // default property handlers\n private _visibility: DisplayMode = DisplayMode.FULL;\n\n get visibility(): DisplayMode {\n return this._visibility;\n }\n\n set visibility(newValue: DisplayMode) {\n const oldValue = this._visibility;\n const alteredValue = this.actions.trigger(VisibilityChangingAction, this, newValue, oldValue);\n if (!DisplayMode.isDefined(alteredValue ?? newValue)) throw new Error('visibility must be a DisplayMode constant');\n this._visibility = DisplayMode.fromAny(alteredValue ?? newValue);\n this.actions.trigger(VisibilityChangedAction, this, this._visibility, oldValue);\n }\n\n private _enabled: boolean = true;\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n set enabled(newValue: boolean) {\n const oldValue = this._enabled;\n const alteredValue = this.actions.trigger(EnabledChangingAction, this, newValue, oldValue);\n if (!isBoolean(alteredValue ?? newValue)) throw new Error('Enabled value must be boolean');\n this._enabled = alteredValue ?? newValue;\n this.actions.trigger(EnabledChangedAction, this, this._enabled, oldValue);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) this.actions.triggerEager(this, this.value, this.value);\n const oldValid = this._valid;\n this._valid = this.valid;\n if (this._valid !== oldValid) this.actions.trigger(ValidChangedAction, this, this.valid, oldValid);\n }\n\n get valid() {\n return this.errors.length === 0;\n }\n\n get fullValue(): any {\n return this.value;\n }\n\n get isChanged(): boolean {\n return !isEqual(this.value, this.originalValue);\n }\n\n registerAction(action: IFieldAction<T>): this {\n const act = action as FieldActionBase;\n this.actions.register(act);\n act.boundToField(this);\n if (act.eager) {\n // When adding eager actions, execute them immediately\n this.actions.trigger(Object.getPrototypeOf(action).constructor, this, this.value, this.originalValue);\n }\n return this;\n }\n\n triggerAction<T2 extends IFieldAction<T>>(actionClass: new (...args: any[]) => T2, ...params: any[]): any {\n return this.actions.trigger(actionClass as any, this, ...params);\n }\n\n clearValidators(): void {\n this.actions = this.actions.cloneWithoutValidators();\n this.errors = [];\n this._valid = true;\n }\n}\n","import { isString } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { FieldBase } from '../../field-base';\nimport { IField } from '../../field.interface';\n\nimport Operator from './operator';\n\nexport type OperandType = any | Statement | IField;\n\nfunction XOR(value1: boolean, value2: boolean): boolean {\n return value1 ? !value2 : value2;\n}\n\nexport class Statement {\n private readonly operand1: OperandType;\n\n private readonly operator: Operator;\n\n private readonly operand2: OperandType;\n\n constructor(operand1: OperandType, operator: Operator, operand2: OperandType) {\n this.operand1 = operand1;\n this.operator = operator;\n this.operand2 = operand2;\n }\n\n get operand1Value() {\n if (this.operand1 instanceof Statement) return this.operand1.evaluate();\n if (this.operand1 instanceof FieldBase) return unref(this.operand1.value);\n return this.operand1; // any\n }\n\n get operand2Value() {\n if (this.operand2 instanceof Statement) return this.operand2.evaluate();\n if (this.operand2 instanceof FieldBase) return unref(this.operand2.value);\n return this.operand2; // any\n }\n\n evaluate(): boolean {\n const operand1 = this.operand1Value;\n const operand2 = this.operand2Value;\n\n switch (this.operator) {\n // logical operators\n case Operator.AND:\n return operand1 && operand2;\n case Operator.OR:\n return operand1 || operand2;\n case Operator.NAND:\n return !(operand1 && operand2);\n case Operator.NOR:\n return !(operand1 || operand2);\n case Operator.XOR:\n return XOR(operand1, operand2);\n case Operator.NOT:\n return !operand1;\n\n // comparison operators\n case Operator.EQUALS:\n return operand1 == operand2;\n case Operator.NOT_EQUALS:\n return operand1 != operand2;\n case Operator.LT:\n return operand1 < operand2;\n case Operator.LE:\n return operand1 <= operand2;\n case Operator.GE:\n return operand1 >= operand2;\n case Operator.GT:\n return operand1 > operand2;\n case Operator.IN:\n return operand2?.includes?.(operand1) ?? false;\n case Operator.NOT_IN:\n return !(operand2?.includes?.(operand1) ?? true);\n case Operator.INCLUDES:\n return isString(operand1) && isString(operand2) && operand1.indexOf(operand2) >= 0;\n case Operator.NOT_INCLUDES:\n return !(isString(operand1) && isString(operand2) && operand1.indexOf(operand2) >= 0);\n\n default:\n throw new Error(`Operator not implemented ${this.operator}`);\n }\n }\n\n /**\n * Recursively collects all fields used in this statement and its nested statements\n * @returns A set of all fields used in this statement\n */\n collectFields(): Set<IField> {\n const fields = new Set<IField>();\n\n function processOperand(op: OperandType) {\n if (op instanceof FieldBase) {\n fields.add(op);\n } else if (op instanceof Statement) {\n // For nested statements, merge their fields with our collection\n const nestedFields = op.collectFields();\n nestedFields.forEach((field) => fields.add(field));\n }\n }\n processOperand(this.operand1);\n processOperand(this.operand2);\n\n return fields;\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst ExecuteActionClassIdentifier = Symbol('ExecuteAction');\n\nexport class ExecuteAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, params: any) => any) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ExecuteActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, params: any): any {\n return super.execute(field, supr, params);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst ListItemAddedActionClassIdentifier = Symbol('ListItemAddedAction');\n\nexport class ListItemAddedAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, item: any, index: number) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ListItemAddedActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, item: any, index: number): void {\n return super.execute(field, supr, item, index);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport { FieldActionExecute, type IField } from '@/field.interface';\n\nconst ListItemRemovedActionClassIdentifier = Symbol('ListItemRemovedAction');\n\nexport class ListItemRemovedAction extends FieldActionBase {\n constructor(executorFn: (field: IField, supr: FieldActionExecute, item: any, index: number) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ListItemRemovedActionClassIdentifier;\n }\n\n execute(field: IField, supr: FieldActionExecute, item: any, index: number): void {\n return super.execute(field, supr, item, index);\n }\n}\n","import { reactive } from 'vue';\n\nimport { ValueChangedAction } from './actions';\nimport { FieldBase } from './field-base';\nimport { IField, IFieldConstructorParams } from './field.interface';\n\nconst fieldConstructorGuard = Symbol('FieldConstructorGuard');\n\nclass Field<T = any> extends FieldBase {\n protected _value: T = undefined!;\n\n protected _touched: boolean = false;\n\n constructor(guard?: symbol) {\n super();\n if (guard !== fieldConstructorGuard) {\n const cn = this.constructor.name;\n throw new TypeError(`Don't use constructor to instantiate ${cn}. Use ${cn}.create<T>`);\n }\n }\n\n protected init(params?: Partial<IFieldConstructorParams<T>>) {\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n this._value = paramValue ?? this.originalValue;\n if (this.originalValue === undefined) this.originalValue = this._value;\n }\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n /**\n * Creates a new reactive Field instance.\n * @param params Initial field parameters\n * @returns Reactive Field instance\n */\n static create<T = any>(\n this: new (guard?: symbol) => Field<T>,\n params?: Partial<IFieldConstructorParams<T>>,\n ): InstanceType<typeof this> {\n const res = reactive(new this(fieldConstructorGuard)) as any;\n res.init(params);\n return res;\n }\n\n get value() {\n return this._value;\n }\n\n set value(newValue: T) {\n const oldValue = this._value;\n if (!this.enabled || oldValue === newValue) return; // a disabled field does not allow changing value\n this._value = newValue;\n this.actions.trigger(ValueChangedAction, this, this._value, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return this._touched;\n }\n\n set touched(touched: boolean) {\n this._touched = touched;\n }\n\n clone(overrides?: Partial<IField<T>>): this {\n const res: this = (this.constructor as any).create({\n value: overrides?.value ?? this.value,\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n}\n\nexport { Field };\n\nexport type NullableField<T = any> = Field<T> | null;\n\nexport const EmptyField = Field.create({ value: 'EmptyField' }).registerAction(\n new ValueChangedAction(() => {\n console.warn('Working with EmptyField! This should not happen');\n }),\n);\n","import { ExecuteAction } from './actions';\nimport { Field } from './field';\nimport { IFieldConstructorParams } from './field.interface';\n\nexport interface ActionValue {\n label?: string;\n icon?: string;\n}\n\nfunction isValEmpty(val: ActionValue | undefined, defaultIfTrue: ActionValue): ActionValue {\n if (val?.label == null && val?.icon == null) return defaultIfTrue;\n return val;\n}\n\n// @ts-expect-error: prevent TS from complaining how create method is not ok because its declaration differs from Fld's\nexport class Action<T extends ActionValue = ActionValue> extends Field<T> {\n constructor(guard?: symbol) {\n super(guard);\n this._value = { label: undefined, icon: undefined } as T;\n }\n\n protected init(params?: Partial<IFieldConstructorParams<T>>) {\n // TODO: this init is most likely not needed any more. The only read diff from Field.init is the orgVal handling\n if (params) {\n const { value: paramValue, originalValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n const val = isValEmpty(paramValue, this._value);\n const orgVal = Object.freeze({ label: originalValue?.label, icon: originalValue?.icon } as ActionValue);\n this._value = isValEmpty(val, orgVal) as T;\n this.originalValue = isValEmpty(orgVal, val) as T;\n }\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n static create<T extends ActionValue = ActionValue>(params?: Partial<IFieldConstructorParams<T>>): Action<T> {\n return super.create<T>(params) as Action<T>;\n }\n\n get icon(): string | undefined {\n return this.value.icon;\n }\n\n set icon(newValue: string | undefined) {\n this.value.icon = newValue;\n }\n\n get label(): string | undefined {\n return this.value.label;\n }\n\n set label(newValue: string | undefined) {\n this.value.label = newValue;\n }\n\n execute(params: any) {\n this.actions.trigger(ExecuteAction, this, params);\n }\n}\n\nexport type NullableAction = Action | null;\n","<template>\n <render />\n</template>\n\n<script setup lang=\"ts\">\nimport { h, resolveComponent } from 'vue';\n\nimport { ClassTypes, ValidationError } from '../validators';\n\ninterface Props {\n message: string | ValidationError[];\n classes?: ClassTypes;\n}\n\nconst props = defineProps<Props>();\nconst md = resolveComponent('vue-markdown');\nconst htmlElements = new Set([\n 'div',\n 'span',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'section',\n 'article',\n 'aside',\n 'nav',\n 'header',\n 'footer',\n 'main',\n 'figure',\n 'figcaption',\n 'blockquote',\n 'pre',\n 'code',\n 'em',\n 'strong',\n 'small',\n 'mark',\n 'del',\n 'ins',\n 'sub',\n 'sup',\n 'i',\n 'b',\n 'u',\n 's',\n 'a',\n 'img',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'option',\n 'label',\n 'form',\n 'table',\n 'tr',\n 'td',\n 'th',\n 'thead',\n 'tbody',\n 'tfoot',\n 'ul',\n 'ol',\n 'li',\n 'dl',\n 'dt',\n 'dd',\n]);\n\nconst render = () => {\n if (typeof props.message === 'string') return h('span', { class: props.classes }, props.message);\n const res: ReturnType<typeof h>[] = [];\n props.message.forEach((msg) => {\n switch (msg.componentName) {\n case 'template':\n res.push(h('div', { class: [props.classes, msg.extraClasses] }, msg.componentBody));\n break;\n case 'vue-markdown':\n if (typeof md === 'string') {\n console.warn(\n \"You are using markdown for messages-widget, but you haven't registered a vue-markdown component\",\n );\n res.push(h('div', { class: [props.classes, msg.extraClasses] }, (<any>msg.componentBindings).source));\n } else {\n const componentBindings = <any>msg.componentBindings;\n res.push(\n h(md, {\n class: [props.classes, msg.extraClasses, 'df-messages-widget-markdown'],\n source: componentBindings.source,\n options: componentBindings.options,\n plugins: componentBindings.plugins,\n }),\n );\n }\n break;\n default:\n res.push(\n h(\n htmlElements.has(msg.componentName.toLowerCase()) // only resolve if it's not a common html element\n ? msg.componentName\n : resolveComponent(msg.componentName),\n {\n class: [props.classes, msg.extraClasses],\n ...msg.componentBindings,\n ...(msg.componentBody ? { innerHTML: msg.componentBody } : {}),\n },\n ),\n );\n break;\n }\n });\n return res;\n};\n</script>\n\n<style>\n/* we would like there to be no margins for markdown at the very top and very bottom. the rest of it is fine */\n.df-messages-widget-markdown > :first-child,\n.df-messages-widget-markdown > :last-child {\n margin-top: 0 !important;\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n line-height: 1.35em !important; /* inspired by vitepress' aggressive settings */\n}\n</style>\n","import { isEmpty, isEqual } from 'lodash-es';\nimport { computed } from 'vue';\n\nimport { ValueChangedAction } from './actions';\nimport { Field } from './field';\nimport { FieldBase } from './field-base';\nimport { IField, IFieldConstructorParams } from './field.interface';\n\nexport type GenericFieldsInterface = Record<string, IField>;\n// Utility tip za pretvorbo field strukture v value strukturo\ntype FieldsToValues<T extends GenericFieldsInterface> = {\n [K in keyof T]: T[K] extends IField<infer U> ? U : T[K] extends Group<infer G> ? FieldsToValues<G> : any;\n};\n\nexport class Group<T extends GenericFieldsInterface = GenericFieldsInterface> extends FieldBase {\n private readonly _fields: T;\n\n private _value: FieldsToValues<T> | null = null;\n\n public override readonly reactiveValue = computed<FieldsToValues<T> | null>(() => this.value);\n\n private suppressNotifyValueChanged: boolean = false;\n\n constructor(fields: T, params?: Partial<IFieldConstructorParams>) {\n super();\n\n if (!Group.isValidFields(fields)) throw new Error('Invalid fields object provided');\n this._fields = {} as T;\n Object.entries(fields).forEach(([name, field]) => this.addField(name, field));\n\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n this.value = paramValue ?? this.originalValue;\n }\n\n if (this.originalValue === undefined) this.originalValue = this.value;\n\n // if (Object.keys(this._fields).length) console.log('group created', this, Error().stack);\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n private addField(fieldName: string, field: IField) {\n // note: not sure if I should expose this (make it public).\n // breaks types, neglects events (originalValue, valueChanged), etc.\n if (this.fields[fieldName] !== undefined) {\n throw new Error(`Field ${fieldName} is already in this form`);\n }\n Object.defineProperty(field, 'parent', { get: () => this, configurable: false, enumerable: false });\n Object.defineProperty(field, 'fieldName', { get: () => fieldName, configurable: false, enumerable: false });\n Object.defineProperty(this._fields, fieldName, {\n get() {\n return field;\n },\n configurable: false,\n enumerable: true,\n });\n }\n\n private static isValidFields(flds: unknown): flds is Record<string, FieldBase> {\n function isFieldAll(field: unknown): field is FieldBase {\n return field instanceof FieldBase;\n }\n\n return typeof flds === 'object' && flds !== null && Object.entries(flds).every(([, field]) => isFieldAll(field));\n }\n\n static createFromFormData(data: Record<string, any> | null): Group {\n if (data instanceof FieldBase) {\n throw new Error('data is already a Form structure, should be a simple object');\n }\n return new Group(\n data == null\n ? {}\n : Object.fromEntries(Object.entries(data).map(([key, value]) => [key, Field.create({ value })])),\n );\n }\n\n field<K extends keyof T>(fieldName: K): T[K] | null {\n return this._fields[fieldName] ?? null;\n }\n\n get fields(): T {\n return this._fields;\n }\n\n get value(): FieldsToValues<T> | null {\n const val = {} as Record<string, any>;\n Object.entries(this._fields).forEach(([name, field]) => {\n const fieldValue = field.value;\n if (field.enabled) {\n // readOnly fields do not serialize\n val[name] = fieldValue;\n } else if (field instanceof Group && !isEmpty(fieldValue)) {\n // readOnly group only serializes if it is non-empty (some of its fields are not readOnly)\n val[name] = fieldValue;\n }\n });\n return isEmpty(val) ? null : (val as FieldsToValues<T>);\n }\n\n set value(newValue: FieldsToValues<T> | null) {\n this.suppressNotifyValueChanged = true;\n try {\n Object.entries(this._fields).forEach(([name, field]) => {\n if (newValue == null || name in newValue) {\n field.value = newValue == null ? null : newValue[name];\n }\n });\n } finally {\n this.suppressNotifyValueChanged = false;\n }\n this.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return Object.values(this._fields).some((field) => field.touched);\n }\n\n set touched(touched: boolean) {\n Object.values(this._fields).forEach((field) => {\n field.touched = touched;\n });\n }\n\n get fullValue(): Record<string, any> {\n const value: Record<string, any> = {};\n Object.entries(this._fields).forEach(([name, field]) => {\n value[name] = field.fullValue;\n });\n return value;\n }\n\n notifyValueChanged() {\n if (this.suppressNotifyValueChanged) return;\n const newValue = this.value;\n if (!isEqual(newValue, this._value)) {\n const oldValue = this._value;\n this._value = newValue;\n this.actions.trigger(ValueChangedAction, this, newValue, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n }\n\n get valid() {\n return super.valid && Object.values(this._fields).every((field) => field.valid);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) Object.values(this._fields).forEach((field) => field.validate(true));\n super.validate(revalidate);\n }\n\n clone(overrides?: Partial<IField>): Group<T> {\n const newFields = {} as T;\n Object.entries(this._fields).forEach(([name, field]) => {\n newFields[name as keyof T] = field.clone() as any;\n });\n const res = new Group(newFields, {\n value: overrides?.value ?? this.value,\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n}\n\nexport type NullableGroup = Group | null;\n","import { isEmpty, isEqual } from 'lodash-es';\n\nimport { ListItemAddedAction, ListItemRemovedAction, ValueChangedAction } from './actions';\nimport { FieldBase } from './field-base';\nimport { IField, IFieldConstructorParams } from './field.interface';\nimport { GenericFieldsInterface, Group } from './group';\n\nexport class List<T extends GenericFieldsInterface = GenericFieldsInterface> extends FieldBase {\n private _value: Group<T>[] | null = null;\n\n private _itemTemplate?: Group<T>;\n\n private _previousValue: Record<string, any>[] | null;\n\n constructor(itemTemplate?: Group<T>, params?: Partial<IFieldConstructorParams>) {\n super();\n\n this._itemTemplate = itemTemplate;\n\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n\n if (paramValue) this.setValueInternal(paramValue);\n }\n\n if (this.originalValue === undefined) this.originalValue = this.value;\n this._previousValue = this.value;\n // if (Object.keys(this._fields).length) console.log('formGroup created', this, Error().stack);\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n private processSetValueItem(item: any): Group<T> {\n let res: Group<T>;\n // If item is already a Group, use it\n if (item instanceof Group) res = item;\n // Otherwise create a Group from item\n else if (this._itemTemplate) res = this._itemTemplate.clone({ value: item });\n else res = Group.createFromFormData(item) as Group<T>;\n\n Object.defineProperty(res, 'parent', { get: () => this, configurable: false, enumerable: false });\n\n return res;\n }\n\n private setValueInternal(newValue: any[]) {\n if (Array.isArray(newValue)) {\n this._value = newValue.map((item: any) => this.processSetValueItem(item));\n }\n }\n\n get value(): Record<string, any>[] | null {\n const value = this._value?.map((item) => item.value);\n return isEmpty(value) ? null : <Record<string, any>[]>value;\n }\n\n set value(newValue: Record<string, any>[]) {\n const oldValue = this.value;\n this.setValueInternal(newValue);\n this.actions.trigger(ValueChangedAction, this, this.value, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return this._value?.some((item) => item.touched) || false;\n }\n\n set touched(touched: boolean) {\n this._value?.forEach((item) => {\n item.touched = touched;\n });\n }\n\n clone(overrides?: Partial<IField>): List<T> {\n const res = new List(this._itemTemplate?.clone(), {\n value: [...(overrides?.value ?? this.value)],\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n\n notifyValueChanged() {\n const newValue = this.value;\n if (!isEqual(newValue, this._previousValue)) {\n const oldValue = this._previousValue;\n this._previousValue = newValue;\n this.actions.trigger(ValueChangedAction, this, newValue, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n }\n\n get valid() {\n return super.valid && (this._value?.every((item) => item.valid) ?? true);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) this._value?.forEach((item) => item.validate(true));\n super.validate(revalidate);\n }\n\n get(index: number): Group<T> | undefined {\n return this._value != null ? this._value[index] : undefined;\n }\n\n push(item: any): number {\n return this.insert(item, this._value?.length ?? 0) + 1;\n }\n\n pop(): Group<T> | undefined {\n return this.remove((this._value?.length ?? 0) - 1);\n }\n\n remove(index: number): Group<T> | undefined {\n if (this._value == null || index < 0 || this._value.length <= index) return undefined;\n\n let removedItem = this._value.splice(index, 1)?.[0];\n\n if (removedItem) {\n // Remove parent reference\n removedItem = removedItem.clone();\n\n // Trigger events\n this.actions.trigger(ListItemRemovedAction, this, removedItem, index);\n this.notifyValueChanged();\n }\n\n return removedItem;\n }\n\n insert(item: any, index: number): number {\n if (this._value == null) this._value = [];\n while (this._value.length < index) {\n // if the index is too large for current array size, we add as many as necessary\n const itm = this.processSetValueItem(null);\n const idx = this._value.push(itm);\n this.actions.trigger(ListItemAddedAction, this, itm, idx);\n }\n const itm = this.processSetValueItem(item);\n this._value.splice(index, 0, itm);\n\n this.actions.trigger(ListItemAddedAction, this, itm, index);\n this.notifyValueChanged();\n\n return index;\n }\n\n clear() {\n this._value = null;\n this.notifyValueChanged();\n }\n}\n\nexport type NullableList = List | null;\n","// Global configuration for @dynamicforms/vue-forms\nexport interface FormsConfig {\n useMarkdownInValidators: boolean;\n}\n\n// Default configuration\nconst config: FormsConfig = { useMarkdownInValidators: true };\n\n// Function to access config\nexport function getConfig(): FormsConfig {\n return config;\n}\n\n// Function to update config\nexport function setConfig(newConfig: Partial<FormsConfig>): void {\n Object.assign(config, newConfig);\n}\n\n// Vue plugin installation\nexport default {\n install(app: any, options?: Partial<FormsConfig>) {\n if (options) {\n setConfig(options);\n }\n },\n};\n","import { getConfig } from '../config';\n\nimport { MdString } from './validation-error';\n\n/**\n * Depending on the useMarkdownInValidators setting, return either markdown or a plain string error message\n * @param mdErrorString markdown source to optionally be stripped\n * @return MdString or string\n */\n\nexport function buildErrorMessage(mdErrorString: string): string | MdString {\n const useMarkdownInValidators = getConfig().useMarkdownInValidators;\n if (useMarkdownInValidators) return new MdString(mdErrorString);\n\n return mdErrorString\n .replace(/[*_~`]/g, '') // remove basic markdown (italic, bold, strike, code)\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, '$1') // remove images, keep alt only\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1') // remove links, keep name only\n .replace(/#+\\s?/g, '') // Remove heading markers (#, ##, ###)\n .replace(/>\\s?/g, '') // remove quotes\n .replace(/(\\*|-|\\d+\\.)\\s+/g, '') // remove lists (bullet points and numbered lists)\n .replace(/`{3}[\\s\\S]*?`{3}/g, '') // remove code blocks\n .replace(/`([^`]+)`/g, '$1') // remove inline code markers\n .replace(/\\n{2,}/g, '\\n'); // removes excessive empty lines\n}\n","import { unref } from 'vue';\n\nimport { ValueChangedAction } from '../actions';\nimport { IField } from '../field.interface';\n\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class CompareTo<T = any> extends Validator {\n private unregistered = false;\n\n constructor(\n private otherField: IField,\n private isValidComparison: (myValue: T, otherValue: T) => boolean,\n message: RenderContentRef,\n ) {\n let listenerSet = false;\n let nVal: T;\n let oVal: T;\n\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n nVal = newValue;\n oVal = oldValue;\n if (!listenerSet) {\n listenerSet = true;\n this.otherField.registerAction(\n new ValueChangedAction((oField, supr, oNewValue, oOldValue) => {\n supr(oField, oNewValue, oOldValue);\n // somewhat hackish: we just need to execute this one validator, not anything before, not anything after...\n if (!this.unregistered) this.execute(field, () => null, nVal, oVal);\n }),\n );\n }\n if (!this.isValidComparison(unref(newValue), unref(this.otherField.value))) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(message, { newValue, oldValue, field, otherField: this.otherField }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n\n unregister() {\n this.unregistered = true;\n }\n}\n","import { truncate } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { IField } from '../field.interface';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class InAllowedValues<T = any> extends Validator {\n constructor(allowedValues: T[], message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Must be one of [**{allowedAsText}**]');\n let allowedAsText = allowedValues.join(', ');\n if (allowedAsText.length > 60) {\n allowedAsText = truncate(allowedAsText, {\n length: 40,\n separator: ', ',\n omission: `... (${allowedValues.length} items total)`,\n });\n }\n\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (!allowedValues.includes(unref(newValue))) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, allowedValues, allowedAsText }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { isArray, isObject, isString } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { IField } from '../field.interface';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nfunction toLength(a: any): number {\n if (a == null) return 0;\n if (isArray(a)) return a.length;\n if (isString(a)) return a.length;\n if (isObject(a) && Object.getPrototypeOf(a) === Object.prototype) return Object.keys(a).length;\n return String(a).length;\n}\n\nexport default class Required<T = any> extends Validator {\n constructor(message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Please enter a value');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (toLength(unref(newValue)) === 0) {\n return [new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field }))];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { IField } from '../field.interface';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport class MinValue<T = any> extends Validator {\n constructor(minValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be larger or equal to **{minValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (newValue < minValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, minValue })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class MaxValue<T = any> extends Validator {\n constructor(maxValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be less than or equal to **{maxValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (newValue > maxValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, maxValue })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class ValueInRange<T = any> extends Validator {\n constructor(minValue: T, maxValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be between **{minValue}** and **{maxValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (newValue < minValue || newValue > maxValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, minValue, maxValue }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { isArray, isObject, isString } from 'lodash-es';\n\nimport { IField } from '../field.interface';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nfunction toLength(a: any): number {\n if (a == null) return 0;\n if (isArray(a)) return a.length;\n if (isString(a)) return a.length;\n if (isObject(a) && Object.getPrototypeOf(a) === Object.prototype) return Object.keys(a).length;\n return String(a).length;\n}\n\nexport class MinLength<T = any> extends Validator {\n constructor(minLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be larger or equal to **{minLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (toLength(newValue) < minLength) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, minLength })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class MaxLength<T = any> extends Validator {\n constructor(maxLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be less than or equal to **{maxLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (toLength(newValue) > maxLength) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, maxLength })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class LengthInRange<T = any> extends Validator {\n constructor(minLength: number, maxLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be between **{minLength}** and **{maxLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n const len = toLength(newValue);\n if (len < minLength || len > maxLength) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, minLength, maxLength }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { unref } from 'vue';\n\nimport { IField } from '../field.interface';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class Pattern<T = any> extends Validator {\n constructor(pattern: RegExp, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must match pattern \"**{pattern}**\"');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: IField) => {\n if (!pattern.test(String(unref(newValue)))) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, pattern })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n"],"names":["DisplayMode","defaultDisplayMode","fromString","mode","fromAny","input","isDefined","check","DisplayMode$1","FieldActionBase","executorFn","__publicField","field","supr","params","AbortEventHandlingException","ValueChangedActionClassIdentifier","ValueChangedAction","newValue","oldValue","MdString","value","options","plugins","isSimpleComponentDef","msg","uMsg","unref","isCallableFunction","ValidationError","ValidationErrorText","text","classes","ValidationErrorRenderContent","computed","RenderableValue","ValidatorClassIdentifier","Validator","validationFn","errors","processErrors","err","e","i","error","idx","_a","isEqual","replace","ret","key","ActionsMap","action","actionType","existingExecute","ex","ActionClass","identifier","execute","newActions","ConditionalStatementActionClassIdentifier","ConditionalStatementAction","statement","actionExecutor","currentResult","fld","ConditionalVisibilityAction","ConditionalEnabledAction","ConditionalValueAction","trueValue","Operator","operator","op","isLogicOperator","Operator$1","EnabledChangingActionClassIdentifier","EnabledChangingAction","EnabledChangedActionClassIdentifier","EnabledChangedAction","ValidChangedActionClassIdentifier","ValidChangedAction","VisibilityChangingActionClassIdentifier","VisibilityChangingAction","VisibilityChangedActionClassIdentifier","VisibilityChangedAction","FieldBase","alteredValue","isBoolean","revalidate","oldValid","act","actionClass","XOR","value1","value2","Statement","operand1","operand2","_b","_d","_c","isString","fields","processOperand","ExecuteActionClassIdentifier","ExecuteAction","ListItemAddedActionClassIdentifier","ListItemAddedAction","item","index","ListItemRemovedActionClassIdentifier","ListItemRemovedAction","fieldConstructorGuard","Field","guard","cn","paramValue","validators","actions","otherParams","__objRest","a","res","reactive","touched","overrides","__spreadProps","__spreadValues","EmptyField","isValEmpty","val","defaultIfTrue","Action","originalValue","orgVal","props","__props","md","resolveComponent","htmlElements","render","h","componentBindings","_createBlock","Group","name","fieldName","flds","isFieldAll","data","fieldValue","isEmpty","newFields","List","itemTemplate","removedItem","itm","config","getConfig","setConfig","newConfig","config$1","app","buildErrorMessage","mdErrorString","CompareTo","otherField","isValidComparison","message","listenerSet","nVal","oVal","oField","oNewValue","oOldValue","InAllowedValues","allowedValues","allowedAsText","truncate","toLength","isArray","isObject","Required","MinValue","minValue","MaxValue","maxValue","ValueInRange","MinLength","minLength","MaxLength","maxLength","LengthInRange","len","Pattern","pattern"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dynamicforms-vue-forms.js","sources":["../src/display-mode.ts","../src/actions/field-action-base.ts","../src/field.interface.ts","../src/actions/value-changed-action.ts","../src/validators/validation-error.ts","../src/validators/validator.ts","../src/actions/actions-map.ts","../src/actions/conditional/conditional-statement-action.ts","../src/actions/conditional/operator.ts","../src/actions/enabled-actions.ts","../src/actions/valid-changed-action.ts","../src/actions/visibility-actions.ts","../src/field-base.ts","../src/actions/conditional/statement.ts","../src/actions/execute-action.ts","../src/actions/list-item-added-action.ts","../src/actions/list-item-removed-action.ts","../src/field.ts","../src/action.ts","../src/components/messages-widget.vue","../src/group.ts","../src/list.ts","../src/config.ts","../src/validators/error-message-builder.ts","../src/validators/validator-compare-to.ts","../src/validators/validator-in-allowed-values.ts","../src/validators/validator-required.ts","../src/validators/validator-min-max-range.ts","../src/validators/validator-min-max-range-length.ts","../src/validators/validator-pattern.ts"],"sourcesContent":["/**\n * DisplayMode enum provides an enumeration for supported ways of rendering a particular object in the DOM\n */\nenum DisplayMode {\n // This enum is actually declared in dynamicforms.mixins.field_render.py\n SUPPRESS = 1, // Field will be entirely suppressed. it will not render (not even to JSON) and will not parse for PUT\n HIDDEN = 5, // Field will render as <input type=\"hidden\"> or <tr data-field_name>\n INVISIBLE = 8, // Field will render completely, but with display: none. Equal to setting its style = {display: none}\n FULL = 10, // Field will render completely\n}\n\nexport const defaultDisplayMode = DisplayMode.FULL;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace DisplayMode {\n export function fromString(mode: string): DisplayMode {\n if (mode.toUpperCase() === 'SUPPRESS') return DisplayMode.SUPPRESS;\n if (mode.toUpperCase() === 'HIDDEN') return DisplayMode.HIDDEN;\n if (mode.toUpperCase() === 'INVISIBLE') return DisplayMode.INVISIBLE;\n return defaultDisplayMode;\n }\n\n export function fromAny(mode: any): DisplayMode {\n const input = typeof mode === 'number' ? mode : DisplayMode.fromString(mode as string);\n if (Object.values(DisplayMode).includes(input)) return input;\n return defaultDisplayMode;\n }\n\n export function isDefined(mode: number | string): boolean {\n const check = typeof mode === 'number' ? mode : DisplayMode.fromString(mode as string);\n return Object.values(DisplayMode).includes(check);\n }\n}\n\nObject.freeze(DisplayMode);\n\nexport default DisplayMode;\n","import type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\ntype ActionExecutor = (field: FieldBase, supr: FieldActionExecute, ...params: any[]) => any;\n\nexport default abstract class FieldActionBase {\n public static get classIdentifier(): symbol {\n throw new Error('classIdentifier must be declared');\n }\n\n public get classIdentifier(): symbol {\n return (<any>this.constructor).classIdentifier;\n }\n\n private readonly executorFn: ActionExecutor;\n\n constructor(executorFn: ActionExecutor) {\n this.executorFn = executorFn;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, ...params: any[]): any {\n return this.executorFn(field, supr, ...params);\n }\n\n get eager() {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n boundToField(field: FieldBase) {}\n\n unregister() {}\n}\n","import type FieldActionBase from './actions/field-action-base';\nimport type DisplayMode from './display-mode';\nimport type { FieldBase } from './field-base';\nimport { type ValidationError } from './validators/validation-error';\n\nexport interface IFieldConstructorActionsList {\n actions?: FieldActionBase[];\n validators?: FieldActionBase[];\n}\n\n/**\n * Parameters accepted by field constructors and by clone overrides.\n *\n * Only writable members are listed. valid, validating, fullValue and isChanged are getter-only, so assigning\n * them throws a TypeError. parent and fieldName are set by the container: until a Group or List installs them\n * as non-configurable accessors, assigning them is silently accepted, which is why the type rejects them.\n */\nexport type IFieldConstructorParams<T = any> = {\n value: T;\n originalValue: T;\n enabled: boolean;\n visibility: DisplayMode;\n touched: boolean;\n errors: ValidationError[];\n} & IFieldConstructorActionsList;\n\nexport class AbortEventHandlingException extends Error {}\n\nexport type FieldActionExecute<T = any> = (field: FieldBase<T>, ...params: any[]) => any;\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nexport const ValueChangedActionClassIdentifier = Symbol('ValueChangedAction');\n\nexport class ValueChangedAction<T = any> extends FieldActionBase {\n constructor(executorFn: (field: FieldBase<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ValueChangedActionClassIdentifier;\n }\n\n execute(field: FieldBase<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import { computed, ComputedRef, Ref, unref } from 'vue';\n\n/**\n * Marks content for markdown rendering\n */\nexport class MdString extends String {\n plugins?: any[];\n options?: any;\n\n constructor(value: string, options?: any, plugins?: any[]) {\n super(value);\n this.plugins = plugins;\n this.options = options;\n }\n}\n\n/**\n * Interface for custom component content definition\n */\nexport interface SimpleComponentDef {\n componentName: string;\n componentProps?: Record<any, any>;\n componentVHtml?: string;\n}\n\nexport type ClassType = string | string[] | Record<string, boolean>;\nexport type ClassTypes = ClassType | ClassType[];\n\nexport type RenderContentNonCallable = string | MdString | SimpleComponentDef;\nexport type RenderContentCallable = () => RenderContentNonCallable;\n/**\n * Type for different renderable content formats: plain string, markdown, or custom component\n */\nexport type RenderContent = RenderContentNonCallable | RenderContentCallable;\n/**\n * Type for different renderable content formats (supporting references): plain string, markdown, or custom component\n */\nexport type RenderContentRef = RenderContent | Ref<RenderContent>;\n\n/**\n * Type guard to check if content is a custom component definition\n * @param msg - Content to check\n * @returns True if content is a custom component definition\n */\nexport function isSimpleComponentDef(msg?: RenderContentRef): msg is SimpleComponentDef {\n const uMsg = unref(msg);\n return typeof uMsg === 'object' && 'componentName' in uMsg;\n}\n\nexport function isCallableFunction(msg?: RenderContentRef): msg is RenderContentCallable {\n return typeof unref(msg) === 'function';\n}\n\n/**\n * Base validation error class with component rendering capabilities\n */\n\nexport class ValidationError {\n get componentName() {\n return 'Comment';\n }\n\n get componentBindings() {\n return {};\n }\n\n get componentBody() {\n return '';\n }\n\n get extraClasses(): ClassTypes {\n return '';\n }\n}\n\n/**\n * Simple text-only ValidationError\n */\nexport class ValidationErrorText extends ValidationError {\n constructor(\n public text: string,\n public classes: ClassTypes = '',\n ) {\n super();\n }\n\n get componentName() {\n return 'template';\n }\n\n get componentBody() {\n return this.text;\n }\n\n get extraClasses() {\n return this.classes;\n }\n}\n\n/**\n * Validation error that supports multiple content types (plain text, markdown, component)\n */\nexport class ValidationErrorRenderContent extends ValidationError {\n private text: RenderContent | Ref<RenderContent>;\n\n private textType: ComputedRef<'string' | 'md' | 'component'>;\n\n constructor(\n text: RenderContentRef,\n public classes: ClassTypes = '',\n ) {\n super();\n this.text = text;\n this.textType = computed(() => this.getTextType);\n }\n\n get resolvedText() {\n const text = unref(this.text);\n return isCallableFunction(text) ? text() : text;\n }\n\n get getTextType() {\n const msg = this.resolvedText;\n\n if (!msg) return 'string';\n if (msg instanceof MdString) return 'md';\n if (isSimpleComponentDef(msg)) return 'component';\n return 'string';\n }\n\n get componentName() {\n switch (unref(this.textType)) {\n case 'string':\n return 'template';\n case 'md':\n return 'vue-markdown';\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentName;\n default:\n return 'template';\n }\n }\n\n get componentBindings() {\n switch (unref(this.textType)) {\n case 'string':\n return {};\n case 'md': {\n const text = this.resolvedText as MdString;\n return { source: text.toString(), options: text.options, plugins: text.plugins };\n }\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentProps || {};\n default:\n return {};\n }\n }\n\n get componentBody() {\n switch (unref(this.textType)) {\n case 'string':\n return this.resolvedText as string;\n case 'component':\n return (this.resolvedText as SimpleComponentDef).componentVHtml || '';\n default:\n return '';\n }\n }\n\n get extraClasses() {\n return this.classes;\n }\n}\n\n/**\n * A value, renderable three different ways (plain text, markdown, component) - alias for ValidationErrorRenderContent\n */\nexport class RenderableValue extends ValidationErrorRenderContent {}\n\n/** ********************************************************************************************************************\n *\n at some point there will be classes here that will support links or action buttons or something even more complex\n *\n ******************************************************************************************************************** */\n","import { isEqual } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { ValueChangedAction } from '../actions/value-changed-action';\nimport { type FieldBase } from '../field-base';\nimport { FieldActionExecute } from '../field.interface';\n\nimport {\n isCallableFunction,\n isSimpleComponentDef,\n MdString,\n RenderContentRef,\n ValidationError,\n} from './validation-error';\n\nexport type ValidationFunctionResult = ValidationError[] | null;\nexport type ValidationFunction<T = any> = (\n newValue: T,\n oldValue: T,\n field: FieldBase<T>,\n) => ValidationFunctionResult | Promise<ValidationFunctionResult>;\n\ninterface SourceProp {\n source: symbol;\n}\n\nconst ValidatorClassIdentifier = Symbol('Validator');\n\n/**\n * Validator is a specialized action that performs validation when a field's value changes.\n * It automatically adds/removes validation errors from the field's errors array.\n */\nexport class Validator<T = any> extends ValueChangedAction {\n private readonly source: symbol;\n\n /**\n * Creates a new validator\n * @param validationFn Function that validates the field value and returns errors or null\n */\n constructor(validationFn: ValidationFunction<T>) {\n const executor = (field: FieldBase<T>, supr: FieldActionExecute<T>, newValue: T, oldValue: T) => {\n const errors = validationFn(newValue, oldValue, field) || [];\n\n const processErrors = (err: ValidationFunctionResult) => {\n err?.forEach((e) =>\n Object.defineProperty(e, 'source', { value: this.source, enumerable: false, configurable: false }),\n );\n for (let i = field.errors.length - 1; i >= 0; i--) {\n const error = field.errors[i] as ValidationError & SourceProp;\n if (error.source === this.source) {\n const idx = err?.findIndex((e) => isEqual(e, error)) ?? -1;\n if (idx >= 0) err?.splice(idx, 1);\n else field.errors.splice(i, 1);\n }\n }\n\n if (err && err.length > 0) field.errors.push(...err);\n field.validate(); // Update the field's valid state\n };\n\n if (errors instanceof Promise) {\n field.beginValidating();\n errors.then((err) => processErrors(err)).finally(() => field.endValidating());\n } else processErrors(errors);\n return supr(field, newValue, oldValue); // Continue the action chain\n };\n\n super(executor);\n\n // Create a unique symbol for this validator instance\n this.source = Symbol(this.constructor.name);\n }\n\n static get classIdentifier() {\n return ValidatorClassIdentifier;\n }\n\n get eager() {\n return true;\n }\n\n protected replacePlaceholdersFunction(text: RenderContentRef, replace: Record<string, any>): RenderContentRef {\n return () => {\n let ret = unref(text);\n while (isCallableFunction(ret)) {\n ret = unref(this.replacePlaceholders(ret(), replace));\n }\n return ret;\n };\n }\n\n protected replacePlaceholders(text: RenderContentRef, replace: Record<string, any>): RenderContentRef {\n if (isCallableFunction(text)) return this.replacePlaceholdersFunction(text, replace);\n\n if (isSimpleComponentDef(text)) return text;\n let ret = unref(text) as string | MdString;\n Object.keys(replace).forEach((key) => {\n ret = ret.replaceAll(`{${key}}`, replace[key]);\n });\n return text instanceof MdString ? new MdString(ret.toString(), text.options, text.plugins) : ret;\n }\n}\n","import { type FieldBase } from '../field-base';\nimport { type FieldActionExecute, AbortEventHandlingException } from '../field.interface';\nimport { Validator } from '../validators/validator';\n\nimport FieldActionBase from './field-action-base';\nimport { ValueChangedActionClassIdentifier } from './value-changed-action';\n\nexport default class ActionsMap extends Map<symbol, FieldActionExecute> {\n private readonly eagerActions = new Set<symbol>();\n\n private readonly registeredActions: FieldActionBase[] = [];\n\n register(action: FieldActionBase) {\n if (!(action instanceof FieldActionBase)) throw new Error('Invalid action type');\n this.registeredActions.push(action);\n\n const actionType = action.classIdentifier;\n const existingExecute = this.get(actionType) || (() => null);\n\n function ex(field: FieldBase, ...params: any[]) {\n return action.execute(field, existingExecute, ...params);\n }\n this.set(actionType, ex);\n if (action.eager) this.eagerActions.add(action.classIdentifier);\n }\n\n trigger<T extends FieldActionBase>(\n ActionClass: (abstract new (...args: any[]) => T) & { classIdentifier: symbol },\n field: FieldBase,\n ...params: any[]\n ): any {\n const identifier = ActionClass.classIdentifier;\n if (identifier === ValueChangedActionClassIdentifier) this.triggerEager(field, ...params);\n const execute = this.get(identifier);\n try {\n if (execute) return execute(field, ...params);\n } catch (error) {\n if (!(error instanceof AbortEventHandlingException)) throw error;\n }\n return null;\n }\n\n triggerEager(field: FieldBase, ...params: any[]): any {\n for (const identifier of this.eagerActions) {\n const execute = this.get(identifier);\n try {\n if (execute) execute(field, ...params);\n } catch (error) {\n if (!(error instanceof AbortEventHandlingException)) throw error;\n }\n }\n }\n\n clone(): ActionsMap {\n const newActions = new ActionsMap();\n this.registeredActions.forEach((action) => newActions.register(action));\n return newActions;\n }\n\n cloneWithoutValidators(): ActionsMap {\n const newActions = new ActionsMap();\n this.registeredActions.forEach((action) => {\n if (action instanceof Validator) action.unregister();\n else newActions.register(action);\n });\n return newActions;\n }\n}\n","import DisplayMode from '../../display-mode';\nimport { type FieldBase } from '../../field-base';\nimport { FieldActionExecute } from '../../field.interface';\nimport { ValueChangedAction } from '../value-changed-action';\n\nimport { Statement } from './statement';\n\nconst ConditionalStatementActionClassIdentifier = Symbol('ConditionalStatementAction');\n\ntype ConditionalExecutorFn = (field: FieldBase, currentResult: boolean, previousResult: boolean | undefined) => void;\n\nexport class ConditionalStatementAction extends ValueChangedAction {\n private lastResult: boolean | undefined = undefined;\n\n // boundField tracks the fields this action is bound to. so that it may perform the executorFn on them and not on the\n // ValueChangedAction fields that will call the actionExecutor\n private readonly boundFields: Set<FieldBase> = new Set<FieldBase>();\n\n constructor(statement: Statement, executorFn: ConditionalExecutorFn) {\n // Create ValueChangedAction executor that will evaluate statement and track changes\n const actionExecutor = (field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => {\n const currentResult = statement.evaluate();\n\n if (currentResult !== this.lastResult) {\n for (const fld of this.boundFields) {\n executorFn(fld, currentResult, this.lastResult);\n }\n this.lastResult = currentResult;\n }\n\n // Continue action chain\n return supr(field, newValue, oldValue);\n };\n\n super(actionExecutor);\n statement.collectFields().forEach((field) => field.registerAction(new ValueChangedAction(actionExecutor)));\n }\n\n static get classIdentifier() {\n return ConditionalStatementActionClassIdentifier;\n }\n\n get eager() {\n return true;\n }\n\n boundToField(field: FieldBase) {\n this.boundFields.add(field);\n }\n}\n\n// Derived classes for visibility, enabled, and value changes\n\nexport class ConditionalVisibilityAction extends ConditionalStatementAction {\n constructor(statement: Statement) {\n super(statement, (field: FieldBase, currentResult) => {\n field.visibility = currentResult ? DisplayMode.FULL : DisplayMode.SUPPRESS;\n });\n }\n}\n\nexport class ConditionalEnabledAction extends ConditionalStatementAction {\n constructor(statement: Statement) {\n super(statement, (field, currentResult) => {\n field.enabled = currentResult;\n });\n }\n}\n\nexport class ConditionalValueAction<T> extends ConditionalStatementAction {\n constructor(statement: Statement, trueValue: T) {\n super(statement, (field, currentResult) => {\n if (currentResult) field.value = trueValue;\n });\n }\n}\n","/**\n * Operators provides us a functionality for backend to send us complex condition upon which we send\n * dynamic visibility prop for form input fields\n */\nenum Operator {\n // Logic Operators\n NOT = 0,\n OR = 1,\n AND = 2,\n XOR = 3,\n NAND = 4,\n NOR = 5,\n\n // Comparators (comparison operators)\n EQUALS = -1,\n NOT_EQUALS = -2,\n GT = -3,\n LT = -4,\n GE = -5,\n LE = -6,\n IN = -7,\n NOT_IN = -8,\n INCLUDES = -9,\n NOT_INCLUDES = -10,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace, no-redeclare\nnamespace Operator {\n export function fromString(operator: string): Operator {\n const op = operator.toLowerCase();\n if (op === 'not') return Operator.NOT;\n if (op === 'or') return Operator.OR;\n if (op === 'and') return Operator.AND;\n if (op === 'xor') return Operator.XOR;\n if (op === 'nand') return Operator.NAND;\n if (op === 'nor') return Operator.NOR;\n\n if (op === 'equals') return Operator.EQUALS;\n if (['not_equals', 'not-equals', 'not equals'].includes(op)) return Operator.NOT_EQUALS;\n if (op === 'gt') return Operator.GT;\n if (op === 'lt') return Operator.LT;\n if (op === 'ge') return Operator.GE;\n if (op === 'le') return Operator.LE;\n if (op === 'in') return Operator.IN;\n if (['not_in', 'not-in', 'not in'].includes(op)) return Operator.NOT_IN;\n if (op === 'includes') return Operator.INCLUDES;\n if (['not_includes', 'not-includes', 'not includes'].includes(op)) return Operator.NOT_INCLUDES;\n throw new Error(`Unrecognised operator ${op}`);\n }\n\n export function fromAny(mode: any): Operator {\n const input = typeof mode === 'number' ? mode : Operator.fromString(mode as string);\n if (Object.values(Operator).includes(input)) return input;\n throw new Error(`Unrecognised operator ${mode}`);\n }\n\n export function isDefined(operator: number | string): boolean {\n const check = typeof operator === 'number' ? operator : Operator.fromString(operator as string);\n return Object.values(Operator).includes(check);\n }\n\n // c8 bug: it doesn't matter what there is in the next line (e.g. console.log()).\n // it will always be a branch with one branch not covered\n export function isLogicOperator(operator: Operator): boolean {\n return operator >= 0;\n }\n}\n\nObject.freeze(Operator);\n\nexport default Operator;\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst EnabledChangingActionClassIdentifier = Symbol('EnabledChangingAction');\n\nexport class EnabledChangingAction extends FieldActionBase {\n constructor(\n executorFn: (field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => boolean,\n ) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return EnabledChangingActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): boolean {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n\nconst EnabledChangedActionClassIdentifier = Symbol('EnabledChangedAction');\n\nexport class EnabledChangedAction extends FieldActionBase {\n constructor(executorFn: (field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return EnabledChangedActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst ValidChangedActionClassIdentifier = Symbol('ValidChangedAction');\n\nexport class ValidChangedAction extends FieldActionBase {\n constructor(executorFn: (field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ValidChangedActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, newValue: boolean, oldValue: boolean): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport DisplayMode from '@/display-mode';\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst VisibilityChangingActionClassIdentifier = Symbol('VisibilityChangingAction');\n\nexport class VisibilityChangingAction extends FieldActionBase {\n constructor(\n executorFn: (\n field: FieldBase,\n supr: FieldActionExecute,\n newValue: DisplayMode,\n oldValue: DisplayMode,\n ) => DisplayMode,\n ) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return VisibilityChangingActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode): DisplayMode {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n\nconst VisibilityChangedActionClassIdentifier = Symbol('VisibilityChangedAction');\n\nexport class VisibilityChangedAction extends FieldActionBase {\n constructor(\n executorFn: (field: FieldBase, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode) => void,\n ) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return VisibilityChangedActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, newValue: DisplayMode, oldValue: DisplayMode): void {\n return super.execute(field, supr, newValue, oldValue);\n }\n}\n","import { isBoolean, isEqual } from 'lodash-es';\nimport { reactive } from 'vue';\n\nimport ActionsMap from './actions/actions-map';\nimport { EnabledChangedAction, EnabledChangingAction } from './actions/enabled-actions';\nimport FieldActionBase from './actions/field-action-base';\nimport { ValidChangedAction } from './actions/valid-changed-action';\nimport { VisibilityChangedAction, VisibilityChangingAction } from './actions/visibility-actions';\nimport DisplayMode from './display-mode';\nimport { IFieldConstructorParams } from './field.interface';\nimport { type Group } from './group';\nimport { ValidationError } from './validators/validation-error';\n\nexport abstract class FieldBase<T = any> {\n /**\n * A field is a Vue reactive proxy from construction onwards: the base constructor returns the proxy, and a\n * derived class's `this` is whatever super() returned, so every subclass constructor, field initializer and\n * method sees the proxy. Consequence: plain `field.property = value` is tracked, with no wrapper in between.\n */\n constructor() {\n return reactive(this) as this;\n }\n\n abstract get value(): T;\n abstract set value(newValue: T);\n\n abstract get touched(): boolean;\n abstract set touched(touched: boolean);\n\n abstract clone(overrides?: Partial<IFieldConstructorParams<T>>): FieldBase<T>;\n\n declare originalValue: T; // contains original field value as was provided at creation\n\n private validatingCount = 0;\n\n /** true while at least one asynchronous validator is still running for this field */\n get validating(): boolean {\n return this.validatingCount > 0;\n }\n\n /** announces the start of one asynchronous validation run; validators pair it with endValidating */\n beginValidating(): void {\n this.validatingCount++;\n }\n\n /** announces the end of one asynchronous validation run */\n endValidating(): void {\n this.validatingCount = Math.max(0, this.validatingCount - 1);\n }\n\n protected _valid: boolean = true; // is current value valid as per FE and BE validators?\n\n errors: ValidationError[] = []; // list of errors\n\n declare parent?: Group; // when member of a Group, parent will specify that group\n\n declare fieldName?: string; // when member of a Group, fieldName specifies the name of this field\n\n protected actions: ActionsMap = new ActionsMap();\n\n // default property handlers\n private _visibility: DisplayMode = DisplayMode.FULL;\n\n get visibility(): DisplayMode {\n return this._visibility;\n }\n\n set visibility(newValue: DisplayMode) {\n const oldValue = this._visibility;\n const alteredValue = this.actions.trigger(VisibilityChangingAction, this, newValue, oldValue);\n if (!DisplayMode.isDefined(alteredValue ?? newValue)) throw new Error('visibility must be a DisplayMode constant');\n this._visibility = DisplayMode.fromAny(alteredValue ?? newValue);\n this.actions.trigger(VisibilityChangedAction, this, this._visibility, oldValue);\n }\n\n private _enabled: boolean = true;\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n set enabled(newValue: boolean) {\n const oldValue = this._enabled;\n const alteredValue = this.actions.trigger(EnabledChangingAction, this, newValue, oldValue);\n if (!isBoolean(alteredValue ?? newValue)) throw new Error('Enabled value must be boolean');\n this._enabled = alteredValue ?? newValue;\n this.actions.trigger(EnabledChangedAction, this, this._enabled, oldValue);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) this.actions.triggerEager(this, this.value, this.value);\n const oldValid = this._valid;\n this._valid = this.valid;\n if (this._valid !== oldValid) this.actions.trigger(ValidChangedAction, this, this.valid, oldValid);\n }\n\n get valid() {\n return this.errors.length === 0;\n }\n\n get fullValue(): any {\n return this.value;\n }\n\n get isChanged(): boolean {\n return !isEqual(this.value, this.originalValue);\n }\n\n registerAction(action: FieldActionBase): this {\n this.actions.register(action);\n action.boundToField(this);\n if (action.eager) {\n // When adding eager actions, execute them immediately\n this.actions.trigger(Object.getPrototypeOf(action).constructor, this, this.value, this.originalValue);\n }\n return this;\n }\n\n triggerAction<T2 extends FieldActionBase>(\n actionClass: (abstract new (...args: any[]) => T2) & { classIdentifier: symbol },\n ...params: any[]\n ): any {\n return this.actions.trigger(actionClass, this, ...params);\n }\n\n clearValidators(): void {\n this.actions = this.actions.cloneWithoutValidators();\n this.errors = [];\n this._valid = true;\n }\n}\n","import { isString } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport { FieldBase } from '../../field-base';\n\nimport Operator from './operator';\n\n// An operand is a nested Statement, a field whose current value is compared, or a literal of any type. The\n// union with `any` collapses to `any` for the type checker, so the alias documents intent rather than\n// constraining callers.\nexport type OperandType = any | Statement | FieldBase;\n\nfunction XOR(value1: boolean, value2: boolean): boolean {\n return value1 ? !value2 : value2;\n}\n\nexport class Statement {\n private readonly operand1: OperandType;\n\n private readonly operator: Operator;\n\n private readonly operand2: OperandType;\n\n constructor(operand1: OperandType, operator: Operator, operand2: OperandType) {\n this.operand1 = operand1;\n this.operator = operator;\n this.operand2 = operand2;\n }\n\n get operand1Value() {\n if (this.operand1 instanceof Statement) return this.operand1.evaluate();\n if (this.operand1 instanceof FieldBase) return unref(this.operand1.value);\n return this.operand1; // any\n }\n\n get operand2Value() {\n if (this.operand2 instanceof Statement) return this.operand2.evaluate();\n if (this.operand2 instanceof FieldBase) return unref(this.operand2.value);\n return this.operand2; // any\n }\n\n evaluate(): boolean {\n const operand1 = this.operand1Value;\n const operand2 = this.operand2Value;\n\n switch (this.operator) {\n // logical operators\n case Operator.AND:\n return operand1 && operand2;\n case Operator.OR:\n return operand1 || operand2;\n case Operator.NAND:\n return !(operand1 && operand2);\n case Operator.NOR:\n return !(operand1 || operand2);\n case Operator.XOR:\n return XOR(operand1, operand2);\n case Operator.NOT:\n return !operand1;\n\n // comparison operators\n case Operator.EQUALS:\n return operand1 == operand2;\n case Operator.NOT_EQUALS:\n return operand1 != operand2;\n case Operator.LT:\n return operand1 < operand2;\n case Operator.LE:\n return operand1 <= operand2;\n case Operator.GE:\n return operand1 >= operand2;\n case Operator.GT:\n return operand1 > operand2;\n case Operator.IN:\n return operand2?.includes?.(operand1) ?? false;\n case Operator.NOT_IN:\n return !(operand2?.includes?.(operand1) ?? true);\n case Operator.INCLUDES:\n return isString(operand1) && isString(operand2) && operand1.indexOf(operand2) >= 0;\n case Operator.NOT_INCLUDES:\n return !(isString(operand1) && isString(operand2) && operand1.indexOf(operand2) >= 0);\n\n default:\n throw new Error(`Operator not implemented ${this.operator}`);\n }\n }\n\n /**\n * Recursively collects all fields used in this statement and its nested statements\n * @returns A set of all fields used in this statement\n */\n collectFields(): Set<FieldBase> {\n const fields = new Set<FieldBase>();\n\n function processOperand(op: OperandType) {\n if (op instanceof FieldBase) {\n fields.add(op);\n } else if (op instanceof Statement) {\n // For nested statements, merge their fields with our collection\n const nestedFields = op.collectFields();\n nestedFields.forEach((field) => fields.add(field));\n }\n }\n processOperand(this.operand1);\n processOperand(this.operand2);\n\n return fields;\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst ExecuteActionClassIdentifier = Symbol('ExecuteAction');\n\nexport class ExecuteAction extends FieldActionBase {\n constructor(executorFn: (field: FieldBase, supr: FieldActionExecute, params: any) => any) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ExecuteActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, params: any): any {\n return super.execute(field, supr, params);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst ListItemAddedActionClassIdentifier = Symbol('ListItemAddedAction');\n\nexport class ListItemAddedAction extends FieldActionBase {\n constructor(executorFn: (field: FieldBase, supr: FieldActionExecute, item: any, index: number) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ListItemAddedActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, item: any, index: number): void {\n return super.execute(field, supr, item, index);\n }\n}\n","import FieldActionBase from './field-action-base';\n\nimport type { FieldBase } from '@/field-base';\nimport { FieldActionExecute } from '@/field.interface';\n\nconst ListItemRemovedActionClassIdentifier = Symbol('ListItemRemovedAction');\n\nexport class ListItemRemovedAction extends FieldActionBase {\n constructor(executorFn: (field: FieldBase, supr: FieldActionExecute, item: any, index: number) => void) {\n super(executorFn);\n }\n\n static get classIdentifier() {\n return ListItemRemovedActionClassIdentifier;\n }\n\n execute(field: FieldBase, supr: FieldActionExecute, item: any, index: number): void {\n return super.execute(field, supr, item, index);\n }\n}\n","import { ValueChangedAction } from './actions';\nimport { FieldBase } from './field-base';\nimport { IFieldConstructorParams } from './field.interface';\n\nclass Field<T = any> extends FieldBase<T> {\n protected _value: T = undefined!;\n\n protected _touched: boolean = false;\n\n constructor(params?: Partial<IFieldConstructorParams<T>>) {\n super();\n this.init(params);\n }\n\n /**\n * Applies the constructor parameters. It is a hook so that a subclass needing different parameter handling\n * overrides one method instead of redeclaring the constructor - Action does exactly that.\n *\n * It is called from this constructor, so it runs before a subclass's own class field initializers, which\n * only run once super() returns. An override must therefore work off its parameters alone: members the\n * subclass initializes read as undefined inside it, and anything it writes to such a member is overwritten\n * the moment the initializer runs.\n */\n protected init(params?: Partial<IFieldConstructorParams<T>>) {\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n this._value = paramValue ?? this.originalValue;\n if (this.originalValue === undefined) this.originalValue = this._value;\n }\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n get value() {\n return this._value;\n }\n\n set value(newValue: T) {\n const oldValue = this._value;\n if (!this.enabled || oldValue === newValue) return; // a disabled field does not allow changing value\n this._value = newValue;\n this.actions.trigger(ValueChangedAction, this, this._value, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return this._touched;\n }\n\n set touched(touched: boolean) {\n this._touched = touched;\n }\n\n clone(overrides?: Partial<IFieldConstructorParams<T>>): this {\n // construction goes through this.constructor so that a subclass clones into its own type\n const Ctor = this.constructor as new (params?: Partial<IFieldConstructorParams<T>>) => this;\n const res = new Ctor({\n value: overrides?.value ?? this.value,\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n}\n\nexport { Field };\n\nexport type NullableField<T = any> = Field<T> | null;\n\nexport const EmptyField = new Field({ value: 'EmptyField' }).registerAction(\n new ValueChangedAction(() => {\n console.warn('Working with EmptyField! This should not happen');\n }),\n);\n","import { ExecuteAction } from './actions';\nimport { Field } from './field';\nimport { IFieldConstructorParams } from './field.interface';\n\nexport interface ActionValue {\n label?: string;\n icon?: string;\n}\n\nfunction isValEmpty(val: ActionValue | undefined, defaultIfTrue: ActionValue): ActionValue {\n if (val?.label == null && val?.icon == null) return defaultIfTrue;\n return val;\n}\n\nexport class Action<T extends ActionValue = ActionValue> extends Field<T> {\n protected init(params?: Partial<IFieldConstructorParams<T>>) {\n // an Action's value is always a shaped object, so the empty value is the pair of undefined members and not\n // undefined itself - both this hook and isValEmpty below rely on that\n this._value = { label: undefined, icon: undefined } as T;\n if (params) {\n const { value: paramValue, originalValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n const val = isValEmpty(paramValue, this._value);\n const orgVal = Object.freeze({ label: originalValue?.label, icon: originalValue?.icon } as ActionValue);\n // the fallback is a copy of the baseline, never the frozen baseline itself: label and icon stay\n // assignable on an action constructed without a value. A value that was given is kept by identity,\n // so a reactive object passed in stays linked to the action.\n this._value = isValEmpty(val, { ...orgVal }) as T;\n this.originalValue = isValEmpty(orgVal, val) as T;\n }\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n get icon(): string | undefined {\n return this.value.icon;\n }\n\n set icon(newValue: string | undefined) {\n this.value.icon = newValue;\n }\n\n get label(): string | undefined {\n return this.value.label;\n }\n\n set label(newValue: string | undefined) {\n this.value.label = newValue;\n }\n\n execute(params: any) {\n this.actions.trigger(ExecuteAction, this, params);\n }\n}\n\nexport type NullableAction = Action | null;\n","<template>\n <render />\n</template>\n\n<script setup lang=\"ts\">\nimport { h, resolveComponent } from 'vue';\n\nimport { ClassTypes, ValidationError } from '../validators';\n\ninterface Props {\n message: string | ValidationError[];\n classes?: ClassTypes;\n}\n\nconst props = defineProps<Props>();\nconst md = resolveComponent('vue-markdown');\nconst htmlElements = new Set([\n 'div',\n 'span',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'section',\n 'article',\n 'aside',\n 'nav',\n 'header',\n 'footer',\n 'main',\n 'figure',\n 'figcaption',\n 'blockquote',\n 'pre',\n 'code',\n 'em',\n 'strong',\n 'small',\n 'mark',\n 'del',\n 'ins',\n 'sub',\n 'sup',\n 'i',\n 'b',\n 'u',\n 's',\n 'a',\n 'img',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'option',\n 'label',\n 'form',\n 'table',\n 'tr',\n 'td',\n 'th',\n 'thead',\n 'tbody',\n 'tfoot',\n 'ul',\n 'ol',\n 'li',\n 'dl',\n 'dt',\n 'dd',\n]);\n\nconst render = () => {\n if (typeof props.message === 'string') return h('span', { class: props.classes }, props.message);\n const res: ReturnType<typeof h>[] = [];\n props.message.forEach((msg) => {\n switch (msg.componentName) {\n case 'template':\n res.push(h('div', { class: [props.classes, msg.extraClasses] }, msg.componentBody));\n break;\n case 'vue-markdown':\n if (typeof md === 'string') {\n console.warn(\n \"You are using markdown for messages-widget, but you haven't registered a vue-markdown component\",\n );\n res.push(h('div', { class: [props.classes, msg.extraClasses] }, (<any>msg.componentBindings).source));\n } else {\n const componentBindings = <any>msg.componentBindings;\n res.push(\n h(md, {\n class: [props.classes, msg.extraClasses, 'df-messages-widget-markdown'],\n source: componentBindings.source,\n options: componentBindings.options,\n plugins: componentBindings.plugins,\n }),\n );\n }\n break;\n default:\n res.push(\n h(\n htmlElements.has(msg.componentName.toLowerCase()) // only resolve if it's not a common html element\n ? msg.componentName\n : resolveComponent(msg.componentName),\n {\n class: [props.classes, msg.extraClasses],\n ...msg.componentBindings,\n ...(msg.componentBody ? { innerHTML: msg.componentBody } : {}),\n },\n ),\n );\n break;\n }\n });\n return res;\n};\n</script>\n\n<style>\n/* we would like there to be no margins for markdown at the very top and very bottom. the rest of it is fine */\n.df-messages-widget-markdown > :first-child,\n.df-messages-widget-markdown > :last-child {\n margin-top: 0 !important;\n padding-top: 0 !important;\n margin-bottom: 0 !important;\n padding-bottom: 0 !important;\n line-height: 1.35em !important; /* inspired by vitepress' aggressive settings */\n}\n</style>\n","import { isEmpty, isEqual } from 'lodash-es';\n\nimport { ValueChangedAction } from './actions';\nimport { Field } from './field';\nimport { FieldBase } from './field-base';\nimport { IFieldConstructorParams } from './field.interface';\n\nexport type GenericFieldsInterface = Record<string, FieldBase>;\n// Utility tip za pretvorbo field strukture v value strukturo.\n// The indexed access reads each field's value getter, so a nested Group contributes its own value structure and\n// a List contributes its row array. Inferring from FieldBase<infer U> instead would pick up the value setter,\n// which is deliberately wider than the getter on Group.\nexport type FieldsToValues<T extends GenericFieldsInterface> = {\n [K in keyof T]: T[K]['value'];\n};\n\n/** what Group.value reads back: the full field map, or null when no field serializes */\nexport type GroupValue<T extends GenericFieldsInterface> = FieldsToValues<T> | null;\n/** what Group.value and the Group constructor accept: keys left out are simply not assigned */\nexport type GroupValueInput<T extends GenericFieldsInterface> = Partial<FieldsToValues<T>> | null;\n\nexport class Group<T extends GenericFieldsInterface = GenericFieldsInterface> extends FieldBase<GroupValue<T>> {\n private readonly _fields: T;\n\n private _value: GroupValue<T> = null;\n\n private suppressNotifyValueChanged: boolean = false;\n\n constructor(fields: T, params?: Partial<IFieldConstructorParams<GroupValueInput<T>>>) {\n super();\n\n if (!Group.isValidFields(fields)) throw new Error('Invalid fields object provided');\n // the backing map has no prototype: a field may be named after an Object.prototype member, and on an\n // ordinary object a `__proto__` key would go to the inherited setter instead of becoming a field\n this._fields = Object.create(null) as T;\n Object.entries(fields).forEach(([name, field]) => this.addField(name, field));\n\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n this.value = paramValue ?? this.originalValue;\n }\n\n if (this.originalValue === undefined) this.originalValue = this.value;\n\n // if (Object.keys(this._fields).length) console.log('group created', this, Error().stack);\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n private addField(fieldName: string, field: FieldBase) {\n // note: not sure if I should expose this (make it public).\n // breaks types, neglects events (originalValue, valueChanged), etc.\n if (Object.hasOwn(this._fields, fieldName)) {\n throw new Error(`Field ${fieldName} is already in this form`);\n }\n // parent and fieldName must stay non-enumerable: Group.value iterates its fields, and lodash isEqual and\n // JSON.stringify walk own enumerable properties, so an enumerable back-reference makes all three recurse\n // into the parent. defineProperty has no trap on a reactive proxy, so it reaches the underlying object.\n Object.defineProperty(field, 'parent', { get: () => this, configurable: false, enumerable: false });\n Object.defineProperty(field, 'fieldName', { get: () => fieldName, configurable: false, enumerable: false });\n // the entry is a non-configurable getter, so the map cannot be rewritten behind the group's back:\n // a field assigned straight into `fields` would never receive parent, fieldName or change notifications\n Object.defineProperty(this._fields, fieldName, { get: () => field, configurable: false, enumerable: true });\n }\n\n private static isValidFields(flds: unknown): flds is Record<string, FieldBase> {\n function isFieldAll(field: unknown): field is FieldBase {\n return field instanceof FieldBase;\n }\n\n return typeof flds === 'object' && flds !== null && Object.entries(flds).every(([, field]) => isFieldAll(field));\n }\n\n static createFromFormData(data: Record<string, any> | null): Group {\n if (data instanceof FieldBase) {\n throw new Error('data is already a Form structure, should be a simple object');\n }\n return new Group(\n data == null ? {} : Object.fromEntries(Object.entries(data).map(([key, value]) => [key, new Field({ value })])),\n );\n }\n\n field<K extends keyof T>(fieldName: K): T[K] | null {\n return this._fields[fieldName] ?? null;\n }\n\n get fields(): T {\n return this._fields;\n }\n\n get value(): GroupValue<T> {\n // accumulate without a prototype so a field named `__proto__` is stored instead of reassigning the\n // accumulator's prototype; the spread on return hands back an ordinary object\n const val = Object.create(null) as Record<string, any>;\n Object.entries(this._fields).forEach(([name, field]) => {\n const fieldValue = field.value;\n if (field.enabled) {\n // readOnly fields do not serialize\n val[name] = fieldValue;\n } else if (field instanceof Group && !isEmpty(fieldValue)) {\n // readOnly group only serializes if it is non-empty (some of its fields are not readOnly)\n val[name] = fieldValue;\n }\n });\n return isEmpty(val) ? null : ({ ...val } as FieldsToValues<T>);\n }\n\n set value(newValue: GroupValueInput<T>) {\n this.suppressNotifyValueChanged = true;\n try {\n Object.entries(this._fields).forEach(([name, field]) => {\n if (newValue == null || Object.hasOwn(newValue, name)) {\n field.value = newValue == null ? null : newValue[name];\n }\n });\n } finally {\n this.suppressNotifyValueChanged = false;\n }\n this.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return Object.values(this._fields).some((field) => field.touched);\n }\n\n set touched(touched: boolean) {\n Object.values(this._fields).forEach((field) => {\n field.touched = touched;\n });\n }\n\n get fullValue(): Record<string, any> {\n const value = Object.create(null) as Record<string, any>;\n Object.entries(this._fields).forEach(([name, field]) => {\n value[name] = field.fullValue;\n });\n return { ...value };\n }\n\n notifyValueChanged() {\n if (this.suppressNotifyValueChanged) return;\n const newValue = this.value;\n if (!isEqual(newValue, this._value)) {\n const oldValue = this._value;\n this._value = newValue;\n this.actions.trigger(ValueChangedAction, this, newValue, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n }\n\n get valid() {\n return super.valid && Object.values(this._fields).every((field) => field.valid);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) Object.values(this._fields).forEach((field) => field.validate(true));\n super.validate(revalidate);\n }\n\n clone(overrides?: Partial<IFieldConstructorParams<GroupValueInput<T>>>): Group<T> {\n const newFields = Object.create(null) as T;\n Object.entries(this._fields).forEach(([name, field]) => {\n newFields[name as keyof T] = field.clone() as any;\n });\n const res = new Group(newFields, {\n value: overrides?.value ?? this.value,\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n}\n\nexport type NullableGroup = Group | null;\n","import { isEmpty, isEqual } from 'lodash-es';\n\nimport { ListItemAddedAction, ListItemRemovedAction, ValueChangedAction } from './actions';\nimport { FieldBase } from './field-base';\nimport { IFieldConstructorParams } from './field.interface';\nimport { GenericFieldsInterface, Group } from './group';\n\n/** what List.value reads back: one plain object per item, or null when the list is empty */\nexport type ListValue = Record<string, any>[] | null;\n\nexport class List<T extends GenericFieldsInterface = GenericFieldsInterface> extends FieldBase<ListValue> {\n private _value: Group<T>[] | null = null;\n\n private _itemTemplate?: Group<T>;\n\n private _previousValue: ListValue;\n\n constructor(itemTemplate?: Group<T>, params?: Partial<IFieldConstructorParams<ListValue>>) {\n super();\n\n this._itemTemplate = itemTemplate;\n\n if (params) {\n const { value: paramValue, validators, actions, ...otherParams } = params;\n [...(validators || []), ...(actions || [])].forEach((a) => this.registerAction(a));\n Object.assign(this, otherParams);\n\n if (paramValue) this.setValueInternal(paramValue);\n }\n\n if (this.originalValue === undefined) this.originalValue = this.value;\n this._previousValue = this.value;\n // if (Object.keys(this._fields).length) console.log('formGroup created', this, Error().stack);\n this.actions.triggerEager(this, this.value, this.originalValue);\n this.validate();\n }\n\n private processSetValueItem(item: any): Group<T> {\n let res: Group<T>;\n // If item is already a Group, use it\n if (item instanceof Group) res = item;\n // Otherwise create a Group from item\n else if (this._itemTemplate) res = this._itemTemplate.clone({ value: item });\n else res = Group.createFromFormData(item) as Group<T>;\n\n Object.defineProperty(res, 'parent', { get: () => this, configurable: false, enumerable: false });\n\n return res;\n }\n\n private setValueInternal(newValue: any[]) {\n if (Array.isArray(newValue)) {\n this._value = newValue.map((item: any) => this.processSetValueItem(item));\n }\n }\n\n get value(): ListValue {\n const value = this._value?.map((item) => item.value);\n return isEmpty(value) ? null : <Record<string, any>[]>value;\n }\n\n set value(newValue: Record<string, any>[]) {\n const oldValue = this.value;\n this.setValueInternal(newValue);\n this.actions.trigger(ValueChangedAction, this, this.value, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n\n get touched(): boolean {\n return this._value?.some((item) => item.touched) || false;\n }\n\n set touched(touched: boolean) {\n this._value?.forEach((item) => {\n item.touched = touched;\n });\n }\n\n clone(overrides?: Partial<IFieldConstructorParams<ListValue>>): List<T> {\n const res = new List(this._itemTemplate?.clone(), {\n value: [...(overrides?.value ?? this.value ?? [])],\n ...(overrides && 'originalValue' in overrides ? { originalValue: overrides.originalValue } : {}),\n enabled: overrides?.enabled ?? this.enabled,\n visibility: overrides?.visibility ?? this.visibility,\n });\n res.actions = this.actions.clone();\n res.actions.triggerEager(res, res.value, res.originalValue);\n return res;\n }\n\n notifyValueChanged() {\n const newValue = this.value;\n if (!isEqual(newValue, this._previousValue)) {\n const oldValue = this._previousValue;\n this._previousValue = newValue;\n this.actions.trigger(ValueChangedAction, this, newValue, oldValue);\n if (this.parent) this.parent.notifyValueChanged();\n this.validate();\n }\n }\n\n get valid() {\n return super.valid && (this._value?.every((item) => item.valid) ?? true);\n }\n\n validate(revalidate: boolean = false) {\n if (revalidate) this._value?.forEach((item) => item.validate(true));\n super.validate(revalidate);\n }\n\n get(index: number): Group<T> | undefined {\n return this._value != null ? this._value[index] : undefined;\n }\n\n push(item: any): number {\n return this.insert(item, this._value?.length ?? 0) + 1;\n }\n\n pop(): Group<T> | undefined {\n return this.remove((this._value?.length ?? 0) - 1);\n }\n\n remove(index: number): Group<T> | undefined {\n if (this._value == null || index < 0 || this._value.length <= index) return undefined;\n\n let removedItem = this._value.splice(index, 1)?.[0];\n\n if (removedItem) {\n // Remove parent reference\n removedItem = removedItem.clone();\n\n // Trigger events\n this.actions.trigger(ListItemRemovedAction, this, removedItem, index);\n this.notifyValueChanged();\n }\n\n return removedItem;\n }\n\n insert(item: any, index: number): number {\n if (this._value == null) this._value = [];\n while (this._value.length < index) {\n // if the index is too large for current array size, we add as many as necessary\n const itm = this.processSetValueItem(null);\n const idx = this._value.push(itm);\n this.actions.trigger(ListItemAddedAction, this, itm, idx);\n }\n const itm = this.processSetValueItem(item);\n this._value.splice(index, 0, itm);\n\n this.actions.trigger(ListItemAddedAction, this, itm, index);\n this.notifyValueChanged();\n\n return index;\n }\n\n clear() {\n this._value = null;\n this.notifyValueChanged();\n }\n}\n\nexport type NullableList = List | null;\n","// Global configuration for @dynamicforms/vue-forms\nexport interface FormsConfig {\n useMarkdownInValidators: boolean;\n}\n\n// Default configuration\nconst config: FormsConfig = { useMarkdownInValidators: true };\n\n// Function to access config\nexport function getConfig(): FormsConfig {\n return config;\n}\n\n// Function to update config\nexport function setConfig(newConfig: Partial<FormsConfig>): void {\n Object.assign(config, newConfig);\n}\n\n// Vue plugin installation\nexport default {\n install(app: any, options?: Partial<FormsConfig>) {\n if (options) {\n setConfig(options);\n }\n },\n};\n","import { getConfig } from '../config';\n\nimport { MdString } from './validation-error';\n\n/**\n * Depending on the useMarkdownInValidators setting, return either markdown or a plain string error message\n * @param mdErrorString markdown source to optionally be stripped\n * @return MdString or string\n */\n\nexport function buildErrorMessage(mdErrorString: string): string | MdString {\n const useMarkdownInValidators = getConfig().useMarkdownInValidators;\n if (useMarkdownInValidators) return new MdString(mdErrorString);\n\n return mdErrorString\n .replace(/[*_~`]/g, '') // remove basic markdown (italic, bold, strike, code)\n .replace(/!\\[(.*?)\\]\\(.*?\\)/g, '$1') // remove images, keep alt only\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1') // remove links, keep name only\n .replace(/#+\\s?/g, '') // Remove heading markers (#, ##, ###)\n .replace(/>\\s?/g, '') // remove quotes\n .replace(/(\\*|-|\\d+\\.)\\s+/g, '') // remove lists (bullet points and numbered lists)\n .replace(/`{3}[\\s\\S]*?`{3}/g, '') // remove code blocks\n .replace(/`([^`]+)`/g, '$1') // remove inline code markers\n .replace(/\\n{2,}/g, '\\n'); // removes excessive empty lines\n}\n","import { unref } from 'vue';\n\nimport { ValueChangedAction } from '../actions';\nimport type { FieldBase } from '../field-base';\n\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class CompareTo<T = any> extends Validator {\n private unregistered = false;\n\n constructor(\n private otherField: FieldBase,\n private isValidComparison: (myValue: T, otherValue: T) => boolean,\n message: RenderContentRef,\n ) {\n let listenerSet = false;\n let nVal: T;\n let oVal: T;\n\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n nVal = newValue;\n oVal = oldValue;\n if (!listenerSet) {\n listenerSet = true;\n this.otherField.registerAction(\n new ValueChangedAction((oField, supr, oNewValue, oOldValue) => {\n supr(oField, oNewValue, oOldValue);\n // somewhat hackish: we just need to execute this one validator, not anything before, not anything after...\n if (!this.unregistered) this.execute(field, () => null, nVal, oVal);\n }),\n );\n }\n if (!this.isValidComparison(unref(newValue), unref(this.otherField.value))) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(message, { newValue, oldValue, field, otherField: this.otherField }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n\n unregister() {\n this.unregistered = true;\n }\n}\n","import { truncate } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport type { FieldBase } from '../field-base';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class InAllowedValues<T = any> extends Validator {\n constructor(allowedValues: T[], message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Must be one of [**{allowedAsText}**]');\n let allowedAsText = allowedValues.join(', ');\n if (allowedAsText.length > 60) {\n allowedAsText = truncate(allowedAsText, {\n length: 40,\n separator: ', ',\n omission: `... (${allowedValues.length} items total)`,\n });\n }\n\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (!allowedValues.includes(unref(newValue))) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, allowedValues, allowedAsText }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { isArray, isObject, isString } from 'lodash-es';\nimport { unref } from 'vue';\n\nimport type { FieldBase } from '../field-base';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nfunction toLength(a: any): number {\n if (a == null) return 0;\n if (isArray(a)) return a.length;\n if (isString(a)) return a.length;\n if (isObject(a) && Object.getPrototypeOf(a) === Object.prototype) return Object.keys(a).length;\n return String(a).length;\n}\n\nexport default class Required<T = any> extends Validator {\n constructor(message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Please enter a value');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (toLength(unref(newValue)) === 0) {\n return [new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field }))];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import type { FieldBase } from '../field-base';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport class MinValue<T = any> extends Validator {\n constructor(minValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be larger or equal to **{minValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (newValue < minValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, minValue })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class MaxValue<T = any> extends Validator {\n constructor(maxValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be less than or equal to **{maxValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (newValue > maxValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, maxValue })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class ValueInRange<T = any> extends Validator {\n constructor(minValue: T, maxValue: T, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must be between **{minValue}** and **{maxValue}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (newValue < minValue || newValue > maxValue || newValue === undefined) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, minValue, maxValue }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { isArray, isObject, isString } from 'lodash-es';\n\nimport type { FieldBase } from '../field-base';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nfunction toLength(a: any): number {\n if (a == null) return 0;\n if (isArray(a)) return a.length;\n if (isString(a)) return a.length;\n if (isObject(a) && Object.getPrototypeOf(a) === Object.prototype) return Object.keys(a).length;\n return String(a).length;\n}\n\nexport class MinLength<T = any> extends Validator {\n constructor(minLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be larger or equal to **{minLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (toLength(newValue) < minLength) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, minLength })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class MaxLength<T = any> extends Validator {\n constructor(maxLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be less than or equal to **{maxLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (toLength(newValue) > maxLength) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, maxLength })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n\nexport class LengthInRange<T = any> extends Validator {\n constructor(minLength: number, maxLength: number, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Length must be between **{minLength}** and **{maxLength}**');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n const len = toLength(newValue);\n if (len < minLength || len > maxLength) {\n return [\n new ValidationErrorRenderContent(\n this.replacePlaceholders(msg, { newValue, oldValue, field, minLength, maxLength }),\n ),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n","import { unref } from 'vue';\n\nimport type { FieldBase } from '../field-base';\n\nimport { buildErrorMessage } from './error-message-builder';\nimport { RenderContentRef, ValidationErrorRenderContent } from './validation-error';\nimport { ValidationFunction, Validator } from './validator';\n\nexport default class Pattern<T = any> extends Validator {\n constructor(pattern: RegExp, message?: RenderContentRef) {\n const msg = message || buildErrorMessage('Value must match pattern \"**{pattern}**\"');\n const validationFn: ValidationFunction = (newValue: T, oldValue: T, field: FieldBase) => {\n if (!pattern.test(String(unref(newValue)))) {\n return [\n new ValidationErrorRenderContent(this.replacePlaceholders(msg, { newValue, oldValue, field, pattern })),\n ];\n }\n return null;\n };\n\n super(validationFn);\n }\n}\n"],"names":["DisplayMode","defaultDisplayMode","fromString","mode","fromAny","input","isDefined","check","FieldActionBase","executorFn","__publicField","field","supr","params","AbortEventHandlingException","ValueChangedActionClassIdentifier","ValueChangedAction","newValue","oldValue","MdString","value","options","plugins","isSimpleComponentDef","msg","uMsg","unref","isCallableFunction","ValidationError","ValidationErrorText","text","classes","ValidationErrorRenderContent","computed","RenderableValue","ValidatorClassIdentifier","Validator","validationFn","errors","processErrors","err","e","i","error","idx","_a","isEqual","replace","ret","key","ActionsMap","action","actionType","existingExecute","ex","ActionClass","identifier","execute","newActions","ConditionalStatementActionClassIdentifier","ConditionalStatementAction","statement","actionExecutor","currentResult","fld","ConditionalVisibilityAction","ConditionalEnabledAction","ConditionalValueAction","trueValue","Operator","operator","op","isLogicOperator","EnabledChangingActionClassIdentifier","EnabledChangingAction","EnabledChangedActionClassIdentifier","EnabledChangedAction","ValidChangedActionClassIdentifier","ValidChangedAction","VisibilityChangingActionClassIdentifier","VisibilityChangingAction","VisibilityChangedActionClassIdentifier","VisibilityChangedAction","FieldBase","reactive","alteredValue","isBoolean","revalidate","oldValid","actionClass","XOR","value1","value2","Statement","operand1","operand2","_b","_d","_c","isString","fields","processOperand","ExecuteActionClassIdentifier","ExecuteAction","ListItemAddedActionClassIdentifier","ListItemAddedAction","item","index","ListItemRemovedActionClassIdentifier","ListItemRemovedAction","Field","paramValue","validators","actions","otherParams","__objRest","a","touched","overrides","Ctor","res","__spreadProps","__spreadValues","EmptyField","isValEmpty","val","defaultIfTrue","Action","originalValue","orgVal","props","__props","md","resolveComponent","htmlElements","render","h","componentBindings","_createBlock","Group","name","fieldName","flds","isFieldAll","data","fieldValue","isEmpty","newFields","List","itemTemplate","_e","removedItem","itm","config","getConfig","setConfig","newConfig","config_default","app","buildErrorMessage","mdErrorString","CompareTo","otherField","isValidComparison","message","listenerSet","nVal","oVal","oField","oNewValue","oOldValue","InAllowedValues","allowedValues","allowedAsText","truncate","toLength","isArray","isObject","Required","MinValue","minValue","MaxValue","maxValue","ValueInRange","MinLength","minLength","MaxLength","maxLength","LengthInRange","len","Pattern","pattern"],"mappings":"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"}
|