@syncfusion/ej2-form-renderer 34.2.6 → 35.1.37
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/README.md +6 -3
- package/dist/ej2-form-renderer.umd.min.js +2 -2
- package/dist/ej2-form-renderer.umd.min.js.map +1 -1
- package/dist/es6/ej2-form-renderer.es2015.js +3261 -1523
- package/dist/es6/ej2-form-renderer.es2015.js.map +1 -1
- package/dist/es6/ej2-form-renderer.es5.js +3316 -1540
- package/dist/es6/ej2-form-renderer.es5.js.map +1 -1
- package/dist/global/ej2-form-renderer.min.js +2 -2
- package/dist/global/ej2-form-renderer.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/{common → form-renderer/common}/checkbox-group.js +1 -1
- package/src/{common → form-renderer/common}/conditional-rule-engine.d.ts +1 -6
- package/src/{common → form-renderer/common}/custom-validation-engine.d.ts +1 -1
- package/src/{common → form-renderer/common}/expressions/expression-engine.d.ts +1 -4
- package/src/{common → form-renderer/common}/expressions/expression-parser.d.ts +1 -9
- package/src/{common → form-renderer/common}/index.d.ts +2 -0
- package/src/{common → form-renderer/common}/index.js +2 -0
- package/src/{common → form-renderer/common}/json-converter.d.ts +6 -1
- package/src/{common → form-renderer/common}/json-converter.js +49 -8
- package/src/form-renderer/common/props-forwarder.d.ts +38 -0
- package/src/form-renderer/common/props-forwarder.js +123 -0
- package/src/{common → form-renderer/common}/utils.d.ts +6 -0
- package/src/form-renderer/form-renderer/custom-widget-resolver.d.ts +17 -0
- package/src/form-renderer/form-renderer/custom-widget-resolver.js +39 -0
- package/src/form-renderer/form-renderer/form-renderer-model.d.ts +125 -0
- package/src/form-renderer/form-renderer/form-renderer.d.ts +373 -0
- package/src/form-renderer/{form-renderer.js → form-renderer/form-renderer.js} +419 -298
- package/src/form-renderer/form-renderer/index.d.ts +7 -0
- package/src/form-renderer/form-renderer/index.js +6 -0
- package/src/form-renderer/{render-form-field.js → form-renderer/render-form-field.js} +154 -25
- package/src/form-renderer/index.d.ts +3 -4
- package/src/form-renderer/index.js +3 -3
- package/src/index.d.ts +1 -4
- package/src/index.js +1 -4
- package/common.d.ts +0 -4
- package/common.js +0 -4
- package/src/form-renderer/form-renderer-model.d.ts +0 -65
- package/src/form-renderer/form-renderer.d.ts +0 -425
- package/styles/bds-lite.css +0 -599
- package/styles/bds-lite.scss +0 -2
- package/styles/bds.css +0 -599
- package/styles/bds.scss +0 -2
- package/styles/bootstrap-dark-lite.css +0 -608
- package/styles/bootstrap-dark-lite.scss +0 -2
- package/styles/bootstrap-dark.css +0 -608
- package/styles/bootstrap-dark.scss +0 -2
- package/styles/bootstrap-lite.css +0 -595
- package/styles/bootstrap-lite.scss +0 -2
- package/styles/bootstrap.css +0 -595
- package/styles/bootstrap.scss +0 -2
- package/styles/bootstrap4-lite.css +0 -595
- package/styles/bootstrap4-lite.scss +0 -2
- package/styles/bootstrap4.css +0 -595
- package/styles/bootstrap4.scss +0 -2
- package/styles/bootstrap5-dark-lite.css +0 -595
- package/styles/bootstrap5-dark-lite.scss +0 -2
- package/styles/bootstrap5-dark.css +0 -595
- package/styles/bootstrap5-dark.scss +0 -2
- package/styles/bootstrap5-lite.css +0 -595
- package/styles/bootstrap5-lite.scss +0 -2
- package/styles/bootstrap5.3-lite.css +0 -679
- package/styles/bootstrap5.3-lite.scss +0 -2
- package/styles/bootstrap5.3.css +0 -679
- package/styles/bootstrap5.3.scss +0 -2
- package/styles/bootstrap5.css +0 -595
- package/styles/bootstrap5.scss +0 -2
- package/styles/fabric-dark-lite.css +0 -608
- package/styles/fabric-dark-lite.scss +0 -2
- package/styles/fabric-dark.css +0 -608
- package/styles/fabric-dark.scss +0 -2
- package/styles/fabric-lite.css +0 -595
- package/styles/fabric-lite.scss +0 -2
- package/styles/fabric.css +0 -595
- package/styles/fabric.scss +0 -2
- package/styles/fluent-dark-lite.css +0 -595
- package/styles/fluent-dark-lite.scss +0 -2
- package/styles/fluent-dark.css +0 -595
- package/styles/fluent-dark.scss +0 -2
- package/styles/fluent-lite.css +0 -595
- package/styles/fluent-lite.scss +0 -2
- package/styles/fluent.css +0 -595
- package/styles/fluent.scss +0 -2
- package/styles/fluent2-lite.css +0 -681
- package/styles/fluent2-lite.scss +0 -2
- package/styles/fluent2.css +0 -681
- package/styles/fluent2.scss +0 -2
- package/styles/form-renderer/_all.scss +0 -2
- package/styles/form-renderer/_bds-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap-dark-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap4-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5-dark-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5.3-definition.scss +0 -8
- package/styles/form-renderer/_fabric-dark-definition.scss +0 -8
- package/styles/form-renderer/_fabric-definition.scss +0 -8
- package/styles/form-renderer/_fluent-dark-definition.scss +0 -8
- package/styles/form-renderer/_fluent-definition.scss +0 -8
- package/styles/form-renderer/_fluent2-definition.scss +0 -8
- package/styles/form-renderer/_highcontrast-definition.scss +0 -8
- package/styles/form-renderer/_highcontrast-light-definition.scss +0 -8
- package/styles/form-renderer/_layout.scss +0 -480
- package/styles/form-renderer/_material-dark-definition.scss +0 -8
- package/styles/form-renderer/_material-definition.scss +0 -8
- package/styles/form-renderer/_material3-dark-definition.scss +0 -8
- package/styles/form-renderer/_material3-definition.scss +0 -8
- package/styles/form-renderer/_mixin.scss +0 -26
- package/styles/form-renderer/_tailwind-dark-definition.scss +0 -8
- package/styles/form-renderer/_tailwind-definition.scss +0 -8
- package/styles/form-renderer/_tailwind3-definition.scss +0 -8
- package/styles/form-renderer/_theme.scss +0 -69
- package/styles/form-renderer/_variables.scss +0 -2
- package/styles/form-renderer/bds.css +0 -599
- package/styles/form-renderer/bds.scss +0 -2
- package/styles/form-renderer/bootstrap-dark.css +0 -608
- package/styles/form-renderer/bootstrap-dark.scss +0 -2
- package/styles/form-renderer/bootstrap.css +0 -595
- package/styles/form-renderer/bootstrap.scss +0 -2
- package/styles/form-renderer/bootstrap4.css +0 -595
- package/styles/form-renderer/bootstrap4.scss +0 -2
- package/styles/form-renderer/bootstrap5-dark.css +0 -595
- package/styles/form-renderer/bootstrap5-dark.scss +0 -2
- package/styles/form-renderer/bootstrap5.3.css +0 -679
- package/styles/form-renderer/bootstrap5.3.scss +0 -2
- package/styles/form-renderer/bootstrap5.css +0 -595
- package/styles/form-renderer/bootstrap5.scss +0 -2
- package/styles/form-renderer/fabric-dark.css +0 -608
- package/styles/form-renderer/fabric-dark.scss +0 -2
- package/styles/form-renderer/fabric.css +0 -595
- package/styles/form-renderer/fabric.scss +0 -2
- package/styles/form-renderer/fluent-dark.css +0 -595
- package/styles/form-renderer/fluent-dark.scss +0 -2
- package/styles/form-renderer/fluent.css +0 -595
- package/styles/form-renderer/fluent.scss +0 -2
- package/styles/form-renderer/fluent2.css +0 -681
- package/styles/form-renderer/fluent2.scss +0 -2
- package/styles/form-renderer/highcontrast-light.css +0 -595
- package/styles/form-renderer/highcontrast-light.scss +0 -2
- package/styles/form-renderer/highcontrast.css +0 -608
- package/styles/form-renderer/highcontrast.scss +0 -2
- package/styles/form-renderer/material-dark.css +0 -608
- package/styles/form-renderer/material-dark.scss +0 -2
- package/styles/form-renderer/material.css +0 -595
- package/styles/form-renderer/material.scss +0 -2
- package/styles/form-renderer/material3-dark.css +0 -677
- package/styles/form-renderer/material3-dark.scss +0 -2
- package/styles/form-renderer/material3.css +0 -679
- package/styles/form-renderer/material3.scss +0 -2
- package/styles/form-renderer/tailwind-dark.css +0 -595
- package/styles/form-renderer/tailwind-dark.scss +0 -2
- package/styles/form-renderer/tailwind.css +0 -595
- package/styles/form-renderer/tailwind.scss +0 -2
- package/styles/form-renderer/tailwind3.css +0 -669
- package/styles/form-renderer/tailwind3.scss +0 -2
- package/styles/highcontrast-light-lite.css +0 -595
- package/styles/highcontrast-light-lite.scss +0 -2
- package/styles/highcontrast-light.css +0 -595
- package/styles/highcontrast-light.scss +0 -2
- package/styles/highcontrast-lite.css +0 -608
- package/styles/highcontrast-lite.scss +0 -2
- package/styles/highcontrast.css +0 -608
- package/styles/highcontrast.scss +0 -2
- package/styles/material-dark-lite.css +0 -608
- package/styles/material-dark-lite.scss +0 -2
- package/styles/material-dark.css +0 -608
- package/styles/material-dark.scss +0 -2
- package/styles/material-lite.css +0 -595
- package/styles/material-lite.scss +0 -2
- package/styles/material.css +0 -595
- package/styles/material.scss +0 -2
- package/styles/material3-dark-lite.css +0 -677
- package/styles/material3-dark-lite.scss +0 -2
- package/styles/material3-dark.css +0 -677
- package/styles/material3-dark.scss +0 -2
- package/styles/material3-lite.css +0 -679
- package/styles/material3-lite.scss +0 -2
- package/styles/material3.css +0 -679
- package/styles/material3.scss +0 -2
- package/styles/tailwind-dark-lite.css +0 -595
- package/styles/tailwind-dark-lite.scss +0 -2
- package/styles/tailwind-dark.css +0 -595
- package/styles/tailwind-dark.scss +0 -2
- package/styles/tailwind-lite.css +0 -595
- package/styles/tailwind-lite.scss +0 -2
- package/styles/tailwind.css +0 -595
- package/styles/tailwind.scss +0 -2
- package/styles/tailwind3-lite.css +0 -669
- package/styles/tailwind3-lite.scss +0 -2
- package/styles/tailwind3.css +0 -669
- package/styles/tailwind3.scss +0 -2
- /package/src/{common → form-renderer/common}/checkbox-group.d.ts +0 -0
- /package/src/{common → form-renderer/common}/conditional-rule-engine.js +0 -0
- /package/src/{common → form-renderer/common}/custom-validation-engine.js +0 -0
- /package/src/{common → form-renderer/common}/datagrid-component.d.ts +0 -0
- /package/src/{common → form-renderer/common}/datagrid-component.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/dependency-tracker.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/dependency-tracker.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/expression-engine.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/expression-parser.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/grid-expressions.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/grid-expressions.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/index.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/index.js +0 -0
- /package/src/{common → form-renderer/common}/minmax-rule-engine.d.ts +0 -0
- /package/src/{common → form-renderer/common}/minmax-rule-engine.js +0 -0
- /package/src/{common → form-renderer/common}/option-fetcher.d.ts +0 -0
- /package/src/{common → form-renderer/common}/option-fetcher.js +0 -0
- /package/src/{common → form-renderer/common}/parser.d.ts +0 -0
- /package/src/{common → form-renderer/common}/parser.js +0 -0
- /package/src/{common → form-renderer/common}/static-html-renderer.d.ts +0 -0
- /package/src/{common → form-renderer/common}/static-html-renderer.js +0 -0
- /package/src/{common → form-renderer/common}/utils.js +0 -0
- /package/src/form-renderer/{render-form-field.d.ts → form-renderer/render-form-field.d.ts} +0 -0
- /package/src/form-renderer/{types → form-renderer/types}/form-schema.d.ts +0 -0
- /package/src/form-renderer/{types → form-renderer/types}/form-schema.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-form-renderer.es2015.js","sources":["../src/es6/common/conditional-rule-engine.js","../src/es6/common/json-converter.js","../src/es6/common/expressions/expression-parser.js","../src/es6/common/expressions/dependency-tracker.js","../src/es6/common/expressions/expression-engine.js","../src/es6/common/utils.js","../src/es6/common/option-fetcher.js","../src/es6/common/checkbox-group.js","../src/es6/common/expressions/grid-expressions.js","../src/es6/common/custom-validation-engine.js","../src/es6/common/datagrid-component.js","../src/es6/form-renderer/render-form-field.js","../src/es6/common/parser.js","../src/es6/common/static-html-renderer.js","../src/es6/common/minmax-rule-engine.js","../src/es6/form-renderer/form-renderer.js","../src/es6/form-renderer/types/form-schema.js"],"sourcesContent":["import { Internationalization } from '@syncfusion/ej2-base';\n/**\n * ConditionalRuleEngine class\n * @private\n */\nexport class ConditionalRuleEngine {\n /**\n * Evaluate a conditional rule against form values\n *\n * Handles both simple rules (field operator value) and composite rules (AND/OR).\n * Returns false for malformed rules.\n *\n * @param rule - ConditionalRule or CompositeConditionalRule\n * @param formValues - Current form field values (key = field name, value = field value)\n * @returns true if condition met, false otherwise\n * @private\n * @example\n * ```typescript\n * const rule = { field: 'age', operator: 'greaterThan', value: 18 };\n * const isAdult = ConditionalRuleEngine.evaluateCondition(rule, { age: 25 });\n * // isAdult = true\n * ```\n */\n static evaluateCondition(rule, formValues) {\n try {\n // Handle simple rule (field operator value)\n if ('field' in rule && 'operator' in rule && 'value' in rule) {\n return this.evaluateSimpleRule(rule, formValues);\n }\n // Handle composite rule (AND/OR)\n if ('condition' in rule && 'rules' in rule) {\n return this.evaluateCompositeRule(rule, formValues);\n }\n return false;\n }\n catch (error) {\n return false; // Safe default on error\n }\n }\n /**\n * Evaluate simple field comparison rule\n *\n * Supports operators: equal, notEqual, greaterThan, lessThan, greaterThanOrEqual,\n * lessThanOrEqual, in, notIn, contains, notContains.\n *\n * Handles both camelCase (greaterThan) and lowercase (greaterthan) operator formats\n * for compatibility with QueryBuilder output.\n *\n * @param rule - Simple conditional rule with field, operator, value\n * @param formValues - Current form field values\n * @returns true if comparison is true, false otherwise\n *\n * @example\n * ```typescript\n * const rule = { field: 'email', operator: 'contains', value: '@' };\n * const hasAt = evaluateSimpleRule(rule, { email: 'test@example.com' });\n * // hasAt = true\n * ```\n */\n static evaluateSimpleRule(rule, formValues) {\n try {\n const fieldValue = formValues[rule.field];\n const operator = rule.operator.toLowerCase();\n // Allow evaluation for operators that make sense when value is undefined/empty\n if (fieldValue === undefined) {\n const allowedForUndefined = ['equal', 'equals', 'notequal', 'notequals', 'isempty', 'isnotempty'];\n if (allowedForUndefined.indexOf(operator) === -1) {\n return false;\n }\n }\n // Check if field value is an array (for multiselect, checkboxGroup)\n const isFieldArray = Array.isArray(fieldValue);\n const intl = new Internationalization();\n switch (operator) {\n case 'equal':\n case 'equals':\n return fieldValue === rule.value;\n case 'notequal':\n case 'notequals':\n return fieldValue !== rule.value;\n case 'startswith': return fieldValue.startsWith(rule.value);\n case 'doesnotstartswith': return !fieldValue.startsWith(rule.value);\n case 'greaterthan':\n case 'lessthan':\n case 'greaterthanorequal':\n case 'lessthanorequal': {\n const ln = Number(fieldValue);\n const rn = Number(rule.value);\n if (!Number.isNaN(ln) && !Number.isNaN(rn)) {\n if (operator === 'greaterthan')\n return ln > rn;\n if (operator === 'lessthan')\n return ln < rn;\n if (operator === 'greaterthanorequal')\n return ln >= rn;\n return ln <= rn;\n }\n return false;\n }\n case 'dategreaterthan':\n case 'datelessthan': {\n // try date comparison first\n const leftTs = intl.parseDate(fieldValue, { format: 'MM/dd/yyyy' });\n const rightTs = intl.parseDate(rule.value, { format: 'MM/dd/yyyy' });\n if (leftTs !== null && rightTs !== null) {\n if (operator === 'dategreaterthan')\n return leftTs > rightTs;\n if (operator === 'datelessthan')\n return leftTs < rightTs;\n return leftTs <= rightTs;\n }\n return false;\n }\n case 'timegreaterthan':\n case 'timelessthan': {\n // Parse time strings (format: hh:mm a)\n const leftTime = intl.parseDate(fieldValue, { format: 'hh:mm a', type: 'time' });\n const rightTime = intl.parseDate(rule.value, { format: 'hh:mm a', type: 'time' });\n if (leftTime !== null && rightTime !== null) {\n if (operator === 'timegreaterthan')\n return leftTime > rightTime;\n if (operator === 'timelessthan')\n return leftTime < rightTime;\n }\n return false;\n }\n case 'datetimegreaterthan':\n case 'datetimelessthan': {\n // Parse datetime strings (format: MM/dd/yyyy hh:mm a)\n const leftDateTime = intl.parseDate(fieldValue, { format: 'MM/dd/yyyy hh:mm a', type: 'dateTime' });\n const rightDateTime = intl.parseDate(rule.value, { format: 'MM/dd/yyyy hh:mm a', type: 'dateTime' });\n if (leftDateTime !== null && rightDateTime !== null) {\n if (operator === 'datetimegreaterthan')\n return leftDateTime > rightDateTime;\n if (operator === 'datetimelessthan')\n return leftDateTime < rightDateTime;\n }\n return false;\n }\n case 'contains':\n // If field value is array, check if array contains the specific value(s)\n if (isFieldArray) {\n // Parse comma-separated values in rule.value if it's a string\n if (typeof rule.value === 'string' && rule.value.indexOf(',') !== -1) {\n const searchValues = rule.value.split(',').map(v => v.trim());\n // Check if array contains ANY of the search values\n return searchValues.some(searchVal => fieldValue.indexOf(searchVal) !== -1);\n }\n return fieldValue.indexOf(rule.value) !== -1;\n }\n // Otherwise, check string contains\n return String(fieldValue).indexOf(String(rule.value)) !== -1;\n case 'notcontains':\n // If field value is array, check if array does NOT contain the specific value(s)\n if (isFieldArray) {\n // Parse comma-separated values in rule.value if it's a string\n if (typeof rule.value === 'string' && rule.value.indexOf(',') !== -1) {\n const searchValues = rule.value.split(',').map(v => v.trim());\n // Check if array contains NONE of the search values\n return !searchValues.some(searchVal => fieldValue.indexOf(searchVal) !== -1);\n }\n return fieldValue.indexOf(rule.value) === -1;\n }\n // Otherwise, check string does not contain\n return String(fieldValue).indexOf(String(rule.value)) === -1;\n case 'isempty':\n // Check if array is empty\n if (isFieldArray) {\n return fieldValue.length === 0;\n }\n // For non-arrays, check if falsy or empty string\n return !fieldValue || String(fieldValue).length === 0;\n case 'isnotempty':\n // Check if array has items\n if (isFieldArray) {\n return fieldValue.length > 0;\n }\n // For non-arrays, check if truthy and not empty string\n return !!fieldValue && String(fieldValue).length > 0;\n default:\n return false;\n }\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Evaluate composite rule with AND/OR logic\n *\n * Recursively evaluates nested rules with AND (all must be true) or OR\n * (at least one must be true) logic.\n *\n * @param rule - Composite rule with condition ('and'|'or') and rules array\n * @param formValues - Current form field values\n * @returns true if composite condition met, false otherwise\n *\n * @example\n * ```typescript\n * const rule = {\n * condition: 'and',\n * rules: [\n * { field: 'age', operator: 'greaterThan', value: 18 },\n * { field: 'country', operator: 'equal', value: 'US' }\n * ]\n * };\n * const isEligible = evaluateCompositeRule(rule, { age: 25, country: 'US' });\n * // isEligible = true\n * ```\n */\n static evaluateCompositeRule(rule, formValues) {\n try {\n if (!Array.isArray(rule.rules) || rule.rules.length === 0) {\n return false;\n }\n const condition = rule.condition.toLowerCase();\n if (condition === 'and') {\n // All rules must be true\n return rule.rules.every((childRule) => this.evaluateCondition(childRule, formValues));\n }\n else if (condition === 'or') {\n // At least one rule must be true\n return rule.rules.some((childRule) => this.evaluateCondition(childRule, formValues));\n }\n else {\n return false;\n }\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Check if field should be visible\n *\n * Evaluates visibleWhen condition. Defaults to true (visible) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing visibleWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be visible, false if hidden\n *\n * @example\n * ```typescript\n * const conditions = {\n * visibleWhen: { field: 'showEmail', operator: 'equal', value: true }\n * };\n * const visible = isFieldVisible(conditions, { showEmail: true });\n * // visible = true\n * ```\n */\n static isFieldVisible(conditions, formValues) {\n try {\n if (!conditions || !conditions.visibleWhen) {\n return true; // Default: visible if no condition\n }\n return this.evaluateCondition(conditions.visibleWhen, formValues);\n }\n catch (error) {\n return true; // Safe default: visible on error\n }\n }\n /**\n * Check if field should be read-only\n *\n * Evaluates readOnlyWhen condition. Defaults to false (editable) if no\n * condition is defined or on error.\n *\n * @param conditions - FormComponentConditions containing readOnlyWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be read-only, false if editable\n *\n * @example\n * ```typescript\n * const conditions = {\n * readOnlyWhen: { field: 'isVerified', operator: 'equal', value: true }\n * };\n * const readOnly = isFieldReadOnly(conditions, { isVerified: true });\n * // readOnly = true\n * ```\n */\n static isFieldReadOnly(conditions, formValues) {\n try {\n if (!conditions || !conditions.readOnlyWhen) {\n return false; // Default: not read-only if no condition\n }\n return this.evaluateCondition(conditions.readOnlyWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not read-only on error\n }\n }\n /**\n * Check if field should be disabled\n *\n * Evaluates disabledWhen condition. Defaults to false (enabled) if no\n * condition is defined or on error.\n *\n * @param conditions - FormComponentConditions containing disabledWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be disabled, false if enabled\n *\n * @example\n * ```typescript\n * const conditions = {\n * disabledWhen: { field: 'orderStatus', operator: 'equal', value: 'completed' }\n * };\n * const disabled = isFieldDisabled(conditions, { orderStatus: 'completed' });\n * // disabled = true\n * ```\n */\n static isFieldDisabled(conditions, formValues) {\n try {\n if (!conditions || !conditions.disabledWhen) {\n return false; // Default: not disabled if no condition\n }\n return this.evaluateCondition(conditions.disabledWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not disabled on error\n }\n }\n /**\n * Check if field should be hidden\n *\n * Evaluates hideWhen condition. Defaults to false (visible) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing hideWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be hidden, false if visible\n *\n * @example\n * ```typescript\n * const conditions = {\n * hideWhen: { field: 'hideEmail', operator: 'equal', value: true }\n * };\n * const hidden = isFieldHidden(conditions, { hideEmail: true });\n * // hidden = true\n * ```\n */\n static isFieldHidden(conditions, formValues) {\n try {\n if (!conditions || !conditions.hideWhen) {\n return false; // Default: not hidden if no condition\n }\n return this.evaluateCondition(conditions.hideWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not hidden on error\n }\n }\n /**\n * Check if field should be required\n *\n * Evaluates requiredWhen condition. Defaults to false (not required) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing requiredWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be required, false if optional\n *\n * @example\n * ```typescript\n * const conditions = {\n * requiredWhen: { field: 'requireDetails', operator: 'equal', value: true }\n * };\n * const required = isFieldRequired(conditions, { requireDetails: true });\n * // required = true\n * ```\n */\n static isFieldRequired(conditions, formValues) {\n try {\n if (!conditions || !conditions.requiredWhen) {\n return false; // Default: not required if no condition\n }\n return this.evaluateCondition(conditions.requiredWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not required on error\n }\n }\n /**\n * Get value to set for field if condition is met\n *\n * Evaluates setValueWhen condition and returns the value to assign if true.\n * Returns undefined if no condition is defined, condition not met, or on error.\n *\n * @param conditions - FormComponentConditions containing setValueWhen rule\n * @param formValues - Current form field values\n * @returns The value to set if condition met, undefined otherwise\n *\n * @example\n * ```typescript\n * const conditions = {\n * setValueWhen: {\n * condition: { field: 'country', operator: 'equal', value: 'US' },\n * value: 'United States'\n * }\n * };\n * const value = getConditionalValue(conditions, { country: 'US' });\n * // value = 'United States'\n * ```\n */\n static getConditionalValue(conditions, formValues) {\n try {\n if (!conditions || !conditions.setValueWhen) {\n return undefined;\n }\n const isMet = this.evaluateCondition(conditions.setValueWhen.condition, formValues);\n if (isMet) {\n return conditions.setValueWhen.value;\n }\n return undefined;\n }\n catch (error) {\n return undefined;\n }\n }\n /**\n * Evaluate conditional data availability\n * Returns true if any conditional data rule's condition is met\n *\n * @param conditionalDataRules - Array of ConditionalDataRule objects\n * @param formValues - Current form field values\n * @returns Index of first matching rule, or -1 if none match\n */\n static evaluateConditionalDataRules(conditionalDataRules, formValues) {\n if (!conditionalDataRules || !Array.isArray(conditionalDataRules)) {\n return -1;\n }\n for (let i = 0; i < conditionalDataRules.length; i++) {\n const rule = conditionalDataRules[i];\n if (this.evaluateCondition(rule.condition, formValues)) {\n return i; // Return index of first matching rule\n }\n }\n return -1;\n }\n /**\n * Get filtered options for a dependent dropdown based on choice-based field rule\n *\n * If choiceBasedField rule exists and primary field has a value,\n * return only the mapped dependent options for that primary value.\n * Otherwise return all options.\n *\n * @param rule - ChoiceBasedFieldRule configuration\n * @param allDependentOptions - Complete list of dependent field options\n * @param formValues - Current form values\n * @param primaryFieldId - ID of primary field\n * @returns Filtered options array\n *\n * @example\n * ```typescript\n * const rule = {\n * primaryFieldId: 'dept-id',\n * choiceMapping: {\n * 'Marketing': ['Markers', 'Sticky Notes'],\n * 'Finance': ['Calculator']\n * }\n * };\n *\n * const filtered = ConditionalRuleEngine.getChoiceBasedOptions(\n * rule,\n * ['Markers', 'Sticky Notes', 'Calculator'],\n * { 'dept-id': 'Marketing' },\n * 'dept-id'\n * );\n * // Returns: ['Markers', 'Sticky Notes']\n * ```\n */\n static getChoiceBasedOptions(rule, allDependentOptions, formValues, primaryFieldId) {\n try {\n // Get primary field value from form\n const primaryValue = formValues && formValues[primaryFieldId];\n if (primaryValue === null || primaryValue === undefined) {\n // No primary value selected - return all or empty based on rule config\n return rule.showAllWhenNotMapped ? allDependentOptions : [];\n }\n // Ensure primary value is treated as string for comparison\n const primaryValueStr = String(primaryValue);\n // Check if this primary value is mapped in the rule\n if (primaryValueStr in rule.choiceMapping) {\n const mappedOptions = rule.choiceMapping[primaryValueStr];\n // Validate mapped options exist in all options (safety check)\n return mappedOptions.filter((opt) => allDependentOptions.indexOf(opt) !== -1);\n }\n // Primary value not mapped - return all or empty based on rule config\n return rule.showAllWhenNotMapped ? allDependentOptions : [];\n }\n catch (error) {\n // Safe default - return all options\n return allDependentOptions;\n }\n }\n}\n","import { sanitizeId } from './utils';\n/**\n * @private\n */\nexport const generateId = (type) => {\n const timestamp = Date.now();\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${timestamp}_${random}`;\n};\n/**\n * @private\n */\nexport const generateName = (type) => {\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${random}`;\n};\n/**\n * @private\n */\nexport function labelToFieldKey(label, fallbackId) {\n if (!label || label.trim() === '') {\n return fallbackId || 'field';\n }\n // Remove special characters, keep letters, numbers, and spaces\n const cleaned = label\n .replace(/[^\\w\\s]/g, '') // Remove special chars\n .trim();\n if (cleaned === '') {\n return fallbackId || 'field';\n }\n // Split by spaces/underscores and convert to camelCase\n const words = cleaned.split(/[\\s_]+/);\n if (words.length === 0) {\n return fallbackId || 'field';\n }\n // First word lowercase, rest title case\n const camelCase = words\n .map((word, index) => {\n if (index === 0) {\n return word.toLowerCase();\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n return camelCase || fallbackId || 'field';\n}\n/**\n * @private\n */\nexport function makeUniqueFieldKey(baseKey, existingKeys, originalId) {\n if (!existingKeys.has(baseKey)) {\n return baseKey;\n }\n // Try with original ID suffix first\n if (originalId) {\n const withId = `${baseKey}_${originalId.split('_').pop()}`;\n if (!existingKeys.has(withId)) {\n return withId;\n }\n }\n // Fall back to numeric suffix\n let counter = 2;\n while (existingKeys.has(`${baseKey}${counter}`)) {\n counter++;\n }\n return `${baseKey}${counter}`;\n}\n/**\n * @private\n */\nexport const UI_TYPE_TO_SEMANTIC_TYPE = {\n // String types\n 'textbox': { type: 'string' },\n 'textarea': { type: 'string' },\n 'email': { type: 'string', format: 'email' },\n 'url': { type: 'string', format: 'url' },\n 'phone': { type: 'string' },\n 'password': { type: 'string' },\n 'inputMask': { type: 'string' },\n // Numeric types\n 'number': { type: 'number' },\n 'rangeSlider': { type: 'number' },\n 'rating': { type: 'number' },\n // Boolean types\n 'checkbox': { type: 'boolean' },\n 'switch': { type: 'boolean' },\n // Date/Time types\n 'date': { type: 'string', format: 'date' },\n 'dateTime': { type: 'string', format: 'date-time' },\n 'time': { type: 'string', format: 'time' },\n 'dateRange': { type: 'string', format: 'date' },\n // Array types\n 'multiselect': { type: 'array' },\n 'checkboxGroup': { type: 'array' },\n // Single-value selection (stored as string)\n 'dropdown': { type: 'string' },\n 'radio': { type: 'string' },\n 'splitButton': { type: 'string' },\n // Special types (excluded from data schema)\n 'button': { type: 'button' },\n 'message': { type: 'message' },\n 'signature': { type: 'sign' },\n 'imageEditor': { type: 'image' },\n 'fileUpload': { type: 'file' },\n 'colorPicker': { type: 'color' },\n 'dataGrid': { type: 'grid' },\n // Layout types (excluded from data schema)\n 'staticHtml': { type: 'string' },\n 'table': null,\n 'panel': null,\n 'tabs': null,\n 'card': null\n};\n/**\n * @private\n */\nfunction stripConfiguredFlag(properties) {\n const out = {};\n const keys = Object.keys(properties || {});\n for (const key of keys) {\n const val = properties[key];\n const copy = Object.assign({}, val);\n if (copy && copy._configured !== undefined) {\n delete copy._configured;\n }\n out[key] = copy;\n }\n return out;\n}\n/**\n * @private\n */\nfunction cleanConditionRules(condition, validFieldIds) {\n if (!condition || !condition.rules || !Array.isArray(condition.rules)) {\n return undefined;\n }\n const cleanedRules = condition.rules\n .map((rule) => {\n // If rule has nested rules (group), recursively clean\n if (rule.rules && Array.isArray(rule.rules)) {\n return cleanConditionRules(rule, validFieldIds);\n }\n // If rule references non-existent field, exclude it\n if (rule.field && !validFieldIds.has(rule.field)) {\n return null;\n }\n return rule;\n })\n .filter((rule) => rule !== null && rule !== undefined);\n // If no rules remain, return undefined\n if (cleanedRules.length === 0) {\n return undefined;\n }\n return Object.assign({}, condition, { rules: cleanedRules });\n}\n/**\n * @private\n */\nfunction getAllComponentIds(components) {\n const ids = new Set();\n const stack = [...components];\n while (stack.length) {\n const comp = stack.pop();\n ids.add(comp.id);\n if (comp.children)\n stack.push(...comp.children);\n if (comp.tabItems) {\n comp.tabItems.forEach(tab => {\n if (tab.content)\n stack.push(...tab.content);\n });\n }\n if (comp.tableCells) {\n comp.tableCells.forEach(row => {\n row.forEach(cell => stack.push(...cell));\n });\n }\n }\n return ids;\n}\n/**\n * @private\n */\nexport function splitSchema(heartSchema) {\n const dataFields = {};\n const uiFields = {};\n const layout = [];\n const usedFieldKeys = new Set(); // Track unique field keys\n const seenComponentIds = new Set(); // Track component IDs to prevent duplicates\n // ✅ Get all valid field IDs for condition validation\n const validFieldIds = getAllComponentIds(heartSchema.components);\n // Stack for iterative traversal (avoid recursion)\n const stack = heartSchema.components.map(c => ({\n component: c,\n layoutParent: layout\n }));\n while (stack.length > 0) {\n // Use shift() instead of pop() to maintain order (FIFO instead of LIFO)\n const { component, layoutParent } = stack.shift();\n // ✅ Clean conditions before processing\n if (component.conditions) {\n const cleanedConditions = {};\n let hasValidConditions = false;\n if (component.conditions.visibleWhen) {\n const cleaned = cleanConditionRules(component.conditions.visibleWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.visibleWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.hideWhen) {\n const cleaned = cleanConditionRules(component.conditions.hideWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.hideWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.readOnlyWhen) {\n const cleaned = cleanConditionRules(component.conditions.readOnlyWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.readOnlyWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.disabledWhen) {\n const cleaned = cleanConditionRules(component.conditions.disabledWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.disabledWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.requiredWhen) {\n const cleaned = cleanConditionRules(component.conditions.requiredWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.requiredWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.setValueWhen) {\n const cleaned = cleanConditionRules(component.conditions.setValueWhen.condition, validFieldIds);\n if (cleaned && component.conditions.setValueWhen.value !== undefined && component.conditions.setValueWhen.value !== '') {\n cleanedConditions.setValueWhen = {\n condition: cleaned,\n value: component.conditions.setValueWhen.value\n };\n hasValidConditions = true;\n }\n }\n if (component.conditions && component.conditions.choiceBasedField) {\n const rule = component.conditions.choiceBasedField;\n // Validate that primary field exists\n if (rule.primaryFieldId && validFieldIds.has(rule.primaryFieldId)) {\n cleanedConditions.choiceBasedField = rule;\n hasValidConditions = true;\n }\n }\n if (component.conditions.conditionalData && Array.isArray(component.conditions.conditionalData)) {\n const cleanedDataRules = component.conditions.conditionalData\n .map((rule) => {\n const cleaned = cleanConditionRules(rule.condition, validFieldIds);\n if (cleaned && rule.dataSource) {\n return {\n condition: cleaned,\n dataSource: rule.dataSource,\n columns: rule.columns,\n includeColumns: rule.includeColumns\n };\n }\n return null;\n })\n .filter((rule) => rule !== null && rule !== undefined);\n if (cleanedDataRules.length > 0) {\n cleanedConditions.conditionalData = cleanedDataRules;\n hasValidConditions = true;\n }\n }\n // Update component conditions (or remove if empty)\n component.conditions = hasValidConditions ? cleanedConditions : undefined;\n }\n // Get semantic type mapping (may be null for presentation-only widgets)\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[component.type];\n // Handle layout containers\n if (component.type === 'table') {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const tableNode = Object.assign({ type: 'table', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, rows: (component.tableCells && component.tableCells.length) || 0, cols: (component.tableCells && component.tableCells[0] && component.tableCells[0].length) || 0, cells: [], columnWidths: component.columnWidths }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process table cells\n if (component.tableCells) {\n component.tableCells.forEach((row, rowIndex) => {\n const cellRow = [];\n row.forEach((cellComponents, colIndex) => {\n const cellChildren = [];\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...cellComponents].reverse().forEach((comp) => {\n stack.unshift({ component: comp, layoutParent: cellChildren });\n });\n cellRow.push({ row: rowIndex, col: colIndex, children: cellChildren });\n });\n tableNode.cells.push(cellRow);\n });\n }\n layoutParent.push(tableNode);\n continue;\n }\n if (component.type === 'panel') {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const panelNode = Object.assign({ type: 'panel', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, hideLabel: component.hideLabel, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process panel children\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(component.children || [])].reverse().forEach((child) => {\n stack.unshift({ component: child, layoutParent: panelNode.children });\n });\n layoutParent.push(panelNode);\n continue;\n }\n if (component.type === 'tabs') {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const tabsNode = Object.assign({ type: 'tabs', name: component.name, id: safeId, label: component.label, cssClass: component.cssClass, tabOptions: component.tabOptions, tabs: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process tabs\n if (component.tabItems) {\n component.tabItems.forEach((tab) => {\n const tabChildren = [];\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(tab.content || [])].reverse().forEach((comp) => {\n stack.unshift({ component: comp, layoutParent: tabChildren });\n });\n tabsNode.tabs.push({ header: tab.header, children: tabChildren });\n });\n }\n layoutParent.push(tabsNode);\n continue;\n }\n if (component.type === 'card') {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const cardNode = Object.assign({ type: 'card', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideLabel: component.hideLabel, cardTitle: component.cardTitle, cardSubtitle: component.cardSubtitle, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process card children\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(component.children || [])].reverse().forEach((child) => {\n stack.unshift({ component: child, layoutParent: cardNode.children });\n });\n layoutParent.push(cardNode);\n continue;\n }\n // ✅ DEDUPLICATION: Skip if we've already processed this component ID\n if (seenComponentIds.has(component.id)) {\n //console.log(`⚠️ [splitSchema] Skipping duplicate component: ${component.id} (${component.label})`);\n continue;\n }\n seenComponentIds.add(component.id);\n // Generate semantic field key from label\n const baseFieldKey = labelToFieldKey(component.label || component.id, component.id);\n const fieldKey = makeUniqueFieldKey(baseFieldKey, usedFieldKeys, component.id);\n usedFieldKeys.add(fieldKey);\n // Extract data field properties (all components, no skipping)\n // If no semantic type mapping exists, use 'any' as the type\n const dataField = extractDataField(component, semanticType || { type: 'any' });\n dataFields[fieldKey] = dataField;\n // Extract UI field properties (all components)\n uiFields[fieldKey] = extractUIField(component);\n // Add property reference to layout (use fieldKey instead of component ID)\n layoutParent.push({ type: 'field', propertyId: fieldKey });\n }\n // ✅ Merge data and UI fields into unified properties\n const unifiedProperties = {};\n Object.keys(dataFields).forEach(fieldKey => {\n const dataField = dataFields[fieldKey];\n const uiField = uiFields[fieldKey];\n unifiedProperties[fieldKey] = Object.assign({}, dataField, uiField, { \n // Ensure widget is always set\n widget: (uiField && uiField.widget) || inferWidgetFromType(dataField.type, dataField.format, dataField.options !== undefined) });\n });\n const settings = heartSchema.settings ? Object.assign({}, heartSchema.settings) : {};\n return Object.assign({ version: heartSchema.version, properties: stripConfiguredFlag(unifiedProperties), layout }, (Object.keys(settings).length > 0 ? { settings } : {}));\n}\n/**\n * @private\n */\nfunction extractDataField(component, semanticType) {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const dataField = {\n id: safeId,\n name: component.name,\n type: semanticType.type,\n };\n // Add format if present\n if (semanticType.format) {\n dataField.format = semanticType.format;\n }\n // Extract allowed properties only\n if (component.label !== undefined)\n dataField.label = component.label;\n if (component.defaultValue !== undefined)\n dataField.defaultValue = component.defaultValue;\n if (component.expressionValue !== undefined)\n dataField.expressionValue = component.expressionValue;\n if (component.content !== undefined)\n dataField.content = component.content;\n if (component.buttonType !== undefined)\n dataField.buttonType = component.buttonType;\n if (component.textboxType !== undefined)\n dataField.textboxType = component.textboxType;\n if (component.required !== undefined)\n dataField.required = component.required;\n // Extract options for selection fields (dropdown, radio, multiselect)\n if (component.options !== undefined)\n dataField.options = component.options;\n if (component.minLength !== undefined)\n dataField.minLength = component.minLength;\n if (component.maxLength !== undefined)\n dataField.maxLength = component.maxLength;\n // Handle numeric validation (use canonical names)\n if (component.minValue !== undefined)\n dataField.minValue = component.minValue;\n if (component.maxValue !== undefined)\n dataField.maxValue = component.maxValue;\n // Date/time validation\n if (component.minDate !== undefined)\n dataField.minDate = component.minDate;\n if (component.maxDate !== undefined)\n dataField.maxDate = component.maxDate;\n if (component.minTime !== undefined)\n dataField.minTime = component.minTime;\n if (component.maxTime !== undefined)\n dataField.maxTime = component.maxTime;\n // Pattern validation (rename from regex, convert RegExp to string)\n if (component.regex !== undefined) {\n const regex = component.regex;\n dataField.pattern = regex instanceof RegExp ? regex.source : regex;\n }\n if (component.pattern !== undefined) {\n const pattern = component.pattern;\n dataField.pattern = pattern instanceof RegExp ? pattern.source : pattern;\n }\n return dataField;\n}\n/**\n * @private\n */\nfunction extractUIField(component) {\n const uiField = {\n widget: component.type,\n };\n // Copy all properties EXCEPT those in data schema allowed list\n const dataSchemaProps = new Set([\n 'id', 'type', 'label', 'format', 'defaultValue', 'required', 'options', 'name', 'expressionValue',\n 'minLength', 'maxLength', 'minimum', 'maximum', 'minValue', 'maxValue',\n 'minDate', 'maxDate', 'minTime', 'maxTime', 'regex', 'pattern', 'content', 'buttonType', 'textboxType'\n ]);\n Object.keys(component).forEach(key => {\n if (!dataSchemaProps.has(key) && key !== 'id' && key !== 'type') {\n uiField[key] = component[key];\n }\n });\n // Special handling: Filter dataGrid columns to keep only required properties\n if (component.type === 'dataGrid' && uiField.columns && Array.isArray(uiField.columns)) {\n const requiredColumnProps = [\n 'field',\n 'headerText',\n 'type',\n 'width',\n 'format',\n 'editType',\n 'validationRules',\n 'allowEditing',\n 'expression',\n 'isPrimaryKey',\n 'customValidation'\n ];\n uiField.columns = uiField.columns.map((col) => {\n const filteredCol = {};\n requiredColumnProps.forEach(prop => {\n if (col[prop] !== undefined) {\n filteredCol[prop] = col[prop];\n }\n });\n return filteredCol;\n });\n }\n return uiField;\n}\n/**\n * @private\n */\nexport function mergeSchema(unified) {\n // Create lookup map for O(1) access to unified properties\n const propertyMap = new Map();\n const unifiedPropKeys = Object.keys(unified.properties);\n for (const id of unifiedPropKeys) {\n propertyMap.set(id, unified.properties[id]);\n }\n // Track processed field IDs to prevent duplicates\n const processedFieldIds = new Set();\n // Recursive function to process layout nodes\n const processLayoutNodes = (layoutNodes) => {\n const components = [];\n for (const node of layoutNodes) {\n if (node.type === 'field') {\n const fieldNode = node;\n // ✅ DEDUPLICATION: Skip if we've already processed this field\n if (processedFieldIds.has(fieldNode.propertyId)) {\n continue;\n }\n processedFieldIds.add(fieldNode.propertyId);\n const unifiedField = propertyMap.get(fieldNode.propertyId);\n if (!unifiedField) {\n // console.warn(`Field ${fieldNode.propertyId} in layout not found in schema`);\n // Generate fallback component\n const fallbackComponent = {\n id: fieldNode.propertyId || generateId('textbox'),\n name: generateName(''),\n type: 'textbox',\n label: 'Unknown Field',\n _configured: true\n };\n components.push(fallbackComponent);\n }\n else {\n components.push(mergeUnifiedField(unifiedField));\n }\n }\n else if (node.type === 'table') {\n const tableNode = node;\n const tableComponent = Object.assign({ id: tableNode.id || generateId('table'), name: tableNode.name, type: 'table', label: tableNode.label || 'Table', cssClass: tableNode.cssClass, hideBorders: tableNode.hideBorders, rows: tableNode.rows, columns: tableNode.cols, columnWidths: tableNode.columnWidths, tableCells: [], _configured: true }, (tableNode.conditions ? { conditions: tableNode.conditions } : {}));\n // Process table cells recursively\n tableNode.cells.forEach((row) => {\n const cellRow = [];\n row.forEach((cell) => {\n const cellComponents = processLayoutNodes(cell.children);\n cellRow.push(cellComponents);\n });\n tableComponent.tableCells.push(cellRow);\n });\n components.push(tableComponent);\n }\n else if (node.type === 'panel') {\n const panelNode = node;\n const panelComponent = Object.assign({ id: panelNode.id || generateId('panel'), type: 'panel', name: panelNode.name, cssClass: panelNode.cssClass, hideBorders: panelNode.hideBorders, hideLabel: panelNode.hideLabel, label: panelNode.label || 'Panel', children: processLayoutNodes(panelNode.children), _configured: true }, (panelNode.conditions ? { conditions: panelNode.conditions } : {}));\n components.push(panelComponent);\n }\n else if (node.type === 'tabs') {\n const tabsNode = node;\n const tabsComponent = Object.assign({ id: tabsNode.id || generateId('tabs'), type: 'tabs', name: tabsNode.name, label: tabsNode.label || 'Tabs', cssClass: tabsNode.cssClass, tabOptions: tabsNode.tabOptions, tabItems: [], _configured: true }, (tabsNode.conditions ? { conditions: tabsNode.conditions } : {}));\n // Process tabs recursively\n tabsNode.tabs.forEach((tab) => {\n tabsComponent.tabItems.push({\n header: tab.header,\n content: processLayoutNodes(tab.children)\n });\n });\n components.push(tabsComponent);\n }\n else if (node.type === 'card') {\n const cardNode = node;\n const cardComponent = Object.assign({ id: cardNode.id || generateId('card'), type: 'card', name: cardNode.name, label: cardNode.label || 'Card', cssClass: cardNode.cssClass, hideLabel: cardNode.hideLabel, children: processLayoutNodes(cardNode.children), _configured: true }, (cardNode.conditions ? { conditions: cardNode.conditions } : {}));\n // Add card-specific properties\n if (cardNode.cardTitle !== undefined)\n cardComponent.cardTitle = cardNode.cardTitle;\n if (cardNode.cardSubtitle !== undefined)\n cardComponent.cardSubtitle = cardNode.cardSubtitle;\n components.push(cardComponent);\n }\n }\n return components;\n };\n // Process root layout nodes\n let components;\n if (!unified.layout || unified.layout.length === 0) {\n // If layout is undefined or empty, generate a flat layout from properties\n const flatPropKeys = Object.keys(unified.properties);\n components = flatPropKeys.map((key) => {\n return mergeUnifiedField(unified.properties[key]);\n });\n }\n else {\n components = processLayoutNodes(unified.layout);\n }\n return Object.assign({ version: unified.version, components }, (unified.settings ? { settings: unified.settings } : {}));\n}\n/**\n * @private\n */\nfunction mergeUnifiedField(unifiedField) {\n const hasOptions = unifiedField.options !== undefined && unifiedField.options.length > 0;\n const component = {\n id: unifiedField.id || generateId(unifiedField.widget || inferWidgetFromType(unifiedField.type, unifiedField.format, hasOptions)),\n name: unifiedField.name,\n type: (unifiedField.widget || inferWidgetFromType(unifiedField.type, unifiedField.format, hasOptions)),\n label: unifiedField.label || unifiedField.id,\n };\n // Copy all data and UI properties from unified field\n const dataSchemaProps = new Set([\n 'id', 'type', 'name', 'label', 'format', 'widget', 'defaultValue', 'required', 'options', 'expressionValue',\n 'minLength', 'maxLength', 'minimum', 'maximum', 'minValue', 'maxValue',\n 'minDate', 'maxDate', 'minTime', 'maxTime', 'regex', 'pattern', 'content', 'buttonType', 'textboxType'\n ]);\n Object.keys(unifiedField).forEach(key => {\n if (!dataSchemaProps.has(key) && key !== 'id' && key !== 'name' && key !== 'type' && key !== 'label') {\n component[key] = unifiedField[key];\n }\n });\n // Copy specific data properties\n if (unifiedField.defaultValue !== undefined)\n component.defaultValue = unifiedField.defaultValue;\n if (unifiedField.expressionValue !== undefined)\n component.expressionValue = unifiedField.expressionValue;\n if (unifiedField.required !== undefined)\n component.required = unifiedField.required;\n if (unifiedField.content !== undefined)\n component.content = unifiedField.content;\n if (unifiedField.buttonType !== undefined)\n component.buttonType = unifiedField.buttonType;\n if (unifiedField.textboxType !== undefined)\n component.textboxType = unifiedField.textboxType;\n if (unifiedField.options !== undefined)\n component.options = unifiedField.options;\n if (unifiedField.minLength !== undefined)\n component.minLength = unifiedField.minLength;\n if (unifiedField.maxLength !== undefined)\n component.maxLength = unifiedField.maxLength;\n if (unifiedField.minValue !== undefined)\n component.minValue = unifiedField.minValue;\n if (unifiedField.maxValue !== undefined)\n component.maxValue = unifiedField.maxValue;\n if (unifiedField.minDate !== undefined)\n component.minDate = unifiedField.minDate;\n if (unifiedField.maxDate !== undefined)\n component.maxDate = unifiedField.maxDate;\n if (unifiedField.minTime !== undefined)\n component.minTime = unifiedField.minTime;\n if (unifiedField.maxTime !== undefined)\n component.maxTime = unifiedField.maxTime;\n if (unifiedField.pattern !== undefined)\n component.regex = unifiedField.pattern;\n return component;\n}\n/**\n * @private\n */\nexport function inferWidgetFromType(type, format, hasOptions) {\n if (type === 'string') {\n if (format === 'date')\n return 'date';\n if (format === 'date-time')\n return 'dateTime';\n if (format === 'time')\n return 'time';\n if (format === 'email')\n return 'email';\n if (format === 'url')\n return 'url';\n // If options are present, default to dropdown for string types\n if (hasOptions)\n return 'dropdown';\n return 'textbox';\n }\n if (type === 'number')\n return 'number';\n if (type === 'boolean')\n return 'checkbox';\n if (type === 'array') {\n // For array type with options, use multiselect\n return 'multiselect';\n }\n if (type === 'button')\n return 'button';\n if (type === 'message')\n return 'message';\n if (type === 'sign')\n return 'signature';\n if (type === 'image')\n return 'imageEditor';\n if (type === 'file')\n return 'fileUpload';\n if (type === 'color')\n return 'colorPicker';\n if (type === 'grid')\n return 'dataGrid';\n if (type === 'any')\n return 'textbox';\n return 'textbox';\n}\n/**\n * @private\n */\nfunction levenshteinDistance(str1, str2) {\n const len1 = str1.length;\n const len2 = str2.length;\n const matrix = [];\n // Initialize matrix\n for (let i = 0; i <= len1; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= len2; j++) {\n matrix[0][j] = j;\n }\n // Fill matrix\n for (let i = 1; i <= len1; i++) {\n for (let j = 1; j <= len2; j++) {\n const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j - 1] + cost // substitution\n );\n }\n }\n return matrix[len1][len2];\n}\n/**\n * @private\n */\nfunction calculateSimilarity(str1, str2) {\n const distance = levenshteinDistance(str1.toLowerCase(), str2.toLowerCase());\n const maxLen = Math.max(str1.length, str2.length);\n if (maxLen === 0)\n return 100;\n return Math.round(((maxLen - distance) / maxLen) * 100);\n}\n/**\n * @private\n */\nexport function matchFieldWithIDPreservation(newDataField, existingUISchema) {\n // 1. Try exact ID match first\n if (existingUISchema.properties[newDataField.id]) {\n return {\n existingId: newDataField.id,\n newDataId: newDataField.id,\n confidence: 'exact',\n method: 'id',\n similarity: 100\n };\n }\n // 2. Try fuzzy match by ID (check if existing ID starts with new ID or vice versa)\n let bestIdMatch = null;\n const idMatchKeys = Object.keys(existingUISchema.properties);\n for (const existingId of idMatchKeys) {\n const existingUIField = existingUISchema.properties[existingId];\n // Skip if this is a layout container\n if (existingUIField.widget === 'table' || existingUIField.widget === 'panel' || existingUIField.widget === 'tabs') {\n continue;\n }\n // Check if one ID is a prefix of the other (common case: radio_123 vs radio_123_456)\n const newId = newDataField.id || '';\n const isPrefix = existingId.indexOf(newId + '_') === 0 || newId.indexOf(existingId + '_') === 0;\n if (isPrefix) {\n const similarity = Math.round((Math.min(newId.length, existingId.length) / Math.max(newId.length, existingId.length)) * 100);\n if (!bestIdMatch || (bestIdMatch.similarity && similarity > bestIdMatch.similarity)) {\n bestIdMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: similarity >= 90 ? 'high' : similarity >= 70 ? 'medium' : 'low',\n method: 'id',\n similarity\n };\n }\n }\n else {\n // Try Levenshtein distance for ID similarity\n const idSimilarity = calculateSimilarity(existingId, newId);\n // Only consider as potential match if very similar (≥85%)\n if (idSimilarity >= 85) {\n if (!bestIdMatch || (bestIdMatch.similarity && idSimilarity > bestIdMatch.similarity)) {\n bestIdMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: idSimilarity >= 90 ? 'high' : 'medium',\n method: 'id',\n similarity: idSimilarity\n };\n }\n }\n }\n }\n // If we found a good ID match, use it\n if (bestIdMatch && bestIdMatch.similarity && bestIdMatch.similarity >= 70) {\n //console.log(`ID fuzzy match: \"${newDataField.id}\" → \"${bestIdMatch.existingId}\" (${bestIdMatch.similarity}% similar)`);\n return bestIdMatch;\n }\n // 3. Try fuzzy match by label\n let bestLabelMatch = null;\n const labelMatchKeys = Object.keys(existingUISchema.properties);\n for (const existingId of labelMatchKeys) {\n const existingUIField = existingUISchema.properties[existingId];\n // Skip if this is a layout container\n if (existingUIField.widget === 'table' || existingUIField.widget === 'panel' || existingUIField.widget === 'tabs') {\n continue;\n }\n // Get label from UI field or try to extract from ID\n const existingLabel = existingUIField.label || existingId;\n const newLabel = newDataField.label || newDataField.id;\n if (!existingLabel || !newLabel)\n continue;\n const similarity = calculateSimilarity(existingLabel, newLabel);\n // Update best match if this is better\n if (!bestLabelMatch || (bestLabelMatch.similarity && similarity > bestLabelMatch.similarity)) {\n bestLabelMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: similarity >= 90 ? 'high' : similarity >= 70 ? 'medium' : 'low',\n method: similarity === 100 ? 'label-exact' : 'label-fuzzy',\n similarity\n };\n }\n }\n // 4. Return best label match if similarity is good enough (≥70%)\n if (bestLabelMatch && bestLabelMatch.similarity && bestLabelMatch.similarity >= 70) {\n //console.log(`Label fuzzy match: \"${newDataField.label}\" → \"${bestLabelMatch.existingId}\" (${bestLabelMatch.similarity}% similar)`);\n return bestLabelMatch;\n }\n // 5. No match found - use new ID\n return {\n existingId: newDataField.id,\n newDataId: newDataField.id,\n confidence: 'exact',\n method: 'new',\n similarity: 100\n };\n}\n/**\n * @private\n */\nexport function mergeWithIDRemapping(newDataSchema, existingUISchema) {\n const idMap = new Map(); // newId → canonicalId\n const matchResults = [];\n // Build ID mapping table\n const newDataPropKeys = Object.keys(newDataSchema.properties);\n for (const newId of newDataPropKeys) {\n const dataField = newDataSchema.properties[newId];\n const match = matchFieldWithIDPreservation(dataField, existingUISchema);\n matchResults.push(match);\n idMap.set(newId, match.existingId || generateId(labelToFieldKey(dataField.label || '')));\n // Log remapping if IDs differ\n if (match.newDataId !== match.existingId) {\n //console.log(`ID remapped: ${match.newDataId} → ${match.existingId} (${match.method}, ${match.similarity}% similar)`);\n }\n }\n // Remap all data field IDs to canonical IDs\n const remappedDataFields = {};\n const newDataPropKeys2 = Object.keys(newDataSchema.properties);\n for (const newId of newDataPropKeys2) {\n const dataField = newDataSchema.properties[newId];\n const canonicalId = idMap.get(newId) || newId;\n remappedDataFields[canonicalId] = Object.assign({}, dataField, { id: canonicalId // Use canonical ID\n });\n }\n // Get existing field IDs from the layout\n const existingFieldIds = extractFieldIdsFromLayout(existingUISchema.layout);\n const newFieldIds = Object.keys(remappedDataFields).filter(id => !existingFieldIds.has(id));\n //console.log(`📋 Existing fields in layout: ${existingFieldIds.size}, New fields: ${newFieldIds.length}`);\n // ✅ CHECK IF SUBMIT BUTTON EXISTS: Prevent duplicate submit buttons\n const existingUIValues = Object.keys(existingUISchema.properties).map((k) => existingUISchema.properties[k]);\n const hasExistingSubmitButton = existingUIValues.some((uiField) => uiField.widget === 'button');\n // Filter out new submit buttons if one already exists\n const filteredNewFieldIds = newFieldIds.filter((id) => {\n const dataField = remappedDataFields[id];\n if ((dataField.type === 'button' && dataField.buttonType === 'submit') && hasExistingSubmitButton) {\n //console.log(`⚠️ Skipping new button \"${dataField.label}\" - submit button already exists in layout`);\n return false;\n }\n return true;\n });\n //console.log(`📋 New fields after filtering: ${filteredNewFieldIds.length}`);\n // Update layout references to use canonical IDs\n let remappedLayout = remapLayoutIds(existingUISchema.layout, idMap);\n // Create UI properties for new fields that don't have them yet\n // ✅ Ensure all existing UI properties have _configured flag (add if missing from imported JSON)\n const enhancedUIProperties = {};\n const existingUIKeys = Object.keys(existingUISchema.properties);\n for (const key of existingUIKeys) {\n const uiField = existingUISchema.properties[key];\n enhancedUIProperties[key] = Object.assign({}, uiField, { _configured: uiField._configured !== undefined ? uiField._configured : true });\n }\n if (filteredNewFieldIds.length > 0) {\n //console.log(`➕ Adding ${filteredNewFieldIds.length} new fields to layout`);\n // Check if submit button exists and is at the last position (not moved by user)\n const lastNode = remappedLayout[remappedLayout.length - 1];\n const isSubmitAtEnd = lastNode && lastNode.type === 'field' &&\n enhancedUIProperties[lastNode.propertyId] && enhancedUIProperties[lastNode.propertyId].widget === 'button';\n const newFieldNodes = [];\n // Generate default UI properties for new fields\n filteredNewFieldIds.forEach(id => {\n const dataField = remappedDataFields[id];\n const hasOptions = dataField.options !== undefined && dataField.options.length > 0;\n const widget = inferWidgetFromType(dataField.type, dataField.format, hasOptions);\n // ✅ Add default button styling\n const uiProperties = {\n widget,\n label: dataField.label,\n _configured: true\n };\n // Add primary styling for buttons\n if (widget === 'button') {\n uiProperties.isPrimary = true;\n uiProperties.name = 'defaultFormSubmit';\n uiProperties.cssClass = 'e-primary';\n }\n enhancedUIProperties[id] = uiProperties;\n newFieldNodes.push({\n type: 'field',\n propertyId: id\n });\n });\n // Apply same logic as App.tsx: insert before submit if it's at the end\n if (isSubmitAtEnd) {\n // Insert new fields BEFORE the submit button\n remappedLayout = [...remappedLayout.slice(0, -1), ...newFieldNodes, remappedLayout[remappedLayout.length - 1]];\n //console.log(`📐 Layout rebuilt: new fields inserted before submit button at end`);\n }\n else {\n // Submit moved or doesn't exist - add new fields at end\n remappedLayout = [...remappedLayout, ...newFieldNodes];\n //console.log(`📐 Layout rebuilt: new fields added at end`);\n }\n }\n // Merge to FormSchema using unified schema\n const unifiedProperties = {};\n Object.keys(remappedDataFields).forEach(fieldKey => {\n const dataField = remappedDataFields[fieldKey];\n const uiField = enhancedUIProperties[fieldKey];\n unifiedProperties[fieldKey] = Object.assign({}, dataField, uiField, { widget: (uiField && uiField.widget) || inferWidgetFromType(dataField.type, dataField.format, dataField.options !== undefined) });\n });\n const mergedSchema = mergeSchema(Object.assign({ version: newDataSchema.version, properties: unifiedProperties, layout: remappedLayout }, (newDataSchema.settings ? { settings: newDataSchema.settings } : {})));\n return mergedSchema;\n}\n/**\n * @private\n */\nfunction remapLayoutIds(layout, idMap) {\n return layout.map(node => {\n if (node.type === 'field') {\n const fieldNode = node;\n const canonicalId = idMap.get(fieldNode.propertyId) || fieldNode.propertyId;\n return Object.assign({}, fieldNode, { propertyId: canonicalId });\n }\n else if (node.type === 'table') {\n const tableNode = node;\n return Object.assign({}, tableNode, { cells: tableNode.cells.map(row => row.map(cell => (Object.assign({}, cell, { children: remapLayoutIds(cell.children, idMap) })))) });\n }\n else if (node.type === 'panel') {\n const panelNode = node;\n return Object.assign({}, panelNode, { children: remapLayoutIds(panelNode.children, idMap) });\n }\n else if (node.type === 'tabs') {\n const tabsNode = node;\n return Object.assign({}, tabsNode, { tabs: tabsNode.tabs.map(tab => (Object.assign({}, tab, { children: remapLayoutIds(tab.children, idMap) }))) });\n }\n else if (node.type === 'card') {\n const cardNode = node;\n return Object.assign({}, cardNode, { children: remapLayoutIds(cardNode.children, idMap) });\n }\n return node;\n });\n}\n/**\n * @private\n */\nexport function extractFieldIdsFromLayout(layout) {\n const fieldIds = new Set();\n const stack = [...layout];\n while (stack.length > 0) {\n const node = stack.shift();\n if (node.type === 'field') {\n fieldIds.add(node.propertyId);\n }\n else if (node.type === 'table') {\n node.cells.forEach(row => row.forEach(cell => stack.push(...cell.children)));\n }\n else if (node.type === 'panel') {\n stack.push(...node.children);\n }\n else if (node.type === 'tabs') {\n node.tabs.forEach(tab => stack.push(...tab.children));\n }\n else if (node.type === 'card') {\n stack.push(...node.children);\n }\n }\n return fieldIds;\n}\n/**\n * @private\n */\nexport function convertComponentsToDataSchema(components) {\n const properties = {};\n const seenComponentIds = new Set(); // Track component IDs to prevent duplicates\n // Flatten all components (including nested ones)\n const stack = [...components];\n while (stack.length > 0) {\n const comp = stack.shift();\n // Infer semantic type from component\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[comp.type];\n // Skip presentation-only widgets (button, message, etc.) - they have null semantic type\n if (semanticType === null) {\n // Still process nested children for layout containers\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n continue; // Skip adding to data schema\n }\n // ✅ DEDUPLICATION: Skip if we've already processed this component ID\n if (seenComponentIds.has(comp.id)) {\n //console.log(`⚠️ Skipping duplicate component: ${comp.id} (${comp.label})`);\n // Still process nested children\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n continue;\n }\n seenComponentIds.add(comp.id);\n // Generate fieldKey from label or ID\n const baseFieldKey = labelToFieldKey(comp.label || comp.id, comp.id);\n const fieldKey = makeUniqueFieldKey(baseFieldKey, new Set(Object.keys(properties)), comp.id);\n const dataField = extractDataField(comp, semanticType || { type: 'any' });\n properties[fieldKey] = dataField;\n // Process nested children\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n // Process tab items\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n // Process table cells\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n // cell is FormNode[], not an object with .components\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n }\n return {\n version: '1.0',\n properties\n };\n}\n","/**\n * ExpressionParser - Parse and compile expressions\n *\n * Converts string expressions into safe, compiled functions\n * Supports field references, operators, functions, and conditionals\n * @private\n */\nexport class ExpressionParser {\n constructor() {\n this.supportedFunctions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS', 'INCLUDES', 'CONTAINS', 'ISNAN', 'SUPPORTEDVALUESOF', 'TOSTRING', 'DATE', 'GETTIME',\n 'EVERY', 'SOME'\n ];\n this.availableFields = new Map();\n }\n /**\n * Initialize parser with available fields for type validation\n */\n setAvailableFields(fields) {\n this.availableFields.clear();\n fields.forEach(field => {\n this.availableFields.set(field.name, field);\n });\n }\n validateFieldOperations(expression) {\n const errors = [];\n // Skip if no fields available\n if (this.availableFields.size === 0) {\n return errors;\n }\n // Invalid operators for string fields (allow only + for concatenation)\n const stringInvalidOps = ['-', '*', '/', '%', '^'];\n // All operators invalid for date fields\n const dateInvalidOps = ['-', '*', '/', '%', '^', '+'];\n // Track reported operator positions to avoid duplicates\n const reportedOperators = new Set();\n // Extract all field references and their surrounding operators\n const fieldRefPattern = /(\\{[^}]+\\})/g;\n let match;\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const fieldRef = match[0];\n const fieldName = fieldRef.slice(1, -1); // Remove { }\n const field = this.availableFields.get(fieldName);\n if (!field)\n continue; // Field not found in available fields, skip validation\n const fieldIndex = match.index;\n const fieldEndIndex = fieldIndex + fieldRef.length;\n // Get context around field reference (including spaces)\n const textBefore = expression.substring(Math.max(0, fieldIndex - 10), fieldIndex);\n const textAfter = expression.substring(fieldEndIndex, Math.min(expression.length, fieldEndIndex + 10));\n // Extract the operator if present (skip spaces)\n const operatorBefore = textBefore.replace(/\\s+$/, '').slice(-1);\n const operatorAfter = textAfter.replace(/^\\s+/, '').charAt(0);\n // Calculate actual position of operators in the original expression\n const textBeforeTrimmed = textBefore.replace(/\\s+$/, '');\n const textAfterTrimmed = textAfter.replace(/^\\s+/, '');\n const operatorBeforePos = fieldIndex - (textBefore.length - textBeforeTrimmed.length) - 1;\n const operatorAfterPos = fieldEndIndex + (textAfter.length - textAfterTrimmed.length);\n // For STRING fields: reject all operators except +\n if (field.type === 'string' && !field.format) {\n if (operatorBefore && stringInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorBefore}' operation on string field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && stringInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorAfter}' operation on string field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n }\n // For DATE fields: reject ALL operators including +\n if (field.format === 'date' || field.format === 'date-time' || field.format === 'time') {\n if (operatorBefore && dateInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorBefore}' operation on date field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && dateInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorAfter}' operation on date field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n }\n }\n return errors;\n }\n /**\n * Validate expression syntax\n */\n validate(expression) {\n const errors = [];\n if (!expression || expression.trim() === '') {\n return { valid: true, errors: [] };\n }\n // Check for unbalanced braces\n const openBraces = (expression.match(/\\{/g) || []).length;\n const closeBraces = (expression.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push('Unbalanced braces in expression');\n }\n // Check for unbalanced parentheses\n const openParens = (expression.match(/\\(/g) || []).length;\n const closeParens = (expression.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push('Unbalanced parentheses in expression');\n }\n // Check for invalid function calls\n const funcPattern = /(\\w+)\\s*\\(/g;\n let match;\n while ((match = funcPattern.exec(expression)) !== null) {\n const funcName = match[1].toUpperCase();\n // Only validate uppercase-named functions\n if (funcName === funcName.toUpperCase() && this.supportedFunctions.indexOf(funcName) === -1) {\n errors.push(`Unknown function: ${funcName}`);\n }\n }\n // Validate field operations based on field types\n const fieldOpErrors = this.validateFieldOperations(expression);\n errors.push(...fieldOpErrors);\n return {\n valid: errors.length === 0,\n errors\n };\n }\n /**\n * Compile expression to executable function\n */\n compile(expression, options = {}) {\n try {\n // Set available fields for validation if provided\n if (options.availableFields && Array.isArray(options.availableFields)) {\n this.setAvailableFields(options.availableFields);\n }\n // Validate expression before compiling\n const validation = this.validate(expression);\n if (!validation.valid) {\n return () => null;\n }\n // Replace field references with context lookups\n let compiled = expression;\n // Handle field references FIRST (this includes refs inside ${...})\n compiled = this.compileFieldReferences(compiled);\n compiled = options.isCustomValidation ? this.compileInputReferences(compiled) : compiled;\n // Handle bare function calls SECOND (e.g., SUM([...]) without braces)\n compiled = this.compileBareFunctionCalls(compiled);\n // Handle math expressions THIRD (now ${} and {} contain already-replaced refs)\n compiled = this.compileMatrixExpressions(compiled);\n return (context) => {\n try {\n // This uses Function constructor with controlled context binding\n // which is safer than eval() but still allows expressions\n // Note: compiled expression already uses context['field'] syntax\n const func = new Function('context', `\n try {\n return ${compiled};\n } catch (e) {\n return null;\n }\n `);\n return func(context);\n }\n catch (e) {\n return null;\n }\n };\n }\n catch (error) {\n return () => null;\n }\n }\n // Private helpers\n compileMatrixExpressions(expression) {\n let compiled = expression;\n const constants = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'Math'];\n const functions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n // Create fresh regex each time to avoid lastIndex issues with g flag\n const mathExprPattern = /\\$?\\{([^}]+)\\}/g;\n // Process ${...} and {...} blocks: replace bare identifiers with context lookups\n compiled = compiled.replace(mathExprPattern, (_match, content) => {\n let transformed = content;\n // STEP 1: Handle function calls first\n // Match function names followed by ( and prefix with context.\n // Use negative lookbehind to avoid double-replacing (e.g., context.SUM)\n functions.forEach(fn => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const funcCallRegex = new RegExp(`(?<!context\\\\.)\\\\b${fn}\\\\b(?=\\\\s*\\\\()`, 'g');\n transformed = transformed.replace(funcCallRegex, `context.${fn}`);\n });\n constants.forEach(constant => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const constantRegex = new RegExp(`\\\\b${constant}\\\\b`, 'g');\n transformed = transformed.replace(constantRegex, `context.${constant}`);\n });\n // Return as parenthesized expression\n return `(${transformed})`;\n });\n return compiled;\n }\n compileBareFunctionCalls(expression) {\n let compiled = expression;\n const functions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n // Handle bare function calls like SUM([...]) that are not inside ${...} or {...}\n // Use negative lookbehind to avoid matching if already preceded by context.\n functions.forEach(fn => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const funcCallRegex = new RegExp(`(?<!context\\\\.)\\\\b${fn}\\\\b(?=\\\\s*\\\\()`, 'g');\n compiled = compiled.replace(funcCallRegex, `context.${fn}`);\n });\n return compiled;\n }\n compileFieldReferences(expression) {\n let compiled = expression;\n // Create fresh regex each time to avoid lastIndex issues with g flag\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n // Replace {fieldName} with context['fieldName'] or field access\n compiled = compiled.replace(fieldRefPattern, (match, ref) => {\n // Handle escaped braces\n if (ref.startsWith('\\\\') && ref.endsWith('\\\\')) {\n return match; // Keep as is\n }\n // Handle nested paths like {customer.name}\n return `context['${ref.replace(/\\./g, '\\'].[')}']`;\n });\n return compiled;\n }\n compileInputReferences(expression) {\n const compiled = expression;\n // First, protect string literals to avoid replacing 'input' inside strings\n const strings = [];\n let stringProtected = compiled;\n // eslint-disable-next-line security/detect-unsafe-regex\n stringProtected = stringProtected.replace(/(['\"`])(?:(?=(\\\\?))\\2.)*?\\1/g, (match) => {\n strings.push(match);\n return `__STRING_${strings.length - 1}__`;\n });\n // Case 1: Replace input.property with context['input'].property\n const inputPropertyPattern = /(?<!context\\[')\\binput\\./g;\n stringProtected = stringProtected.replace(inputPropertyPattern, 'context[\\'input\\'].');\n // Case 2: Replace bare 'input' with context['input']\n // Use negative lookbehind to avoid replacing if already preceded by context.'\n const inputPattern = /(?<!context\\[')\\binput\\b(?!\\s*[(\\.])/g;\n stringProtected = stringProtected.replace(inputPattern, 'context[\\'input\\']');\n // Restore string literals\n let result = stringProtected;\n strings.forEach((str, idx) => {\n result = result.replace(`__STRING_${idx}__`, str);\n });\n return result;\n }\n}\n","/**\n * DependencyTracker - Extract and track field dependencies\n *\n * Analyzes expressions to find field references and build dependency graphs\n * Detects circular dependencies and calculates evaluation order\n * @private\n */\nexport class DependencyTracker {\n constructor() {\n this.escapedBracePattern = /\\\\{.*?\\\\}/g;\n }\n /**\n * Extract field names referenced in expression\n */\n extractFieldReferences(expression) {\n if (!expression)\n return [];\n const refs = new Set();\n let match;\n // Remove escaped braces first\n const cleanExpression = expression.replace(this.escapedBracePattern, '');\n // Extract field references from {field} syntax\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n while ((match = fieldRefPattern.exec(cleanExpression)) !== null) {\n const ref = match[1].trim();\n // Skip if it's a function call or operator\n if (!this.isFunctionCall(ref) && !this.isOperator(ref)) {\n // Extract field name from nested paths\n const fieldName = ref.split(/[.\\[\\]]/)[0].trim();\n if (fieldName && !this.isKeyword(fieldName)) {\n refs.add(fieldName);\n }\n }\n }\n // Extract identifiers from ${...} math expressions\n const mathExprPattern = /\\$\\{([^}]+)\\}/g;\n while ((match = mathExprPattern.exec(cleanExpression)) !== null) {\n const mathExpr = match[1];\n // Extract all identifiers from the math expression\n // Match word boundaries followed by identifier characters\n // But skip if followed by ( or . (those are function calls or property access)\n const identPattern = /\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\s*[(\\.])/g;\n let idMatch;\n while ((idMatch = identPattern.exec(mathExpr)) !== null) {\n const identifier = idMatch[1];\n // Skip keywords and constants\n if (!this.isKeyword(identifier) && identifier !== 'Math') {\n refs.add(identifier);\n }\n }\n }\n return Array.from(refs);\n }\n /**\n * Build dependency graph from multiple expressions\n */\n buildGraph(expressions) {\n const graph = {};\n const keys = Object.keys(expressions);\n for (const fieldName of keys) {\n const deps = this.extractFieldReferences(expressions[fieldName]);\n graph[fieldName] = deps;\n }\n return graph;\n }\n /**\n * Detect circular dependencies using DFS\n */\n detectCircularDependencies(graph) {\n const visited = new Set();\n const recursionStack = new Set();\n const cycles = [];\n const visit = (node, path) => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n visit(dep, [...path]);\n }\n else if (recursionStack.has(dep)) {\n const cycleStart = path.indexOf(dep);\n cycles.push([...path.slice(cycleStart), dep]);\n }\n }\n recursionStack.delete(node);\n };\n for (const node of Object.keys(graph)) {\n if (!visited.has(node)) {\n visit(node, []);\n }\n }\n return cycles;\n }\n /**\n * Get topological sort order for evaluation\n */\n getTopologicalOrder(graph) {\n const visited = new Set();\n const order = [];\n const visit = (node) => {\n if (visited.has(node))\n return;\n visited.add(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (graph[dep]) {\n visit(dep);\n }\n }\n order.push(node);\n };\n for (const node of Object.keys(graph)) {\n visit(node);\n }\n return order;\n }\n // Private helpers\n isFunctionCall(ref) {\n return /^\\w+\\s*\\(/.test(ref);\n }\n isOperator(ref) {\n return /^[+\\-*/()=!<>&|]/.test(ref);\n }\n isKeyword(name) {\n const keywords = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'and', 'or', 'in'];\n return keywords.indexOf(name.toUpperCase()) !== -1;\n }\n}\n","import { ExpressionParser } from './expression-parser';\nimport { DependencyTracker } from './dependency-tracker';\nimport { Internationalization } from '@syncfusion/ej2-base';\n/**\n * ExpressionEngine - Core evaluation engine\n *\n * Safely evaluates user-defined expressions against form state\n * Supports field references, math operations, functions, and conditionals\n * @private\n */\nexport class ExpressionEngine {\n constructor() {\n this.evaluationCache = new Map();\n this.compiledFunctions = new Map();\n this.parser = new ExpressionParser();\n this.dependencyTracker = new DependencyTracker();\n }\n /**\n * Evaluate expression against form values\n */\n evaluate(expression, formValues, options = {}, isCustomValidation = false) {\n try {\n if (!expression || expression.trim() === '') {\n return null;\n }\n const { timeout = 5000, maxDepth = 10, locale = 'en-US', throwOnError = false } = options;\n // Check cache\n const cacheKey = this.getCacheKey(expression, formValues);\n if (!isCustomValidation && this.evaluationCache.has(cacheKey)) {\n return this.evaluationCache.get(cacheKey);\n }\n // Get or compile function\n let fn = this.compiledFunctions.get(expression);\n if (!fn) {\n fn = this.parser.compile(expression, {\n timeout,\n maxDepth,\n locale,\n isCustomValidation\n });\n this.compiledFunctions.set(expression, fn);\n }\n // Execute with context\n const context = this.buildContext(formValues);\n const startTime = Date.now();\n const result = fn(context);\n // Validate timeout\n if (Date.now() - startTime > timeout) {\n const error = new Error(`Expression evaluation exceeded timeout of ${timeout}ms`);\n if (throwOnError)\n throw error;\n return null;\n }\n // Cache result\n this.evaluationCache.set(cacheKey, result);\n return result;\n }\n catch (error) {\n if (options.throwOnError) {\n throw error;\n }\n return null;\n }\n }\n /**\n * Extract field names referenced in expression\n */\n extractDependencies(expression) {\n if (!expression)\n return [];\n return this.dependencyTracker.extractFieldReferences(expression);\n }\n /**\n * Build dependency graph for all expressions\n */\n buildDependencyGraph(components) {\n const graph = {};\n components.forEach(comp => {\n if (comp.expressionValue) {\n const deps = this.extractDependencies(comp.expressionValue);\n graph[comp.name] = deps;\n }\n });\n return graph;\n }\n /**\n * Detect circular dependencies\n */\n detectCircularDependencies(graph) {\n const visited = new Set();\n const recursionStack = new Set();\n const cycles = [];\n const visit = (node, path) => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n visit(dep, [...path]);\n }\n else if (recursionStack.has(dep)) {\n const cycleStart = path.indexOf(dep);\n cycles.push([...path.slice(cycleStart), dep]);\n }\n }\n recursionStack.delete(node);\n };\n for (const node of Object.keys(graph)) {\n if (!visited.has(node)) {\n visit(node, []);\n }\n }\n return cycles;\n }\n /**\n * Get topological order for evaluation\n */\n getTopologicalOrder(graph) {\n const visited = new Set();\n const order = [];\n const visit = (node) => {\n if (visited.has(node))\n return;\n visited.add(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n visit(dep);\n }\n order.push(node);\n };\n for (const node of Object.keys(graph)) {\n visit(node);\n }\n return order;\n }\n /**\n * Clear internal caches\n */\n clearCache() {\n this.evaluationCache.clear();\n this.compiledFunctions.clear();\n }\n // Private helper methods\n getCacheKey(expression, formValues) {\n // Simple cache key (in production, use better hashing)\n return `${expression}:${JSON.stringify(formValues)}`;\n }\n buildContext(formValues) {\n const intl = new Internationalization();\n const dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy',\n type: 'date'\n });\n return Object.assign({}, formValues, { \n // Constants\n PI: Math.PI, TRUE: true, FALSE: false, NULL: null, UNDEFINED: undefined, Math: Math, \n // Aggregate Functions\n SUM: (values) => Array.isArray(values) ? values.reduce((a, b) => Number(a) + Number(b), 0) : 0, AVG: (values) => {\n if (!Array.isArray(values) || values.length === 0)\n return 0;\n const sum = values.reduce((a, b) => Number(a) + Number(b), 0);\n return sum / values.length;\n }, MIN: (values) => Array.isArray(values) && values.length > 0 ? Math.min(...values.map(Number)) : 0, MAX: (values) => Array.isArray(values) && values.length > 0 ? Math.max(...values.map(Number)) : 0, COUNT: (values) => Array.isArray(values) ? values.length : 0, \n // Math Functions\n ROUND: (value, decimals = 0) => Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals), FLOOR: Math.floor, CEIL: Math.ceil, ABS: Math.abs, SQRT: Math.sqrt, \n // String Functions\n UPPER: (text) => String(text).toUpperCase(), LOWER: (text) => String(text).toLowerCase(), CONCAT: (...strings) => strings.map(String).join(''), LENGTH: (text) => String(text).length, TRIM: (text) => String(text).trim(), SUBSTRING: (text, start, length) => length !== undefined\n ? String(text).substr(start, length)\n : String(text).substr(start), \n // Date Functions\n TODAY: () => {\n const value = dFormatter(new Date());\n return value;\n }, AGE: (birthDate) => {\n const birth = typeof birthDate === 'string' ? new Date(birthDate) : birthDate;\n const today = new Date();\n let age = today.getFullYear() - birth.getFullYear();\n const monthDiff = today.getMonth() - birth.getMonth();\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {\n age--;\n }\n return age;\n }, DATEFORMAT: (date, format) => {\n const d = typeof date === 'string' ? new Date(date) : date;\n const formatter = intl.getDateFormat({\n format: format,\n type: 'date'\n });\n // Simple date format implementation\n return formatter(d);\n }, DATEDIFF: (date1, date2) => {\n const d1 = typeof date1 === 'string' ? new Date(date1) : date1;\n const d2 = typeof date2 === 'string' ? new Date(date2) : date2;\n return Math.floor((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));\n }, \n // Add days to a date (for date arithmetic like {date} + 5)\n ADDDAYS: (date, days) => {\n const d = typeof date === 'string' ? new Date(date) : new Date(date);\n d.setDate(d.getDate() + Number(days));\n return dFormatter(d);\n }, \n // Add days to a date (for date arithmetic like {date} + 5)\n SUBDAYS: (date, days) => {\n const d = typeof date === 'string' ? new Date(date) : new Date(date);\n d.setDate(d.getDate() - Number(days));\n return dFormatter(d);\n } });\n }\n}\n/**\n * ExpressionValidator - Validates expressions before runtime\n *\n * Checks syntax, validates field references, and detects circular dependencies\n * @private\n */\nexport class ExpressionValidator {\n constructor() {\n this.supportedFunctions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n this.keywords = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'and', 'or', 'in'];\n }\n /**\n * Validate expression against available fields\n */\n validate(expression, availableFields) {\n const errors = [];\n if (!expression || expression.trim() === '') {\n return errors; // Empty expression is valid\n }\n // Check syntax\n const syntaxErrors = this.validateSyntax(expression);\n errors.push(...syntaxErrors);\n // Check field references\n const fieldErrors = this.validateFieldReferences(expression, availableFields);\n errors.push(...fieldErrors);\n // Check function calls\n const funcErrors = this.validateFunctionCalls(expression);\n errors.push(...funcErrors);\n // Check field operations based on types\n const opErrors = this.validateFieldOperations(expression, availableFields);\n errors.push(...opErrors);\n return errors;\n }\n /**\n * Validate field operations - check for invalid operators on string/date types\n */\n validateFieldOperations(expression, availableFields) {\n const errors = [];\n // Skip if not field objects with type info\n if (!Array.isArray(availableFields) || availableFields.length === 0) {\n return errors;\n }\n const firstField = availableFields[0];\n if (typeof firstField === 'string') {\n return errors; // No type information available\n }\n // Build field map from objects\n const fieldMap = new Map();\n availableFields.forEach(field => {\n if (field && typeof field === 'object' && field.name) {\n fieldMap.set(field.name, field);\n }\n });\n if (fieldMap.size === 0)\n return errors;\n // Track reported operator positions to avoid duplicates\n const reportedOperators = new Set();\n // Check each field reference for invalid operations\n const fieldRefPattern = /(\\{[^}]+\\})/g;\n let match;\n // Invalid operators for string fields (allow only + for concatenation)\n const stringInvalidOps = ['-', '*', '/', '%', '^'];\n // Operators invalid for date fields (allow + for date arithmetic with numbers)\n const dateInvalidOps = ['-', '*', '/', '%', '^', '+'];\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const fieldRef = match[0];\n const fieldName = fieldRef.slice(1, -1); // Remove { }\n const field = fieldMap.get(fieldName);\n if (!field)\n continue;\n const fieldIndex = match.index;\n const fieldEndIndex = fieldIndex + fieldRef.length;\n // Get context around field reference (including spaces)\n const textBefore = expression.substring(Math.max(0, fieldIndex - 10), fieldIndex);\n const textAfter = expression.substring(fieldEndIndex, Math.min(expression.length, fieldEndIndex + 10));\n // Extract the operator if present (skip spaces)\n const operatorBefore = textBefore.replace(/\\s+$/, '').slice(-1);\n const operatorAfter = textAfter.replace(/^\\s+/, '').charAt(0);\n // Calculate actual position of operators in the original expression\n const textBeforeTrimmed = textBefore.replace(/\\s+$/, '');\n const textAfterTrimmed = textAfter.replace(/^\\s+/, '');\n const operatorBeforePos = fieldIndex - (textBefore.length - textBeforeTrimmed.length) - 1;\n const operatorAfterPos = fieldEndIndex + (textAfter.length - textAfterTrimmed.length);\n // For STRING fields (without format)\n if (field.type === 'string' && !field.format) {\n if (operatorBefore && stringInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorBefore}' operation on string field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && stringInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorAfter}' operation on string field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n }\n // For DATE fields - allow + with numbers, reject other operators\n if (field.format === 'date' || field.format === 'date-time' || field.format === 'time') {\n if (operatorBefore && dateInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorBefore}' operation on date field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && dateInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorAfter}' operation on date field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n // Allow + only when combined with numbers or number fields\n if (operatorAfter === '+') {\n const operandAfter = textAfter.replace(/^\\s+/, '').substring(1).trim();\n const isNumberField = /^\\{[^}]+\\}/.test(operandAfter) && fieldMap.get(operandAfter.slice(1, -1)) && fieldMap.get(operandAfter.slice(1, -1)).type === 'number';\n const isNumberLiteral = /^\\d+/.test(operandAfter);\n if (!isNumberField && !isNumberLiteral) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Date field '{${fieldName}}' can only be used with +number or +{numberField}, not '${operatorAfter}${operandAfter.substring(0, 10)}'`\n });\n reportedOperators.add(key);\n }\n }\n }\n if (operatorBefore === '+') {\n const trimmedBefore = textBefore.replace(/\\s+$/, '');\n const operandBefore = trimmedBefore.substring(0, trimmedBefore.length - 1).trim();\n const isNumberField = /\\{[^}]+\\}$/.test(operandBefore) && fieldMap.get(operandBefore.slice(operandBefore.lastIndexOf('{') + 1, -1)) && fieldMap.get(operandBefore.slice(operandBefore.lastIndexOf('{') + 1, -1)).type === 'number';\n const isNumberLiteral = /\\d+$/.test(operandBefore);\n if (!isNumberField && !isNumberLiteral) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Date field '{${fieldName}}' can only be used with +number or +{numberField}`\n });\n reportedOperators.add(key);\n }\n }\n }\n }\n }\n return errors;\n }\n validateSyntax(expression) {\n const errors = [];\n // Check balanced braces\n const openBraces = (expression.match(/\\{/g) || []).length;\n const closeBraces = (expression.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced braces in expression'\n });\n }\n // Check balanced parentheses\n const openParens = (expression.match(/\\(/g) || []).length;\n const closeParens = (expression.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced parentheses in expression'\n });\n }\n // Check balanced $ brackets\n const openDollar = (expression.match(/\\$\\{/g) || []).length;\n const closeDollar = (expression.match(/\\}/g) || []).length;\n if (openDollar > closeDollar) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced ${ } in expression'\n });\n }\n return errors;\n }\n /**\n * @private\n */\n validateFieldReferences(expression, availableFields) {\n const errors = [];\n // Skip field validation if availableFields is not properly populated\n // This allows expressions to work at runtime even if we can't validate field names at editor time\n if (!availableFields || availableFields.length === 0) {\n return errors;\n }\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n let match;\n // Handle both string[] and AvailableField[] formats\n let availableFieldsSet;\n if (typeof availableFields[0] === 'string') {\n availableFieldsSet = new Set(availableFields);\n }\n else {\n availableFieldsSet = new Set(availableFields.map(f => f.name));\n }\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const ref = match[1].trim();\n // Skip if it's a function call\n if (this.isFunctionCall(ref))\n continue;\n // Skip if it's a math expression (contains operators or numbers)\n // This distinguishes between {fieldName} and ${5 + 3}\n if (this.isMathExpression(ref))\n continue;\n // Extract field name from nested paths (e.g., \"customer.name\" -> \"customer\")\n const fieldName = ref.split(/[.\\[\\]]/)[0].trim();\n // Check if field exists\n if (fieldName && this.keywords.indexOf(fieldName.toUpperCase()) === -1) {\n if (!availableFieldsSet.has(fieldName)) {\n errors.push({\n type: 'UndefinedField',\n message: `Field '${fieldName}' is not defined in the form`,\n field: fieldName\n });\n }\n }\n }\n return errors;\n }\n validateFunctionCalls(expression) {\n const errors = [];\n const funcPattern = /(\\w+)\\s*\\(/g;\n let match;\n while ((match = funcPattern.exec(expression)) !== null) {\n const funcName = match[1];\n // Only validate uppercase functions (user-defined lowercase functions might be allowed)\n if (funcName === funcName.toUpperCase() && this.supportedFunctions.indexOf(funcName) === -1) {\n errors.push({\n type: 'InvalidFunction',\n message: `Unknown function: '${funcName}'. Supported functions: ${this.supportedFunctions.join(', ')}`\n });\n }\n }\n return errors;\n }\n isFunctionCall(ref) {\n return /^\\w+\\s*\\(/.test(ref);\n }\n isMathExpression(ref) {\n // Check if the expression contains math operators, numbers, or other non-field-name patterns\n // Math expressions like: \"5 + 3\", \"qty * 2\", \"age > 18\", \"sum([1,2,3])\"\n // should be skipped, while field references like \"fieldName\" or \"customer.name\" should be validated\n const mathOperatorPattern = /[\\+\\-\\*\\/\\%\\=\\<\\>\\!\\&\\|\\^\\~\\s\\d]/;\n return mathOperatorPattern.test(ref);\n }\n}\n","import { Internationalization } from '@syncfusion/ej2-base';\nimport { DataManager, Query, UrlAdaptor, WebApiAdaptor, ODataV4Adaptor } from '@syncfusion/ej2-data';\nimport { ConditionalRuleEngine } from './conditional-rule-engine';\nimport { UI_TYPE_TO_SEMANTIC_TYPE } from './json-converter';\nimport { ExpressionEngine } from './expressions/expression-engine';\n/**\n * @private\n */\nexport const VALIDATION_REGEX = {\n EMAIL: /^(?!.*\\.\\.)[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/,\n // eslint-disable-next-line security/detect-unsafe-regex\n URL: /^(https?:\\/\\/)?([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}(\\/[^\\s]*)?$/,\n DATE_ISO: /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/,\n DIGITS: /^[0-9]*$/,\n PHONE: /^[+]?[0-9]{9,13}$/,\n CREDIT_CARD: /^\\d{13,16}$/\n};\n/**\n * Maps button style to Syncfusion CSS classes\n * @param style - Button style ('primary' | 'flat' | 'information' | 'error' | 'success' | 'warning')\n * @returns Space-separated CSS class string\n * @private\n */\nexport const mapButtonStyleToClass = (style) => {\n const styleMap = {\n 'primary': 'e-primary',\n 'flat': 'e-flat',\n 'information': 'e-info',\n 'error': 'e-danger',\n 'success': 'e-success',\n 'warning': 'e-warning'\n };\n return styleMap[style || 'primary'] || 'e-primary';\n};\n/**\n * Resolves button type to valid HTML button type\n * @param type - Button type ('submit' | 'reset' | 'button')\n * @returns Resolved button type\n * @private\n */\nexport const resolveButtonType = (type) => {\n return (type === 'submit' || type === 'reset') ? type : 'button';\n};\n/**\n * Maps button position to CSS justifyContent value\n * @param position - Button position ('Left' | 'Right' | 'Center')\n * @returns CSS justifyContent value\n * @private\n */\nexport const mapPositionToJustifyContent = (position) => {\n const positionMap = {\n 'Left': 'flex-start',\n 'Right': 'flex-end',\n 'Center': 'center'\n };\n return positionMap[position || 'Left'] || 'flex-start';\n};\n/**\n * @private\n */\nexport function splitWidths(input) {\n const result = input.map(v => (v === null ? NaN : Number(v)));\n const sumKnown = result.reduce((s, v) => s + (isNaN(v) ? 0 : v), 0);\n // If knowns already >= 100, unknowns become 0\n const remainingInt = Math.max(0, Math.round(100 - sumKnown));\n const unknownIndexes = result.map((v, i) => (isNaN(v) ? i : -1)).filter(i => i >= 0);\n const k = unknownIndexes.length;\n if (k === 0) {\n // nothing to split; just clamp/round knowns so they sum to 100 if you prefer, but return as-is\n return result.map(v => Math.round(v));\n }\n // Distribute integer percentage points to avoid fractional rounding problems\n const base = Math.floor(remainingInt / k);\n let remainder = remainingInt - base * k;\n // Fill unknowns with base + 1 for first `remainder` items\n unknownIndexes.forEach((idx) => {\n const add = remainder > 0 ? base + 1 : base;\n result[idx] = add;\n remainder = Math.max(0, remainder - 1);\n });\n // Convert any NaN (shouldn't remain) to 0 and round knowns\n return result.map(v => (isNaN(v) ? 0 : Math.round(v)));\n}\n/**\n * @private\n */\nexport function extractAllDescendantIds(component) {\n const childIds = [];\n function traverse(comps) {\n for (const comp of comps) {\n childIds.push(comp.id);\n // Recursively traverse nested structures\n if (comp.children && Array.isArray(comp.children)) {\n traverse(comp.children);\n }\n // Handle table cells\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n comp.tableCells.forEach((row) => {\n if (Array.isArray(row)) {\n row.forEach((cell) => {\n if (Array.isArray(cell)) {\n traverse(cell);\n }\n });\n }\n });\n }\n // Handle tab items\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n comp.tabItems.forEach((tabItem) => {\n if (tabItem.content && Array.isArray(tabItem.content)) {\n traverse(tabItem.content);\n }\n });\n }\n }\n }\n // Start with direct children\n if (component.children && Array.isArray(component.children)) {\n traverse(component.children);\n }\n // Handle table cells\n if (component.tableCells && Array.isArray(component.tableCells)) {\n component.tableCells.forEach((row) => {\n if (Array.isArray(row)) {\n row.forEach((cell) => {\n if (Array.isArray(cell)) {\n traverse(cell);\n }\n });\n }\n });\n }\n // Handle tab items\n if (component.tabItems && Array.isArray(component.tabItems)) {\n component.tabItems.forEach((tabItem) => {\n if (tabItem.content && Array.isArray(tabItem.content)) {\n traverse(tabItem.content);\n }\n });\n }\n return childIds;\n}\n/**\n * @private\n */\nexport function formatDateValues(component, value) {\n const intl = new Internationalization();\n let dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy',\n type: 'date'\n });\n if (component.type === 'date') {\n value = dFormatter(new Date(value));\n }\n if (component.type === 'time') {\n dFormatter = intl.getDateFormat({\n format: 'hh:mm a',\n type: 'time'\n });\n value = dFormatter(new Date(value));\n }\n if (component.type === 'dateTime') {\n dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy hh:mm a',\n type: 'dateTime'\n });\n value = dFormatter(new Date(value));\n }\n if (component.type === 'dateRange' && Array.isArray(value)) {\n value = value.map(date => date ? dFormatter(new Date(date)) : null);\n }\n return value;\n}\n/**\n * @private\n */\nexport const getComponentFromSchema = (id, formSchema) => {\n if (!id || !formSchema)\n return null;\n const findInComponents = (components) => {\n for (const comp of components) {\n if (comp.id === id || comp.name === id)\n return comp;\n if (comp.children) {\n const found = findInComponents(comp.children);\n if (found)\n return found;\n }\n if (comp.tableCells) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n const found = findInComponents(cell);\n if (found)\n return found;\n }\n }\n }\n if (comp.tabItems) {\n for (const tab of comp.tabItems) {\n if (tab.content) {\n const found = findInComponents(tab.content);\n if (found)\n return found;\n }\n }\n }\n }\n return null;\n };\n return findInComponents(formSchema.components || []);\n};\n/**\n * Helper function to get the appropriate adaptor instance\n * @param adaptorType - Type of adaptor ('WebApiAdaptor' | 'UrlAdaptor' | 'ODataV4Adaptor')\n * @returns Adaptor instance\n * @private\n */\nexport const getAdaptorInstance = (adaptorType) => {\n switch (adaptorType) {\n case 'WebApiAdaptor':\n return new WebApiAdaptor();\n case 'ODataV4Adaptor':\n return new ODataV4Adaptor();\n case 'UrlAdaptor':\n default:\n return new UrlAdaptor();\n }\n};\n/**\n * Extracts data from a nested path using dot notation and array indices\n * @param data - The data object or array\n * @param path - Path to the data (e.g., 'results.items', '[0].data', 'response[0].values')\n * @returns Extracted data or empty array\n * @private\n */\nexport const extractDataFromPath = (data, path) => {\n if (!path || data === null || data === undefined)\n return data;\n // Split by dots but preserve array indices\n const parts = path.split(/\\.(?![^\\[]*\\])/); // Split by dots not inside brackets\n let current = data;\n for (const part of parts) {\n if (current === null || current === undefined) {\n return null;\n }\n // Handle array index notation like [0] or results[0]\n const arrayMatch = part.match(/^(\\w*)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const propName = arrayMatch[1];\n const index = parseInt(arrayMatch[2]);\n // If propName is empty, current should be an array\n if (!propName) {\n current = current[index];\n }\n else {\n current = current[propName] && current[propName][index];\n }\n }\n else {\n // Regular property access\n current = current[part];\n }\n }\n return current;\n};\n/**\n * Build name-indexed context from ID-indexed formValues\n * Simple traversal to map field names to their values\n * @private\n */\nconst buildNameContext = (formValues, components) => {\n const context = {};\n const traverse = (comps) => {\n comps.forEach(comp => {\n // Map name -> value from formValues (keyed by ID)\n if (comp.name && comp.id in formValues) {\n context[comp.name] = formValues[comp.id];\n }\n if (comp.children)\n traverse(comp.children);\n if (comp.tabItems)\n comp.tabItems.forEach(t => t.content && traverse(t.content));\n if (comp.tableCells)\n comp.tableCells.forEach(row => row.forEach(cell => traverse(cell)));\n });\n };\n traverse(components);\n return context;\n};\n/**\n * @private\n */\nconst sharedFieldBindingEngine = new ExpressionEngine();\n/**\n * @private\n */\nexport const resolveFieldBinding = (value, formValues, components) => {\n if (typeof value !== 'string' || !/{[^}]+}/.test(value)) {\n return value; // No field references\n }\n // Build context: map field names to values from ID-keyed formValues\n const context = components\n ? buildNameContext(formValues, components)\n : formValues;\n try {\n const result = sharedFieldBindingEngine.evaluate(value, context);\n return result !== null && result !== undefined ? String(result) : '';\n }\n catch (err) {\n return value; // Return original on error\n }\n};\n/**\n * @private\n * (useFetchOptions is NOT located here — see ./option-fetcher.ts)\n * (useFetchLookupOptions is NOT located here — see ./option-fetcher.ts)\n */\nexport const resolveOptions = (options, fetchedOptions, fetchedLookupDataSource) => {\n // If lookup type with fetched data, return fetched lookup records\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'lookup' && fetchedLookupDataSource) {\n return fetchedLookupDataSource && fetchedLookupDataSource.length > 0 ? fetchedLookupDataSource : [];\n }\n // If URL type with fetched data, return fetched options\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'url') {\n return fetchedOptions.length > 0 ? fetchedOptions : [];\n }\n // If already an array, return as-is\n if (Array.isArray(options)) {\n return options;\n }\n // If it's raw data type\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'raw') {\n return Array.isArray(options.data) ? options.data : [];\n }\n return [];\n};\n/**\n * @private\n */\nexport const collectAvailableFieldNames = (components) => {\n const fieldNames = [];\n const traverse = (comps) => {\n comps.forEach(comp => {\n // Only add fields that have a name and aren't layout components\n if (comp.name && ['panel', 'table', 'tabs', 'card', 'message', 'button', 'splitButton', 'staticHtml'].indexOf(comp.type) === -1) {\n // Get semantic type mapping for this component\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[comp.type];\n if (semanticType) {\n fieldNames.push(Object.assign({ name: comp.name, type: semanticType.type }, (semanticType.format && { format: semanticType.format })));\n }\n }\n // Traverse nested components\n if (comp.children)\n traverse(comp.children);\n if (comp.tabItems) {\n comp.tabItems.forEach(tab => {\n if (tab.content)\n traverse(tab.content);\n });\n }\n if (comp.tableCells) {\n comp.tableCells.forEach(row => {\n row.forEach(cell => traverse(cell));\n });\n }\n });\n };\n traverse(components);\n return fieldNames;\n};\n/**\n * Resolve conditional data for a DataGrid component\n * Evaluates all conditionalData rules and applies the first matching one\n * Returns both dataSource and custom columns if defined\n *\n * @param conditions - Component conditions including conditional data rules\n * @param formValues - Current form field values\n * @returns Object with dataSource and columns, or undefined if no condition matches\n * @private\n */\nexport const resolveConditionalData = (conditions, formValues) => {\n if (!conditions || !conditions.conditionalData || !Array.isArray(conditions.conditionalData)) {\n return undefined;\n }\n // Evaluate each conditional data rule in order\n for (const rule of conditions.conditionalData) {\n if (ConditionalRuleEngine.evaluateCondition(rule.condition, formValues)) {\n // Condition is met - resolve and return both data source and columns\n return {\n dataSource: rule.dataSource,\n columns: rule.columns && rule.columns.length > 0 ? rule.columns : undefined\n };\n }\n }\n return undefined;\n};\n/**\n * Reads the current builder mode from the URL `mode` query parameter.\n * @returns 'Simple' | 'Developer' | undefined if not present or invalid\n * @private\n */\nexport const getCurrentMode = () => {\n if (typeof window === 'undefined')\n return undefined;\n const urlMode = new URLSearchParams(window.location.search).get('mode');\n if (urlMode === 'developer')\n return 'Developer';\n if (urlMode === 'simple')\n return 'Simple';\n return undefined;\n};\n/**\n * Navigates to a URL while preserving the current `mode` query parameter.\n * - If `mode` is already in target, it is kept as-is.\n * - If `mode` is present in the current URL, it is appended to the target.\n *\n * @param target - Target path (may include existing query params), e.g. '/?sample=builder&formId=123'\n * @private\n */\nexport const navigateTo = (target) => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n const url = new URL('/demo' + target, window.location.origin);\n window.location.href = url.toString();\n }\n catch (_a) {\n window.location.href = '/demo' + target;\n }\n};\n/**\n * @private\n */\nexport function sanitizeId(rawId, fallback) {\n const MAX_ID_LEN = 100;\n const safeFallback = typeof fallback === 'string' && fallback ? fallback : `field_${Date.now()}_${Math.floor(Math.random() * 1000)}`;\n if (rawId === null || rawId === undefined)\n return safeFallback;\n let id = String(rawId).trim();\n // Reject obvious prototype/constructor keys outright\n if (!id || id === '__proto__' || id === 'prototype' || id === 'constructor') {\n return safeFallback;\n }\n // Replace any character that is not alnum, dash, or underscore with underscore.\n id = id.replace(/[^A-Za-z0-9_-]/g, '_');\n // Ensure it starts with a letter or underscore (prepend if necessary).\n if (!/^[A-Za-z_]/.test(id)) {\n id = `f_${id}`;\n }\n // Truncate to a reasonable max length\n if (id.length > MAX_ID_LEN) {\n id = id.slice(0, MAX_ID_LEN);\n }\n // Final guard: avoid reserved names\n if (id === '__proto__' || id === 'prototype' || id === 'constructor') {\n return safeFallback;\n }\n return id;\n}\n// Exported EJ2 data symbols re-exported for downstream consumers (form-renderer option fetcher).\n// `DataManager` / `Query` are used by OptionFetcher (see ./option-fetcher.ts).\nexport { DataManager, Query };\n","import { DataManager, Query } from '@syncfusion/ej2-data';\nimport { resolveFieldBinding, getAdaptorInstance, extractDataFromPath } from './utils';\n/**\n * @private\n */\nexport class OptionFetcher {\n /**\n * Fetch option data via `DataManager` + `Query`, supporting\n * search/sort/filter/paging/queryParams, with `resolveFieldBinding`\n * used to resolve `{field}` references in search keys and filter\n * values, and `extractDataFromPath` used to project the result.\n *\n * Mirrors `useFetchOptions` (utils.tsx lines 359–471).\n *\n * @param componentOptions - Options config (array fallback handled by\n * caller; this method only handles `type==='url'` objects).\n * @param componentId - Id of the requesting component (for stale\n * avoidance by the caller). Not used internally beyond tagging.\n * @param formValues - Current form values (id-keyed) used to resolve\n * `{field}` references when `components` is provided.\n * @param components - Schema components used to map name-keyed context\n * from id-keyed `formValues`.\n * @returns Promise resolving to the option array (or empty array on\n * error / non-url config). Never rejects — errors are caught and return `[]`.\n */\n static fetch(componentOptions, componentId, formValues, components) {\n const isUrlType = componentOptions &&\n typeof componentOptions === 'object' &&\n !Array.isArray(componentOptions) &&\n componentOptions.type === 'url' &&\n componentOptions.url;\n if (!isUrlType) {\n return Promise.resolve({ id: componentId, options: [] });\n }\n const urlConfig = componentOptions;\n return new Promise((resolve) => {\n try {\n const headers = {};\n if (urlConfig.headers && Array.isArray(urlConfig.headers)) {\n urlConfig.headers.forEach((h) => {\n if (h.key && h.key.trim()) {\n headers[h.key] = h.value;\n }\n });\n }\n // Create DataManager with selected adaptor\n const dataManager = new DataManager({\n url: urlConfig.url,\n adaptor: getAdaptorInstance(urlConfig.adaptorType),\n headers: Object.keys(headers).length ? headers : undefined\n });\n // Build Query (dynamic support)\n let query = new Query();\n if (urlConfig.search && urlConfig.search.enabled && urlConfig.search.fields && urlConfig.search.fields.length > 0) {\n const searchKey = urlConfig.search.key || 'search';\n // Resolve field bindings in search value\n const resolvedSearchValue = formValues\n ? resolveFieldBinding(searchKey, formValues, components)\n : /[{}]/.test(searchKey) ? '' : searchKey;\n query = query.search(resolvedSearchValue, urlConfig.search.fields);\n }\n // Apply sort query\n if (urlConfig.sort && urlConfig.sort.enabled && urlConfig.sort.field) {\n const sortDirection = urlConfig.sort.direction === 'descending' ? 'descending' : 'ascending';\n query = query.sortBy(urlConfig.sort.field, sortDirection);\n }\n // Apply filter queries with field binding resolution\n if (urlConfig.filters && Array.isArray(urlConfig.filters) && urlConfig.filters.length > 0) {\n urlConfig.filters.forEach((f) => {\n if (f.field && f.operator && f.value !== undefined && f.value !== '') {\n const resolvedFilterValue = formValues\n ? resolveFieldBinding(f.value, formValues, components)\n : /[{}]/.test(f.value) ? '' : f.value;\n if (resolvedFilterValue !== '') {\n query = query.where(f.field, f.operator, resolvedFilterValue);\n }\n }\n });\n }\n // Add params (query string)\n if (urlConfig.queryParams) {\n Object.keys(urlConfig.queryParams).forEach((key) => {\n query = query.addParams(key, urlConfig.queryParams[key]);\n });\n }\n // Paging\n if (urlConfig.skip) {\n query = query.skip(urlConfig.skip);\n }\n if (urlConfig.take) {\n query = query.take(urlConfig.take);\n }\n const timeoutMs = 15000;\n let timedOut = false;\n const timeoutHandle = setTimeout(() => {\n timedOut = true;\n resolve({ id: componentId, options: [] });\n }, timeoutMs);\n dataManager.executeQuery(query).then((res) => {\n if (timedOut) {\n return;\n }\n clearTimeout(timeoutHandle);\n let data = res.result;\n if (urlConfig.dataPath) {\n data = extractDataFromPath(data, urlConfig.dataPath);\n }\n let options;\n if (Array.isArray(data)) {\n options = data;\n }\n else if (typeof data === 'string') {\n options = [data];\n }\n else {\n options = [];\n }\n resolve({ id: componentId, options });\n }).catch((err) => {\n if (timedOut) {\n return;\n }\n clearTimeout(timeoutHandle);\n // console.error('Fetch error:', err);\n resolve({ id: componentId, options: [] });\n });\n }\n catch (err) {\n // console.error('Setup error:', err);\n resolve({ id: componentId, options: [] });\n }\n });\n }\n}\nexport default OptionFetcher;\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nconst resolveAttributes = (attributes) => {\n if (!attributes) {\n return {};\n }\n if (Array.isArray(attributes)) {\n return attributes.reduce((acc, item) => {\n if (item && item.key && item.value !== undefined) {\n acc[item.key] = item.value;\n }\n return acc;\n }, {});\n }\n return attributes;\n};\n/**\n * @private\n */\nexport class CheckboxGroup {\n constructor(options) {\n this.checkboxes = [];\n this.component = options.component;\n this.formState = options.formState;\n this.onChangeCb = options.onChange;\n this.optionRef = options.optionRef;\n this.enableRtl = options.enableRtl;\n this.target = options.target;\n this.container = null;\n this.itemsContainer = null;\n this.ref = options.ref;\n }\n getSelectedItems() {\n const resolvedValue = (this.formState\n ? this.formState.values[this.component.id]\n : (isNullOrUndefined(this.valueProp()) ? this.component.defaultValue : this.valueProp()));\n return Array.isArray(resolvedValue) ? resolvedValue : [];\n }\n valueProp() {\n // Used only when `formState` is absent — read the `value` option.\n return this._value;\n }\n /** Used in non-formState mode to seed the initial value. */\n setValue(value) {\n this._value = value;\n }\n handleCheckboxChange(option, checked) {\n const selectedItems = this.getSelectedItems();\n const newValue = checked\n ? [...selectedItems, option]\n : selectedItems.filter((i) => i !== option);\n if (this.formState) {\n this.onChangeCb(newValue);\n }\n }\n /**\n * Compose the size CSS class for the CheckBox.\n */\n get sizeCssClass() {\n const base = this.component.cssClass || '';\n const sizeMod = this.component.size === 'Small'\n ? ' e-small'\n : this.component.size === 'Bigger'\n ? ' e-bigger'\n : '';\n return `${base}${sizeMod}`;\n }\n /**\n * Build and append the group DOM tree. Returns the container element.\n */\n render(target) {\n const component = this.component;\n const groupLabel = component.label && component.required\n ? `${component.label} *`\n : (component.label || '');\n const host = target || this.target;\n // Outer container\n const container = document.createElement('div');\n container.className = `checkbox-group ${component.cssClass || ''}`.trim();\n container.setAttribute('role', 'group');\n container.setAttribute('aria-label', groupLabel);\n container.title = component.tooltip || '';\n const htmlAttrs = resolveAttributes(component.htmlAttributes);\n Object.keys(htmlAttrs).forEach((key) => {\n // Apply additional htmlAttributes to the container (matches spread).\n if (key !== 'class' && key !== 'className' && key !== 'style') {\n container.setAttribute(key, String(htmlAttrs[key]));\n }\n });\n const containerStyle = `display:flex;flex-direction:${component.layoutDirection === 'row' ? 'row' : 'column'};` +\n `gap:${component.gap || '8px'};align-items:flex-start;`;\n container.setAttribute('style', containerStyle);\n // Items container\n const itemsContainer = document.createElement('div');\n itemsContainer.className = 'checkbox-group-items';\n const itemsStyle = `display:flex;flex-direction:${component.layoutDirection === 'row' ? 'row' : 'column'};` +\n `flex-wrap:wrap;gap:${component.gap || '2px'};width:100%;`;\n itemsContainer.setAttribute('style', itemsStyle);\n const options = Array.isArray(component.options) ? component.options : ['Option 1'];\n const selectedItems = this.getSelectedItems();\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value != null ? option.value : (option.label != null ? option.label : option.key));\n const optionLabel = typeof option === 'string'\n ? option\n : (option.label != null ? option.label : (option.value != null ? option.value : String(optionValue)));\n const wrapper = document.createElement('input');\n itemsContainer.appendChild(wrapper);\n const checkBox = new CheckBox({\n label: optionLabel,\n enableRtl: this.enableRtl,\n checked: selectedItems.indexOf(optionValue) !== -1,\n disabled: !!component.disabled,\n labelPosition: component.checkboxLabelPosition || 'After',\n cssClass: this.sizeCssClass.trim(),\n htmlAttributes: htmlAttrs,\n change: (e) => {\n this.handleCheckboxChange(optionValue, e.checked);\n }\n });\n checkBox.appendTo(wrapper);\n this.ref(checkBox, idx);\n // Set the id mirroring `${component.id}_${idx}` after appendTo so\n // EJ2 preserves the wrapper id semantics.\n const inputEl = wrapper.querySelector('input[type=\"checkbox\"]');\n if (inputEl) {\n inputEl.id = `${this.component.id}_${idx}`;\n }\n // Ref callback — provide the EJ2 instance + index.\n if (this.optionRef) {\n this.optionRef(checkBox, idx);\n }\n this.checkboxes.push(checkBox);\n });\n container.appendChild(itemsContainer);\n if (host) {\n host.appendChild(container);\n }\n this.container = container;\n this.itemsContainer = itemsContainer;\n return container;\n }\n /**\n * Re-render the selection state from the current model value. Used by\n * the host after a programmatic value change.\n */\n refreshSelection() {\n const selectedItems = this.getSelectedItems();\n const options = Array.isArray(this.component.options) ? this.component.options : ['Option 1'];\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value != null ? option.value : (option.label != null ? option.label : option.key));\n const checkBox = this.checkboxes[idx];\n if (checkBox) {\n checkBox.checked = selectedItems.indexOf(optionValue) !== -1;\n }\n });\n }\n /**\n * Destroy all child EJ2 instances and detach the container.\n */\n destroy() {\n for (const cb of this.checkboxes) {\n try {\n cb.destroy();\n }\n catch (e) { /* ignore */ }\n }\n this.checkboxes = [];\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n this.itemsContainer = null;\n }\n setOptions(options) {\n this.component.options = options;\n if (!this.itemsContainer) {\n return;\n }\n for (const cb of this.checkboxes) {\n try {\n cb.destroy();\n }\n catch (_a) {\n }\n }\n this.checkboxes = [];\n while (this.itemsContainer.firstChild) {\n this.itemsContainer.removeChild(this.itemsContainer.firstChild);\n }\n const selectedItems = this.getSelectedItems();\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value || option.label || option.key);\n const optionLabel = typeof option === 'string'\n ? option\n : (option.label || option.value || String(optionValue));\n const wrapper = document.createElement('input');\n this.itemsContainer.appendChild(wrapper);\n const checkBox = new CheckBox({\n label: optionLabel,\n enableRtl: this.enableRtl,\n checked: selectedItems.indexOf(optionValue) !== -1,\n disabled: !!this.component.disabled,\n labelPosition: this.component.checkboxLabelPosition || 'After',\n cssClass: this.sizeCssClass.trim(),\n change: (e) => {\n this.handleCheckboxChange(optionValue, e.checked);\n }\n });\n checkBox.appendTo(wrapper);\n this.ref(checkBox, idx);\n const inputEl = wrapper.querySelector('input[type=\"checkbox\"]');\n if (inputEl) {\n inputEl.id = `${this.component.id}_${idx}`;\n }\n if (this.optionRef) {\n this.optionRef(checkBox, idx);\n }\n this.checkboxes.push(checkBox);\n });\n }\n}\nexport default CheckboxGroup;\n","import { ExpressionEngine } from './expression-engine';\n/**\n * @private\n */\nexport class GridExpressions {\n constructor() {\n this.engine = new ExpressionEngine();\n }\n /**\n * Convert a column value to the proper JS type for expression evaluation.\n * Form inputs return strings; numeric/boolean values must be coerced.\n */\n parseColumnValue(value, columnType) {\n // Handle null/undefined/empty\n if (value === null || value === undefined || value === '') {\n return value;\n }\n // Parse number types\n if (columnType === 'number') {\n const parsed = parseFloat(String(value));\n return isNaN(parsed) ? 0 : parsed;\n }\n // Parse boolean types\n if (columnType === 'boolean') {\n if (typeof value === 'boolean') {\n return value;\n }\n return value === 'true' || value === '1' || value === 1 || value === true;\n }\n // Return as-is for string and other types\n return value;\n }\n /**\n * Evaluate all expression-bearing columns for a single row.\n * Returns a new row object with calculated values merged in.\n */\n evaluateRowExpressions(row, columns) {\n const calculatedRow = Object.assign({}, row);\n // Find all columns with expressions\n const calculatedColumns = columns.filter((col) => col.expression && col.expression.toString().trim());\n for (const column of calculatedColumns) {\n if (!column.expression) {\n continue;\n }\n try {\n // Prepare row values with proper type conversion\n const typedRow = {};\n columns.forEach((col) => {\n const value = calculatedRow[col.field];\n typedRow[col.field] = this.parseColumnValue(value, col.type);\n });\n // Evaluate expression with current row as context\n const result = this.engine.evaluate(column.expression, typedRow, {\n throwOnError: false\n });\n // Update row with calculated value\n calculatedRow[column.field] = result;\n }\n catch (error) {\n calculatedRow[column.field] = null;\n }\n }\n return calculatedRow;\n }\n /**\n * Extract the subset of columns that carry a non-empty `expression`.\n */\n extractCalculatedColumns(columns) {\n return columns.filter((col) => col.expression && col.expression.toString().trim());\n }\n getEngine() { return this.engine; }\n}\nexport default GridExpressions;\n","import { ExpressionEngine } from './expressions/expression-engine';\n/**\n * Custom Validation Engine\n *\n * Evaluates FormIO-style custom validation expressions:\n * valid = (condition) ? true : 'error message';\n *\n * Reuses ExpressionEngine for dependency extraction and expression parsing\n * @private\n */\nexport class CustomValidationEngine {\n constructor() {\n this.expressionEngine = new ExpressionEngine();\n }\n /**\n * Validate field using custom validation expression\n *\n * @param expression - FormIO-style validation expression (generated by UI)\n * @param fieldValue - Current field value (as 'input')\n * @param formValues - All form values for cross-field references\n * @returns true if valid, error message string if invalid\n */\n validate(expression, fieldValue, formValues) {\n if (!expression || expression.trim() === '') {\n return true; // No validation rule = valid\n }\n try {\n // Inject 'input' as current field value\n const context = Object.assign({}, formValues, { input: fieldValue, valid: true // Initialize valid variable\n });\n // Parse expression - FormIO pattern uses assignment: valid = ...\n // Pattern: valid = (condition) ? true : 'error message'\n const validPattern = /valid\\s*=\\s*(.+?)\\s*\\?\\s*true\\s*:\\s*['\"](.+?)['\"]\\s*$/;\n const match = expression.match(validPattern);\n if (!match) {\n return 'Invalid validation expression format';\n }\n const condition = match[1].trim();\n const errorMessage = match[2];\n // Evaluate the condition (should return boolean)\n const conditionResult = this.expressionEngine.evaluate(condition, context, { throwOnError: false }, true);\n // If condition is true, validation passes\n if (conditionResult === true) {\n return true;\n }\n else {\n // Condition is false, return the error message\n return errorMessage;\n }\n }\n catch (error) {\n return 'Validation expression error';\n }\n }\n /**\n * Extract field dependencies from validation expression\n *\n * @param expression - Custom validation expression (or just condition)\n * @returns Array of field names referenced in expression\n */\n extractDependencies(expression) {\n if (!expression)\n return [];\n // Extract validation logic (right side of = sign if present)\n const validPattern = /valid\\s*=\\s*(.+)/;\n const match = expression.match(validPattern);\n const validationLogic = match ? match[1] : expression;\n // Use ExpressionEngine to extract field references\n const deps = this.expressionEngine.extractDependencies(validationLogic);\n // Filter out 'input' as it's the current field, not a dependency\n return deps.filter(dep => dep !== 'input');\n }\n /**\n * Validate condition syntax (simplified - no need for \"valid =\" check)\n *\n * @param condition - Validation condition (without \"valid =\" prefix)\n * @param availableFields - Available field names for reference validation\n * @returns Array of validation error messages\n */\n validateConditionSyntax(condition, availableFields) {\n if (!condition || condition.trim() === '') {\n return ['Condition cannot be empty'];\n }\n const errors = [];\n // Check for balanced parentheses\n const openParens = (condition.match(/\\(/g) || []).length;\n const closeParens = (condition.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push(`Unbalanced parentheses (${openParens} open, ${closeParens} close)`);\n }\n // Check for balanced braces\n const openBraces = (condition.match(/\\{/g) || []).length;\n const closeBraces = (condition.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push(`Unbalanced braces (${openBraces} open, ${closeBraces} close)`);\n }\n // Validate field references\n const deps = this.extractDependencies(condition);\n const invalidFields = deps.filter((field) => availableFields.indexOf(field) === -1);\n if (invalidFields.length > 0) {\n errors.push(`Unknown field references: ${invalidFields.join(', ')}`);\n }\n return errors;\n }\n /**\n * Build full FormIO expression from condition and error message\n *\n * @param condition - Validation condition (e.g., \"(input === {password})\")\n * @param errorMessage - Error message to show when validation fails\n * @returns Full FormIO expression\n */\n buildExpression(condition, errorMessage) {\n // Remove outer parentheses if present (we'll add them back in ternary)\n const trimmedCondition = condition.trim();\n // Escape single quotes in error message\n const escapedMessage = errorMessage.replace(/'/g, \"\\\\'\");\n // Build FormIO expression\n return `valid = ${trimmedCondition} ? true : '${escapedMessage}'`;\n }\n /**\n * Extract condition and error message from full FormIO expression\n * For editing existing rules\n *\n * @param expression - Full FormIO expression\n * @returns { condition, errorMessage } or null if invalid\n */\n parseExpression(expression) {\n // Pattern: valid = (condition) ? true : 'error message'\n const pattern = /valid\\s*=\\s*(.+?)\\s*\\?\\s*true\\s*:\\s*'(.+)'/;\n const match = expression.match(pattern);\n if (match) {\n return {\n condition: match[1].trim(),\n errorMessage: match[2].replace(/\\\\'/g, \"'\") // Unescape quotes\n };\n }\n return null;\n }\n}\n","import { Grid, Edit, Toolbar, Page, Resize, Sort, Filter } from '@syncfusion/ej2-grids';\nimport { GridExpressions } from './expressions/grid-expressions';\nimport { CustomValidationEngine } from './custom-validation-engine';\n/**\n * @private\n *\n * `DataGridComponent` is the Category C native reimplementation of\n * `Common/DataGridComponent.tsx` using the EJ2 `Grid` (with `Edit`,\n * `Toolbar`, `Page`, `Resize`, `Sort`, `Filter` inject modules).\n *\n * Reproduces:\n * - internal current-data state seeded from `dataSource`;\n * - calculated/expression columns (disable `allowEditing`, recompute on\n * sibling field change via edit `change` params, update UI value by\n * column type);\n * - per-column custom validation merged into `validationRules`\n * (required + custom validator via `CustomValidationEngine`);\n * - dynamic toolbar (`Add`/`Edit`/`Delete` conditional + always\n * `Update`/`Cancel`);\n * - `actionComplete` → sync state + `onDataChange` callback;\n * - `getGridData()` equivalent;\n * - column mapping (`field, headerText, type, isPrimaryKey, width,\n * format (date default 'MM/dd/yyyy'), editType, allowEditing`);\n * - `filterSettings.mode='Immediate'`.\n */\nexport class DataGridComponent {\n constructor(options) {\n this.grid = null;\n this.wrapper = null;\n /**\n * Map React custom validation to a Syncfusion-style custom validator\n * closure. Mirrors `mapCustomValidationToSyncfusion`.\n */\n this.mapCustomValidationToSyncfusion = (col) => {\n if (!col.customValidation || col.customValidation.length === 0) {\n return undefined;\n }\n return (value) => {\n const formObj = this.grid && this.grid.editModule ? this.grid.editModule.formObj : null;\n if (!formObj) {\n return true;\n }\n const rowContext = {};\n (this.columns || []).forEach((gridCol) => {\n const input = formObj.getInputElement(gridCol.field);\n if (input) {\n const v = input.value;\n rowContext[gridCol.field] = gridCol.type === 'number' ? parseInt(v, 10) : v;\n }\n });\n for (const rule of col.customValidation) {\n if (!rule.expression) {\n continue;\n }\n const fieldValue = col.type === 'number' ? parseInt(value.value, 10) : value.value;\n const result = this.validationEngine.validate(rule.expression, fieldValue, rowContext);\n return result === true;\n }\n return true;\n };\n };\n /**\n * Create edit params attaching a `change` callback for non-calculated\n * columns that have calc dependents. Mirrors `createEditParams`.\n */\n this.createEditParams = (col) => {\n if (!this.hasExpressions) {\n return undefined;\n }\n const calculatedCols = this.calculatedColumns;\n const hasDependents = calculatedCols.some((calcCol) => {\n if (!calcCol.expression) {\n return false;\n }\n return calcCol.expression.indexOf(`{${col.field}}`) !== -1;\n });\n if (!hasDependents) {\n return undefined;\n }\n return {\n params: {\n change: () => {\n if (!this.grid || !this.grid.element) {\n return;\n }\n const form = this.grid.element.querySelector('form');\n if (!form || !form.ej2_instances || !form.ej2_instances[0]) {\n return;\n }\n const formInstance = form.ej2_instances[0];\n calculatedCols.forEach((calcCol) => {\n const input = formInstance.getInputElement(calcCol.field);\n if (!input) {\n return;\n }\n try {\n const rowValues = {};\n this.columns.forEach((c) => {\n const fieldInput = formInstance.getInputElement(c.field);\n if (fieldInput) {\n rowValues[c.field] = fieldInput.value;\n }\n });\n const result = this.gridExpressions.evaluateRowExpressions(rowValues, this.columns);\n const calculatedValue = result[calcCol.field];\n if (calculatedValue !== undefined && calculatedValue !== null) {\n if (calcCol.type === 'boolean') {\n input.checked = !!calculatedValue;\n }\n else if (calcCol.type === 'number') {\n const wrapper = input.closest('.e-control-wrapper');\n const numericInput = wrapper ? wrapper.querySelector('input.e-control:not([type=\"hidden\"])') : null;\n if (numericInput && numericInput.ej2_instances && numericInput.ej2_instances[0]) {\n numericInput.ej2_instances[0].value = calculatedValue;\n }\n else {\n input.value = calculatedValue;\n }\n }\n else if (calcCol.type === 'date') {\n input.ej2_instances[0].value = new Date(calculatedValue);\n }\n else {\n input.value = calculatedValue;\n }\n }\n }\n catch (_a) {\n }\n });\n }\n }\n };\n };\n /**\n * Sync the working data on `actionComplete`. Mirrors `handleActionComplete`.\n */\n this.handleActionComplete = (args) => {\n if (!this.grid) {\n return;\n }\n const eventType = args.requestType;\n switch (eventType) {\n case 'save':\n case 'delete':\n case 'add': {\n if (this.grid.dataSource) {\n const updatedData = Array.isArray(this.grid.dataSource)\n ? this.grid.dataSource\n : [];\n this.currentData = updatedData;\n if (this.onDataChange) {\n this.onDataChange(updatedData);\n }\n }\n break;\n }\n default:\n break;\n }\n };\n this.id = options.id;\n this.columns = options.columns || [];\n this.dataSource = Array.isArray(options.dataSource) ? options.dataSource : [];\n this.height = options.height != null ? options.height : '200px';\n this.width = options.width != null ? options.width : '100%';\n this.locale = options.locale;\n this.cssClass = options.cssClass;\n this.pageSize = options.pageSize != null ? options.pageSize : 6;\n this.allowPaging = options.allowPaging !== false;\n this.allowAdding = options.allowAdding !== false;\n this.allowEditing = options.allowEditing !== false;\n this.allowDeleting = options.allowDeleting !== false;\n this.allowFiltering = options.allowFiltering === true;\n this.onDataChange = options.onDataChange;\n this.isPreviewMode = options.isPreviewMode;\n this.enableRtl = options.enableRtl;\n this.ref = options.ref;\n this.currentData = Array.isArray(this.dataSource) ? this.dataSource : [];\n this.gridExpressions = new GridExpressions();\n this.validationEngine = new CustomValidationEngine();\n }\n get calculatedColumns() {\n return this.gridExpressions.extractCalculatedColumns(this.columns);\n }\n get hasExpressions() {\n return this.calculatedColumns.length > 0;\n }\n /**\n * Build the dynamic toolbar array. Mirrors `buildToolbar`.\n */\n buildToolbar() {\n const items = [];\n if (this.allowAdding) {\n items.push('Add');\n }\n if (this.allowEditing) {\n items.push('Edit');\n }\n if (this.allowDeleting) {\n items.push('Delete');\n }\n items.push('Update', 'Cancel');\n return items;\n }\n /**\n * Map a GridColumn to the EJ2 Grid column model, merging standard + custom\n * validation rules and disabling editing on expression / no-edit columns.\n */\n mapColumn(col) {\n const validationRules = col.validationRules ? Object.assign({}, col.validationRules) : {};\n const customValidator = this.mapCustomValidationToSyncfusion(col);\n if (customValidator) {\n const errorMessage = col.customValidation && col.customValidation[0] && col.customValidation[0].expression\n ? (this.validationEngine.parseExpression\n ? this.validationEngine.parseExpression(col.customValidation[0].expression).errorMessage\n : 'Validation failed') || 'Validation failed'\n : 'Validation failed';\n validationRules.required = [true, errorMessage];\n validationRules.custom = [customValidator, errorMessage];\n }\n return {\n field: col.field,\n headerText: col.headerText,\n type: col.type || 'string',\n isPrimaryKey: col.isPrimaryKey || false,\n width: col.width,\n format: col.type === 'date' ? (col.format || 'MM/dd/yyyy') : col.format,\n editType: col.editType,\n allowEditing: col.allowEditing !== false && !col.expression,\n validationRules: validationRules,\n edit: this.createEditParams(col)\n };\n }\n /**\n * Build the grid element, instantiate `Grid`, inject services and append\n * to the target/created container. Returns the wrapper element.\n */\n render(targetOrHost) {\n // Normalize initial currentData with expression evaluation\n const normalized = Array.isArray(this.dataSource) ? this.dataSource : [];\n if (this.hasExpressions && normalized.length > 0) {\n this.currentData = normalized.map((row) => {\n const result = this.gridExpressions.evaluateRowExpressions(row, this.columns);\n return Object.assign({}, row, result);\n });\n }\n else {\n this.currentData = normalized;\n }\n const wrapper = document.createElement('div');\n wrapper.className = 'datagrid-wrapper';\n wrapper.style.width = typeof this.width === 'string' ? this.width : `${this.width}px`;\n wrapper.style.height = 'auto';\n const gridHost = document.createElement('div');\n gridHost.className = 'datagrid-grid';\n wrapper.appendChild(gridHost);\n if (this.id) {\n gridHost.id = this.id;\n }\n const grid = new Grid({\n dataSource: this.currentData,\n allowPaging: this.allowPaging,\n filterSettings: { mode: 'Immediate' },\n pageSettings: { pageSize: this.pageSize },\n editSettings: {\n allowEditing: this.allowEditing,\n allowAdding: this.allowAdding,\n allowDeleting: this.allowDeleting,\n mode: 'Normal'\n },\n enableRtl: this.enableRtl,\n locale: this.locale || 'en-US',\n cssClass: this.cssClass,\n toolbar: this.buildToolbar(),\n actionComplete: this.handleActionComplete,\n height: typeof this.height === 'string' ? this.height : `${this.height}px`,\n width: typeof this.width === 'string' ? this.width : `${this.width}px`,\n allowSorting: true,\n allowFiltering: this.allowFiltering,\n allowSelection: true,\n columns: (this.columns || []).map((c) => this.mapColumn(c))\n });\n grid.appendTo(gridHost);\n this.ref(grid);\n // Inject the required modules into the Grid prototype (executed once\n // at module load — see the static `Grid.Inject(...)` call at the\n // bottom of this file).\n this.grid = grid;\n if (targetOrHost) {\n targetOrHost.appendChild(wrapper);\n }\n this.wrapper = wrapper;\n return wrapper;\n }\n /**\n * @private\n */\n getRef() {\n return {\n getGridData: () => this.currentData,\n gridRef: { current: this.grid }\n };\n }\n /**\n * Equivalent of `getGridData()`.\n */\n getGridData() {\n return this.currentData;\n }\n /**\n * Recompute expression-bearing rows from fresh `dataSource` (mirrors the\n * useEffect on `[dataSource, hasExpressions, columns, ...]`).\n */\n setDataSource(dataSource) {\n if (!this.grid) {\n return;\n }\n const normalized = Array.isArray(dataSource) ? dataSource : [];\n if (this.hasExpressions && normalized.length > 0) {\n this.currentData = normalized.map((row) => {\n const r = this.gridExpressions.evaluateRowExpressions(row, this.columns);\n return Object.assign({}, row, r);\n });\n }\n else {\n this.currentData = normalized;\n }\n this.grid.dataSource = this.currentData;\n if (this.grid.refreshBatchData) {\n this.grid.setProperties({ dataSource: this.currentData }, true);\n }\n else {\n this.grid.dataSource = this.currentData;\n }\n if (this.grid.refresh) {\n this.grid.refresh();\n }\n }\n /**\n * Re-detect columns; refresh the grid (mirrors the useEffect on columns).\n */\n setColumns(columns) {\n if (!this.grid) {\n return;\n }\n if (!columns || columns.length === 0) {\n this.grid.columns = [];\n }\n else if (this.grid.columns.length === 0 && columns && columns.length === 1) {\n this.grid.columns = columns;\n }\n this.columns = columns;\n if (this.grid.refresh && !this.isPreviewMode) {\n if (this.dataSource && Array.isArray(this.dataSource) && this.dataSource.length > 0 && !this.hasExpressions) {\n this.grid.dataSource = this.dataSource;\n }\n this.grid.refresh();\n }\n }\n /**\n * @private\n */\n destroy() {\n if (this.grid) {\n try {\n this.grid.destroy();\n }\n catch (e) { /* ignore */ }\n this.grid = null;\n }\n if (this.wrapper && this.wrapper.parentNode) {\n this.wrapper.parentNode.removeChild(this.wrapper);\n }\n this.wrapper = null;\n this.gridExpressions = null;\n this.validationEngine = null;\n this.currentData = [];\n this.columns = [];\n this.dataSource = [];\n }\n}\nexport default DataGridComponent;\nGrid.Inject(Edit, Toolbar, Page, Resize, Sort, Filter);\n","import { TextBox, NumericTextBox, MaskedTextBox, Uploader, TextArea, Slider, ColorPicker, Rating, Signature } from '@syncfusion/ej2-inputs';\nimport { CheckBox, RadioButton, Switch, Button } from '@syncfusion/ej2-buttons';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { DropDownList, MultiSelect, CheckBoxSelection, VirtualScroll } from '@syncfusion/ej2-dropdowns';\nimport { DatePicker, DateTimePicker, TimePicker, DateRangePicker, Islamic } from '@syncfusion/ej2-calendars';\nimport { Message } from '@syncfusion/ej2-notifications';\nimport { ImageEditor } from '@syncfusion/ej2-image-editor';\nimport { RichTextEditor, Toolbar, HtmlEditor, Link, QuickToolbar, Image as RTEImage, Count, Table, EmojiPicker, SlashMenu, CodeBlock, ClipBoardCleanup, AutoFormat, ImportExport, PasteCleanup } from '@syncfusion/ej2-richtexteditor';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { mapButtonStyleToClass, mapPositionToJustifyContent, resolveButtonType, resolveConditionalData, resolveOptions } from '../common/utils';\nimport { OptionFetcher } from '../common/option-fetcher';\nimport { CheckboxGroup } from '../common/checkbox-group';\nimport { DataGridComponent } from '../common/datagrid-component';\nimport { ConditionalRuleEngine } from '../common/conditional-rule-engine';\n/**\n * @private\n */\nconst normalizeAttributes = (attributes) => {\n if (!attributes) {\n return {};\n }\n if (Array.isArray(attributes)) {\n return attributes.reduce((acc, item) => {\n if (item && item.key && item.value !== undefined) {\n acc[item.key] = item.value;\n }\n return acc;\n }, {});\n }\n return attributes;\n};\n/**\n * @private\n */\nconst applyHostId = (el, id) => {\n if (el && id) {\n el.setAttribute('id', id);\n }\n};\n/**\n * Renders a single form field component (vanilla EJ2 TS) and returns the\n * instantiated EJ2 component instance (or host element). The host owns DOM\n * attachment and ref tracking.\n *\n * @private\n */\nexport const renderFormField = (options) => {\n const { component, value, onChange, onBlur, onClick, hasError = false, locale, formState, settings, components, enableRtl, ref, l10n } = options;\n const initializedGrids = options.initializedGrids || new Set();\n const target = options.target;\n const commonProps = {\n floatLabelType: (component.floatLabelType || 'Never'),\n placeholder: component.placeholder || '',\n enabled: !component.disabled\n };\n const createValidationHandlers = (getValue) => {\n const validateOn = component.validateOn || 'Change';\n const handlers = {};\n if (!validateOn || validateOn === 'Change') {\n handlers.change = (args) => onChange(getValue(args));\n handlers.blur = () => { if (onBlur) {\n onBlur();\n } };\n }\n if (validateOn === 'Blur') {\n handlers.change = (args) => onChange(getValue(args));\n handlers.blur = () => { if (onBlur) {\n onBlur();\n } };\n }\n return handlers;\n };\n const htmlAttrs = normalizeAttributes(component.htmlAttributes);\n if (component.required) {\n htmlAttrs['aria-required'] = 'true';\n }\n const errorClass = hasError ? 'e-error' : '';\n const cssClass = `${component.cssClass || ''} ${errorClass} ${component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : ''}`.trim();\n switch (component.type) {\n case 'textbox': {\n const tb = new TextBox(Object.assign({ id: component.name, type: component.multiline ? 'hidden' : (component.textboxType ? component.textboxType : 'text'), name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue || ''), multiline: component.multiline, showClearButton: component.showClearButton, autocomplete: component.autocomplete === false || component.autocomplete === undefined ? 'off' : 'on', readonly: component.readOnly || false, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n tb.appendTo(target);\n }\n ref(tb);\n return tb;\n }\n case 'textarea': {\n const ta = new TextArea(Object.assign({ id: component.name, name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue || ''), cols: component.cols || 200, rows: component.textareaRows || 4, showClearButton: component.showClearButton || false, readonly: component.readOnly || false, maxLength: component.maxLength || 255, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix, resizeMode: 'Vertical' }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n ta.appendTo(target);\n }\n ref(ta);\n return ta;\n }\n case 'number': {\n const numValue = value === '' ? undefined : value;\n const ntb = new NumericTextBox({\n locale: locale,\n enableRtl: enableRtl,\n floatLabelType: commonProps.floatLabelType,\n placeholder: commonProps.placeholder,\n enabled: commonProps.enabled,\n value: numValue !== undefined ? numValue : (component.defaultValue || undefined),\n decimals: component.decimals || 2,\n currency: component.currency,\n format: component.numberFormat || 'n2',\n step: component.step || 1,\n min: component.minValue || undefined,\n max: component.maxValue || undefined,\n readonly: component.readOnly || false,\n showClearButton: component.showClearButton || false,\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n appendTemplate: component.suffix,\n prependTemplate: component.prefix,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n target.setAttribute('name', component.id);\n ntb.appendTo(target);\n }\n ref(ntb);\n return ntb;\n }\n case 'checkbox': {\n const checkboxLabel = component.label && component.required\n ? `${component.label} *`\n : component.label;\n const cb = new CheckBox({\n locale: locale,\n name: component.id,\n enableRtl: enableRtl,\n label: checkboxLabel,\n labelPosition: component.checkboxLabelPosition,\n checked: ((component.checked !== undefined && component.checked !== null ? component.checked : false) || (value !== undefined && value !== null ? value : false)),\n indeterminate: component.indeterminate || false,\n disabled: component.disabled,\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n change: (args) => onChange(args.checked)\n });\n if (target) {\n applyHostId(target, component.name);\n cb.appendTo(target);\n }\n ref(cb);\n return cb;\n }\n case 'checkboxGroup': {\n const fetchedCheckboxOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedCheckboxOptions.push(...res.options);\n group.setOptions(fetchedCheckboxOptions);\n }\n }).catch(() => { });\n const resolvedCheckboxOptions = resolveOptions(component.options, fetchedCheckboxOptions);\n const finalCheckboxOptions = resolvedCheckboxOptions.length > 0\n ? resolvedCheckboxOptions\n : (component.options || ['Option 1']);\n const group = new CheckboxGroup({\n component: Object.assign({}, component, { options: finalCheckboxOptions }),\n formState: formState,\n value: value,\n enableRtl: enableRtl,\n onChange: (v) => onChange(v),\n optionRef: options.ref,\n target: target,\n ref: ref\n });\n if (target) {\n applyHostId(target, component.name);\n }\n group.render(target);\n return group;\n }\n case 'radio': {\n const radioOptions = Array.isArray(component.options) ? component.options : ['Option 1'];\n const wrapper = createElement('div', {\n id: `${component.name}-group`,\n className: `e-radio-group ${errorClass}`\n });\n const rbInstances = [];\n radioOptions.forEach((option, idx) => {\n const optionValue = option;\n const optionText = option;\n const row = createElement('div');\n row.style.marginBottom = '8px';\n wrapper.appendChild(row);\n const rbHost = createElement('input', {\n id: `${component.name}_${idx}_${optionValue}`,\n attrs: { type: 'radio' }\n });\n row.appendChild(rbHost);\n const rb = new RadioButton({\n name: component.id,\n label: optionText,\n enableRtl: enableRtl,\n locale: locale,\n disabled: component.disabled,\n value: optionValue,\n htmlAttributes: htmlAttrs,\n labelPosition: component.fieldLabelPosition,\n checked: component.defaultValue === optionValue || value === optionValue,\n cssClass: cssClass,\n change: (args) => {\n if (args.value === optionValue) {\n onChange(optionValue);\n }\n }\n });\n rb.appendTo(rbHost);\n ref(rb, idx);\n if (options.ref && typeof options.ref === 'function') {\n options.ref(rb, idx);\n }\n });\n if (target) {\n target.appendChild(wrapper);\n }\n return rbInstances;\n }\n case 'dropdown': {\n // Same Vanilla TS fetch adaptation as checkboxGroup (see above).\n const fetchedDropdownOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedDropdownOptions.push(...res.options);\n ddl.dataSource = fetchedDropdownOptions;\n }\n }).catch(() => { });\n const resolvedDropdownOptions = resolveOptions(component.options, fetchedDropdownOptions);\n let finalDropdownOptions = resolvedDropdownOptions.length > 0\n ? resolvedDropdownOptions\n : (component.options || ['Option 1']);\n if (component.conditions && component.conditions.choiceBasedField) {\n finalDropdownOptions = ConditionalRuleEngine.getChoiceBasedOptions(component.conditions.choiceBasedField, finalDropdownOptions, formState ? formState.values : undefined, component.conditions.choiceBasedField.primaryFieldId);\n if (finalDropdownOptions.length > 0 && value != null && finalDropdownOptions.indexOf(value) === -1) {\n if (formState) {\n formState.values[component.id] = null;\n }\n }\n }\n const ddl = new DropDownList(Object.assign({ id: component.name, name: component.id, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, locale: locale, enableRtl: enableRtl, cssClass: cssClass, dataSource: finalDropdownOptions, value: formState.values[component.id] !== undefined ? formState.values[component.id] : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), showClearButton: component.showClearButton || false, readonly: component.readOnly || false, enableVirtualization: component.enableVirtualization || false, popupHeight: component.popupHeight || '300px', popupWidth: component.popupWidth || '100%', htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n // Inject services (VirtualScroll) for the virtualization path.\n DropDownList.Inject(VirtualScroll);\n if (target) {\n ddl.appendTo(target);\n }\n ref(ddl);\n return ddl;\n }\n case 'multiselect': {\n const fetchedMultiSelectOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedMultiSelectOptions.push(...res.options);\n ms.dataSource = fetchedMultiSelectOptions;\n }\n }).catch(() => { });\n const resolvedMultiSelectOptions = resolveOptions(component.options, fetchedMultiSelectOptions);\n const finalMultiSelectOptions = resolvedMultiSelectOptions.length > 0\n ? resolvedMultiSelectOptions\n : (component.options || ['Option 1']);\n const ms = new MultiSelect(Object.assign({ name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), placeholder: component.placeholder, dataSource: finalMultiSelectOptions, fields: { text: 'text', value: 'value' }, showClearButton: component.showClearButton || false, readonly: component.readOnly || false, allowCustomValue: component.allowCustomValue || false, addTagOnBlur: component.addTagOnBlur || false, delimiterChar: component.delimiterChar || ',', showSelectAll: component.showSelectAll || false, mode: component.showSelectAll ? 'CheckBox' : (component.visualMode ? component.visualMode : undefined), selectAllText: component.selectAllText, unSelectAllText: component.unSelectAllText, showDropDownIcon: component.showDropDownIcon !== false, enableVirtualization: component.enableVirtualization || false, popupHeight: component.popupHeight || '300px', popupWidth: component.popupWidth || '100%', cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n MultiSelect.Inject(CheckBoxSelection, VirtualScroll);\n if (target) {\n ms.appendTo(target);\n }\n ref(ms);\n return ms;\n }\n case 'date': {\n const dp = new DatePicker(Object.assign({ floatLabelType: commonProps.floatLabelType, id: component.name, name: component.id, enableRtl: enableRtl, locale: locale, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'MM/dd/yyyy', readOnly: component.readOnly || false, showClearButton: component.showClearButton === undefined ? false : component.showClearButton, showTodayButton: component.showTodayButton !== false ? true : false, calendarMode: component.calendarMode || 'Gregorian', dayHeaderFormat: component.dayHeaderFormat || 'Short', depth: component.depth || 'Month', start: component.start || 'Month', firstDayOfWeek: component.firstDayOfWeek || 0, min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n DatePicker.Inject(Islamic);\n if (target) {\n dp.appendTo(target);\n }\n ref(dp);\n return dp;\n }\n case 'dateTime': {\n const dtp = new DateTimePicker(Object.assign({ id: component.name, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, locale: locale, enableRtl: enableRtl, name: component.id, dayHeaderFormat: component.dayHeaderFormat || 'Short', value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'MM/dd/yyyy hh:mm a', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, showTodayButton: component.showTodayButton !== false ? true : false, depth: component.depth || 'Month', start: component.start || 'Month', step: component.step || 1, readonly: component.readOnly || false, min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, minTime: component.minTime ? new Date(`2000-01-01 ${component.minTime}`) : undefined, maxTime: component.maxTime ? new Date(`2000-01-01 ${component.maxTime}`) : undefined, enableMask: false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n DateTimePicker.Inject(Islamic);\n if (target) {\n dtp.appendTo(target);\n }\n ref(dtp);\n return dtp;\n }\n case 'time': {\n const tp = new TimePicker(Object.assign({ id: component.name, locale: locale, name: component.id, enableRtl: enableRtl, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'hh:mm a', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, step: component.step || 30, readonly: component.readOnly || false, min: component.minTime ? new Date(`2000-01-01 ${component.minTime}`) : undefined, max: component.maxTime ? new Date(`2000-01-01 ${component.maxTime}`) : undefined, enableMask: false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n tp.appendTo(target);\n }\n ref(tp);\n return tp;\n }\n case 'dateRange': {\n const drp = new DateRangePicker(Object.assign({ id: component.name, locale: locale, enableRtl: enableRtl, name: component.id, floatLabelType: commonProps.floatLabelType, dayHeaderFormat: component.dayHeaderFormat || 'Short', placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), depth: component.depth || 'Month', start: component.start || 'Month', min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, format: component.format || 'MM/dd/yyyy', separator: component.separator || ' - ', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, readonly: component.readOnly || false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n drp.appendTo(target);\n }\n ref(drp);\n return drp;\n }\n case 'switch': {\n const sw = new Switch({\n locale: locale,\n enableRtl: enableRtl,\n value: component.defaultValue,\n name: component.id,\n checked: ((component.checked !== undefined && component.checked !== null ? component.checked : false) || (value !== undefined && value !== null ? value : false)),\n disabled: component.disabled,\n onLabel: component.onLabel || '',\n offLabel: component.offLabel || '',\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n change: (args) => onChange(args.checked)\n });\n if (target) {\n applyHostId(target, component.name);\n sw.appendTo(target);\n }\n ref(sw);\n return sw;\n }\n case 'button': {\n const groupButtons = (component.buttonsGroups || component.buttons || []);\n if (groupButtons && groupButtons.length > 0) {\n const groupStyleObj = {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: component.gap || '8px',\n justifyContent: mapPositionToJustifyContent(component.position),\n width: component.width || undefined\n };\n const groupContainer = createElement('div', {\n id: component.name,\n attrs: {\n role: 'group',\n 'aria-label': component.label || 'Button Group',\n className: `${cssClass} ${enableRtl ? 'e-rtl' : ''}`\n }\n });\n Object.assign(groupContainer.style, groupStyleObj);\n const btnInstances = [];\n groupButtons.forEach((btnDef, idx) => {\n const btnId = `${component.name}_${idx}`;\n let btnCssClass = [mapButtonStyleToClass(btnDef.style)].filter(Boolean).join(' ');\n btnCssClass += component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : '';\n const resolvedGroupType = resolveButtonType(btnDef.type);\n const btnHost = createElement('button', {\n id: String(btnId),\n attrs: { name: String(btnId), type: resolvedGroupType }\n });\n groupContainer.appendChild(btnHost);\n const btnInst = new Button({\n locale: locale,\n enableRtl: enableRtl,\n cssClass: btnCssClass,\n disabled: btnDef.disabled || false,\n content: btnDef.label || `Button ${idx + 1}`,\n iconCss: btnDef.iconCss,\n iconPosition: btnDef.iconPosition\n });\n btnInst.appendTo(btnHost);\n btnInst.element.onclick = (event) => {\n if (onClick) {\n onClick(event);\n }\n };\n ref(btnInst, idx);\n btnInstances.push(btnInst);\n if (options.ref && typeof options.ref === 'function') {\n options.ref(btnInst, idx);\n }\n });\n if (target) {\n target.appendChild(groupContainer);\n }\n return btnInstances;\n }\n // Fallback: single ButtonComponent when no group is configured.\n const resolvedButtonType = resolveButtonType(component.buttonType);\n const buttonCssClassList = [\n mapButtonStyleToClass(component.style),\n resolvedButtonType === 'submit' ? 'submit-btn form-submit-type' : '',\n resolvedButtonType === 'reset' ? 'form-reset-type' : '',\n component.cssClass || 'e-primary',\n component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : ''\n ].filter(Boolean).join(' ') || 'e-primary';\n const buttonContainerStyle = {\n display: 'flex',\n justifyContent: mapPositionToJustifyContent(component.position),\n width: component.width || '100%'\n };\n const container = createElement('div', {\n id: `${component.name}-container`\n });\n Object.assign(container.style, buttonContainerStyle);\n const btnHost = createElement('button', {\n id: component.name,\n attrs: { type: resolvedButtonType }\n });\n container.appendChild(btnHost);\n const btnInst = new Button({\n enableRtl: enableRtl,\n locale: locale,\n cssClass: buttonCssClassList,\n disabled: component.disabled,\n iconCss: component.iconCss,\n iconPosition: component.iconPosition,\n content: component.label,\n });\n btnInst.appendTo(btnHost);\n ref(btnInst);\n btnInst.element.onclick = (event) => {\n if (onClick) {\n onClick(event);\n }\n };\n if (target) {\n target.appendChild(container);\n }\n return btnInst;\n }\n case 'splitButton': {\n const splitButtonCssClassList = [\n component.style === 'primary' ? 'e-primary' : '',\n component.style === 'flat' ? '' : '',\n component.style === 'information' ? 'e-info' : '',\n component.style === 'error' ? 'e-danger' : '',\n component.style === 'success' ? 'e-success' : '',\n component.style === 'warning' ? 'e-warning' : '',\n component.cssClass || ''\n ].filter(Boolean).join(' ') || undefined;\n const splitButtonContainerStyle = {\n display: 'flex',\n justifyContent: mapPositionToJustifyContent(component.position)\n };\n const container = createElement('div', {\n id: `${component.name}-container`,\n attrs: { 'aria-label': 'Splitbutton' }\n });\n Object.assign(container.style, splitButtonContainerStyle);\n const items = (component.options && component.options.length > 0\n ? component.options.map((option, index) => ( /* eslint-disable-next-line */{\n text: option,\n id: `${component.id}_option_${index}`\n }))\n : [/* eslint-disable-next-line */ { text: 'Option 1', id: `${component.id}_option_0` }]);\n const sbHost = createElement('button', {\n id: component.name\n });\n container.appendChild(sbHost);\n const sb = new SplitButton({\n locale: locale,\n enableRtl: enableRtl,\n content: component.label || 'Split Button',\n items: items,\n cssClass: splitButtonCssClassList,\n disabled: component.disabled,\n iconCss: component.iconCss,\n iconPosition: component.iconPosition || 'Left',\n click: (args) => {\n if (onClick) {\n onClick(Object.assign({}, args));\n }\n },\n select: (args) => {\n if (onClick) {\n onClick(Object.assign({}, args, { selectedItem: args.item.text }));\n }\n }\n });\n sb.appendTo(sbHost);\n if (target) {\n target.appendChild(container);\n }\n ref(sb);\n return sb;\n }\n case 'signature': {\n const canvas = createElement('canvas', {\n id: component.name\n });\n const sig = new Signature({\n enableRtl: enableRtl,\n locale: locale,\n backgroundColor: component.backgroundColor || '',\n strokeColor: component.strokeColor || '',\n maxStrokeWidth: component.maxValue,\n minStrokeWidth: component.minValue,\n velocity: component.velocity,\n disabled: component.disabled,\n change: () => onChange(component.name)\n });\n if (target) {\n sig.appendTo(canvas);\n target.appendChild(canvas);\n }\n ref(sig);\n return sig;\n }\n case 'rating': {\n const rt = new Rating({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue || 0),\n disabled: component.disabled,\n cssClass: cssClass,\n allowReset: component.allowReset,\n itemsCount: component.itemsCount,\n min: component.minValue,\n precision: component.precision,\n readOnly: component.readOnly,\n showTooltip: component.showRatingTooltip || false,\n showLabel: component.showRatingLabel,\n labelPosition: component.showRatingLabel ? component.ratingLabelPosition : undefined,\n valueChanged: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n target.setAttribute('name', component.id);\n rt.appendTo(target);\n }\n ref(rt);\n return rt;\n }\n case 'colorPicker': {\n const cp = new ColorPicker({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue || ''),\n disabled: component.disabled,\n enableOpacity: component.enableOpacity,\n showButtons: component.showButtons,\n showRecentColors: component.showRecentColors,\n noColor: component.showNoColor,\n cssClass: cssClass,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n cp.appendTo(target);\n }\n ref(cp);\n return cp;\n }\n case 'inputMask': {\n const im = new MaskedTextBox(Object.assign({ id: component.name, name: component.id, enableRtl: enableRtl, floatLabelType: component.floatLabelType || 'Never', placeholder: component.placeholder || '', enabled: !component.disabled, locale: locale, value: value !== undefined ? value : (component.defaultValue || ''), mask: component.mask || '000-000-0000', promptChar: component.promptChar || '_', customCharacters: component.customCharacters, readOnly: component.readOnly || false, showClearButton: component.showClearButton !== false, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n im.appendTo(target);\n }\n ref(im);\n return im;\n }\n case 'rangeSlider': {\n const sl = new Slider({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : 0),\n min: component.minValue || 0,\n max: component.maxValue || 100,\n step: component.step || 1,\n cssClass: cssClass,\n enabled: !component.disabled,\n readonly: component.readOnly,\n showButtons: component.showButtons,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n sl.appendTo(target);\n }\n ref(sl);\n return sl;\n }\n case 'fileUpload': {\n const up = new Uploader({\n enableRtl: enableRtl,\n locale: locale,\n type: 'file',\n enabled: !component.disabled,\n allowedExtensions: component.allowExtensions,\n asyncSettings: { saveUrl: component.saveUrl, removeUrl: component.removeUrl },\n buttons: component.buttons || {\n 'browse': 'Choose File',\n 'clear': 'Clear All',\n 'upload': 'Upload All'\n },\n maxFileSize: component.maxValue,\n minFileSize: component.minValue,\n multiple: !!component.allowMultiple,\n showFileList: component.showFileList,\n htmlAttributes: htmlAttrs,\n cssClass: cssClass,\n change: (args) => onChange(args.file)\n });\n if (target) {\n applyHostId(target, component.name);\n up.appendTo(target);\n }\n ref(up);\n return up;\n }\n case 'imageEditor': {\n const ieHost = createElement('div', {\n id: component.name,\n attrs: { 'data-field': component.id }\n });\n let ie;\n setTimeout(() => {\n ie = new ImageEditor({\n locale: locale,\n enableRtl: enableRtl,\n disabled: component.disabled,\n cssClass: cssClass,\n height: (component.height != null ? component.height : '350px').toString(),\n width: (component.width != null ? component.width : '100%').toString(),\n editComplete: () => onChange(component.name),\n fileOpened: () => onChange(component.name)\n }, `#${component.name}`);\n }, 100);\n if (target) {\n target.appendChild(ieHost);\n }\n ref(ie);\n return ie;\n }\n case 'message': {\n const msg = new Message({\n locale: locale,\n enableRtl: enableRtl,\n severity: component.severity || component.messageType || 'info',\n variant: component.variant,\n content: component.content || 'Message',\n showCloseIcon: component.showCloseIcon,\n showIcon: ((component.showIcon === undefined ? false : component.showIcon) || false),\n cssClass: cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n msg.appendTo(target);\n }\n ref(msg);\n return msg;\n }\n case 'dataGrid': {\n const dg = component;\n const conditionalDataResult = resolveConditionalData(dg.conditions, (formState && formState.values) || {});\n const conditionalData = conditionalDataResult ? conditionalDataResult.dataSource : undefined;\n const conditionalColumns = conditionalDataResult ? conditionalDataResult.columns : undefined;\n const effectiveDataSource = conditionalData || dg.dataSource;\n const fetchedDataSource = [];\n OptionFetcher.fetch(conditionalData || dg.dataSource, dg.id, formState && formState.values, components).then((res) => {\n if (res.id === dg.id && res.options.length > 0) {\n const newDataSource = resolveOptions(conditionalData || dg.dataSource, res.options, fetchedLookupDataSource);\n gridComp.setDataSource(newDataSource);\n }\n });\n const fetchedLookupDataSource = [];\n const resolvedDataSource = conditionalData\n ? resolveOptions(conditionalData, fetchedDataSource, fetchedLookupDataSource)\n : resolveOptions(dg.dataSource, fetchedDataSource, fetchedLookupDataSource);\n const finalDataSource = resolvedDataSource.length > 0 ? resolvedDataSource : (dg.dataSource !== undefined && dg.dataSource !== null ? dg.dataSource : []);\n const finalColumns = conditionalColumns && conditionalColumns.length > 0 ? conditionalColumns : (dg.columns !== undefined && dg.columns !== null ? dg.columns : []);\n const gridHost = target || createElement('div', {\n id: dg.name,\n className: dg.cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n }\n const gridComp = new DataGridComponent({\n locale: locale,\n name: dg.name || '',\n columns: finalColumns,\n enableRtl: enableRtl,\n dataSource: (finalDataSource !== undefined && finalDataSource.length > 0) ? finalDataSource : value,\n height: (dg.height != null ? dg.height : '200px'),\n width: (dg.width != null ? dg.width : '100%'),\n pageSize: dg.pageSize || 6,\n allowPaging: dg.allowPaging !== false,\n allowFiltering: dg.allowFiltering,\n allowAdding: dg.allowAdding !== false,\n allowEditing: dg.allowEditing !== false,\n allowDeleting: dg.allowDeleting !== false,\n onDataChange: (data) => onChange(data),\n cssClass: cssClass,\n target: gridHost,\n ref: ref\n });\n gridComp.render(gridHost);\n if (!initializedGrids.has(component.id) && formState && Array.isArray(finalDataSource)) {\n formState.values[component.id] = finalDataSource;\n gridComp.isInitialized = true;\n initializedGrids.add(component.id);\n }\n if (typeof options.ref === 'function') {\n options.ref(gridComp);\n }\n else if (options.ref) {\n options.ref.current = gridComp;\n }\n return target || gridHost;\n }\n case 'richTextEditor': {\n const toolbarSettings = {\n items: [\n 'Undo', 'Redo', '|', 'Bold', 'Italic', 'Underline', 'StrikeThrough', 'InlineCode', '|',\n 'CreateLink', 'Image', 'CreateTable', 'CodeBlock', 'HorizontalLine', 'Blockquote', 'EmojiPicker', '|',\n 'LineHeight', 'Formats', 'Alignments', '|', 'BulletFormatList', 'NumberFormatList', 'Checklist', '|',\n 'Outdent', 'Indent', '|', 'FontColor', 'BackgroundColor', 'FontName', 'FontSize', '|',\n 'LowerCase', 'UpperCase', 'SuperScript', 'SubScript', '|', 'SourceCode', '|'\n ]\n };\n if (component.enableImportFromWord && component.enableImportFromWord.enabled) {\n toolbarSettings.items.push('ImportWord');\n }\n if (component.enableExportToWord && component.enableExportToWord.enabled) {\n toolbarSettings.items.push('ExportWord');\n }\n if (component.enableExportToPdf && component.enableExportToPdf.enabled) {\n toolbarSettings.items.push('ExportPdf');\n }\n toolbarSettings.items.push('Print');\n const hasValidService = (config) => !!config && config.enabled && typeof config.serviceUrl === 'string' && config.serviceUrl.trim() !== '';\n const importWord = hasValidService(component.enableImportFromWord)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '')\n ? (component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '').replace(/^\\/+/, '')}`\n }\n : undefined;\n const exportWord = hasValidService(component.enableExportToWord)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableExportToWord ? component.enableExportToWord.serviceUrl : '')\n ? (component.enableExportToWord ? component.enableExportToWord.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableExportToWord ? component.enableExportToWord.serviceUrl : '').replace(/^\\/+/, '')}`,\n fileName: 'RichTextEditor.docx',\n stylesheet: `\n .e-rte-content {\n font-size: 1em;\n font-weight: 400;\n margin: 0;\n }\n `\n }\n : undefined;\n const exportPdf = hasValidService(component.enableExportToPdf)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '')\n ? (component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '').replace(/^\\/+/, '')}`,\n fileName: 'RichTextEditor.pdf',\n stylesheet: `\n .e-rte-content {\n font-size: 1em;\n font-weight: 400;\n margin: 0;\n }\n `\n }\n : undefined;\n const rte = new RichTextEditor({\n locale: locale,\n toolbarSettings: toolbarSettings,\n enableRtl: enableRtl,\n value: value !== undefined ? value : (component.defaultValue || ''),\n placeholder: component.placeholder || '',\n enabled: !component.disabled,\n readonly: component.readOnly || false,\n maxLength: component.maxLength || undefined,\n cssClass: cssClass || undefined,\n height: component.height || '300px',\n width: component.width || '100%',\n htmlAttributes: htmlAttrs,\n importWord: importWord,\n exportPdf: exportPdf,\n exportWord: exportWord,\n change: (args) => onChange(args.value)\n });\n RichTextEditor.Inject(Toolbar, Link, HtmlEditor, QuickToolbar, RTEImage, Count, Table, EmojiPicker, PasteCleanup, SlashMenu, CodeBlock, ClipBoardCleanup, AutoFormat, ImportExport);\n rte.appendTo(target);\n ref(rte);\n return rte;\n }\n default: {\n const msg = new Message({\n locale: locale,\n enableRtl: enableRtl,\n severity: 'Warning',\n content: `${l10n.getConstant('unsupportedComponent')} : ${component.type}`,\n cssClass: cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n msg.appendTo(target);\n }\n ref(msg);\n return msg;\n }\n }\n};\n","import { sanitizeId, VALIDATION_REGEX } from './utils';\n/**\n * @private\n */\nconst DEFAULT_CONFIG = {\n strict: false,\n maxInputSize: 5 * 1024 * 1024,\n defaultTextType: 'textbox',\n inferTypeFromValue: true,\n generateIds: true,\n includeMetadata: true,\n customTypeMap: {},\n validateUnknownFields: false\n};\n/**\n * @private\n */\nexport class UniversalJsonParser {\n constructor(customConfig) {\n this.config = Object.assign({}, DEFAULT_CONFIG, customConfig);\n }\n parse(input) {\n const errors = [];\n const warnings = [];\n // Handle string input\n if (typeof input === 'string') {\n if (input.length > this.config.maxInputSize) {\n return this.formatError(errors, warnings, `Input exceeds maximum size of ${this.config.maxInputSize} bytes`);\n }\n const jsonValidation = validateJSON(input);\n if (!jsonValidation.valid) {\n return this.formatError(errors, warnings, (jsonValidation.errors && jsonValidation.errors[0]) || 'Invalid JSON');\n }\n try {\n input = JSON.parse(input);\n }\n catch (error) {\n return this.formatError(errors, warnings, `Failed to parse JSON: ${error.message}`);\n }\n }\n // Detect format\n const detection = this.detectFormat(input);\n // Add warnings for ambiguous format detection\n if (detection.ambiguousFormats && detection.ambiguousFormats.length > 0) {\n warnings.push(`Ambiguous format detected.`);\n warnings.push(`Using ${detection.format} format (${detection.format === 'json-schema' ? 'properties priority' : 'pages priority'})`);\n }\n // Parse based on format\n let components = [];\n switch (detection.format) {\n case 'configured-schema':\n // Already in our standard format, just use directly\n components = input.properties || [];\n break;\n case 'json-schema': {\n const jsonSchemaResult = this.parseJsonSchema(input);\n components = jsonSchemaResult.components;\n if (jsonSchemaResult.warnings) {\n warnings.push(...jsonSchemaResult.warnings);\n }\n break;\n }\n case 'surveyjs':\n components = this.parseSurveyJS(input);\n break;\n case 'openapi':\n components = this.parseOpenAPI(input);\n break;\n case 'data-inference':\n components = this.parseDataInference(input);\n // Only warn about inferred types if components were actually created\n if (components.length > 0) {\n warnings.push('Field types inferred from data; please verify');\n }\n break;\n default:\n errors.push('Could not determine input format');\n }\n if (components.length === 0) {\n errors.push('No form fields could be extracted from input');\n }\n // Add default submit button if not already present\n const hasSubmitButton = components.some((comp) => comp.type === 'button' && comp.buttonType === 'submit');\n if (!hasSubmitButton && components.length > 0) {\n components.push({\n id: this.generateComponentId('button'),\n type: 'button',\n label: 'Submit',\n style: 'primary',\n buttonType: 'submit',\n });\n }\n const schema = {\n version: input.version || \"0.1.0\",\n components\n };\n const schemaValidation = validateFormSchema(schema);\n if (!schemaValidation.valid && schemaValidation.errors) {\n errors.push(...schemaValidation.errors);\n }\n if (schemaValidation.warnings) {\n warnings.push(...schemaValidation.warnings);\n }\n if (this.config.strict && warnings.length > 0) {\n errors.push(...warnings);\n warnings.length = 0;\n }\n const sanitized = sanitizeFormSchema(schema);\n return {\n success: errors.length === 0,\n schema: sanitized,\n errors,\n warnings,\n metadata: {\n detectedFormat: detection.format,\n confidence: detection.confidence,\n sourceHints: detection.hints\n }\n };\n }\n formatError(errors, warnings, message) {\n errors.push(message);\n return {\n success: false,\n schema: null,\n errors,\n warnings,\n metadata: {\n detectedFormat: 'unknown',\n confidence: 'low',\n sourceHints: []\n }\n };\n }\n detectFormat(input) {\n const hints = [];\n const ambiguousFormats = [];\n if (!input || typeof input !== 'object') {\n return {\n format: 'unknown',\n confidence: 'low',\n hints: ['Input is not a valid object']\n };\n }\n // Check for JSON Schema indicators\n if (input.$schema && typeof input.$schema === 'string' && input.$schema.includes('json-schema')) {\n hints.push('$schema property detected');\n return { format: 'json-schema', confidence: 'high', hints };\n }\n // Detect ambiguous formats (Test Case 8)\n const hasProperties = input.properties && typeof input.properties === 'object';\n const hasPages = input.pages && Array.isArray(input.pages);\n const hasElements = input.elements && Array.isArray(input.elements);\n if (hasProperties && hasPages) {\n hints.push('Multiple format patterns detected');\n hints.push('Selected based on priority rules');\n ambiguousFormats.push('properties format', 'pages format');\n // JSON Schema has priority\n return {\n format: 'json-schema',\n confidence: 'medium',\n hints,\n ambiguousFormats\n };\n }\n // Check for SurveyJS with pages\n if (hasPages) {\n hints.push('pages array detected');\n if (input.pages[0] && input.pages[0].elements)\n hints.push('elements structure matched');\n return { format: 'surveyjs', confidence: 'high', hints };\n }\n // Check for SurveyJS with elements at root\n if (hasElements && !hasProperties) {\n hints.push('elements array at root level');\n return { format: 'surveyjs', confidence: 'medium', hints };\n }\n // Check for JSON Schema with properties\n if (hasProperties) {\n hints.push('properties object detected');\n if (input.type === 'object')\n hints.push('type: object matched');\n if (input.required && Array.isArray(input.required))\n hints.push('required array found');\n // Check for API schema indicators (example fields pattern)\n if (this.hasExampleFields(input.properties)) {\n hints.push('example fields detected (API schema pattern)');\n return { format: 'openapi', confidence: 'high', hints };\n }\n return { format: 'json-schema', confidence: 'high', hints };\n }\n // Check for Data Inference\n if (this.isDataInferenceCandidate(input)) {\n hints.push('Simple object with primitive values');\n hints.push('No schema indicators found');\n return { format: 'data-inference', confidence: 'medium', hints };\n }\n return {\n format: 'unknown',\n confidence: 'low',\n hints: ['Could not identify format']\n };\n }\n hasExampleFields(properties) {\n if (!properties || typeof properties !== 'object')\n return false;\n const keys = Object.keys(properties);\n for (const key of keys) {\n const prop = properties[key];\n if (prop && 'example' in prop) {\n return true;\n }\n }\n return false;\n }\n isDataInferenceCandidate(input) {\n if (!input || typeof input !== 'object')\n return false;\n if (input.$schema || input.properties || input.pages || input.elements)\n return false;\n const inputKeys = Object.keys(input);\n return inputKeys.every((k) => {\n const val = input[k];\n if (val === null || val === undefined)\n return true;\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean')\n return true;\n if (Array.isArray(val)) {\n return val.every((item) => typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean');\n }\n return false;\n });\n }\n inferComponentType(fieldName, value) {\n const valueType = this.inferTypeFromValue(fieldName, value);\n if (valueType.type) {\n return Object.assign({}, valueType, { confidence: 'high', method: 'value-type' });\n }\n const patternMatch = this.matchFieldNamePattern(fieldName);\n if (patternMatch.type) {\n return Object.assign({}, patternMatch, { confidence: 'high', method: 'name-pattern' });\n }\n return {\n type: this.config.defaultTextType,\n confidence: 'low',\n method: 'fallback'\n };\n }\n inferTypeFromValue(fieldName, value) {\n if (!this.config.inferTypeFromValue)\n return { type: 'textbox' };\n if (value === null || value === undefined) {\n // Even with null/undefined values, check field name patterns\n return this.matchFieldNamePattern(fieldName);\n }\n if (typeof value === 'string') {\n // Check value-based patterns first (highest confidence)\n if (value.includes('@') && value.includes('.')) {\n return { type: 'textbox', textboxType: 'email' };\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n if (/^(https?:\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}/.test(value)) {\n return { type: 'textbox', textboxType: 'url' };\n }\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n return { type: 'date' };\n }\n // For generic strings, check field name patterns\n const fieldNameMatch = this.matchFieldNamePattern(fieldName);\n if (fieldNameMatch.type !== 'textbox' || fieldNameMatch.textboxType) {\n return fieldNameMatch;\n }\n return { type: this.config.defaultTextType };\n }\n if (typeof value === 'number') {\n return { type: 'number' };\n }\n if (typeof value === 'boolean') {\n return { type: 'checkbox' };\n }\n if (Array.isArray(value)) {\n return { type: 'multiselect' };\n }\n return { type: 'textbox' };\n }\n matchFieldNamePattern(fieldName) {\n if (this.config.customTypeMap) {\n const customType = this.config.customTypeMap[fieldName.toLowerCase()];\n if (customType)\n return { type: customType };\n }\n const lower = fieldName.toLowerCase();\n const normalized = lower.replace(/[_\\-\\s]+/g, ' ');\n if (/email|mail|e-?mail/.test(normalized))\n return { type: 'textbox', textboxType: 'email' };\n if (/date|birth|birthday|dob|created|updated/.test(normalized))\n return { type: 'date' };\n if (/phone|tel|mobile|cell|cellphone|msisdn/.test(normalized))\n return { type: 'textbox', textboxType: 'number' };\n if (/url|link|uri|website/.test(normalized))\n return { type: 'textbox', textboxType: 'url' };\n if (/password|pwd|pass|security|secret|key|token/.test(normalized))\n return { type: 'textbox', textboxType: 'password' };\n if (/\\b(?:age|count|qty|quantity|amount|price|cost|salary|fee|rate|number|num)\\b/.test(normalized))\n return { type: 'number' };\n if (/active|enabled|visible|deleted|archived|approved|confirmed/.test(normalized))\n return { type: 'checkbox' };\n if (/select|choice|option|type|status|category|kind/.test(normalized))\n return { type: 'dropdown' };\n if (/description|comment|note|bio|biography|about|message|content|summary|details/.test(normalized))\n return { type: 'textarea' };\n return { type: 'textbox' };\n }\n parseJsonSchema(schema) {\n const components = [];\n const warnings = [];\n if (!schema.properties || typeof schema.properties !== 'object')\n return { components, warnings };\n const flattenedProperties = this.flattenNestedProperties(schema.properties, '', warnings);\n const flatKeys = Object.keys(flattenedProperties);\n for (const key of flatKeys) {\n const propDef = flattenedProperties[key];\n const typeInfo = this.mapJsonSchemaType(propDef);\n const requiredArr = schema.required || [];\n const isRequired = requiredArr.indexOf(key) !== -1;\n components.push(this.createComponent(key, propDef, typeInfo, { required: isRequired }));\n }\n return { components, warnings };\n }\n flattenNestedProperties(properties, prefix, warnings) {\n const flattened = {};\n let hasNested = false;\n const propKeys = Object.keys(properties);\n for (const key of propKeys) {\n const propDef = properties[key];\n const fullKey = prefix ? `${prefix}_${key}` : key;\n // Check if this is a nested object (Test Case 9)\n if (propDef.type === 'object' && propDef.properties && typeof propDef.properties === 'object') {\n hasNested = true;\n const nestedFlattened = this.flattenNestedProperties(propDef.properties, fullKey, warnings);\n Object.assign(flattened, nestedFlattened);\n }\n else {\n flattened[fullKey] = propDef;\n }\n }\n // Add warnings for nested objects\n if (hasNested && !prefix) {\n warnings.push('NESTED_OBJECTS_FLATTENED: Nested objects converted to flat structure');\n const outerKeys = Object.keys(properties);\n for (const key of outerKeys) {\n const propDef = properties[key];\n if (propDef.type === 'object' && propDef.properties) {\n this.collectFlattenedFieldNames(propDef.properties, key, warnings);\n }\n }\n }\n return flattened;\n }\n collectFlattenedFieldNames(properties, prefix, warnings) {\n const collKeys = Object.keys(properties);\n for (const key of collKeys) {\n const propDef = properties[key];\n const fullKey = `${prefix}_${key}`;\n warnings.push(`Field '${prefix}.${key}' flattened to '${fullKey}'`);\n if (propDef.type === 'object' && propDef.properties) {\n this.collectFlattenedFieldNames(propDef.properties, fullKey, warnings);\n }\n }\n }\n parseSurveyJS(schema) {\n const components = [];\n if (schema.pages && Array.isArray(schema.pages)) {\n schema.pages.forEach((page) => {\n if (page.elements && Array.isArray(page.elements)) {\n page.elements.forEach((element) => {\n components.push(this.createComponentFromSurveyJS(element));\n });\n }\n });\n }\n if (!components.length && schema.elements && Array.isArray(schema.elements)) {\n schema.elements.forEach((element) => {\n components.push(this.createComponentFromSurveyJS(element));\n });\n }\n return components;\n }\n createComponentFromSurveyJS(element) {\n const type = this.mapSurveyJSType(element.type || 'text');\n const validation = {};\n // Only add required if explicitly true\n if (element.isRequired === true) {\n validation.required = true;\n }\n if (element.validators && Array.isArray(element.validators)) {\n element.validators.forEach((validator) => {\n if (validator.type === 'numeric') {\n if (validator.minValue !== undefined)\n validation.minValue = validator.minValue;\n if (validator.maxValue !== undefined)\n validation.maxValue = validator.maxValue;\n }\n if (validator.type === 'text') {\n if (validator.minLength !== undefined)\n validation.minLength = validator.minLength;\n if (validator.maxLength !== undefined)\n validation.maxLength = validator.maxLength;\n }\n });\n }\n const component = Object.assign({ id: this.generateComponentId(type), type: type, label: element.title || element.label || this.humanizeFieldName(element.name), defaultValue: element.defaultValue, expressionValue: element.expressionValue }, Object.keys(validation).length > 0 ? validation : undefined);\n if (type === 'dropdown' || type === 'multiselect' || type === 'radio' || type === 'splitButton') {\n if (element.choices && Array.isArray(element.choices)) {\n component.options = element.choices;\n }\n }\n return component;\n }\n mapSurveyJSType(surveyType) {\n const typeMap = {\n text: 'textbox',\n email: 'email',\n number: 'number',\n checkbox: 'checkbox',\n radiogroup: 'radio',\n dropdown: 'dropdown',\n tagbox: 'multiselect',\n multiselect: 'multiselect',\n rating: 'number',\n comment: 'textarea',\n date: 'date'\n };\n return typeMap[surveyType] || 'textbox';\n }\n parseOpenAPI(schema) {\n const components = [];\n if (!schema.properties || typeof schema.properties !== 'object')\n return components;\n const openAPIKeys = Object.keys(schema.properties);\n const requiredArr = schema.required || [];\n for (const key of openAPIKeys) {\n const propDef = schema.properties[key];\n const typeInfo = this.mapJsonSchemaType(propDef);\n const isRequired = requiredArr.indexOf(key) !== -1;\n components.push(this.createComponent(key, propDef, typeInfo, { required: isRequired }));\n }\n return components;\n }\n parseDataInference(data) {\n const components = [];\n const dataKeys = Object.keys(data);\n for (const key of dataKeys) {\n const value = data[key];\n const typeInference = this.inferComponentType(key, value);\n const component = {\n id: this.generateComponentId(typeInference.type),\n type: typeInference.type,\n label: this.humanizeFieldName(key),\n defaultValue: value,\n expressionValue: undefined\n };\n if (typeInference.textboxType) {\n component.textboxType = typeInference.textboxType;\n // Add default regex patterns for email and url\n if (typeInference.textboxType === 'email') {\n component.regex = VALIDATION_REGEX['EMAIL'];\n }\n else if (typeInference.textboxType === 'url') {\n component.regex = VALIDATION_REGEX['URL'];\n }\n }\n if (typeInference.type === 'date' && component.defaultValue !== undefined && component.defaultValue !== null) {\n const formatted = this.formatDateTimeValue(component.defaultValue);\n if (formatted)\n component.defaultValue = formatted;\n }\n if (Array.isArray(value) && value.length > 0) {\n component.options = value;\n }\n components.push(component);\n }\n return components;\n }\n createComponent(fieldName, propDef, typeInfo, context) {\n const validation = {};\n // Only add required if explicitly true\n const isRequired = propDef.required !== undefined ? propDef.required : context.required;\n if (isRequired === true) {\n validation.required = true;\n }\n if (propDef.minLength)\n validation.minLength = propDef.minLength;\n if (propDef.maxLength)\n validation.maxLength = propDef.maxLength;\n if (propDef.minDate)\n validation.minDate = propDef.minDate;\n if (propDef.maxDate)\n validation.maxDate = propDef.maxDate;\n if (propDef.minTime)\n validation.minTime = propDef.minTime;\n if (propDef.minValue)\n validation.minValue = propDef.minValue;\n if (propDef.maxValue)\n validation.maxValue = propDef.maxValue;\n if (propDef.pattern) {\n validation.pattern = propDef.pattern;\n }\n const rawId = propDef.id || this.generateComponentId(typeInfo.type);\n const safeGeneratedId = sanitizeId(rawId, this.generateComponentId(typeInfo.type));\n const component = Object.assign({ id: safeGeneratedId, name: propDef.name, type: typeInfo.type, label: propDef.title || propDef.label || this.humanizeFieldName(fieldName), defaultValue: propDef.default || propDef.defaultValue || undefined, expressionValue: propDef.expressionValue || undefined, content: propDef.content, buttonType: propDef.buttonType, textboxType: propDef.textboxType }, Object.keys(validation).length > 0 ? validation : undefined);\n if (typeInfo.textboxType) {\n component.textboxType = typeInfo.textboxType;\n // Add default regex patterns for email and url\n if (typeInfo.textboxType === 'email') {\n if (!validation.pattern) {\n validation.regex = '^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$'; // Standard email regex\n validation.validationMessage = 'Please enter a valid email address';\n }\n }\n else if (typeInfo.textboxType === 'url') {\n if (!validation.pattern) {\n validation.regex = '^(https?:\\\\/\\\\/)?(www\\\\.)?[-a-zA-Z0-9@:%._\\\\+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,6}\\\\b([-a-zA-Z0-9()@:%_\\\\+.~#?&//=]*)$';\n validation.validationMessage = 'Please enter a valid URL';\n }\n }\n }\n if (typeInfo.type === 'date' && component.defaultValue !== undefined && component.defaultValue !== null) {\n const formatted = this.formatDateTimeValue(component.defaultValue);\n if (formatted)\n component.defaultValue = formatted;\n }\n if ((typeInfo.type === 'splitButton' || typeInfo.type === 'dropdown' || typeInfo.type === 'multiselect' || typeInfo.type === 'radio') && (propDef.enum || propDef.options)) {\n component.options = propDef.enum || propDef.options;\n }\n return component;\n }\n parseDateFromValue(value) {\n if (value == null)\n return null;\n // numeric timestamps\n if (typeof value === 'number') {\n // assume seconds if small\n if (value < 1e12)\n return new Date(value * 1000);\n return new Date(value);\n }\n if (typeof value === 'string') {\n const s = value.trim();\n // Try ISO / RFC parse\n const dIso = new Date(s);\n if (!isNaN(dIso.getTime()))\n return dIso;\n // yyyy-mm-dd[ T hh:mm(:ss)]\n // eslint-disable-next-line security/detect-unsafe-regex\n const m = s.match(/^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2}))?)?/);\n if (m)\n return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]), Number(m[4] || 0), Number(m[5] || 0), Number(m[6] || 0));\n // mm/dd/yyyy or m/d/yyyy\n // eslint-disable-next-line security/detect-unsafe-regex\n const m2 = s.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})(?:[ T](\\d{1,2}):(\\d{2})(?:[:](\\d{2}))?)?/);\n if (m2)\n return new Date(Number(m2[3]), Number(m2[1]) - 1, Number(m2[2]), Number(m2[4] || 0), Number(m2[5] || 0), Number(m2[6] || 0));\n }\n return null;\n }\n formatDate(d) {\n const monthNum = d.getMonth() + 1;\n const dayNum = d.getDate();\n const mm = monthNum < 10 ? '0' + monthNum : String(monthNum);\n const dd = dayNum < 10 ? '0' + dayNum : String(dayNum);\n const yyyy = d.getFullYear();\n return `${mm}/${dd}/${yyyy}`;\n }\n // private formatTime(d: Date): string {\n // let hours = d.getHours();\n // const minutes = d.getMinutes().toString().padStart(2, '0');\n // const ampm = hours >= 12 ? 'PM' : 'AM';\n // hours = hours % 12;\n // if (hours === 0) hours = 12;\n // return `${hours.toString().padStart(2, '0')}:${minutes} ${ampm}`;\n // }\n formatDateTimeValue(value) {\n const d = this.parseDateFromValue(value);\n if (!d)\n return undefined;\n const datePart = this.formatDate(d);\n const hasTime = d.getHours() !== 0 || d.getMinutes() !== 0 || /\\dT\\d{2}:\\d{2}/.test(String(value));\n if (hasTime)\n return `${datePart}`;\n return datePart;\n }\n mapJsonSchemaType(propDef) {\n const schemaType = propDef.type;\n if (schemaType === 'string') {\n const fmt = (propDef.format || '').toString().toLowerCase();\n const text = ((propDef.title || propDef.label || '') + ' ' + (propDef.description || '')).toLowerCase();\n if (/email|mail|e-?mail/.test(fmt) || /email|mail|e-?mail/.test(text))\n return { type: 'textbox', textboxType: 'email' };\n if (/uri|url|link|website/.test(fmt) || /uri|url|link|website/.test(text))\n return { type: 'textbox', textboxType: 'url' };\n if (/phone|tel|mobile|cell|msisdn/.test(fmt) || /phone|tel|mobile|cell|msisdn/.test(text))\n return { type: 'textbox', textboxType: 'number' };\n if (/password|pwd|pass|security|secret|key/.test(fmt) || /password|pwd|pass|security|secret|key/.test(text))\n return { type: 'textbox', textboxType: 'password' };\n if (fmt === 'date' || fmt === 'date-time' || /date|birthday|dob/.test(text))\n return { type: 'date' };\n if (propDef.enum)\n return { type: 'dropdown' };\n if (propDef.options)\n return { type: 'dropdown' };\n return { type: this.config.defaultTextType };\n }\n if (schemaType === 'number' || schemaType === 'integer')\n return { type: 'number' };\n if (schemaType === 'boolean')\n return { type: 'checkbox' };\n if (schemaType === 'array')\n return { type: 'multiselect' };\n // Presentation / custom widget types\n if (schemaType === 'message')\n return { type: 'message' };\n if (schemaType === 'button')\n return { type: 'button' };\n if (schemaType === 'signature' || schemaType === 'sign')\n return { type: 'signature' };\n if (schemaType === 'image' || schemaType === 'imageEditor')\n return { type: 'imageEditor' };\n if (schemaType === 'file' || schemaType === 'fileUpload')\n return { type: 'fileUpload' };\n if (schemaType === 'color' || schemaType === 'colorPicker')\n return { type: 'colorPicker' };\n if (schemaType === 'splitButton')\n return { type: 'splitButton' };\n return { type: this.config.defaultTextType };\n }\n generateComponentId(type) {\n if (!this.config.generateIds)\n return '';\n const timestamp = Date.now();\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${timestamp}_${random}`;\n }\n humanizeFieldName(fieldName) {\n let result = fieldName.replace(/_/g, ' ');\n result = result.replace(/([a-z])([A-Z])/g, '$1 $2');\n return result;\n }\n}\n/**\n * @private\n */\nexport const validateJSON = (jsonString) => {\n try {\n JSON.parse(jsonString);\n return { valid: true };\n }\n catch (error) {\n return {\n valid: false,\n errors: [`Invalid JSON syntax: ${error.message}`]\n };\n }\n};\n/**\n * @private\n */\nexport const validateFormSchema = (schema) => {\n const errors = [];\n const warnings = [];\n if (!schema.components) {\n errors.push('Missing required property: components');\n }\n else if (!Array.isArray(schema.components)) {\n errors.push('Property \"components\" must be an array');\n }\n // Validate component structure\n if (Array.isArray(schema.components)) {\n const componentIds = new Set();\n const validateComponent = (comp, path = 'root') => {\n if (!comp.id) {\n errors.push(`Component at ${path} is missing \"id\" property`);\n }\n else {\n if (componentIds.has(comp.id)) {\n errors.push(`Duplicate component ID found: ${comp.id}`);\n }\n componentIds.add(comp.id);\n }\n if (!comp.type) {\n errors.push(`Component \"${comp.id || 'unknown'}\" is missing \"type\" property`);\n }\n if (comp.children && Array.isArray(comp.children)) {\n comp.children.forEach((child, index) => {\n validateComponent(child, `${path}.children[${index}]`);\n });\n }\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n comp.tabItems.forEach((tab, tabIndex) => {\n if (tab.content && Array.isArray(tab.content)) {\n tab.content.forEach((child, index) => {\n validateComponent(child, `${path}.tabItems[${tabIndex}].content[${index}]`);\n });\n }\n });\n }\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n comp.tableCells.forEach((row, rowIndex) => {\n if (Array.isArray(row)) {\n row.forEach((cell, colIndex) => {\n if (Array.isArray(cell)) {\n cell.forEach((child, index) => {\n validateComponent(child, `${path}.tableCells[${rowIndex}][${colIndex}][${index}]`);\n });\n }\n });\n }\n });\n }\n };\n schema.components.forEach((comp, index) => {\n validateComponent(comp, `components[${index}]`);\n });\n }\n return {\n valid: errors.length === 0,\n errors: errors.length > 0 ? errors : undefined,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n};\n/**\n * @private\n */\nexport const sanitizeFormSchema = (schema) => {\n const sanitized = {\n version: schema.version || \"0.1.0\",\n components: schema.components || []\n };\n const sanitizeComponent = (comp) => {\n const sanitizedComp = Object.assign({}, comp, { _configured: true });\n if (comp.children && Array.isArray(comp.children)) {\n sanitizedComp.children = comp.children.map(sanitizeComponent);\n }\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n sanitizedComp.tabItems = comp.tabItems.map((tab) => (Object.assign({}, tab, { content: tab.content ? tab.content.map(sanitizeComponent) : [] })));\n }\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n sanitizedComp.tableCells = comp.tableCells.map((row) => row.map((cell) => Array.isArray(cell) ? cell.map(sanitizeComponent) : []));\n }\n return sanitizedComp;\n };\n sanitized.components = sanitized.components.map(sanitizeComponent);\n return sanitized;\n};\n/**\n * @private\n */\nexport const exportFormSchema = (schema) => {\n return JSON.stringify(schema, null, 2);\n};\n","import { isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * @private\n * `StaticHtmlRenderer` is the Category C native reimplementation of\n * `Common/StaticHtmlRenderer.tsx`.\n *\n * Renders raw HTML into a `div`. Calls `SanitizeHtmlHelper.sanitize`\n * **only when** `enableHtmlSanitizer` is true; otherwise renders the raw\n * content. Supports an optional `id`.\n *\n * Mirrors the React component's `useMemo([content])` memoization by\n * recomputing the rendered string only when `content` changes — the host\n * replaces the inner HTML directly via `update()`.\n */\nexport class StaticHtmlRenderer {\n constructor(options) {\n this.content = options.content;\n this.id = options.id;\n this.enableHtmlSanitizer = isNullOrUndefined(options.enableHtmlSanitizer) ? true : options.enableHtmlSanitizer;\n this.el = options.target || null;\n }\n resolveHtml(content) {\n try {\n if (this.enableHtmlSanitizer) {\n return SanitizeHtmlHelper.sanitize(content);\n }\n return content;\n }\n catch (error) {\n return '';\n }\n }\n /**\n * Create and return the container element with the rendered HTML\n * already injected. The caller appends the returned element to the DOM.\n */\n render() {\n const div = document.createElement('div');\n if (this.id) {\n div.id = this.id;\n }\n div.innerHTML = this.resolveHtml(this.content);\n this.el = div;\n return div;\n }\n /**\n * Update the rendered content in-place (re-runs the sanitization /\n * raw-pass-through). Used by the host when `content` changes.\n */\n update(content) {\n this.content = content;\n if (this.el) {\n this.el.innerHTML = this.resolveHtml(this.content);\n }\n }\n /**\n * Return the live host element (or null before `render()`).\n */\n getElement() {\n return this.el;\n }\n /**\n * @private\n */\n destroy() {\n if (this.el && this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = null;\n this.content = '';\n this.enableHtmlSanitizer = false;\n this.id = undefined;\n }\n}\nexport default StaticHtmlRenderer;\n","/**\n * Extract min/max constraints from minMaxRange array\n * @private\n */\nexport class MinMaxRuleEngine {\n /**\n * Extract min/max constraints from minMaxRange array\n * Handles three cases:\n * 1. Direct values (enabled: false)\n * 2. Single field reference (enabled: true, 1 range)\n * 3. Multiple ranges (enabled: true, 2+ ranges) - takes UTMOST\n * @private\n * @param minMaxRange - Array of range configurations\n * @param formValues - Current form state values (id → value)\n * @param componentType - 'number' | 'date' | 'dateRange'\n * @returns Constraints object with appropriate keys\n */\n static getConstraints(minMaxRange, formValues, componentType = 'number') {\n // No ranges provided\n if (!minMaxRange || minMaxRange.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // First, check for CASE 1: Direct values (enabled: false)\n const directValueRange = minMaxRange.find(range => range.enabled === false);\n if (directValueRange) {\n // Use direct values without field lookup\n const minValue = this.resolveValue(directValueRange.minValue, {});\n const maxValue = this.resolveValue(directValueRange.maxValue, {});\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: minValue,\n maxDate: maxValue,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: minValue,\n maxTime: maxValue\n };\n }\n return {\n minValue,\n maxValue,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n // CASE 2 & 3: Field references (enabled: true)\n const enabledRanges = minMaxRange.filter(range => range.enabled === true);\n // No enabled ranges - return empty\n if (enabledRanges.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // Extract resolved values from each enabled range\n const resolvedRanges = enabledRanges\n .map(range => ({\n min: this.resolveValue(range.minValue, formValues),\n max: this.resolveValue(range.maxValue, formValues)\n }))\n .filter(range => range.min !== undefined || range.max !== undefined);\n // No valid ranges\n if (resolvedRanges.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // Combine multiple ranges using UTMOST (most permissive)\n const finalMin = this.getPermissiveMin(resolvedRanges, componentType);\n const finalMax = this.getPermissiveMax(resolvedRanges, componentType);\n // Return appropriate keys based on component type\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: finalMin,\n maxDate: finalMax,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: finalMin,\n maxTime: finalMax\n };\n }\n return {\n minValue: finalMin,\n maxValue: finalMax,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n /**\n * Resolve a single value - either direct or field reference\n *\n * @param value - Direct value or field reference object\n * @param formValues - Form state values for field lookup\n * @returns Resolved value or undefined\n */\n static resolveValue(value, formValues) {\n // Direct value (number or string)\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return value;\n }\n // Field reference object\n if (value && typeof value === 'object' && value.field) {\n const fieldId = value.field;\n const fieldValue = formValues[fieldId];\n return fieldValue !== undefined ? fieldValue : undefined;\n }\n return undefined;\n }\n /**\n * Get the most permissive (widest) minimum value\n * For numbers: MIN of all mins\n * For dates: earliest date (MIN string comparison on ISO format)\n * For times: earliest time (MIN string comparison on 24-hour format)\n *\n * @param ranges - Array of {min, max} values\n * @param componentType - Type of component\n * @returns Most permissive minimum value\n */\n static getPermissiveMin(ranges, componentType) {\n if (ranges.length === 0)\n return undefined;\n if (componentType === 'date' || componentType === 'dateRange') {\n // For dates, find earliest (minimum) date\n return ranges.reduce((earliest, current) => {\n if (!current.min)\n return earliest;\n if (!earliest)\n return current.min;\n const earliestIso = this.convertToISO(earliest);\n const currentIso = this.convertToISO(current.min);\n return currentIso < earliestIso ? current.min : earliest;\n }, undefined);\n }\n if (componentType === 'time') {\n // For times, find earliest (minimum) time\n return ranges.reduce((earliest, current) => {\n if (!current.min)\n return earliest;\n if (!earliest)\n return current.min;\n const earliest24 = this.convertTimeTo24Hour(earliest);\n const current24 = this.convertTimeTo24Hour(current.min);\n return current24 < earliest24 ? current.min : earliest;\n }, undefined);\n }\n // For numbers, find minimum (skip undefined values)\n const minValues = ranges.map(r => r.min).filter(v => v !== undefined);\n return minValues.length > 0 ? Math.min(...minValues) : undefined;\n }\n /**\n * Get the most permissive (widest) maximum value\n * For numbers: MAX of all maxs\n * For dates: latest date (MAX string comparison on ISO format)\n * For times: latest time (MAX string comparison on 24-hour format)\n *\n * @param ranges - Array of {min, max} values\n * @param componentType - Type of component\n * @returns Most permissive maximum value\n */\n static getPermissiveMax(ranges, componentType) {\n if (ranges.length === 0)\n return undefined;\n if (componentType === 'date' || componentType === 'dateRange') {\n // For dates, find latest (maximum) date\n return ranges.reduce((latest, current) => {\n if (!current.max)\n return latest;\n if (!latest)\n return current.max;\n const latestIso = this.convertToISO(latest);\n const currentIso = this.convertToISO(current.max);\n return currentIso > latestIso ? current.max : latest;\n }, undefined);\n }\n if (componentType === 'time') {\n // For times, find latest (maximum) time\n return ranges.reduce((latest, current) => {\n if (!current.max)\n return latest;\n if (!latest)\n return current.max;\n const latest24 = this.convertTimeTo24Hour(latest);\n const current24 = this.convertTimeTo24Hour(current.max);\n return current24 > latest24 ? current.max : latest;\n }, undefined);\n }\n // For numbers, find maximum (skip undefined values)\n const maxValues = ranges.map(r => r.max).filter(v => v !== undefined);\n return maxValues.length > 0 ? Math.max(...maxValues) : undefined;\n }\n /**\n * Convert MM/DD/YYYY date format to ISO (YYYY-MM-DD) for comparison\n * Handles both formats gracefully\n *\n * @param dateString - Date in MM/DD/YYYY or ISO format\n * @returns ISO date string (YYYY-MM-DD)\n */\n static convertToISO(dateString) {\n if (!dateString)\n return '';\n // Already ISO format (YYYY-MM-DD)\n if (dateString.includes('-') && dateString.length === 10) {\n return dateString;\n }\n // MM/DD/YYYY format\n if (dateString.indexOf('/') !== -1) {\n const parts = dateString.split('/');\n const month = parts[0];\n const day = parts[1];\n const year = parts[2];\n if (!month || !day || !year)\n return dateString;\n const monthPadded = month.length < 2 ? '0' + month : month;\n const dayPadded = day.length < 2 ? '0' + day : day;\n return `${year}-${monthPadded}-${dayPadded}`;\n }\n return dateString;\n }\n /**\n * Convert 12-hour time format to 24-hour format for comparison\n * Handles both 12-hour (hh:mm a) and 24-hour (HH:mm) formats\n *\n * @param timeString - Time in 12-hour (hh:mm a/p) or 24-hour (HH:mm) format\n * @returns 24-hour format time string (HH:mm)\n */\n static convertTimeTo24Hour(timeString) {\n if (!timeString)\n return '';\n // Check if it contains AM/PM (12-hour format)\n const isPM = /PM/i.test(timeString);\n const isAM = /AM/i.test(timeString);\n if (isAM || isPM) {\n // Extract time part (before AM/PM)\n const timePart = timeString.replace(/\\s*(AM|PM)/i, '').trim();\n const [hours, minutes] = timePart.split(':');\n if (!hours || !minutes)\n return timeString;\n let hour = parseInt(hours, 10);\n if (isPM && hour !== 12) {\n hour += 12; // Convert PM hours (except 12) to 24-hour\n }\n else if (isAM && hour === 12) {\n hour = 0; // Convert 12 AM to 00:00\n }\n const hourStr = String(hour);\n const hourPadded = hourStr.length < 2 ? '0' + hourStr : hourStr;\n return `${hourPadded}:${minutes}`;\n }\n // Already in 24-hour format or unknown format\n return timeString;\n }\n /**\n * Get empty constraints object based on component type\n */\n static getEmptyConstraints(componentType) {\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n /**\n * Validate if a value passes all min/max constraints (optional)\n * Can be used for client-side validation before submission\n *\n * @param value - Value to validate\n * @param constraints - Constraints to check against\n * @param componentType - Type of component\n * @returns Validation result with error message if invalid\n */\n static validateValue(value, constraints, componentType) {\n if (value === undefined || value === null || value === '') {\n return { isValid: true }; // Empty values pass (required handled separately)\n }\n if (componentType === 'date' || componentType === 'dateRange') {\n if (constraints.minDate) {\n const minIso = this.convertToISO(constraints.minDate);\n const valueIso = this.convertToISO(value);\n if (valueIso < minIso) {\n return { isValid: false, error: `Date must be on or after ${constraints.minDate}` };\n }\n }\n if (constraints.maxDate) {\n const maxIso = this.convertToISO(constraints.maxDate);\n const valueIso = this.convertToISO(value);\n if (valueIso > maxIso) {\n return { isValid: false, error: `Date must be on or before ${constraints.maxDate}` };\n }\n }\n }\n else if (componentType === 'time') {\n if (constraints.minTime) {\n if (value < constraints.minTime) {\n return { isValid: false, error: `Time must be on or after ${constraints.minTime}` };\n }\n }\n if (constraints.maxTime) {\n if (value > constraints.maxTime) {\n return { isValid: false, error: `Time must be on or before ${constraints.maxTime}` };\n }\n }\n }\n else {\n // Number type\n const numValue = Number(value);\n if (constraints.minValue !== undefined) {\n const minNum = Number(constraints.minValue);\n if (numValue < minNum) {\n return {\n isValid: false,\n error: `Value must be at least ${constraints.minValue}`\n };\n }\n }\n if (constraints.maxValue !== undefined) {\n const maxNum = Number(constraints.maxValue);\n if (numValue > maxNum) {\n return {\n isValid: false,\n error: `Value must be at most ${constraints.maxValue}`\n };\n }\n }\n }\n return { isValid: true };\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar FormRenderer_1;\nimport { Component, Property, Event, NotifyPropertyChanges, enableRipple, createElement, isNullOrUndefined, L10n, getComponent, addClass } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { renderFormField } from './render-form-field';\nimport { mergeSchema } from '../common/json-converter';\nimport { UniversalJsonParser } from '../common/parser';\nimport { VALIDATION_REGEX, formatDateValues, splitWidths } from '../common/utils';\nimport StaticHtmlRenderer from '../common/static-html-renderer';\nimport { ConditionalRuleEngine } from '../common/conditional-rule-engine';\nimport { ExpressionEngine } from '../common/expressions/expression-engine';\nimport { MinMaxRuleEngine } from '../common/minmax-rule-engine';\nimport { CustomValidationEngine } from '../common/custom-validation-engine';\n/**\n * @private\n *\n * Internal input target types array to define a target.\n */\nconst inputTargetTypes = [\n 'textbox',\n 'number',\n 'checkbox',\n 'dropdown',\n 'multiselect',\n 'date',\n 'dateTime',\n 'time',\n 'dateRange',\n 'switch',\n 'rating',\n 'colorPicker',\n 'inputMask',\n 'fileUpload'\n];\n/**\n * @private\n */\nexport const defaultLocale = {\n \"unsupportedComponent\": \"Unsupported Component type\"\n};\n/**\n * The FormRenderer component consumes a JSON form schema and renders a fully functional, Syncfusion-based form. It handles field mapping, conditional visibility/disabling, expression evaluation, custom validation, and data submission.\n *\n * ```typescript\n * let form: FormRenderer = new FormRenderer({\n * schema: formSchema,\n * submit: (args: SubmitEventArgs) => console.log(args)\n * });\n * form.appendTo('#container');\n * ```\n */\nlet FormRenderer = FormRenderer_1 = class FormRenderer extends Component {\n /**\n * Constructor for creating the widget\n *\n * @param {FormRendererModel} options - Specifies the form renderer model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n constructor(options, element) {\n super(options, element);\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n /** Localization instance */\n this.l10n = new L10n('form-renderer', defaultLocale, this.locale);\n /**\n * @private\n *\n * Minimal form-state container owned by the orchestrator. The previous\n * vanilla-TS port delegated this to `FormStateBridge`; that bridge's\n * `registeredFields` gate silently short-circuited every field to \"no\n * error\" because the orchestrator never called `registerField`. The\n * EJ2 native `FormValidator` (bound to `this.element`) now handles all\n * rule evaluation, error-element placement, change/blur/submit wiring,\n * and ARIA — exactly what `FormValidator` was designed for. This object\n * is the orchestrator's authoritative values store; `errors` are\n * mirrored from the FormValidator's `errorRules` for `renderField`'s\n * initial-paint logic and for submit-time `isValid` checks.\n */\n this.formState = { values: Object.create(null), errors: Object.create(null) };\n /** EJ2 native FormValidator bound to `this.element` (replaces FormStateBridge). */\n this.validator = null;\n /** Map of input component instances keyed by `name` (or `${name}_${idx}`). */\n this.inputRefs = {};\n /** Conditional value applied tracker (per-field). */\n this.conditionalValueApplied = {};\n /** Expression engine + dependency graph + computed-field set. */\n this.expressionEngine = null;\n this.expressionDependencyGraph = {};\n this.expressionEvaluationInProgress = false;\n this.previousFormValues = {};\n this.computedFieldNames = new Set();\n /** Custom validation engine instance. */\n this.customValidationEngine = new CustomValidationEngine();\n /** Latest form values snapshot for custom validation (named-key context). */\n this.currentFormValues = {};\n /** Whether initial values have been seeded once. */\n this.isInitialized = false;\n /** Cached layout detection result. */\n this.hasLayoutComponentsCache = false;\n /** Cached id→label map. */\n this.idToLabelCache = {};\n /** Cached initial values (recomputed on schema change). */\n this.initialValuesCache = {};\n /** Rendered child EJ2 instances (for destroy cleanup). */\n this.renderedInstances = [];\n /** Tooltip instances keyed by field id so stale tooltips can be replaced promptly. */\n this.tooltipRefs = {};\n /** `created` fired-once guard. */\n this.createdFired = false;\n /**\n * Coalescing guard for `scheduleRerender`. Prevents redundant full-form\n * re-renders within a single microtask — mirrors React's batched-state\n * semantics so that a user keystroke + expression cascade fire one render.\n */\n this.rerenderScheduled = false;\n /**\n * Set of `component.id`s that are referenced as the trigger field of any\n * other component's `conditions` (`visibleWhen` / `hideWhen` /\n * `disabledWhen` / `requiredWhen` / `readOnlyWhen` / `setValueWhen` /\n * `choiceBasedField.primaryFieldId`). Only changes to these fields can\n * affect visibility / disabled / required / valueWhen of any other\n * field, so only they need to trigger a full-form re-render. Changes to\n * fields *not* in this set are guaranteed to have no conditional side\n * effects and safely skip the (expensive) full DOM teardown + rebuild.\n * Built once per schema in `buildConditionalDependencyMap`.\n */\n this.conditionalTriggerFieldIds = new Set();\n /**\n * Maps `component.id` → the previously-rendered DOM subtree (form-group)\n * for \"expensive\" components (dataGrid, dropdown, multiselect,\n * checkboxGroup) that support remote data. During a full-form re-render\n * triggered by an *unrelated* conditional change, these subtrees are\n * detached (not destroyed) and re-attached in place, avoiding a re-fetch\n * of their remote data sources and preventing the visible blink/reload.\n * A subtree is *invalidated* (dropped from this map, forcing a fresh\n * render) when a field it depends on (via its own `conditions` or\n * `conditionalData`) is the one that changed.\n */\n this.preservedFields = new Map();\n /**\n * Per-consumer dependency map: `component.id` → set of trigger field ids\n * that the consumer's own `conditions` / `conditionalData` /\n * `choiceBasedField` reference. Used during `rerenderForm` to decide\n * whether a preserved subtree must be invalidated (rebuilt) because the\n * changed field is one of its own dependencies, or can be safely reused.\n */\n this.consumerDependencyMap = new Map();\n /**\n * @private\n *\n * Coalesced full-form re-render. Multiple triggers within the same\n * microtask drain into a single `rerenderForm()` call. The set of\n * changed field ids is accumulated across the tick so `rerenderForm`\n * can decide which preserved subtrees must be invalidated (because one\n * of the changed fields is in their own dependency set).\n */\n this.pendingChangedFieldIds = new Set();\n }\n /**\n * Returns the EJ2 component module name.\n * @private\n */\n getModuleName() {\n return 'form-renderer';\n }\n /**\n * Return the persisted-state payload. The base class declares this\n * abstract; FormRenderer does not implement state persistence, so an\n * empty object is returned (mirrors the EJ2 convention for\n * non-persistent components).\n * @private\n */\n getPersistData() {\n return this.addOnPersist(['formState', JSON.stringify(this.formState)]);\n }\n /**\n * Pre-render wiring: enable ripple, init the expression engine + bridge.\n * @private\n */\n preRender() {\n enableRipple(true);\n this.createdFired = false;\n this.expressionEngine = new ExpressionEngine();\n }\n /**\n * Main render: normalize schema, build rules + initial values, render tree.\n * @private\n */\n render() {\n this.clearEngineCaches();\n this.removePreviousRoot();\n this.normalizeSchema();\n this.element.classList.add('form-renderer-container');\n if (this.className) {\n addClass([this.element], this.className.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n this.hasLayoutComponentsCache = this.computeHasLayoutComponents();\n this.idToLabelCache = this.computeIdToLabel();\n this.initialValuesCache = this.buildInitialValues();\n this.buildValidationRulesAndBridge();\n // Seed initial values into the form-state values map once.\n if (!this.isInitialized) {\n this.isInitialized = true;\n }\n if (this.formState && this.initialValuesCache) {\n const initKeys = Object.keys(this.initialValuesCache);\n for (const id of initKeys) {\n const value = this.initialValuesCache[id];\n if (!(this.formState).values[id]) {\n (this.formState).values[id] = value;\n }\n }\n }\n this.currentFormValues = Object.assign({}, (this.formState ? this.formState.values : {}));\n this.initExpressionEngine();\n this.buildConditionalDependencyMap();\n const root = createElement('form', {\n className: `form-renderer ${this.layoutClass}`,\n attrs: { role: 'region', 'aria-label': this.processedSchemaCache.settings ? (this.processedSchemaCache.settings.name || 'Form') : 'Form' }\n });\n this.element.appendChild(root);\n this.inputRefs = {};\n (this.processedSchemaCache.components || []).forEach((component) => {\n const rendered = this.renderComponent(component);\n if (rendered) {\n root.appendChild(rendered);\n }\n if (component.type === 'richTextEditor') {\n const rteElement = rendered.querySelector('.e-richtexteditor');\n const rteInstance = getComponent(rteElement, 'richtexteditor');\n rteInstance.refreshUI();\n }\n if (component.type === 'dataGrid') {\n const toolbarElement = rendered.querySelector('.e-control.e-toolbar');\n const rteInstance = getComponent(toolbarElement, 'toolbar');\n rteInstance.refresh();\n }\n if (component.type === 'tabs') {\n const tabElement = rendered.querySelector('.e-control.e-tab');\n const tabInstance = getComponent(tabElement, 'tab');\n tabInstance.refreshOverflow();\n }\n });\n if (this.created && !this.createdFired) {\n setTimeout(() => {\n if (Object.keys(this.inputRefs).length > 0) {\n this.createdFired = true;\n this.trigger('created', {});\n }\n }, 0);\n }\n }\n /**\n * @private\n */\n normalizeSchema() {\n const schema = this.schema;\n try {\n if (!schema) {\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n return;\n }\n let parsedInput = schema;\n if (typeof schema === 'string') {\n try {\n parsedInput = JSON.parse(schema);\n }\n catch (err) {\n if (this.failure) {\n this.trigger('failure', {\n error: err\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n return;\n }\n }\n const isUnifiedSchema = parsedInput && typeof parsedInput === 'object' &&\n parsedInput.properties && Array.isArray(parsedInput.layout);\n if (isUnifiedSchema) {\n this.processedSchemaCache = mergeSchema(parsedInput);\n }\n else {\n const parser = new UniversalJsonParser();\n const parseResult = parser.parse(typeof schema === 'string' ? schema : JSON.stringify(schema));\n if (parseResult.success && parseResult.schema) {\n this.processedSchemaCache = parseResult.schema;\n }\n else {\n if (this.failure) {\n this.trigger('failure', {\n error: parseResult.errors\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n }\n }\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n }\n }\n // ----------------------------------------------------------------------\n // G3 — layout detection + suppression map\n // ----------------------------------------------------------------------\n /**\n * Recursively scan the schema for any `table`/`tabs`/`panel`/`card`\n * (including inside table cells and tab content). Mirrors `hasLayoutComponents`.\n * @private\n */\n computeHasLayoutComponents() {\n if (!this.processedSchemaCache.components) {\n return false;\n }\n const checkForLayoutTypes = (components) => {\n for (const comp of components) {\n if (['table', 'tabs', 'panel', 'card'].indexOf(comp.type) !== -1) {\n return true;\n }\n if (comp.children && checkForLayoutTypes(comp.children)) {\n return true;\n }\n if (comp.tableCells) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (checkForLayoutTypes(cell)) {\n return true;\n }\n }\n }\n }\n if (comp.tabItems) {\n for (const tab of comp.tabItems) {\n if (tab.content && checkForLayoutTypes(tab.content)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n return checkForLayoutTypes(this.processedSchemaCache.components);\n }\n /**\n * The layout CSS class (suppressed when layout components are present).\n * @private\n */\n get layoutClass() {\n if (this.hasLayoutComponentsCache) {\n return '';\n }\n switch (this.layout) {\n case 'TwoColumn':\n return 'twolayout';\n case 'ThreeColumn':\n return 'threelayout';\n case 'FourColumn':\n return 'fourlayout';\n case 'SingleColumn':\n default:\n return '';\n }\n }\n // ----------------------------------------------------------------------\n // G4 — collectAllComponents + idToLabel\n // ----------------------------------------------------------------------\n /**\n * Recursively collect all components including nested ones.\n * @private\n */\n collectAllComponents(components) {\n const all = [];\n const traverse = (comps) => {\n comps.forEach((comp) => {\n all.push(comp);\n if (comp.children && comp.children.length > 0) {\n traverse(comp.children);\n }\n if (comp.tableCells) {\n comp.tableCells.forEach((row) => {\n row.forEach((cell) => traverse(cell));\n });\n }\n if (comp.tabItems) {\n comp.tabItems.forEach((tab) => {\n if (tab.content) {\n traverse(tab.content);\n }\n });\n }\n });\n };\n traverse(components);\n return all;\n }\n /**\n * @private\n */\n computeIdToLabel() {\n const map = {};\n const traverse = (comps) => {\n comps.forEach((comp) => {\n if (comp.label && ['panel', 'table', 'tabs', 'card', 'button', 'message', 'splitButton'].indexOf(comp.type) === -1) {\n if (comp.name) {\n map[comp.id] = comp.name;\n }\n else if (comp.label) {\n map[comp.id] = comp.label;\n }\n }\n if (comp.children) {\n traverse(comp.children);\n }\n if (comp.tableCells) {\n comp.tableCells.forEach((row) => row.forEach((cell) => traverse(cell)));\n }\n if (comp.tabItems) {\n comp.tabItems.forEach((tab) => { if (tab.content) {\n traverse(tab.content);\n } });\n }\n });\n };\n traverse(this.processedSchemaCache.components);\n return map;\n }\n // ----------------------------------------------------------------------\n // G5 — buildValidationRules via FormStateBridge + ConditionalRuleEngine +\n // EMAIL/URL auto-regex + customValidator closure\n // ----------------------------------------------------------------------\n /**\n * @private\n */\n buildValidationRulesAndBridge() {\n const rules = {};\n const formValues = (this.formState && this.formState.values) || {};\n const collectRules = (components, parentVisible = true) => {\n components.forEach((component) => {\n if (!component) {\n return;\n }\n const componentRules = {};\n const isVisible = parentVisible && (component.visible === false\n ? false\n : ConditionalRuleEngine.isFieldVisible(component.conditions, formValues));\n const isHidden = parentVisible && ConditionalRuleEngine.isFieldHidden(component.conditions, formValues);\n if (!isVisible || isHidden) {\n return;\n }\n const conditionalRequired = ConditionalRuleEngine.isFieldRequired(component.conditions, formValues);\n const conditionalDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const conditionalReadOnly = ConditionalRuleEngine.isFieldReadOnly(component.conditions, formValues);\n const finalRequired = !!component.required || conditionalRequired;\n const finalDisabled = !!component.disabled || conditionalDisabled;\n const finalReadOnly = !!component.readOnly || conditionalReadOnly;\n if (component.customValidation &&\n Array.isArray(component.customValidation) &&\n component.customValidation.length > 0 &&\n !finalDisabled && !finalReadOnly) {\n const customValidationExpression = component.customValidation && component.customValidation[0] && component.customValidation[0].expression;\n const validationMessage = customValidationExpression && customValidationExpression.match(/\\?\\s*true\\s*:\\s*['\"](.+?)['\"]/) ? customValidationExpression.match(/\\?\\s*true\\s*:\\s*['\"](.+?)['\"]/)[1] : undefined;\n const customMessage = validationMessage ||\n component.validationMessage ||\n `${component.label || component.id} is invalid`;\n const self = this;\n componentRules.customValidation = [\n (args) => {\n const fieldValue = args.value;\n if (finalRequired && (fieldValue === '' || fieldValue === null || fieldValue === undefined)) {\n return true;\n }\n const idToNameMap = {};\n const allComponents = self.collectAllComponents(self.processedSchemaCache.components);\n allComponents.forEach((comp) => {\n if (comp.name) {\n idToNameMap[comp.id] = comp.name;\n }\n });\n const currentFormValues = Object.assign({}, (self.currentFormValues || {}));\n const cfvKeys = Object.keys(Object.assign({}, currentFormValues));\n for (const componentId of cfvKeys) {\n const value = currentFormValues[componentId];\n const fieldName = idToNameMap[componentId];\n if (fieldName) {\n currentFormValues[fieldName] = value;\n delete currentFormValues[componentId];\n }\n }\n for (const rule of component.customValidation) {\n if (!self.customValidationEngine) {\n return true;\n }\n const result = self.customValidationEngine.validate(rule.expression, fieldValue, currentFormValues);\n if (result !== true) {\n return false;\n }\n }\n return true;\n },\n customMessage\n ];\n }\n if (finalRequired && !finalDisabled && !finalReadOnly) {\n componentRules.required = [true, component.validationMessage || `${component.label} is required`];\n }\n if (component.minLength && !finalDisabled && !finalReadOnly) {\n componentRules.minLength = [component.minLength, `Minimum ${component.minLength} characters allowed`];\n }\n if (component.maxLength && !finalDisabled && !finalReadOnly) {\n componentRules.maxLength = [component.maxLength, `Maximum ${component.maxLength} characters allowed`];\n }\n if (component.type === 'textbox' && component.textboxType && !component.regex &&\n !componentRules.regex && !finalDisabled && !finalReadOnly) {\n if (component.textboxType === 'email') {\n componentRules.regex = [VALIDATION_REGEX['EMAIL'], component.validationMessage || 'Invalid format'];\n }\n else if (component.textboxType === 'url') {\n componentRules.regex = [VALIDATION_REGEX['URL'], component.validationMessage || 'Invalid format'];\n }\n }\n if (component.regex && !finalDisabled && !finalReadOnly) {\n componentRules.regex = [component.regex, component.validationMessage || 'Invalid format'];\n }\n if (Object.keys(componentRules).length > 0) {\n rules[component.id] = componentRules;\n }\n if (component.children) {\n collectRules(component.children, isVisible && !isHidden);\n }\n if (component.tableCells) {\n component.tableCells.forEach((row) => row.forEach((cell) => collectRules(cell, isVisible && !isHidden)));\n }\n if (component.tabItems) {\n component.tabItems.forEach((tab) => {\n if (tab.content) {\n collectRules(tab.content, isVisible && !isHidden);\n }\n });\n }\n });\n };\n collectRules(this.processedSchemaCache.components);\n // Preserve previously-entered values across a re-render.\n const previousValues = this.formState ? Object.assign({}, this.formState.values) : Object.assign({}, this.initialValuesCache);\n this.formState = {\n values: Object.assign(Object.create(null), this.initialValuesCache, previousValues),\n errors: this.enablePersistence ? this.formState.errors : Object.create(null)\n };\n // Restore any previously-entered values that the merge above pruned.\n if (previousValues) {\n Object.keys(previousValues).forEach((id) => {\n if (!(id in this.formState.values)) {\n this.formState.values[id] = previousValues[id];\n }\n });\n }\n // (Re)create the EJ2 native FormValidator bound to the host element.\n if (this.validator) {\n try {\n this.validator.refresh();\n this.validator.destroy();\n }\n catch (e) { /* swallow */ }\n this.validator = null;\n }\n const self = this;\n this.validator = new FormValidator(this.element, {\n rules: rules,\n locale: this.locale,\n ignore: 'e-hidden',\n errorClass: 'e-error',\n validClass: 'e-valid',\n errorElement: 'div',\n errorContainer: 'div',\n customPlacement: (inputElement, errorElement) => {\n // Locate the per-field error-message slot rendered in\n // `renderField` by its id (`error-<component.id>`). The\n // input's `name` attribute matches `component.id`\n // (set in renderField), so `getElementById('error-' + name)`\n // resolves the slot and the validator's error element is\n // appended into it (FormValidator sets\n // `errorElement.style.display = 'block'` before invoking\n // customPlacement, which makes the slot visible).\n const name = inputElement.getAttribute('name');\n if (!name) {\n if (inputElement.parentElement) {\n inputElement.parentElement.appendChild(errorElement);\n }\n return;\n }\n const slot = document.getElementById(`error-${name}`);\n if (slot) {\n while (slot.firstChild) {\n slot.removeChild(slot.firstChild);\n }\n slot.appendChild(errorElement);\n slot.style.display = 'block';\n }\n else if (inputElement.parentElement) {\n inputElement.parentElement.appendChild(errorElement);\n }\n },\n validationComplete: (args) => {\n // Mirror the validator's error state into formState.errors so\n // submit-time isValid and renderField's initial-paint logic\n // (which read formState.errors[id]) continue to work.\n self.syncFormStateErrors();\n // Keep the per-field error slot's visibility in sync with\n // the validator's outcome. On `success`, the FormValidator's\n // `hideMessage` sets its own error element's `display: none`,\n // but our slot (`error-<id>`) would otherwise keep the stale\n // error element appended. Clear + hide the slot on success.\n if (args && args.inputName) {\n const slot = document.getElementById(`error-${args.inputName}`);\n if (slot) {\n if (args.status === 'success') {\n while (slot.firstChild) {\n slot.removeChild(slot.firstChild);\n }\n slot.style.display = 'none';\n }\n else if (args.status === 'failure') {\n slot.style.display = 'block';\n }\n }\n }\n },\n submit: (event) => {\n if (!self.validator) {\n return;\n }\n const isValid = self.validator.validate();\n if (!isValid) {\n if (event && typeof event.preventDefault === 'function') {\n event.preventDefault();\n }\n return;\n }\n self.handleSubmitData(Object.assign({}, self.formState.values));\n if (event && typeof event.preventDefault === 'function') {\n event.preventDefault();\n }\n },\n reset: () => {\n }\n });\n // Apply cached previous values to the FormValidator's input elements.\n // The validator reads live values from inputs at validate() time, but\n // initial values seeded here ensure any pre-populated values are\n // respected even if a field is never focused before submit.\n if (previousValues) {\n Object.keys(previousValues).forEach((id) => {\n const inputEl = this.validator.getInputElement(id);\n if (inputEl && previousValues[id] !== undefined && previousValues[id] !== null) {\n try {\n inputEl.value = String(previousValues[id]);\n }\n catch (e) { /* swallow */ }\n }\n });\n }\n }\n /**\n * @private\n *\n * Mirror the FormValidator's `errorRules` array into `this.formState.errors`\n * keyed by field `name` (= `component.id`). Called after every\n * `validationComplete` callback and from submit-time `isValid` reads.\n */\n syncFormStateErrors() {\n const errors = {};\n if (this.validator) {\n const errorRules = this.validator.errorRules || [];\n for (const rule of errorRules) {\n if (rule && rule.name) {\n errors[rule.name] = rule.message;\n }\n }\n }\n this.formState.errors = errors;\n }\n /**\n * @private\n */\n buildInitialValues() {\n const values = {};\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const componentIds = new Set();\n allComponents.forEach((comp) => {\n if (comp.type === 'staticHtml') {\n componentIds.add(comp.id);\n return;\n }\n if (comp.type === 'dataGrid') {\n values[comp.id] = Array.isArray(comp.dataSource)\n ? comp.dataSource\n : [];\n }\n if (comp.defaultValue !== undefined) {\n values[comp.id] = comp.defaultValue;\n }\n else {\n switch (comp.type) {\n case 'checkbox':\n case 'switch':\n values[comp.id] = false;\n break;\n default:\n break;\n }\n }\n componentIds.add(comp.id);\n });\n if (this.formState) {\n Object.keys(this.formState.values)\n .filter((key) => !componentIds.has(key))\n .forEach((key) => {\n delete (this.formState).values[key];\n });\n }\n return values;\n }\n // ----------------------------------------------------------------------\n // Expression engine init (used by G9)\n // ----------------------------------------------------------------------\n /**\n * Initialize the expression engine dependency graph + computed-field set.\n * @private\n */\n initExpressionEngine() {\n if (!this.processedSchemaCache.components || this.processedSchemaCache.components.length === 0) {\n return;\n }\n try {\n const engine = this.expressionEngine;\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const graph = engine.buildDependencyGraph(allComponents);\n const cycles = engine.detectCircularDependencies(graph);\n if (cycles.length > 0) {\n }\n this.expressionDependencyGraph = graph;\n const computedFields = new Set();\n allComponents.forEach((comp) => {\n if (comp.expressionValue) {\n computedFields.add(comp.id);\n }\n });\n this.computedFieldNames = computedFields;\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n /**\n * @private\n */\n disposeTooltipInstance(fieldId) {\n const existingTooltip = this.tooltipRefs[fieldId] || null;\n if (existingTooltip) {\n try {\n existingTooltip.destroy();\n }\n catch (e) {\n this.trigger('failure', {\n error: e\n });\n }\n this.renderedInstances = this.renderedInstances.filter((inst) => inst !== existingTooltip);\n this.tooltipRefs[fieldId] = null;\n }\n }\n renderField(component) {\n const formState = this.formState;\n const formValues = formState ? formState.values : {};\n if (['panel', 'table', 'tabs', 'card', 'message', 'button', 'splitButton', 'staticHtml'].indexOf(component.type) !== -1) {\n return null;\n }\n const conditionalReadOnly = ConditionalRuleEngine.isFieldReadOnly(component.conditions, formValues);\n const conditionalDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const conditionalRequired = ConditionalRuleEngine.isFieldRequired(component.conditions, formValues);\n const conditionalValue = ConditionalRuleEngine.getConditionalValue(component.conditions, formValues);\n const computedReadOnly = !!component.readOnly || conditionalReadOnly;\n const computedDisabled = !!component.disabled || conditionalDisabled;\n const computedRequired = !!component.required || conditionalRequired;\n let minMaxConstraints = MinMaxRuleEngine.getConstraints(component.minMaxRange, formValues, component.type);\n if (component.type === 'dateTime') {\n const dateConstraints = MinMaxRuleEngine.getConstraints(component.minMaxRange, formValues, 'date');\n const timeConstraints = MinMaxRuleEngine.getConstraints(component.minMaxTimeRange, formValues, 'time');\n minMaxConstraints = {\n minValue: undefined,\n maxValue: undefined,\n minDate: dateConstraints.minDate,\n maxDate: dateConstraints.maxDate,\n minTime: timeConstraints.minTime,\n maxTime: timeConstraints.maxTime\n };\n }\n const labelPos = component.labelPosition || 'top';\n const labelWidth = component.labelWidth || 'auto';\n const showLabel = !component.hideLabel && !!component.label &&\n ['checkbox', 'button', 'staticHtml'].indexOf(component.type) === -1;\n const shouldShowError = !!(formState && formState.errors[component.id]);\n const isRequiredError = shouldShowError && !!(formState && formState.errors[component.id].indexOf('required') !== -1);\n const hasError = shouldShowError && !(isRequiredError && !computedRequired);\n // setValueWhen false→true transition tracking.\n const conditionIsActive = conditionalValue !== undefined;\n const wasConditionActive = this.conditionalValueApplied[component.id] || false;\n if (formState) {\n if (conditionIsActive && !wasConditionActive) {\n formState.values[component.id] = conditionalValue;\n this.conditionalValueApplied[component.id] = true;\n }\n else if (!conditionIsActive && wasConditionActive) {\n this.conditionalValueApplied[component.id] = false;\n }\n }\n const formGroup = createElement('div', {\n className: 'form-group',\n attrs: { 'data-field-id': component.id, 'data-fr-field': component.id }\n });\n const fieldWrapper = createElement('div', {\n className: `field-wrapper label-${labelPos.toLowerCase()}`\n });\n if (showLabel) {\n const labelEl = createElement('label', {\n className: 'field-label'\n });\n if (inputTargetTypes.indexOf(component.type) !== -1 || component.type === 'textarea') {\n labelEl.setAttribute('for', !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name);\n }\n labelEl.style.width = labelPos.toLowerCase() === 'left' ? `${labelWidth}%` : 'auto';\n const span = createElement('span');\n span.textContent = component.label;\n labelEl.appendChild(span);\n if (computedRequired) {\n const asterisk = createElement('span', { className: 'required-asterisk' });\n asterisk.textContent = '*';\n labelEl.appendChild(asterisk);\n }\n this.disposeTooltipInstance(component.id);\n if (component.tooltip) {\n const tooltipHost = createElement('span', {\n className: 'e-msg-icon e-icons e-circle-info tooltip-icon',\n attrs: {\n 'aria-label': component.tooltip,\n title: component.tooltip,\n tabindex: '0',\n role: 'button',\n 'aria-haspopup': 'true'\n }\n });\n tooltipHost.style.cursor = 'pointer';\n tooltipHost.style.display = 'flex';\n tooltipHost.style.alignItems = 'center';\n tooltipHost.style.justifyContent = 'center';\n tooltipHost.style.flexShrink = '0';\n labelEl.appendChild(tooltipHost);\n const tooltip = new Tooltip({ content: component.tooltip, enableRtl: this.enableRtl });\n tooltip.appendTo(tooltipHost);\n this.tooltipRefs[component.id] = tooltip;\n this.renderedInstances.push(tooltip);\n }\n fieldWrapper.appendChild(labelEl);\n }\n const fieldInput = createElement('div', {\n className: 'field-input',\n });\n const isIndexedRef = (component.type === 'radio' || component.type === 'checkboxGroup') && Array.isArray(component.options);\n const setInputRef = isIndexedRef\n ? (el, idx) => {\n if (el && typeof idx === 'number') {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n }\n : (el) => {\n if (el) {\n this.inputRefs[component.name] = el;\n }\n };\n const mergedComponent = Object.assign({}, component, { readOnly: computedReadOnly, disabled: computedDisabled, required: computedRequired }, (minMaxConstraints.minValue !== undefined && { minValue: minMaxConstraints.minValue }), (minMaxConstraints.maxValue !== undefined && { maxValue: minMaxConstraints.maxValue }), (minMaxConstraints.minDate !== undefined && { minDate: minMaxConstraints.minDate }), (minMaxConstraints.maxDate !== undefined && { maxDate: minMaxConstraints.maxDate }), (minMaxConstraints.minTime !== undefined && { minTime: minMaxConstraints.minTime }), (minMaxConstraints.maxTime !== undefined && { maxTime: minMaxConstraints.maxTime }));\n const onChangeHandler = (value) => {\n if (component.type !== 'staticHtml') {\n if (component.type === 'signature') {\n const ref = this.inputRefs[value];\n value = ref.getSignature();\n }\n if (component.type === 'imageEditor') {\n const ref = this.inputRefs[value];\n const imageData = ref.getImageData();\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n const context = canvas.getContext('2d');\n if (context) {\n context.putImageData(imageData, 0, 0);\n }\n value = canvas.toDataURL();\n }\n if (component.type === 'radio' || component.type === 'checkboxGroup') {\n const inputElement = this.validator.getInputElement(component.id);\n inputElement.value = value;\n }\n value = formatDateValues(component, value);\n if (this.formState && formState) {\n this.formState.values[component.id] = value;\n formState.values[component.id] = value;\n }\n this.trigger('change', { fieldName: component.name, label: component.label || component.id, value });\n this.afterValueChange(component.id);\n }\n };\n const targetTag = inputTargetTypes.indexOf(component.type) !== -1\n ? 'input' : component.type === 'textarea' ? 'textarea' : 'div';\n const target = createElement(targetTag, {\n attrs: { 'aria-label': `${component.label} ${component.type}` }\n });\n if (component.type === 'radio' || component.type === 'checkboxGroup') {\n const inputEl = createElement('input');\n inputEl.id = !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name;\n inputEl.setAttribute('name', component.id);\n inputEl.style.display = 'none';\n inputEl.setAttribute('aria-hidden', 'true');\n target.appendChild(inputEl);\n }\n else {\n target.id = !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name;\n target.setAttribute('name', component.id);\n }\n fieldInput.appendChild(target);\n const instance = renderFormField({\n component: mergedComponent,\n value: formState ? formState.values[component.id] : undefined,\n onChange: onChangeHandler,\n formState: formState,\n settings: this.processedSchemaCache.settings,\n onBlur: () => {\n if (formState && component.type !== 'staticHtml') {\n if (this.validator) {\n try {\n this.beforeValidate(component.id);\n this.validator.validate(component.id);\n }\n catch (e) { /* swallow */ }\n this.syncFormStateErrors();\n }\n }\n },\n ref: setInputRef,\n hasError: hasError,\n locale: this.locale,\n components: this.collectAllComponents(this.processedSchemaCache.components),\n enableRtl: this.enableRtl,\n target: target,\n l10n: this.l10n\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry && typeof entry.destroy === 'function') {\n this.renderedInstances.push(entry);\n }\n else if (entry instanceof HTMLElement) {\n for (const key of Object.keys(this.inputRefs)) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === entry || entry.contains(hostEl))) {\n this.renderedInstances.push(inst);\n }\n }\n }\n });\n }\n else if (instance) {\n if (typeof instance.destroy === 'function') {\n this.renderedInstances.push(instance);\n }\n else if (instance instanceof HTMLElement) {\n for (const key of Object.keys(this.inputRefs)) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === instance || instance.contains(hostEl))) {\n this.renderedInstances.push(inst);\n }\n }\n }\n }\n const errorSlot = createElement('div', {\n id: 'error-' + (component.id || component.name || component.label),\n className: 'e-error-message',\n attrs: { role: 'alert', 'aria-live': 'assertive' }\n });\n errorSlot.style.display = 'none';\n if (hasError && formState && formState.errors[component.id]) {\n errorSlot.textContent = formState.errors[component.id];\n errorSlot.classList.add('e-error');\n errorSlot.style.display = 'block';\n }\n fieldInput.appendChild(errorSlot);\n fieldWrapper.appendChild(fieldInput);\n formGroup.appendChild(fieldWrapper);\n if (component.description) {\n const desc = createElement('div', {\n className: 'field-description',\n attrs: { 'aria-describedby': `description-${component.label}` }\n });\n desc.textContent = component.description;\n formGroup.appendChild(desc);\n }\n return formGroup;\n }\n /**\n * @private\n */\n renderComponent(component) {\n const formState = this.formState;\n const formValues = formState ? formState.values : {};\n const isVisible = component.visible === false\n ? false\n : ConditionalRuleEngine.isFieldVisible(component.conditions, formValues);\n const isHidden = ConditionalRuleEngine.isFieldHidden(component.conditions, formValues);\n if (!isVisible || isHidden) {\n if (formState && formState.values[component.id] !== undefined && formState.values[component.id] !== null) {\n formState.values[component.id] = null;\n }\n return null;\n }\n // Re-attach preserved subtree for expensive / remote-data components\n // (dataGrid / dropdown / multiselect / checkboxGroup / lookup). The\n // subtree was detached in `rerenderForm` before the rest of the tree\n // was destroyed; re-attaching it here avoids a re-fetch of remote\n // data sources and prevents the visible blink of a fresh render.\n if (FormRenderer_1.PRESERVABLE_TYPES.has(component.type) && this.preservedFields.has(component.id)) {\n const preservedNode = this.preservedFields.get(component.id);\n if (preservedNode) {\n this.preservedFields.delete(component.id);\n return preservedNode;\n }\n }\n switch (component.type) {\n case 'panel': {\n const fieldset = createElement('fieldset', {\n className: `form-panel-renderer ${component.cssClass || ''}`\n });\n fieldset.style.minInlineSize = 'unset';\n if (component.label && !component.hideLabel) {\n const legend = createElement('legend', {\n className: !component.hideBorders ? 'panel-legend' : ''\n });\n legend.textContent = component.label;\n fieldset.appendChild(legend);\n }\n const content = createElement('div', { className: 'panel-content' });\n (component.children || []).forEach((child) => {\n const rendered = this.renderComponent(child);\n if (rendered) {\n content.appendChild(rendered);\n }\n });\n fieldset.appendChild(content);\n return fieldset;\n }\n case 'table': {\n const tableRows = component.rows || (component.tableCells ? component.tableCells.length : 2);\n const tableCols = component.columns || (component.tableCells && component.tableCells[0] ? component.tableCells[0].length : 2);\n const defaultColSpan = Math.floor(12 / tableCols);\n const columnWidthsProp = component.columnWidths;\n const splittedWidths = columnWidthsProp ? splitWidths(columnWidthsProp.widths) : [];\n const tableDiv = createElement('div', {\n className: `form-table-renderer ${component.hideBorders ? '' : 'table-border'} ${component.cssClass || ''}`,\n attrs: { role: 'group', 'aria-label': component.label || 'Table Layout' }\n });\n for (let rowIndex = 0; rowIndex < tableRows; rowIndex++) {\n const rowDiv = createElement('div', { className: 'e-form-table-row' });\n if (component.hideBorders) {\n rowDiv.style.display = 'flex';\n rowDiv.style.gap = '1.5rem';\n }\n for (let colIndex = 0; colIndex < tableCols; colIndex++) {\n const cellComponents = (component.tableCells && component.tableCells[rowIndex] &&\n component.tableCells[rowIndex][colIndex]) || [];\n const cellSpan = defaultColSpan;\n const colWidthValue = splittedWidths[colIndex];\n const isSingleColumn = tableCols === 1;\n const cellStyle = isSingleColumn ? { width: '100%' } : (colWidthValue ? { width: `${colWidthValue}%` } : {});\n const allNullWidths = !columnWidthsProp || (Array.isArray(columnWidthsProp.widths) && columnWidthsProp.widths.every((w) => w === null));\n const isFirstRow = rowIndex === 0;\n const cellDiv = createElement('div', {\n className: `e-form-table-cell ${colWidthValue ? '' : allNullWidths ? `col-${cellSpan}` : ''}`\n });\n if (component.hideBorders) {\n Object.assign(cellDiv.style, cellStyle, { padding: isFirstRow ? '0' : '12px 0 0 0' });\n }\n else {\n Object.assign(cellDiv.style, cellStyle);\n }\n cellComponents.forEach((comp) => {\n const rendered = this.renderComponent(comp);\n if (rendered) {\n cellDiv.appendChild(rendered);\n }\n });\n rowDiv.appendChild(cellDiv);\n }\n tableDiv.appendChild(rowDiv);\n }\n return tableDiv;\n }\n case 'tabs': {\n const tabsDiv = createElement('div', {\n className: `form-tabs-renderer ${component.cssClass || ''}`\n });\n const tabHost = createElement('div', {\n className: 'e-tab'\n });\n tabHost.id = component.id;\n const tabHeader = createElement('div', {\n className: 'e-tab-header'\n });\n const tabContent = createElement('div', {\n className: 'e-content'\n });\n tabHost.appendChild(tabHeader);\n tabHost.appendChild(tabContent);\n tabsDiv.appendChild(tabHost);\n // Build the tab's host DOM up front so each `.e-content > .e-item`\n // wrapper exists during initialization. Using the JSON `items`\n // path causes EJ2 to lazily materialize only the active content\n // panel, which leaves the remaining rendered tab bodies missing\n // from the live DOM. By seeding the HTML markup structure and\n // inserting the already-rendered live child nodes into every\n // content item, the bound EJ2 instances stay attached and all\n // tabs render correctly.\n (component.tabItems || []).forEach((tab) => {\n const headerItem = createElement('div');\n headerItem.textContent = tab.header;\n tabHeader.appendChild(headerItem);\n const contentItem = createElement('div');\n const contentDiv = createElement('div', { className: 'tab-content-renderer' });\n (tab.content || []).forEach((comp) => {\n const rendered = this.renderComponent(comp);\n if (rendered) {\n contentDiv.appendChild(rendered);\n }\n });\n contentItem.appendChild(contentDiv);\n tabContent.appendChild(contentItem);\n });\n const tab = new Tab({\n enableRtl: this.enableRtl,\n cssClass: component.cssClass,\n enablePersistence: true,\n animation: { previous: { effect: 'None' }, next: { effect: 'None' } },\n selected: (args) => {\n if (typeof window === 'undefined')\n return null;\n try {\n window.localStorage.setItem('tab' + component.id, JSON.stringify({\n selectedItem: args.selectedIndex\n }));\n }\n catch (_a) {\n }\n }\n });\n tab.appendTo(tabHost);\n this.renderedInstances.push(tab);\n return tabsDiv;\n }\n case 'card': {\n const fieldset = createElement('fieldset', {\n className: `e-card form-card-renderer ${component.cssClass || ''}`\n });\n fieldset.style.minInlineSize = 'unset';\n fieldset.style.padding = '0';\n const header = createElement('div', { className: 'e-card-header' });\n const caption = createElement('div', { className: 'e-card-header-caption' });\n const title = createElement('div', { className: 'e-card-title' });\n title.textContent = component.cardTitle || component.label || 'Card Title';\n caption.appendChild(title);\n if (component.cardSubtitle) {\n const sub = createElement('div', { className: 'e-card-sub-title' });\n sub.textContent = component.cardSubtitle;\n caption.appendChild(sub);\n }\n header.appendChild(caption);\n fieldset.appendChild(header);\n const content = createElement('div', { className: 'e-card-content card-content' });\n (component.children || []).forEach((child) => {\n const rendered = this.renderComponent(child);\n if (rendered) {\n content.appendChild(rendered);\n }\n });\n fieldset.appendChild(content);\n return fieldset;\n }\n case 'staticHtml': {\n const renderer = new StaticHtmlRenderer({\n content: component.defaultValue || '<p>HTML content</p>',\n id: component.id,\n enableHtmlSanitizer: component.enableHtmlSanitizer\n });\n const el = renderer.render();\n this.renderedInstances.push(renderer);\n return el;\n }\n case 'message': {\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const instance = renderFormField({\n component: component,\n locale: this.locale,\n value: undefined,\n onChange: () => { },\n enableRtl: this.enableRtl,\n target: target,\n ref: (el, idx) => {\n if (idx !== undefined) {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n else {\n this.inputRefs[component.name] = el;\n }\n },\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n case 'button': {\n const buttonlDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const buttonComputed = !!component.disabled || buttonlDisabled;\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const handleButtonClick = (event) => {\n if (this.buttonClick) {\n const label = component.buttonsGroups\n ? (event.target && event.target.ej2_instances ? event.target.ej2_instances[0].content : '')\n : component.label || '';\n this.trigger('buttonClick', { fieldName: component.name, label: label, event: event });\n }\n const button = event.target;\n if (button.type && button.type === 'reset') {\n const form = button.closest('form');\n if (form) {\n form.querySelectorAll('input[type=\"checkbox\"]').forEach((cb) => {\n (cb.ej2_instances[0]).checked = false;\n });\n form.querySelectorAll('.e-control.e-multiselect.e-lib').forEach((cb) => {\n (cb.ej2_instances[0]).value = [];\n });\n }\n this.formState.values = {};\n form.reset();\n this.rerenderForm();\n this.validator.destroy();\n }\n };\n const instance = renderFormField({\n component: Object.assign({}, component, { disabled: buttonComputed }),\n value: undefined,\n onChange: () => { },\n locale: this.locale,\n onClick: handleButtonClick,\n ref: (el, idx) => {\n if (idx !== undefined) {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n else {\n this.inputRefs[component.name] = el;\n }\n },\n enableRtl: this.enableRtl,\n target: target\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n case 'splitButton': {\n const splitButtonDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const computedDisabled = !!component.disabled || splitButtonDisabled;\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const handleSplitButtonEvent = (event) => {\n if (this.buttonClick) {\n this.trigger('buttonClick', { fieldName: component.name, label: component.label || '', event: event });\n }\n };\n const instance = renderFormField({\n component: Object.assign({}, component, { disabled: computedDisabled }),\n value: undefined,\n locale: this.locale,\n onChange: () => { },\n onClick: handleSplitButtonEvent,\n ref: (el) => { if (el) {\n this.inputRefs[component.name] = el;\n } },\n enableRtl: this.enableRtl,\n target: target\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n default:\n return this.renderField(component);\n }\n }\n /**\n * @private\n */\n afterValueChange(changedFieldId) {\n if (!this.formState) {\n return;\n }\n this.currentFormValues = Object.assign({}, this.formState.values);\n this.evaluateExpressions();\n this.retriggerCustomValidation();\n this.beforeValidate(changedFieldId);\n this.validator.validate(changedFieldId);\n this.syncFormStateErrors();\n // Only schedule a full-form re-render when the changed field is a\n // conditional trigger (i.e. some other field's visibility/disabled/\n // required/readOnly/valueWhen references its id). Changes to fields\n // that nothing depends on skip the expensive DOM teardown + rebuild,\n // keeping keystroke latency low for non-conditional inputs.\n if (changedFieldId && this.isConditionalTrigger(changedFieldId)) {\n this.scheduleRerender(changedFieldId);\n }\n }\n /**\n * @private\n */\n beforeValidate(fieldId) {\n const infoElement = this.element.querySelector(`#${fieldId}-info`);\n if (infoElement && infoElement.classList.contains('e-error')) {\n infoElement.classList.remove('e-error');\n }\n const inputElement = this.getInputElementByName(fieldId);\n const inputParent = inputElement.parentElement;\n const grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove('e-error');\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove('e-error');\n }\n else {\n inputElement.classList.remove('e-error');\n }\n if (this.validator) {\n this.validator.errorRules = [];\n }\n }\n scheduleRerender(changedFieldId) {\n if (changedFieldId) {\n this.pendingChangedFieldIds.add(changedFieldId);\n }\n if (this.rerenderScheduled) {\n return;\n }\n this.rerenderScheduled = true;\n Promise.resolve().then(() => {\n this.rerenderScheduled = false;\n const changedIds = new Set(this.pendingChangedFieldIds);\n this.pendingChangedFieldIds.clear();\n this.rerenderForm(changedIds);\n });\n }\n /**\n * @private\n *\n * Recursively walk a `ConditionType` (a `ConditionalRule { field }` leaf\n * or a `CompositeConditionalRule { rules: [...] }` tree) and collect the\n * `field` ids of every leaf rule into the supplied `acc` set. These are\n * the trigger ids whose value changes can affect the visibility/disabled/\n * required/readOnly/valueWhen of the component that owns this `conditions`.\n */\n collectConditionFieldIds(condition, acc) {\n if (!condition) {\n return;\n }\n if (typeof condition.field === 'string') {\n // Leaf rule.\n acc.add(condition.field);\n }\n else if (Array.isArray(condition.rules)) {\n // Composite (and/or) — recurse.\n for (const sub of condition.rules) {\n this.collectConditionFieldIds(sub, acc);\n }\n }\n }\n collectDataSourceReferenceIds(value, allComps, target) {\n if (typeof value !== 'string') {\n return;\n }\n const matches = value.match(/\\{([^}]+)\\}/g);\n if (!matches) {\n return;\n }\n for (const match of matches) {\n const componentName = match.slice(1, -1);\n const referencedComp = allComps.find((c) => c.name === componentName);\n if (referencedComp && referencedComp.id) {\n target.add(referencedComp.id);\n }\n }\n }\n /**\n * @private\n *\n * Build `this.conditionalTriggerFieldIds` — the set of every\n * `component.id` that is referenced by *any* other component's\n * `conditions` (visibleWhen / hideWhen / disabledWhen / requiredWhen /\n * readOnlyWhen / setValueWhen / choiceBasedField.primaryFieldId).\n * Only changes to ids in this set can affect another field's\n * visibility/enabled/required/value, so only they need to trigger a\n * full-form re-render. Called once per schema during `render()`.\n */\n buildConditionalDependencyMap() {\n const triggers = new Set();\n // Per-consumer dependency set (rebuilt each pass).\n const consumerDeps = new Map();\n const allComps = this.collectAllComponents(this.processedSchemaCache.components);\n for (const comp of allComps) {\n const myDeps = new Set();\n consumerDeps.set(comp.id, myDeps);\n const conditions = comp.conditions;\n if (conditions) {\n const conditionKeys = [\n 'visibleWhen',\n 'hideWhen',\n 'disabledWhen',\n 'requiredWhen',\n 'readOnlyWhen',\n 'choiceBasedField',\n 'conditionalData'\n ];\n for (const key of conditionKeys) {\n if (conditions[key]) {\n this.collectConditionFieldIds(conditions[key], triggers);\n this.collectConditionFieldIds(conditions[key], myDeps);\n }\n }\n if (Array.isArray(conditions.conditionalData)) {\n for (const item of conditions.conditionalData) {\n if (item && item.condition) {\n this.collectConditionFieldIds(item.condition, triggers);\n this.collectConditionFieldIds(item.condition, myDeps);\n }\n // DataGrid conditional columns\n if (item && Array.isArray(item.conditions)) {\n for (const subCond of item.conditions) {\n this.collectConditionFieldIds(subCond, triggers);\n this.collectConditionFieldIds(subCond, myDeps);\n }\n }\n }\n }\n if (conditions.setValueWhen &&\n conditions.setValueWhen.condition) {\n this.collectConditionFieldIds(conditions.setValueWhen.condition, triggers);\n this.collectConditionFieldIds(conditions.setValueWhen.condition, myDeps);\n }\n if (conditions.choiceBasedField &&\n typeof conditions.choiceBasedField.primaryFieldId === 'string') {\n triggers.add(conditions.choiceBasedField.primaryFieldId);\n myDeps.add(conditions.choiceBasedField.primaryFieldId);\n }\n }\n const collectMinMaxReferenceIds = (range) => {\n if (!range || range.enabled !== true) {\n return;\n }\n const collectFromBound = (bound) => {\n if (bound && typeof bound === 'object' && typeof bound.field === 'string') {\n triggers.add(bound.field);\n myDeps.add(bound.field);\n }\n };\n collectFromBound(range.minValue);\n collectFromBound(range.maxValue);\n };\n const minMaxRule = comp.minMaxRange;\n if (Array.isArray(minMaxRule)) {\n for (const range of minMaxRule) {\n collectMinMaxReferenceIds(range);\n }\n }\n const minMaxTimeRule = comp.minMaxTimeRange;\n if (Array.isArray(minMaxTimeRule)) {\n for (const range of minMaxTimeRule) {\n collectMinMaxReferenceIds(range);\n }\n }\n // ==========================================================\n // DataGrid remote datasource dependencies\n // Example:\n // search.key = \"{combobox}\"\n // filter.value = \"{department}\"\n // Resolve component by NAME and add its ID as dependency.\n // ==========================================================\n const ds = comp.dataSource;\n if ((comp.type === 'dataGrid') &&\n ds &&\n ds.type === 'url') {\n if (ds.search && typeof ds.search.key === 'string') {\n this.collectDataSourceReferenceIds(ds.search.key, allComps, triggers);\n this.collectDataSourceReferenceIds(ds.search.key, allComps, myDeps);\n }\n if (Array.isArray(ds.filters)) {\n for (const filter of ds.filters) {\n if (typeof filter.value === 'string') {\n this.collectDataSourceReferenceIds(filter.value, allComps, triggers);\n this.collectDataSourceReferenceIds(filter.value, allComps, myDeps);\n }\n }\n }\n }\n }\n this.conditionalTriggerFieldIds = triggers;\n this.consumerDependencyMap = consumerDeps;\n }\n /**\n * @private\n *\n * Returns `true` if a value change to `fieldId` can affect any other\n * field's conditional state (visibility/disabled/required/readOnly/\n * valueWhen/choiceBasedField) — i.e. `fieldId` is in the\n * `conditionalTriggerFieldIds` set built by\n * `buildConditionalDependencyMap`. Used by `afterValueChange` to skip\n * the expensive full-form re-render when the changed field is not a\n * conditional trigger.\n */\n isConditionalTrigger(fieldId) {\n return this.conditionalTriggerFieldIds.has(fieldId);\n }\n /**\n * @private\n *\n * Tear down the rendered tree and re-render it, preserving user-entered\n * `formState.values` (carried through `buildValidationRulesAndBridge`'s\n * `previousValues` merge) and restoring keyboard focus to the field that\n * had it before re-render (so a user typing in a textbox is not\n * interrupted by a dependent field appearing/disappearing on the page).\n */\n rerenderForm(changedFieldIds) {\n const changedIds = changedFieldIds || new Set();\n const activeEl = document.activeElement;\n const focusedName = activeEl && activeEl.getAttribute\n ? activeEl.getAttribute('name')\n : null;\n let selectionStart = null;\n let selectionEnd = null;\n if (focusedName && activeEl && activeEl.selectionStart !== undefined) {\n try {\n selectionStart = activeEl.selectionStart;\n selectionEnd = activeEl.selectionEnd;\n }\n catch (e) { /* not a text input — ignore */ }\n }\n const savedElementScrollTop = this.element.scrollTop;\n const savedElementScrollLeft = this.element.scrollLeft;\n const savedWindowScrollX = window.scrollX;\n const savedWindowScrollY = window.scrollY;\n this.preservedFields.clear();\n const allComps = this.collectAllComponents(this.processedSchemaCache.components);\n for (const comp of allComps) {\n if (!FormRenderer_1.PRESERVABLE_TYPES.has(comp.type)) {\n continue;\n }\n const myDeps = this.consumerDependencyMap.get(comp.id);\n let dependsOnChanged = false;\n if (myDeps) {\n changedIds.forEach((changedId) => {\n if (myDeps.has(changedId)) {\n dependsOnChanged = true;\n }\n });\n }\n if (dependsOnChanged) {\n continue;\n }\n const liveNode = this.element.querySelector(`[data-field-id=\"${comp.id}\"]`);\n if (liveNode && liveNode.parentElement) {\n liveNode.parentElement.removeChild(liveNode);\n this.preservedFields.set(comp.id, liveNode);\n }\n }\n this.refreshing = true;\n this.destroyRenderedExcludingPreserved();\n this.removePreviousRoot();\n if (this.validator) {\n this.validator.destroy();\n }\n this.render();\n this.refreshing = false;\n try {\n this.element.scrollTop = savedElementScrollTop;\n this.element.scrollLeft = savedElementScrollLeft;\n window.scrollTo(savedWindowScrollX, savedWindowScrollY);\n }\n catch (e) { /* swallow */ }\n if (focusedName) {\n const elToFocus = this.getInputElementByName(focusedName);\n if (elToFocus && typeof elToFocus.focus === 'function') {\n try {\n elToFocus.focus();\n if (selectionStart !== null && selectionEnd !== null &&\n typeof elToFocus.setSelectionRange === 'function') {\n try {\n elToFocus.setSelectionRange(selectionStart, selectionEnd);\n }\n catch (e) { /* swallow — non-text input */ }\n }\n }\n catch (e) { /* swallow */ }\n }\n }\n // Drop preserved subtrees that were not re-attached (e.g. their\n // field became hidden during this re-render). Their EJ2 instances\n // are still in `renderedInstances`; destroy them now to avoid leaks.\n if (this.preservedFields.size > 0) {\n const stillKept = [];\n this.preservedFields.forEach((node, id) => {\n // If the node is no longer in the live document tree, the\n // field was not re-attached (hidden / removed). Destroy it\n // and remove the detached DOM node so it cannot be re-used.\n if (!this.element.contains(node) && !document.body.contains(node)) {\n this.destroyPreservedSubtree(node);\n try {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n catch (e) {\n // swallow\n }\n this.preservedFields.delete(id);\n }\n else {\n stillKept.push(id);\n }\n });\n stillKept.forEach((id) => this.preservedFields.delete(id));\n }\n }\n /**\n * @private\n */\n removePreviousRoot() {\n if (this.element) {\n while (this.element.childNodes.length > 0) {\n this.element.removeChild(this.element.firstChild);\n }\n }\n }\n /**\n * @private\n */\n destroyRenderedInstance(inst) {\n if (!inst || typeof inst.destroy !== 'function') {\n return;\n }\n const state = inst;\n if (state.isDestroyed || state.destroyed || state.disposed) {\n return;\n }\n const hostElement = inst.element || inst.target || (inst.hostElement && typeof inst.hostElement === 'function' ? inst.hostElement() : undefined);\n try {\n state.isDestroyed = true;\n state.destroyed = true;\n state.disposed = true;\n inst.destroy();\n }\n catch (e) {\n console.warn('FormRenderer: failed to destroy child instance.', e);\n }\n finally {\n if (hostElement && hostElement.parentNode) {\n try {\n hostElement.parentNode.removeChild(hostElement);\n }\n catch (e) {\n }\n }\n }\n }\n /**\n * @private\n *\n * Destroy all rendered EJ2 instances except those whose host element\n * lives inside a preserved subtree (those are kept alive for re-use in\n * the upcoming `render()` pass). Mirrors `destroyRendered` but skips\n * instances rooted in `preservedFields` nodes.\n */\n destroyRenderedExcludingPreserved() {\n const survived = [];\n const preservedNodes = Array.from(this.preservedFields.values());\n for (const inst of this.renderedInstances) {\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n const isPreserved = !!hostEl && preservedNodes.some((n) => n === hostEl || n.contains(hostEl));\n if (isPreserved) {\n survived.push(inst);\n }\n else {\n this.destroyRenderedInstance(inst);\n }\n }\n this.renderedInstances = survived;\n // Prune inputRefs whose host element lives in a destroyed subtree\n // (preserved ones stay).\n const inputRefKeys = Object.keys(this.inputRefs);\n for (const key of inputRefKeys) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n const isPreserved = !!hostEl && preservedNodes.some((n) => n === hostEl || n.contains(hostEl));\n if (!isPreserved) {\n delete this.inputRefs[key];\n }\n }\n this.conditionalValueApplied = {};\n this.expressionDependencyGraph = {};\n this.computedFieldNames = new Set();\n this.previousFormValues = {};\n this.conditionalTriggerFieldIds = new Set();\n }\n /**\n * @private\n *\n * Destroy EJ2 instances whose host element lives inside a preserved\n * subtree that was NOT re-attached (field became hidden). Used during\n * the post-render cleanup pass in `rerenderForm`.\n */\n destroyPreservedSubtree(rootNode) {\n const survived = [];\n for (const inst of this.renderedInstances) {\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === rootNode || rootNode.contains(hostEl))) {\n this.destroyRenderedInstance(inst);\n }\n else {\n survived.push(inst);\n }\n }\n this.renderedInstances = survived;\n }\n getInputElementByName(name) {\n let inputEl = this.element.querySelector(`[name=\"${name}\"]`);\n if (!inputEl) {\n return null;\n }\n if (!inputEl.classList.contains('e-control')) {\n const eControl = inputEl.parentElement ? inputEl.parentElement.querySelector('.e-control') : null;\n if (eControl) {\n return eControl;\n }\n }\n return inputEl;\n }\n /**\n * Evaluate expressions in topological order with type coercion.\n * @private\n */\n evaluateExpressions() {\n if (!this.formState || !this.expressionEngine) {\n return;\n }\n if (this.expressionEvaluationInProgress) {\n return;\n }\n try {\n this.expressionEvaluationInProgress = true;\n const engine = this.expressionEngine;\n const dependencyGraph = this.expressionDependencyGraph;\n const formValues = this.formState.values || {};\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const previousValues = this.previousFormValues;\n const computedFieldNames = this.computedFieldNames;\n const idToNameMap = {};\n allComponents.forEach((comp) => {\n if (comp.name) {\n idToNameMap[comp.id] = comp.name;\n }\n });\n const contextValues = {};\n const fvKeys = Object.keys(formValues);\n for (const componentId of fvKeys) {\n const value = formValues[componentId];\n const fieldName = idToNameMap[componentId];\n if (fieldName) {\n contextValues[fieldName] = value;\n }\n }\n const previousContextValues = Object.assign({}, previousValues);\n Object.assign(previousValues, contextValues);\n const changedFields = new Set();\n const ctxKeys = Object.keys(contextValues);\n for (const fieldName of ctxKeys) {\n const fieldId = Object.keys(idToNameMap).find((id) => idToNameMap[id] === fieldName);\n if (fieldId && contextValues[fieldName] !== previousContextValues[fieldName] && !computedFieldNames.has(fieldId)) {\n changedFields.add(fieldName);\n }\n }\n if (changedFields.size === 0) {\n return;\n }\n const evaluationOrder = engine.getTopologicalOrder(dependencyGraph);\n for (const fieldName of evaluationOrder) {\n const component = allComponents.find((c) => c.name === fieldName);\n if (component && component.expressionValue) {\n computedFieldNames.add(component.id);\n try {\n const isVisible = component.visible !== false\n ? ConditionalRuleEngine.isFieldVisible(component.conditions, formValues)\n : false;\n if (isVisible) {\n const currentValues = {};\n const fvKeys2 = Object.keys(formValues);\n for (const componentId of fvKeys2) {\n const value = formValues[componentId];\n const fn = idToNameMap[componentId];\n if (fn) {\n currentValues[fn] = value;\n }\n }\n let result = engine.evaluate(component.expressionValue, currentValues);\n result = (typeof result === 'string' && result.indexOf('undefined') !== -1)\n ? result.replace(/undefined/g, '')\n : result;\n if (result !== null && result !== undefined && result !== '') {\n switch (component.type) {\n case 'number': {\n const numResult = Number(result);\n result = isNaN(numResult) ? 0 : numResult;\n break;\n }\n case 'checkbox':\n case 'switch':\n result = Boolean(result);\n break;\n case 'textbox':\n case 'textarea':\n result = String(result);\n break;\n case 'dateRange':\n case 'checkboxGroup':\n case 'multiselect':\n break;\n default:\n result = String(result);\n break;\n }\n }\n if (result !== null && result !== undefined && result !== formValues[component.id] && this.formState) {\n this.formState.values[component.id] = result;\n // Sync the underlying input element so the\n // FormValidator reads the new value on its\n // next validate() pass.\n if (this.validator) {\n const inputEl = this.getInputElementByName(component.id);\n if (inputEl) {\n try {\n if (inputEl.ej2_instances[0]) {\n inputEl.ej2_instances[0].value = result;\n // (inputEl as any).ej2_instances[0].refresh();\n }\n else {\n (inputEl).value = String(result);\n }\n }\n catch (e) { /* swallow */ }\n }\n }\n }\n }\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n }\n Object.assign(previousValues, contextValues);\n }\n finally {\n this.expressionEvaluationInProgress = false;\n }\n }\n /**\n * Re-trigger custom validation for changed + dependent fields.\n * @private\n */\n retriggerCustomValidation() {\n if (!this.formState) {\n return;\n }\n if (!this.customValidationEngine) {\n return;\n }\n try {\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const formValues = this.formState.values || {};\n const previousValues = this.previousFormValues;\n const changedFields = new Set();\n Object.keys(formValues).forEach((fieldId) => {\n if (formValues[fieldId] !== previousValues[fieldId]) {\n changedFields.add(fieldId);\n }\n });\n if (changedFields.size === 0) {\n return;\n }\n const fieldsToValidate = new Set();\n changedFields.forEach((fieldId) => {\n const component = allComponents.find((c) => c.id === fieldId);\n if (component && component.customValidation && Array.isArray(component.customValidation)) {\n fieldsToValidate.add(fieldId);\n }\n });\n allComponents.forEach((component) => {\n if (component.customValidation && Array.isArray(component.customValidation)) {\n component.customValidation.forEach((rule) => {\n const deps = this.customValidationEngine.extractDependencies(rule.expression);\n deps.forEach((dep) => {\n const depComponent = allComponents.find((c) => c.id === dep || c.name === dep);\n if (depComponent && changedFields.has(depComponent.id)) {\n fieldsToValidate.add(component.id);\n }\n });\n });\n }\n });\n this.previousFormValues = Object.assign({}, formValues);\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n /**\n * @private\n */\n handleSubmitData(data) {\n const formState = this.formState;\n const isValid = formState && formState.errors ? Object.keys(formState.errors).length === 0 : false;\n const transformedData = {};\n const formValues = formState ? formState.values : {};\n const excludedTypes = new Set(['button', 'message', 'panel', 'table', 'tabs']);\n const allComps = this.collectAllComponents(this.processedSchemaCache.components || []);\n const excludedIds = new Set(allComps.filter((c) => excludedTypes.has(c.type)).map((c) => c.id));\n const hiddenFieldIds = new Set(allComps.filter((c) => {\n if (c.visible === false) {\n return true;\n }\n if (c.conditions && c.conditions.visibleWhen) {\n if (!ConditionalRuleEngine.isFieldVisible(c.conditions, formValues)) {\n return true;\n }\n }\n if (c.conditions && c.conditions.hideWhen) {\n if (ConditionalRuleEngine.isFieldHidden(c.conditions, formValues)) {\n return true;\n }\n }\n return false;\n }).map((c) => c.id));\n const disabledFieldIds = new Set(allComps.filter((c) => {\n if (c.disabled) {\n return true;\n }\n if (c.conditions && c.conditions.disabledWhen) {\n return ConditionalRuleEngine.isFieldDisabled(c.conditions, formValues);\n }\n return false;\n }).map((c) => c.id));\n const dataKeys = Object.keys(data);\n for (const id of dataKeys) {\n const val = data[id];\n if (excludedIds.has(id) || hiddenFieldIds.has(id) || disabledFieldIds.has(id)) {\n return;\n }\n const label = this.idToLabelCache[id] || id;\n transformedData[label] = val;\n }\n if (this.submit) {\n this.trigger('submit', { data: transformedData, isValid: isValid });\n }\n }\n /**\n * Retrieves the underlying Syncfusion form-input component instance by its field name. Use this to call Syncfusion component methods and properties.\n */\n getComponent(name) {\n return this.inputRefs[name] || null;\n }\n /**\n * Re-normalize + re-render on `schema`/`locale`/`enableRtl` change.\n * @private\n */\n onPropertyChanged(newProps, oldProps) {\n let reRender = false;\n if (newProps.schema !== oldProps.schema) {\n reRender = true;\n }\n if (newProps.locale !== oldProps.locale) {\n reRender = true;\n }\n if (newProps.enableRtl !== oldProps.enableRtl) {\n reRender = true;\n }\n if (newProps.layout !== oldProps.layout) {\n reRender = true;\n }\n if (newProps.locale !== oldProps.locale) {\n reRender = true;\n }\n if (!reRender) {\n return;\n }\n // Tear down rendered children and re-render.\n this.refreshing = true;\n this.destroyRendered();\n this.removePreviousRoot();\n this.isInitialized = false;\n this.render();\n this.refreshing = false;\n }\n /**\n * Destroy all child EJ2 instances, detach listeners, null refs.\n * @private\n */\n destroyRendered() {\n if (this.validator) {\n try {\n this.validator.destroy();\n }\n catch (e) {\n this.trigger('failure', {\n error: e\n });\n }\n this.validator = null;\n }\n this.renderedInstances.forEach((inst) => {\n this.destroyRenderedInstance(inst);\n });\n this.renderedInstances = [];\n this.removePreviousRoot();\n this.inputRefs = {};\n this.tooltipRefs = {};\n this.conditionalValueApplied = {};\n this.expressionDependencyGraph = {};\n this.computedFieldNames = new Set();\n this.previousFormValues = {};\n this.conditionalTriggerFieldIds = new Set();\n this.consumerDependencyMap = new Map();\n this.preservedFields = new Map();\n this.pendingChangedFieldIds = new Set();\n }\n /**\n * Remove persisted tab selection state for this form when it is fully destroyed.\n * @private\n */\n clearPersistedTabSelections() {\n if (typeof window === 'undefined')\n return null;\n try {\n const components = (this.processedSchemaCache && this.processedSchemaCache.components)\n ? this.processedSchemaCache.components\n : [];\n const allComps = this.collectAllComponents(components);\n allComps.forEach((component) => {\n if (component.type === 'tabs' && component.id) {\n window.localStorage.removeItem('tab' + component.id);\n }\n });\n }\n catch (_a) {\n }\n }\n /**\n * Full component teardown.\n * @private\n */\n destroy() {\n this.destroyRendered();\n this.formState = { values: {}, errors: {} };\n this.expressionEngine = null;\n this.customValidationEngine = null;\n this.clearEngineCaches();\n this.clearPersistedTabSelections();\n this.consumerDependencyMap = new Map();\n this.preservedFields = new Map();\n this.conditionalTriggerFieldIds = new Set();\n super.destroy();\n }\n /**\n * @private\n */\n clearEngineCaches() {\n if (this.expressionEngine) {\n try {\n this.expressionEngine.clearCache();\n }\n catch (e) { /* swallow */ }\n }\n if (this.customValidationEngine) {\n const inner = this.customValidationEngine.expressionEngine;\n if (inner && typeof inner.clearCache === 'function') {\n try {\n inner.clearCache();\n }\n catch (e) { /* swallow */ }\n }\n }\n }\n};\n/**\n * Component types eligible for DOM preservation across re-renders.\n * These types either bind remote data (dataGrid, lookup-backed\n * dropdown/multiselect) or render many child options (checkboxGroup)\n * and are noticeably expensive / flicker-prone to rebuild.\n */\nFormRenderer.PRESERVABLE_TYPES = new Set([\n 'textbox', 'textarea', 'number', 'checkbox', 'checkboxGroup', 'radio', 'dropdown', 'multiselect', 'button', 'date', 'dateTime', 'time', 'dateRange', 'switch', 'signature', 'rating', 'imageEditor', 'fileUpload', 'rangeSlider', 'colorPicker', 'inputMask', 'message', 'panel', 'table', 'tabs', 'dataGrid', 'staticHtml', 'card', 'splitButton', 'richTextEditor'\n]);\n__decorate([\n Property(null)\n], FormRenderer.prototype, \"schema\", void 0);\n__decorate([\n Property('SingleColumn')\n], FormRenderer.prototype, \"layout\", void 0);\n__decorate([\n Property('')\n], FormRenderer.prototype, \"className\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"submit\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"change\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"buttonClick\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"failure\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"created\", void 0);\nFormRenderer = FormRenderer_1 = __decorate([\n NotifyPropertyChanges\n], FormRenderer);\nexport { FormRenderer };\nexport default FormRenderer;\n","/**\n * These enum values define the layouts available to render forms.\n */\nexport var FormLayout;\n(function (FormLayout) {\n /**\n * SingleColumn - Represents the single column layout and renders forms in a vertical layout.\n */\n FormLayout[\"SingleColumn\"] = \"SingleColumn\";\n /**\n * TwoColumn - Represents the two column layout and renders forms in a two column grid layout.\n */\n FormLayout[\"TwoColumn\"] = \"TwoColumn\";\n /**\n * ThreeColumn - Represents the three column layout which renders forms in a three column grid layout.\n */\n FormLayout[\"ThreeColumn\"] = \"ThreeColumn\";\n /**\n * FourColumn - Represents the four column layout which renders forms in a four column grid layout.\n */\n FormLayout[\"FourColumn\"] = \"FourColumn\";\n})(FormLayout || (FormLayout = {}));\n/**\n * Specifies the component types supported in the Form Renderer.\n */\nexport const FORM_COMPONENT_TYPES = [\n 'textbox', 'textarea', 'number', 'checkbox', 'checkboxGroup', 'radio',\n 'dropdown', 'multiselect', 'button', 'date', 'dateTime', 'time', 'dateRange',\n 'switch', 'signature', 'rating', 'imageEditor', 'fileUpload', 'rangeSlider',\n 'colorPicker', 'inputMask', 'message', 'panel', 'table', 'tabs', 'dataGrid',\n 'staticHtml', 'card', 'splitButton', 'richTextEditor'\n];\n"],"names":["Toolbar","RTEImage","this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-form-renderer.es2015.js","sources":["../src/es6/form-renderer/common/conditional-rule-engine.js","../src/es6/form-renderer/common/json-converter.js","../src/es6/form-renderer/common/expressions/expression-parser.js","../src/es6/form-renderer/common/expressions/dependency-tracker.js","../src/es6/form-renderer/common/expressions/expression-engine.js","../src/es6/form-renderer/common/utils.js","../src/es6/form-renderer/common/option-fetcher.js","../src/es6/form-renderer/common/checkbox-group.js","../src/es6/form-renderer/common/expressions/grid-expressions.js","../src/es6/form-renderer/common/custom-validation-engine.js","../src/es6/form-renderer/common/datagrid-component.js","../src/es6/form-renderer/common/minmax-rule-engine.js","../src/es6/form-renderer/common/parser.js","../src/es6/form-renderer/common/props-forwarder.js","../src/es6/form-renderer/common/static-html-renderer.js","../src/es6/form-renderer/form-renderer/render-form-field.js","../src/es6/form-renderer/form-renderer/custom-widget-resolver.js","../src/es6/form-renderer/form-renderer/form-renderer.js","../src/es6/form-renderer/form-renderer/types/form-schema.js"],"sourcesContent":["import { Internationalization } from '@syncfusion/ej2-base';\n/**\n * ConditionalRuleEngine class\n * @private\n */\nexport class ConditionalRuleEngine {\n /**\n * Evaluate a conditional rule against form values\n *\n * Handles both simple rules (field operator value) and composite rules (AND/OR).\n * Returns false for malformed rules.\n *\n * @param rule - ConditionalRule or CompositeConditionalRule\n * @param formValues - Current form field values (key = field name, value = field value)\n * @returns true if condition met, false otherwise\n * @private\n * @example\n * ```typescript\n * const rule = { field: 'age', operator: 'greaterThan', value: 18 };\n * const isAdult = ConditionalRuleEngine.evaluateCondition(rule, { age: 25 });\n * // isAdult = true\n * ```\n */\n static evaluateCondition(rule, formValues) {\n try {\n // Handle simple rule (field operator value)\n if ('field' in rule && 'operator' in rule && 'value' in rule) {\n return this.evaluateSimpleRule(rule, formValues);\n }\n // Handle composite rule (AND/OR)\n if ('condition' in rule && 'rules' in rule) {\n return this.evaluateCompositeRule(rule, formValues);\n }\n return false;\n }\n catch (error) {\n return false; // Safe default on error\n }\n }\n /**\n * Evaluate simple field comparison rule\n *\n * Supports operators: equal, notEqual, greaterThan, lessThan, greaterThanOrEqual,\n * lessThanOrEqual, in, notIn, contains, notContains.\n *\n * Handles both camelCase (greaterThan) and lowercase (greaterthan) operator formats\n * for compatibility with QueryBuilder output.\n *\n * @param rule - Simple conditional rule with field, operator, value\n * @param formValues - Current form field values\n * @returns true if comparison is true, false otherwise\n *\n * @example\n * ```typescript\n * const rule = { field: 'email', operator: 'contains', value: '@' };\n * const hasAt = evaluateSimpleRule(rule, { email: 'test@example.com' });\n * // hasAt = true\n * ```\n */\n static evaluateSimpleRule(rule, formValues) {\n try {\n const fieldValue = formValues[rule.field];\n const operator = rule.operator.toLowerCase();\n // Allow evaluation for operators that make sense when value is undefined/empty\n if (fieldValue === undefined) {\n const allowedForUndefined = ['equal', 'equals', 'notequal', 'notequals', 'isempty', 'isnotempty'];\n if (allowedForUndefined.indexOf(operator) === -1) {\n return false;\n }\n }\n // Check if field value is an array (for multiselect, checkboxGroup)\n const isFieldArray = Array.isArray(fieldValue);\n const intl = new Internationalization();\n switch (operator) {\n case 'equal':\n case 'equals':\n return fieldValue === rule.value;\n case 'notequal':\n case 'notequals':\n return fieldValue !== rule.value;\n case 'startswith': return fieldValue.startsWith(rule.value);\n case 'doesnotstartswith': return !fieldValue.startsWith(rule.value);\n case 'greaterthan':\n case 'lessthan':\n case 'greaterthanorequal':\n case 'lessthanorequal': {\n const ln = Number(fieldValue);\n const rn = Number(rule.value);\n if (!Number.isNaN(ln) && !Number.isNaN(rn)) {\n if (operator === 'greaterthan')\n return ln > rn;\n if (operator === 'lessthan')\n return ln < rn;\n if (operator === 'greaterthanorequal')\n return ln >= rn;\n return ln <= rn;\n }\n return false;\n }\n case 'dategreaterthan':\n case 'datelessthan': {\n // try date comparison first\n const leftTs = intl.parseDate(fieldValue, { format: 'MM/dd/yyyy' });\n const rightTs = intl.parseDate(rule.value, { format: 'MM/dd/yyyy' });\n if (leftTs !== null && rightTs !== null) {\n if (operator === 'dategreaterthan')\n return leftTs > rightTs;\n if (operator === 'datelessthan')\n return leftTs < rightTs;\n return leftTs <= rightTs;\n }\n return false;\n }\n case 'timegreaterthan':\n case 'timelessthan': {\n // Parse time strings (format: hh:mm a)\n const leftTime = intl.parseDate(fieldValue, { format: 'hh:mm a', type: 'time' });\n const rightTime = intl.parseDate(rule.value, { format: 'hh:mm a', type: 'time' });\n if (leftTime !== null && rightTime !== null) {\n if (operator === 'timegreaterthan')\n return leftTime > rightTime;\n if (operator === 'timelessthan')\n return leftTime < rightTime;\n }\n return false;\n }\n case 'datetimegreaterthan':\n case 'datetimelessthan': {\n // Parse datetime strings (format: MM/dd/yyyy hh:mm a)\n const leftDateTime = intl.parseDate(fieldValue, { format: 'MM/dd/yyyy hh:mm a', type: 'dateTime' });\n const rightDateTime = intl.parseDate(rule.value, { format: 'MM/dd/yyyy hh:mm a', type: 'dateTime' });\n if (leftDateTime !== null && rightDateTime !== null) {\n if (operator === 'datetimegreaterthan')\n return leftDateTime > rightDateTime;\n if (operator === 'datetimelessthan')\n return leftDateTime < rightDateTime;\n }\n return false;\n }\n case 'contains':\n // If field value is array, check if array contains the specific value(s)\n if (isFieldArray) {\n // Parse comma-separated values in rule.value if it's a string\n if (typeof rule.value === 'string' && rule.value.indexOf(',') !== -1) {\n const searchValues = rule.value.split(',').map(v => v.trim());\n // Check if array contains ANY of the search values\n return searchValues.some(searchVal => fieldValue.indexOf(searchVal) !== -1);\n }\n return fieldValue.indexOf(rule.value) !== -1;\n }\n // Otherwise, check string contains\n return String(fieldValue).indexOf(String(rule.value)) !== -1;\n case 'notcontains':\n // If field value is array, check if array does NOT contain the specific value(s)\n if (isFieldArray) {\n // Parse comma-separated values in rule.value if it's a string\n if (typeof rule.value === 'string' && rule.value.indexOf(',') !== -1) {\n const searchValues = rule.value.split(',').map(v => v.trim());\n // Check if array contains NONE of the search values\n return !searchValues.some(searchVal => fieldValue.indexOf(searchVal) !== -1);\n }\n return fieldValue.indexOf(rule.value) === -1;\n }\n // Otherwise, check string does not contain\n return String(fieldValue).indexOf(String(rule.value)) === -1;\n case 'isempty':\n // Check if array is empty\n if (isFieldArray) {\n return fieldValue.length === 0;\n }\n // For non-arrays, check if falsy or empty string\n return !fieldValue || String(fieldValue).length === 0;\n case 'isnotempty':\n // Check if array has items\n if (isFieldArray) {\n return fieldValue.length > 0;\n }\n // For non-arrays, check if truthy and not empty string\n return !!fieldValue && String(fieldValue).length > 0;\n default:\n return false;\n }\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Evaluate composite rule with AND/OR logic\n *\n * Recursively evaluates nested rules with AND (all must be true) or OR\n * (at least one must be true) logic.\n *\n * @param rule - Composite rule with condition ('and'|'or') and rules array\n * @param formValues - Current form field values\n * @returns true if composite condition met, false otherwise\n *\n * @example\n * ```typescript\n * const rule = {\n * condition: 'and',\n * rules: [\n * { field: 'age', operator: 'greaterThan', value: 18 },\n * { field: 'country', operator: 'equal', value: 'US' }\n * ]\n * };\n * const isEligible = evaluateCompositeRule(rule, { age: 25, country: 'US' });\n * // isEligible = true\n * ```\n */\n static evaluateCompositeRule(rule, formValues) {\n try {\n if (!Array.isArray(rule.rules) || rule.rules.length === 0) {\n return false;\n }\n const condition = rule.condition.toLowerCase();\n if (condition === 'and') {\n // All rules must be true\n return rule.rules.every((childRule) => this.evaluateCondition(childRule, formValues));\n }\n else if (condition === 'or') {\n // At least one rule must be true\n return rule.rules.some((childRule) => this.evaluateCondition(childRule, formValues));\n }\n else {\n return false;\n }\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Check if field should be visible\n *\n * Evaluates visibleWhen condition. Defaults to true (visible) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing visibleWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be visible, false if hidden\n *\n * @example\n * ```typescript\n * const conditions = {\n * visibleWhen: { field: 'showEmail', operator: 'equal', value: true }\n * };\n * const visible = isFieldVisible(conditions, { showEmail: true });\n * // visible = true\n * ```\n */\n static isFieldVisible(conditions, formValues) {\n try {\n if (!conditions || !conditions.visibleWhen) {\n return true; // Default: visible if no condition\n }\n return this.evaluateCondition(conditions.visibleWhen, formValues);\n }\n catch (error) {\n return true; // Safe default: visible on error\n }\n }\n /**\n * Check if field should be read-only\n *\n * Evaluates readOnlyWhen condition. Defaults to false (editable) if no\n * condition is defined or on error.\n *\n * @param conditions - FormComponentConditions containing readOnlyWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be read-only, false if editable\n *\n * @example\n * ```typescript\n * const conditions = {\n * readOnlyWhen: { field: 'isVerified', operator: 'equal', value: true }\n * };\n * const readOnly = isFieldReadOnly(conditions, { isVerified: true });\n * // readOnly = true\n * ```\n */\n static isFieldReadOnly(conditions, formValues) {\n try {\n if (!conditions || !conditions.readOnlyWhen) {\n return false; // Default: not read-only if no condition\n }\n return this.evaluateCondition(conditions.readOnlyWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not read-only on error\n }\n }\n /**\n * Check if field should be disabled\n *\n * Evaluates disabledWhen condition. Defaults to false (enabled) if no\n * condition is defined or on error.\n *\n * @param conditions - FormComponentConditions containing disabledWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be disabled, false if enabled\n *\n * @example\n * ```typescript\n * const conditions = {\n * disabledWhen: { field: 'orderStatus', operator: 'equal', value: 'completed' }\n * };\n * const disabled = isFieldDisabled(conditions, { orderStatus: 'completed' });\n * // disabled = true\n * ```\n */\n static isFieldDisabled(conditions, formValues) {\n try {\n if (!conditions || !conditions.disabledWhen) {\n return false; // Default: not disabled if no condition\n }\n return this.evaluateCondition(conditions.disabledWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not disabled on error\n }\n }\n /**\n * Check if field should be hidden\n *\n * Evaluates hideWhen condition. Defaults to false (visible) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing hideWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be hidden, false if visible\n *\n * @example\n * ```typescript\n * const conditions = {\n * hideWhen: { field: 'hideEmail', operator: 'equal', value: true }\n * };\n * const hidden = isFieldHidden(conditions, { hideEmail: true });\n * // hidden = true\n * ```\n */\n static isFieldHidden(conditions, formValues) {\n try {\n if (!conditions || !conditions.hideWhen) {\n return false; // Default: not hidden if no condition\n }\n return this.evaluateCondition(conditions.hideWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not hidden on error\n }\n }\n /**\n * Check if field should be required\n *\n * Evaluates requiredWhen condition. Defaults to false (not required) if no condition\n * is defined or on error.\n *\n * @param conditions - FormComponentConditions containing requiredWhen rule\n * @param formValues - Current form field values\n * @returns true if field should be required, false if optional\n *\n * @example\n * ```typescript\n * const conditions = {\n * requiredWhen: { field: 'requireDetails', operator: 'equal', value: true }\n * };\n * const required = isFieldRequired(conditions, { requireDetails: true });\n * // required = true\n * ```\n */\n static isFieldRequired(conditions, formValues) {\n try {\n if (!conditions || !conditions.requiredWhen) {\n return false; // Default: not required if no condition\n }\n return this.evaluateCondition(conditions.requiredWhen, formValues);\n }\n catch (error) {\n return false; // Safe default: not required on error\n }\n }\n /**\n * Get value to set for field if condition is met\n *\n * Evaluates setValueWhen condition and returns the value to assign if true.\n * Returns undefined if no condition is defined, condition not met, or on error.\n *\n * @param conditions - FormComponentConditions containing setValueWhen rule\n * @param formValues - Current form field values\n * @returns The value to set if condition met, undefined otherwise\n *\n * @example\n * ```typescript\n * const conditions = {\n * setValueWhen: {\n * condition: { field: 'country', operator: 'equal', value: 'US' },\n * value: 'United States'\n * }\n * };\n * const value = getConditionalValue(conditions, { country: 'US' });\n * // value = 'United States'\n * ```\n */\n static getConditionalValue(conditions, formValues) {\n try {\n if (!conditions || !conditions.setValueWhen) {\n return undefined;\n }\n const isMet = this.evaluateCondition(conditions.setValueWhen.condition, formValues);\n if (isMet) {\n return conditions.setValueWhen.value;\n }\n return undefined;\n }\n catch (error) {\n return undefined;\n }\n }\n /**\n * Evaluate conditional data availability\n * Returns true if any conditional data rule's condition is met\n *\n * @param conditionalDataRules - Array of ConditionalDataRule objects\n * @param formValues - Current form field values\n * @returns Index of first matching rule, or -1 if none match\n */\n static evaluateConditionalDataRules(conditionalDataRules, formValues) {\n if (!conditionalDataRules || !Array.isArray(conditionalDataRules)) {\n return -1;\n }\n for (let i = 0; i < conditionalDataRules.length; i++) {\n const rule = conditionalDataRules[i];\n if (this.evaluateCondition(rule.condition, formValues)) {\n return i; // Return index of first matching rule\n }\n }\n return -1;\n }\n /**\n * Get filtered options for a dependent dropdown based on choice-based field rule\n *\n * If choiceBasedField rule exists and primary field has a value,\n * return only the mapped dependent options for that primary value.\n * Otherwise return all options.\n *\n * @param rule - ChoiceBasedFieldRule configuration\n * @param allDependentOptions - Complete list of dependent field options\n * @param formValues - Current form values\n * @param primaryFieldId - ID of primary field\n * @returns Filtered options array\n *\n * @example\n * ```typescript\n * const rule = {\n * primaryFieldId: 'dept-id',\n * choiceMapping: {\n * 'Marketing': ['Markers', 'Sticky Notes'],\n * 'Finance': ['Calculator']\n * }\n * };\n *\n * const filtered = ConditionalRuleEngine.getChoiceBasedOptions(\n * rule,\n * ['Markers', 'Sticky Notes', 'Calculator'],\n * { 'dept-id': 'Marketing' },\n * 'dept-id'\n * );\n * // Returns: ['Markers', 'Sticky Notes']\n * ```\n */\n static getChoiceBasedOptions(rule, allDependentOptions, formValues, primaryFieldId) {\n try {\n // Get primary field value from form\n const primaryValue = formValues && formValues[primaryFieldId];\n if (primaryValue === null || primaryValue === undefined) {\n // No primary value selected - return all or empty based on rule config\n return rule.showAllWhenNotMapped ? allDependentOptions : [];\n }\n // Ensure primary value is treated as string for comparison\n const primaryValueStr = String(primaryValue);\n // Check if this primary value is mapped in the rule\n if (primaryValueStr in rule.choiceMapping) {\n const mappedOptions = rule.choiceMapping[primaryValueStr];\n // Validate mapped options exist in all options (safety check)\n return mappedOptions.filter((opt) => allDependentOptions.indexOf(opt) !== -1);\n }\n // Primary value not mapped - return all or empty based on rule config\n return rule.showAllWhenNotMapped ? allDependentOptions : [];\n }\n catch (error) {\n // Safe default - return all options\n return allDependentOptions;\n }\n }\n}\n","import { sanitizeId } from './utils';\n/**\n * @private\n */\nexport const generateId = (type) => {\n const timestamp = Date.now();\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${timestamp}_${random}`;\n};\n/**\n * @private\n */\nexport const generateName = (type) => {\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${random}`;\n};\n/**\n * @private\n */\nexport function labelToFieldKey(label, fallbackId) {\n if (!label || label.trim() === '') {\n return fallbackId || 'field';\n }\n // Remove special characters, keep letters, numbers, and spaces\n const cleaned = label\n .replace(/[^\\w\\s]/g, '') // Remove special chars\n .trim();\n if (cleaned === '') {\n return fallbackId || 'field';\n }\n // Split by spaces/underscores and convert to camelCase\n const words = cleaned.split(/[\\s_]+/);\n if (words.length === 0) {\n return fallbackId || 'field';\n }\n // First word lowercase, rest title case\n const camelCase = words\n .map((word, index) => {\n if (index === 0) {\n return word.toLowerCase();\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n return camelCase || fallbackId || 'field';\n}\n/**\n * @private\n */\nexport function makeUniqueFieldKey(baseKey, existingKeys, originalId) {\n if (!existingKeys.has(baseKey)) {\n return baseKey;\n }\n // Try with original ID suffix first\n if (originalId) {\n const withId = `${baseKey}_${originalId.split('_').pop()}`;\n if (!existingKeys.has(withId)) {\n return withId;\n }\n }\n // Fall back to numeric suffix\n let counter = 2;\n while (existingKeys.has(`${baseKey}${counter}`)) {\n counter++;\n }\n return `${baseKey}${counter}`;\n}\n/**\n * @private\n */\nexport const UI_TYPE_TO_SEMANTIC_TYPE = {\n // String types\n 'textbox': { type: 'string' },\n 'textarea': { type: 'string' },\n 'email': { type: 'string', format: 'email' },\n 'url': { type: 'string', format: 'url' },\n 'phone': { type: 'string' },\n 'password': { type: 'string' },\n 'inputMask': { type: 'string' },\n // Numeric types\n 'number': { type: 'number' },\n 'rangeSlider': { type: 'number' },\n 'rating': { type: 'number' },\n // Boolean types\n 'checkbox': { type: 'boolean' },\n 'switch': { type: 'boolean' },\n // Date/Time types\n 'date': { type: 'string', format: 'date' },\n 'dateTime': { type: 'string', format: 'date-time' },\n 'time': { type: 'string', format: 'time' },\n 'dateRange': { type: 'string', format: 'date' },\n // Array types\n 'multiselect': { type: 'array' },\n 'checkboxGroup': { type: 'array' },\n // Single-value selection (stored as string)\n 'dropdown': { type: 'string' },\n 'radio': { type: 'string' },\n 'splitButton': { type: 'string' },\n // Special types (excluded from data schema)\n 'button': { type: 'button' },\n 'message': { type: 'message' },\n 'signature': { type: 'sign' },\n 'imageEditor': { type: 'image' },\n 'fileUpload': { type: 'file' },\n 'colorPicker': { type: 'color' },\n 'dataGrid': { type: 'grid' },\n // Layout types (excluded from data schema)\n 'staticHtml': { type: 'string' },\n 'table': null,\n 'panel': null,\n 'tabs': null,\n 'card': null\n};\n/**\n * @private\n */\nfunction stripConfiguredFlag(properties) {\n const out = {};\n const keys = Object.keys(properties || {});\n for (const key of keys) {\n const val = properties[key];\n const copy = Object.assign({}, val);\n if (copy && copy._configured !== undefined) {\n delete copy._configured;\n }\n out[key] = copy;\n }\n return out;\n}\n/**\n * @private\n */\nfunction cleanConditionRules(condition, validFieldIds) {\n if (!condition || !condition.rules || !Array.isArray(condition.rules)) {\n return undefined;\n }\n const cleanedRules = condition.rules\n .map((rule) => {\n // If rule has nested rules (group), recursively clean\n if (rule.rules && Array.isArray(rule.rules)) {\n return cleanConditionRules(rule, validFieldIds);\n }\n // If rule references non-existent field, exclude it\n if (rule.field && !validFieldIds.has(rule.field)) {\n return null;\n }\n return rule;\n })\n .filter((rule) => rule !== null && rule !== undefined);\n // If no rules remain, return undefined\n if (cleanedRules.length === 0) {\n return undefined;\n }\n return Object.assign({}, condition, { rules: cleanedRules });\n}\n/**\n * @private\n */\nfunction getAllComponentIds(components) {\n const ids = new Set();\n const stack = [...components];\n while (stack.length) {\n const comp = stack.pop();\n ids.add(comp.id);\n if (comp.children)\n stack.push(...comp.children);\n if (comp.tabItems) {\n comp.tabItems.forEach(tab => {\n if (tab.content)\n stack.push(...tab.content);\n });\n }\n if (comp.tableCells) {\n comp.tableCells.forEach(row => {\n row.forEach(cell => stack.push(...cell));\n });\n }\n }\n return ids;\n}\n/**\n * @private\n */\nexport function splitSchema(heartSchema) {\n const dataFields = {};\n const uiFields = {};\n const layout = [];\n const usedFieldKeys = new Set(); // Track unique field keys\n const seenComponentIds = new Set(); // Track component IDs to prevent duplicates\n // ✅ Get all valid field IDs for condition validation\n const validFieldIds = getAllComponentIds(heartSchema.components);\n // Stack for iterative traversal (avoid recursion)\n const stack = heartSchema.components.map(c => ({\n component: c,\n layoutParent: layout\n }));\n while (stack.length > 0) {\n // Use shift() instead of pop() to maintain order (FIFO instead of LIFO)\n const { component, layoutParent } = stack.shift();\n // ✅ Clean conditions before processing\n if (component.conditions) {\n const cleanedConditions = {};\n let hasValidConditions = false;\n if (component.conditions.visibleWhen) {\n const cleaned = cleanConditionRules(component.conditions.visibleWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.visibleWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.hideWhen) {\n const cleaned = cleanConditionRules(component.conditions.hideWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.hideWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.readOnlyWhen) {\n const cleaned = cleanConditionRules(component.conditions.readOnlyWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.readOnlyWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.disabledWhen) {\n const cleaned = cleanConditionRules(component.conditions.disabledWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.disabledWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.requiredWhen) {\n const cleaned = cleanConditionRules(component.conditions.requiredWhen, validFieldIds);\n if (cleaned) {\n cleanedConditions.requiredWhen = cleaned;\n hasValidConditions = true;\n }\n }\n if (component.conditions.setValueWhen) {\n const cleaned = cleanConditionRules(component.conditions.setValueWhen.condition, validFieldIds);\n if (cleaned && component.conditions.setValueWhen.value !== undefined && component.conditions.setValueWhen.value !== '') {\n cleanedConditions.setValueWhen = {\n condition: cleaned,\n value: component.conditions.setValueWhen.value\n };\n hasValidConditions = true;\n }\n }\n if (component.conditions && component.conditions.choiceBasedField) {\n const rule = component.conditions.choiceBasedField;\n // Validate that primary field exists\n if (rule.primaryFieldId && validFieldIds.has(rule.primaryFieldId)) {\n cleanedConditions.choiceBasedField = rule;\n hasValidConditions = true;\n }\n }\n if (component.conditions.conditionalData && Array.isArray(component.conditions.conditionalData)) {\n const cleanedDataRules = component.conditions.conditionalData\n .map((rule) => {\n const cleaned = cleanConditionRules(rule.condition, validFieldIds);\n if (cleaned && rule.dataSource) {\n return {\n condition: cleaned,\n dataSource: rule.dataSource,\n columns: rule.columns,\n includeColumns: rule.includeColumns\n };\n }\n return null;\n })\n .filter((rule) => rule !== null && rule !== undefined);\n if (cleanedDataRules.length > 0) {\n cleanedConditions.conditionalData = cleanedDataRules;\n hasValidConditions = true;\n }\n }\n // Update component conditions (or remove if empty)\n component.conditions = hasValidConditions ? cleanedConditions : undefined;\n }\n // Get semantic type mapping (may be null for presentation-only widgets)\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[component.type];\n // Handle layout containers\n if (component.type === 'table') {\n const safeId = sanitizeId(component.id, generateId('table'));\n const tableNode = Object.assign({ type: 'table', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, rows: (component.tableCells && component.tableCells.length) || 0, cols: (component.tableCells && component.tableCells[0] && component.tableCells[0].length) || 0, cells: [], columnWidths: component.columnWidths }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process table cells\n if (component.tableCells) {\n component.tableCells.forEach((row, rowIndex) => {\n const cellRow = [];\n row.forEach((cellComponents, colIndex) => {\n const cellChildren = [];\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...cellComponents].reverse().forEach((comp) => {\n stack.unshift({ component: comp, layoutParent: cellChildren });\n });\n cellRow.push({ row: rowIndex, col: colIndex, children: cellChildren });\n });\n tableNode.cells.push(cellRow);\n });\n }\n layoutParent.push(tableNode);\n continue;\n }\n if (component.type === 'panel') {\n const safeId = sanitizeId(component.id, generateId('panel'));\n const panelNode = Object.assign({ type: 'panel', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, hideLabel: component.hideLabel, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process panel children\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(component.children || [])].reverse().forEach((child) => {\n stack.unshift({ component: child, layoutParent: panelNode.children });\n });\n layoutParent.push(panelNode);\n continue;\n }\n if (component.type === 'tabs') {\n const safeId = sanitizeId(component.id, generateId('tabs'));\n const tabsNode = Object.assign({ type: 'tabs', name: component.name, id: safeId, label: component.label, cssClass: component.cssClass, tabOptions: component.tabOptions, tabs: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process tabs\n if (component.tabItems) {\n component.tabItems.forEach((tab) => {\n const tabChildren = [];\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(tab.content || [])].reverse().forEach((comp) => {\n stack.unshift({ component: comp, layoutParent: tabChildren });\n });\n tabsNode.tabs.push({ header: tab.header, children: tabChildren });\n });\n }\n layoutParent.push(tabsNode);\n continue;\n }\n if (component.type === 'card') {\n const safeId = sanitizeId(component.id, generateId('card'));\n const cardNode = Object.assign({ type: 'card', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideLabel: component.hideLabel, cardTitle: component.cardTitle, cardSubtitle: component.cardSubtitle, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));\n // Process card children\n // Reverse children and use unshift() to maintain order with depth-first processing\n [...(component.children || [])].reverse().forEach((child) => {\n stack.unshift({ component: child, layoutParent: cardNode.children });\n });\n layoutParent.push(cardNode);\n continue;\n }\n // ✅ DEDUPLICATION: Skip if we've already processed this component ID\n if (seenComponentIds.has(component.id)) {\n //console.log(`⚠️ [splitSchema] Skipping duplicate component: ${component.id} (${component.label})`);\n continue;\n }\n seenComponentIds.add(component.id);\n // Generate semantic field key from label\n const baseFieldKey = labelToFieldKey(component.label || component.id, component.id);\n const fieldKey = makeUniqueFieldKey(baseFieldKey, usedFieldKeys, component.id);\n usedFieldKeys.add(fieldKey);\n // Extract data field properties (all components, no skipping)\n // If no semantic type mapping exists, use 'any' as the type\n const dataField = extractDataField(component, semanticType || { type: 'any' });\n dataFields[fieldKey] = dataField;\n // Extract UI field properties (all components)\n uiFields[fieldKey] = extractUIField(component);\n // Add property reference to layout (use fieldKey instead of component ID)\n layoutParent.push({ type: 'field', propertyId: fieldKey });\n }\n // ✅ Merge data and UI fields into unified properties\n const unifiedProperties = {};\n Object.keys(dataFields).forEach(fieldKey => {\n const dataField = dataFields[fieldKey];\n const uiField = uiFields[fieldKey];\n unifiedProperties[fieldKey] = Object.assign({}, dataField, uiField, { \n // Ensure widget is always set\n widget: (uiField && uiField.widget) || inferWidgetFromType(dataField.type, dataField.format, dataField.options !== undefined) });\n });\n const settings = heartSchema.settings ? Object.assign({}, heartSchema.settings) : {};\n return Object.assign({ version: heartSchema.version, properties: stripConfiguredFlag(unifiedProperties), layout }, (Object.keys(settings).length > 0 ? { settings } : {}));\n}\n/**\n * @private\n */\nfunction extractDataField(component, semanticType) {\n const safeId = sanitizeId(component.id, generateId(semanticType.type));\n const dataField = {\n id: safeId,\n name: component.name,\n type: semanticType.type,\n };\n // Add format if present\n if (semanticType.format) {\n dataField.format = semanticType.format;\n }\n // Extract allowed properties only\n if (component.label !== undefined)\n dataField.label = component.label;\n if (component.defaultValue !== undefined)\n dataField.defaultValue = component.defaultValue;\n if (component.expressionValue !== undefined)\n dataField.expressionValue = component.expressionValue;\n if (component.content !== undefined)\n dataField.content = component.content;\n if (component.buttonType !== undefined)\n dataField.buttonType = component.buttonType;\n if (component.textboxType !== undefined)\n dataField.textboxType = component.textboxType;\n if (component.required !== undefined)\n dataField.required = component.required;\n // Extract options for selection fields (dropdown, radio, multiselect)\n if (component.options !== undefined)\n dataField.options = component.options;\n if (component.minLength !== undefined)\n dataField.minLength = component.minLength;\n if (component.maxLength !== undefined)\n dataField.maxLength = component.maxLength;\n // Handle numeric validation (use canonical names)\n if (component.minValue !== undefined)\n dataField.minValue = component.minValue;\n if (component.maxValue !== undefined)\n dataField.maxValue = component.maxValue;\n // Date/time validation\n if (component.minDate !== undefined)\n dataField.minDate = component.minDate;\n if (component.maxDate !== undefined)\n dataField.maxDate = component.maxDate;\n if (component.minTime !== undefined)\n dataField.minTime = component.minTime;\n if (component.maxTime !== undefined)\n dataField.maxTime = component.maxTime;\n // Pattern validation (rename from regex, convert RegExp to string)\n if (component.regex !== undefined) {\n const regex = component.regex;\n dataField.pattern = regex instanceof RegExp ? regex.source : regex;\n }\n if (component.pattern !== undefined) {\n const pattern = component.pattern;\n dataField.pattern = pattern instanceof RegExp ? pattern.source : pattern;\n }\n return dataField;\n}\n/**\n * @private\n */\nfunction extractUIField(component) {\n const uiField = {\n widget: component.type,\n };\n // Copy all properties EXCEPT those in data schema allowed list\n const dataSchemaProps = new Set([\n 'id', 'type', 'label', 'format', 'defaultValue', 'required', 'options', 'name', 'expressionValue',\n 'minLength', 'maxLength', 'minimum', 'maximum', 'minValue', 'maxValue',\n 'minDate', 'maxDate', 'minTime', 'maxTime', 'regex', 'pattern', 'content', 'buttonType', 'textboxType'\n ]);\n Object.keys(component).forEach(key => {\n if (!dataSchemaProps.has(key) && key !== 'id' && key !== 'type') {\n uiField[key] = component[key];\n }\n });\n // Special handling: Filter dataGrid columns to keep only required properties\n if (component.type === 'dataGrid' && uiField.columns && Array.isArray(uiField.columns)) {\n const requiredColumnProps = [\n 'field',\n 'headerText',\n 'type',\n 'width',\n 'format',\n 'editType',\n 'validationRules',\n 'allowEditing',\n 'expression',\n 'isPrimaryKey',\n 'customValidation'\n ];\n uiField.columns = uiField.columns.map((col) => {\n const filteredCol = {};\n requiredColumnProps.forEach(prop => {\n if (col[prop] !== undefined) {\n filteredCol[prop] = col[prop];\n }\n });\n return filteredCol;\n });\n }\n return uiField;\n}\n/**\n * @private\n */\nexport function mergeSchema(unified, dataModel) {\n // Create lookup map for O(1) access to unified properties\n const propertyMap = new Map();\n const unifiedPropKeys = Object.keys(unified.properties);\n for (const id of unifiedPropKeys) {\n propertyMap.set(id, unified.properties[id]);\n }\n // Track processed field IDs to prevent duplicates\n const processedFieldIds = new Set();\n // Recursive function to process layout nodes\n const processLayoutNodes = (layoutNodes) => {\n const components = [];\n for (const node of layoutNodes) {\n if (node.type === 'field') {\n const fieldNode = node;\n // ✅ DEDUPLICATION: Skip if we've already processed this field\n if (processedFieldIds.has(fieldNode.propertyId)) {\n continue;\n }\n processedFieldIds.add(fieldNode.propertyId);\n const unifiedField = propertyMap.get(fieldNode.propertyId);\n if (!unifiedField) {\n // console.warn(`Field ${fieldNode.propertyId} in layout not found in schema`);\n // Generate fallback component\n const fallbackComponent = {\n id: fieldNode.propertyId || generateId('textbox'),\n name: generateName(''),\n type: 'textbox',\n label: 'Unknown Field',\n _configured: true\n };\n components.push(fallbackComponent);\n }\n else {\n components.push(mergeUnifiedField(unifiedField, dataModel));\n }\n }\n else if (node.type === 'table') {\n const tableNode = node;\n const tableComponent = Object.assign({ id: tableNode.id || generateId('table'), name: tableNode.name, type: 'table', label: tableNode.label || 'Table', cssClass: tableNode.cssClass, hideBorders: tableNode.hideBorders, rows: tableNode.rows, columns: tableNode.cols, columnWidths: tableNode.columnWidths, tableCells: [], _configured: true }, (tableNode.conditions ? { conditions: tableNode.conditions } : {}));\n // Process table cells recursively\n tableNode.cells.forEach((row) => {\n const cellRow = [];\n row.forEach((cell) => {\n const cellComponents = processLayoutNodes(cell.children);\n cellRow.push(cellComponents);\n });\n tableComponent.tableCells.push(cellRow);\n });\n components.push(tableComponent);\n }\n else if (node.type === 'panel') {\n const panelNode = node;\n const panelComponent = Object.assign({ id: panelNode.id || generateId('panel'), type: 'panel', name: panelNode.name, cssClass: panelNode.cssClass, hideBorders: panelNode.hideBorders, hideLabel: panelNode.hideLabel, label: panelNode.label || 'Panel', children: processLayoutNodes(panelNode.children), _configured: true }, (panelNode.conditions ? { conditions: panelNode.conditions } : {}));\n components.push(panelComponent);\n }\n else if (node.type === 'tabs') {\n const tabsNode = node;\n const tabsComponent = Object.assign({ id: tabsNode.id || generateId('tabs'), type: 'tabs', name: tabsNode.name, label: tabsNode.label || 'Tabs', cssClass: tabsNode.cssClass, tabOptions: tabsNode.tabOptions, tabItems: [], _configured: true }, (tabsNode.conditions ? { conditions: tabsNode.conditions } : {}));\n // Process tabs recursively\n tabsNode.tabs.forEach((tab) => {\n tabsComponent.tabItems.push({\n header: tab.header,\n content: processLayoutNodes(tab.children)\n });\n });\n components.push(tabsComponent);\n }\n else if (node.type === 'card') {\n const cardNode = node;\n const cardComponent = Object.assign({ id: cardNode.id || generateId('card'), type: 'card', name: cardNode.name, label: cardNode.label || 'Card', cssClass: cardNode.cssClass, hideLabel: cardNode.hideLabel, children: processLayoutNodes(cardNode.children), _configured: true }, (cardNode.conditions ? { conditions: cardNode.conditions } : {}));\n // Add card-specific properties\n if (cardNode.cardTitle !== undefined)\n cardComponent.cardTitle = cardNode.cardTitle;\n if (cardNode.cardSubtitle !== undefined)\n cardComponent.cardSubtitle = cardNode.cardSubtitle;\n components.push(cardComponent);\n }\n }\n return components;\n };\n // Process root layout nodes\n let components;\n if (!unified.layout || unified.layout.length === 0) {\n // If layout is undefined or empty, generate a flat layout from properties\n const flatPropKeys = Object.keys(unified.properties);\n components = flatPropKeys.map((key) => {\n return mergeUnifiedField(unified.properties[key], dataModel);\n });\n }\n else {\n components = processLayoutNodes(unified.layout);\n }\n return Object.assign({ version: unified.version, components }, (unified.settings ? { settings: unified.settings } : {}));\n}\n/**\n * @private\n */\nfunction mergeUnifiedField(unifiedField, dataModel) {\n const hasOptions = unifiedField.options !== undefined && unifiedField.options.length > 0;\n const component = {\n id: unifiedField.id || generateId(unifiedField.widget || inferWidgetFromType(unifiedField.type, unifiedField.format, hasOptions)),\n name: unifiedField.name,\n type: (unifiedField.widget || inferWidgetFromType(unifiedField.type, unifiedField.format, hasOptions)),\n label: unifiedField.label || unifiedField.id,\n };\n // Copy all data and UI properties from unified field\n const dataSchemaProps = new Set([\n 'id', 'type', 'name', 'label', 'format', 'widget', 'defaultValue', 'required', 'options', 'expressionValue',\n 'minLength', 'maxLength', 'minimum', 'maximum', 'minValue', 'maxValue',\n 'minDate', 'maxDate', 'minTime', 'maxTime', 'regex', 'pattern', 'content', 'buttonType', 'textboxType'\n ]);\n Object.keys(unifiedField).forEach(key => {\n if (!dataSchemaProps.has(key) && key !== 'id' && key !== 'name' && key !== 'type' && key !== 'label') {\n component[key] = unifiedField[key];\n }\n });\n // Copy specific data properties\n if (unifiedField.defaultValue !== undefined)\n component.defaultValue = unifiedField.defaultValue;\n if (unifiedField.expressionValue !== undefined)\n component.expressionValue = unifiedField.expressionValue;\n if (unifiedField.required !== undefined)\n component.required = unifiedField.required;\n if (unifiedField.content !== undefined)\n component.content = unifiedField.content;\n if (unifiedField.buttonType !== undefined)\n component.buttonType = unifiedField.buttonType;\n if (unifiedField.textboxType !== undefined)\n component.textboxType = unifiedField.textboxType;\n if (unifiedField.options !== undefined)\n component.options = unifiedField.options;\n if (unifiedField.minLength !== undefined)\n component.minLength = unifiedField.minLength;\n if (unifiedField.maxLength !== undefined)\n component.maxLength = unifiedField.maxLength;\n if (unifiedField.minValue !== undefined)\n component.minValue = unifiedField.minValue;\n if (unifiedField.maxValue !== undefined)\n component.maxValue = unifiedField.maxValue;\n if (unifiedField.minDate !== undefined)\n component.minDate = unifiedField.minDate;\n if (unifiedField.maxDate !== undefined)\n component.maxDate = unifiedField.maxDate;\n if (unifiedField.minTime !== undefined)\n component.minTime = unifiedField.minTime;\n if (unifiedField.maxTime !== undefined)\n component.maxTime = unifiedField.maxTime;\n if (unifiedField.pattern !== undefined)\n component.regex = unifiedField.pattern;\n if (unifiedField.name && dataModel && Object.prototype.hasOwnProperty.call(dataModel, unifiedField.name)) {\n if (component.type === 'checkbox' || component.type === 'switch') {\n component.checked = dataModel[unifiedField.name];\n }\n if (component.type === 'dataGrid') {\n component.dataSource = dataModel[unifiedField.name];\n }\n else {\n component.defaultValue = dataModel[unifiedField.name];\n }\n }\n return component;\n}\n/**\n * @private\n */\nexport function inferWidgetFromType(type, format, hasOptions) {\n if (type === 'string') {\n if (format === 'date')\n return 'date';\n if (format === 'date-time')\n return 'dateTime';\n if (format === 'time')\n return 'time';\n if (format === 'email')\n return 'email';\n if (format === 'url')\n return 'url';\n // If options are present, default to dropdown for string types\n if (hasOptions)\n return 'dropdown';\n return 'textbox';\n }\n if (type === 'number')\n return 'number';\n if (type === 'boolean')\n return 'checkbox';\n if (type === 'array') {\n // For array type with options, use multiselect\n return 'multiselect';\n }\n if (type === 'button')\n return 'button';\n if (type === 'message')\n return 'message';\n if (type === 'sign')\n return 'signature';\n if (type === 'image')\n return 'imageEditor';\n if (type === 'file')\n return 'fileUpload';\n if (type === 'color')\n return 'colorPicker';\n if (type === 'grid')\n return 'dataGrid';\n if (type === 'any')\n return 'textbox';\n return 'textbox';\n}\nexport function inferTypeFromWidget(widget) {\n switch (widget) {\n case 'number':\n case 'rangeSlider':\n case 'rating':\n return 'number';\n case 'checkbox':\n case 'switch':\n return 'boolean';\n case 'multiselect':\n case 'checkboxGroup':\n return 'array';\n case 'button':\n return 'button';\n case 'message':\n return 'message';\n case 'signature':\n return 'sign';\n case 'imageEditor':\n return 'image';\n case 'fileUpload':\n return 'file';\n case 'colorPicker':\n return 'color';\n case 'dataGrid':\n return 'grid';\n default:\n return 'string';\n }\n}\n/**\n * @private\n */\nfunction levenshteinDistance(str1, str2) {\n const len1 = str1.length;\n const len2 = str2.length;\n const matrix = [];\n // Initialize matrix\n for (let i = 0; i <= len1; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= len2; j++) {\n matrix[0][j] = j;\n }\n // Fill matrix\n for (let i = 1; i <= len1; i++) {\n for (let j = 1; j <= len2; j++) {\n const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j - 1] + cost // substitution\n );\n }\n }\n return matrix[len1][len2];\n}\n/**\n * @private\n */\nfunction calculateSimilarity(str1, str2) {\n const distance = levenshteinDistance(str1.toLowerCase(), str2.toLowerCase());\n const maxLen = Math.max(str1.length, str2.length);\n if (maxLen === 0)\n return 100;\n return Math.round(((maxLen - distance) / maxLen) * 100);\n}\n/**\n * @private\n */\nexport function matchFieldWithIDPreservation(newDataField, existingUISchema) {\n // 1. Try exact ID match first\n if (existingUISchema.properties[newDataField.id]) {\n return {\n existingId: newDataField.id,\n newDataId: newDataField.id,\n confidence: 'exact',\n method: 'id',\n similarity: 100\n };\n }\n // 2. Try fuzzy match by ID (check if existing ID starts with new ID or vice versa)\n let bestIdMatch = null;\n const idMatchKeys = Object.keys(existingUISchema.properties);\n for (const existingId of idMatchKeys) {\n const existingUIField = existingUISchema.properties[existingId];\n // Skip if this is a layout container\n if (existingUIField.widget === 'table' || existingUIField.widget === 'panel' || existingUIField.widget === 'tabs') {\n continue;\n }\n // Check if one ID is a prefix of the other (common case: radio_123 vs radio_123_456)\n const newId = newDataField.id || '';\n const isPrefix = existingId.indexOf(newId + '_') === 0 || newId.indexOf(existingId + '_') === 0;\n if (isPrefix) {\n const similarity = Math.round((Math.min(newId.length, existingId.length) / Math.max(newId.length, existingId.length)) * 100);\n if (!bestIdMatch || (bestIdMatch.similarity && similarity > bestIdMatch.similarity)) {\n bestIdMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: similarity >= 90 ? 'high' : similarity >= 70 ? 'medium' : 'low',\n method: 'id',\n similarity\n };\n }\n }\n else {\n // Try Levenshtein distance for ID similarity\n const idSimilarity = calculateSimilarity(existingId, newId);\n // Only consider as potential match if very similar (≥85%)\n if (idSimilarity >= 85) {\n if (!bestIdMatch || (bestIdMatch.similarity && idSimilarity > bestIdMatch.similarity)) {\n bestIdMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: idSimilarity >= 90 ? 'high' : 'medium',\n method: 'id',\n similarity: idSimilarity\n };\n }\n }\n }\n }\n // If we found a good ID match, use it\n if (bestIdMatch && bestIdMatch.similarity && bestIdMatch.similarity >= 70) {\n //console.log(`ID fuzzy match: \"${newDataField.id}\" → \"${bestIdMatch.existingId}\" (${bestIdMatch.similarity}% similar)`);\n return bestIdMatch;\n }\n // 3. Try fuzzy match by label\n let bestLabelMatch = null;\n const labelMatchKeys = Object.keys(existingUISchema.properties);\n for (const existingId of labelMatchKeys) {\n const existingUIField = existingUISchema.properties[existingId];\n // Skip if this is a layout container\n if (existingUIField.widget === 'table' || existingUIField.widget === 'panel' || existingUIField.widget === 'tabs') {\n continue;\n }\n // Get label from UI field or try to extract from ID\n const existingLabel = existingUIField.label || existingId;\n const newLabel = newDataField.label || newDataField.id;\n if (!existingLabel || !newLabel)\n continue;\n const similarity = calculateSimilarity(existingLabel, newLabel);\n // Update best match if this is better\n if (!bestLabelMatch || (bestLabelMatch.similarity && similarity > bestLabelMatch.similarity)) {\n bestLabelMatch = {\n existingId: existingId,\n newDataId: newDataField.id,\n confidence: similarity >= 90 ? 'high' : similarity >= 70 ? 'medium' : 'low',\n method: similarity === 100 ? 'label-exact' : 'label-fuzzy',\n similarity\n };\n }\n }\n // 4. Return best label match if similarity is good enough (≥70%)\n if (bestLabelMatch && bestLabelMatch.similarity && bestLabelMatch.similarity >= 70) {\n //console.log(`Label fuzzy match: \"${newDataField.label}\" → \"${bestLabelMatch.existingId}\" (${bestLabelMatch.similarity}% similar)`);\n return bestLabelMatch;\n }\n // 5. No match found - use new ID\n return {\n existingId: newDataField.id,\n newDataId: newDataField.id,\n confidence: 'exact',\n method: 'new',\n similarity: 100\n };\n}\n/**\n * @private\n */\nexport function mergeWithIDRemapping(newDataSchema, existingUISchema) {\n const idMap = new Map(); // newId → canonicalId\n const matchResults = [];\n // Build ID mapping table\n const newDataPropKeys = Object.keys(newDataSchema.properties);\n for (const newId of newDataPropKeys) {\n const dataField = newDataSchema.properties[newId];\n const match = matchFieldWithIDPreservation(dataField, existingUISchema);\n matchResults.push(match);\n idMap.set(newId, match.existingId || generateId(labelToFieldKey(dataField.label || '')));\n // Log remapping if IDs differ\n if (match.newDataId !== match.existingId) {\n //console.log(`ID remapped: ${match.newDataId} → ${match.existingId} (${match.method}, ${match.similarity}% similar)`);\n }\n }\n // Remap all data field IDs to canonical IDs\n const remappedDataFields = {};\n const newDataPropKeys2 = Object.keys(newDataSchema.properties);\n for (const newId of newDataPropKeys2) {\n const dataField = newDataSchema.properties[newId];\n const canonicalId = idMap.get(newId) || newId;\n remappedDataFields[canonicalId] = Object.assign({}, dataField, { id: canonicalId // Use canonical ID\n });\n }\n // Get existing field IDs from the layout\n const existingFieldIds = extractFieldIdsFromLayout(existingUISchema.layout);\n const newFieldIds = Object.keys(remappedDataFields).filter(id => !existingFieldIds.has(id));\n //console.log(`📋 Existing fields in layout: ${existingFieldIds.size}, New fields: ${newFieldIds.length}`);\n // ✅ CHECK IF SUBMIT BUTTON EXISTS: Prevent duplicate submit buttons\n const existingUIValues = Object.keys(existingUISchema.properties).map((k) => existingUISchema.properties[k]);\n const hasExistingSubmitButton = existingUIValues.some((uiField) => uiField.widget === 'button');\n // Filter out new submit buttons if one already exists\n const filteredNewFieldIds = newFieldIds.filter((id) => {\n const dataField = remappedDataFields[id];\n if ((dataField.type === 'button' && dataField.buttonType === 'submit') && hasExistingSubmitButton) {\n //console.log(`⚠️ Skipping new button \"${dataField.label}\" - submit button already exists in layout`);\n return false;\n }\n return true;\n });\n //console.log(`📋 New fields after filtering: ${filteredNewFieldIds.length}`);\n // Update layout references to use canonical IDs\n let remappedLayout = remapLayoutIds(existingUISchema.layout, idMap);\n // Create UI properties for new fields that don't have them yet\n // ✅ Ensure all existing UI properties have _configured flag (add if missing from imported JSON)\n const enhancedUIProperties = {};\n const existingUIKeys = Object.keys(existingUISchema.properties);\n for (const key of existingUIKeys) {\n const uiField = existingUISchema.properties[key];\n enhancedUIProperties[key] = Object.assign({}, uiField, { _configured: uiField._configured !== undefined ? uiField._configured : true });\n }\n if (filteredNewFieldIds.length > 0) {\n //console.log(`➕ Adding ${filteredNewFieldIds.length} new fields to layout`);\n // Check if submit button exists and is at the last position (not moved by user)\n const lastNode = remappedLayout[remappedLayout.length - 1];\n const isSubmitAtEnd = lastNode && lastNode.type === 'field' &&\n enhancedUIProperties[lastNode.propertyId] && enhancedUIProperties[lastNode.propertyId].widget === 'button';\n const newFieldNodes = [];\n // Generate default UI properties for new fields\n filteredNewFieldIds.forEach(id => {\n const dataField = remappedDataFields[id];\n const hasOptions = dataField.options !== undefined && dataField.options.length > 0;\n const widget = inferWidgetFromType(dataField.type, dataField.format, hasOptions);\n // ✅ Add default button styling\n const uiProperties = {\n widget,\n label: dataField.label,\n _configured: true\n };\n // Add primary styling for buttons\n if (widget === 'button') {\n uiProperties.isPrimary = true;\n uiProperties.name = 'defaultFormSubmit';\n uiProperties.cssClass = 'e-primary';\n }\n enhancedUIProperties[id] = uiProperties;\n newFieldNodes.push({\n type: 'field',\n propertyId: id\n });\n });\n // Apply same logic as App.tsx: insert before submit if it's at the end\n if (isSubmitAtEnd) {\n // Insert new fields BEFORE the submit button\n remappedLayout = [...remappedLayout.slice(0, -1), ...newFieldNodes, remappedLayout[remappedLayout.length - 1]];\n //console.log(`📐 Layout rebuilt: new fields inserted before submit button at end`);\n }\n else {\n // Submit moved or doesn't exist - add new fields at end\n remappedLayout = [...remappedLayout, ...newFieldNodes];\n //console.log(`📐 Layout rebuilt: new fields added at end`);\n }\n }\n // Merge to FormSchema using unified schema\n const unifiedProperties = {};\n Object.keys(remappedDataFields).forEach(fieldKey => {\n const dataField = remappedDataFields[fieldKey];\n const uiField = enhancedUIProperties[fieldKey];\n unifiedProperties[fieldKey] = Object.assign({}, dataField, uiField, { widget: (uiField && uiField.widget) || inferWidgetFromType(dataField.type, dataField.format, dataField.options !== undefined) });\n });\n const mergedSchema = mergeSchema(Object.assign({ version: newDataSchema.version, properties: unifiedProperties, layout: remappedLayout }, (newDataSchema.settings ? { settings: newDataSchema.settings } : {})));\n return mergedSchema;\n}\n/**\n * @private\n */\nfunction remapLayoutIds(layout, idMap) {\n return layout.map(node => {\n if (node.type === 'field') {\n const fieldNode = node;\n const canonicalId = idMap.get(fieldNode.propertyId) || fieldNode.propertyId;\n return Object.assign({}, fieldNode, { propertyId: canonicalId });\n }\n else if (node.type === 'table') {\n const tableNode = node;\n return Object.assign({}, tableNode, { cells: tableNode.cells.map(row => row.map(cell => (Object.assign({}, cell, { children: remapLayoutIds(cell.children, idMap) })))) });\n }\n else if (node.type === 'panel') {\n const panelNode = node;\n return Object.assign({}, panelNode, { children: remapLayoutIds(panelNode.children, idMap) });\n }\n else if (node.type === 'tabs') {\n const tabsNode = node;\n return Object.assign({}, tabsNode, { tabs: tabsNode.tabs.map(tab => (Object.assign({}, tab, { children: remapLayoutIds(tab.children, idMap) }))) });\n }\n else if (node.type === 'card') {\n const cardNode = node;\n return Object.assign({}, cardNode, { children: remapLayoutIds(cardNode.children, idMap) });\n }\n return node;\n });\n}\n/**\n * @private\n */\nexport function extractFieldIdsFromLayout(layout) {\n const fieldIds = new Set();\n const stack = [...layout];\n while (stack.length > 0) {\n const node = stack.shift();\n if (node.type === 'field') {\n fieldIds.add(node.propertyId);\n }\n else if (node.type === 'table') {\n node.cells.forEach(row => row.forEach(cell => stack.push(...cell.children)));\n }\n else if (node.type === 'panel') {\n stack.push(...node.children);\n }\n else if (node.type === 'tabs') {\n node.tabs.forEach(tab => stack.push(...tab.children));\n }\n else if (node.type === 'card') {\n stack.push(...node.children);\n }\n }\n return fieldIds;\n}\n/**\n * @private\n */\nexport function convertComponentsToDataSchema(components) {\n const properties = {};\n const seenComponentIds = new Set(); // Track component IDs to prevent duplicates\n // Flatten all components (including nested ones)\n const stack = [...components];\n while (stack.length > 0) {\n const comp = stack.shift();\n // Infer semantic type from component\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[comp.type];\n // Skip presentation-only widgets (button, message, etc.) - they have null semantic type\n if (semanticType === null) {\n // Still process nested children for layout containers\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n continue; // Skip adding to data schema\n }\n // ✅ DEDUPLICATION: Skip if we've already processed this component ID\n if (seenComponentIds.has(comp.id)) {\n //console.log(`⚠️ Skipping duplicate component: ${comp.id} (${comp.label})`);\n // Still process nested children\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n continue;\n }\n seenComponentIds.add(comp.id);\n // Generate fieldKey from label or ID\n const baseFieldKey = labelToFieldKey(comp.label || comp.id, comp.id);\n const fieldKey = makeUniqueFieldKey(baseFieldKey, new Set(Object.keys(properties)), comp.id);\n const dataField = extractDataField(comp, semanticType || { type: 'any' });\n properties[fieldKey] = dataField;\n // Process nested children\n if (comp.children && comp.children.length) {\n stack.unshift(...comp.children);\n }\n // Process tab items\n if (comp.tabItems && comp.tabItems.length) {\n for (const tab of comp.tabItems) {\n if (tab.content && tab.content.length) {\n stack.unshift(...tab.content);\n }\n }\n }\n // Process table cells\n if (comp.tableCells && comp.tableCells.length) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n // cell is FormNode[], not an object with .components\n if (cell.length) {\n stack.unshift(...cell);\n }\n }\n }\n }\n }\n return {\n version: '1.0',\n properties\n };\n}\n","/**\n * ExpressionParser - Parse and compile expressions\n *\n * Converts string expressions into safe, compiled functions\n * Supports field references, operators, functions, and conditionals\n * @private\n */\nexport class ExpressionParser {\n constructor() {\n this.supportedFunctions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS', 'INCLUDES', 'CONTAINS', 'ISNAN', 'SUPPORTEDVALUESOF', 'TOSTRING', 'DATE', 'GETTIME',\n 'EVERY', 'SOME'\n ];\n this.availableFields = new Map();\n }\n /**\n * Initialize parser with available fields for type validation\n */\n setAvailableFields(fields) {\n this.availableFields.clear();\n fields.forEach(field => {\n this.availableFields.set(field.name, field);\n });\n }\n validateFieldOperations(expression) {\n const errors = [];\n // Skip if no fields available\n if (this.availableFields.size === 0) {\n return errors;\n }\n // Invalid operators for string fields (allow only + for concatenation)\n const stringInvalidOps = ['-', '*', '/', '%', '^'];\n // All operators invalid for date fields\n const dateInvalidOps = ['-', '*', '/', '%', '^', '+'];\n // Track reported operator positions to avoid duplicates\n const reportedOperators = new Set();\n // Extract all field references and their surrounding operators\n const fieldRefPattern = /(\\{[^}]+\\})/g;\n let match;\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const fieldRef = match[0];\n const fieldName = fieldRef.slice(1, -1); // Remove { }\n const field = this.availableFields.get(fieldName);\n if (!field)\n continue; // Field not found in available fields, skip validation\n const fieldIndex = match.index;\n const fieldEndIndex = fieldIndex + fieldRef.length;\n // Get context around field reference (including spaces)\n const textBefore = expression.substring(Math.max(0, fieldIndex - 10), fieldIndex);\n const textAfter = expression.substring(fieldEndIndex, Math.min(expression.length, fieldEndIndex + 10));\n // Extract the operator if present (skip spaces)\n const operatorBefore = textBefore.replace(/\\s+$/, '').slice(-1);\n const operatorAfter = textAfter.replace(/^\\s+/, '').charAt(0);\n // Calculate actual position of operators in the original expression\n const textBeforeTrimmed = textBefore.replace(/\\s+$/, '');\n const textAfterTrimmed = textAfter.replace(/^\\s+/, '');\n const operatorBeforePos = fieldIndex - (textBefore.length - textBeforeTrimmed.length) - 1;\n const operatorAfterPos = fieldEndIndex + (textAfter.length - textAfterTrimmed.length);\n // For STRING fields: reject all operators except +\n if (field.type === 'string' && !field.format) {\n if (operatorBefore && stringInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorBefore}' operation on string field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && stringInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorAfter}' operation on string field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n }\n // For DATE fields: reject ALL operators including +\n if (field.format === 'date' || field.format === 'date-time' || field.format === 'time') {\n if (operatorBefore && dateInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorBefore}' operation on date field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && dateInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push(`Cannot perform '${operatorAfter}' operation on date field '{${fieldName}}'`);\n reportedOperators.add(key);\n }\n }\n }\n }\n return errors;\n }\n /**\n * Validate expression syntax\n */\n validate(expression) {\n const errors = [];\n if (!expression || expression.trim() === '') {\n return { valid: true, errors: [] };\n }\n // Check for unbalanced braces\n const openBraces = (expression.match(/\\{/g) || []).length;\n const closeBraces = (expression.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push('Unbalanced braces in expression');\n }\n // Check for unbalanced parentheses\n const openParens = (expression.match(/\\(/g) || []).length;\n const closeParens = (expression.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push('Unbalanced parentheses in expression');\n }\n // Check for invalid function calls\n const funcPattern = /(\\w+)\\s*\\(/g;\n let match;\n while ((match = funcPattern.exec(expression)) !== null) {\n const funcName = match[1].toUpperCase();\n // Only validate uppercase-named functions\n if (funcName === funcName.toUpperCase() && this.supportedFunctions.indexOf(funcName) === -1) {\n errors.push(`Unknown function: ${funcName}`);\n }\n }\n // Validate field operations based on field types\n const fieldOpErrors = this.validateFieldOperations(expression);\n errors.push(...fieldOpErrors);\n return {\n valid: errors.length === 0,\n errors\n };\n }\n /**\n * Compile expression to executable function\n */\n compile(expression, options = {}) {\n try {\n // Set available fields for validation if provided\n if (options.availableFields && Array.isArray(options.availableFields)) {\n this.setAvailableFields(options.availableFields);\n }\n // Validate expression before compiling\n const validation = this.validate(expression);\n if (!validation.valid) {\n return () => null;\n }\n // Replace field references with context lookups\n let compiled = expression;\n // Handle field references FIRST (this includes refs inside ${...})\n compiled = this.compileFieldReferences(compiled);\n compiled = options.isCustomValidation ? this.compileInputReferences(compiled) : compiled;\n // Handle bare function calls SECOND (e.g., SUM([...]) without braces)\n compiled = this.compileBareFunctionCalls(compiled);\n // Handle math expressions THIRD (now ${} and {} contain already-replaced refs)\n compiled = this.compileMatrixExpressions(compiled);\n return (context) => {\n try {\n // This uses Function constructor with controlled context binding\n // which is safer than eval() but still allows expressions\n // Note: compiled expression already uses context['field'] syntax\n const func = new Function('context', `\n try {\n return ${compiled};\n } catch (e) {\n return null;\n }\n `);\n return func(context);\n }\n catch (e) {\n return null;\n }\n };\n }\n catch (error) {\n return () => null;\n }\n }\n // Private helpers\n compileMatrixExpressions(expression) {\n let compiled = expression;\n const constants = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'Math'];\n const functions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n // Create fresh regex each time to avoid lastIndex issues with g flag\n const mathExprPattern = /\\$?\\{([^}]+)\\}/g;\n // Process ${...} and {...} blocks: replace bare identifiers with context lookups\n compiled = compiled.replace(mathExprPattern, (_match, content) => {\n let transformed = content;\n // STEP 1: Handle function calls first\n // Match function names followed by ( and prefix with context.\n // Use negative lookbehind to avoid double-replacing (e.g., context.SUM)\n functions.forEach(fn => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const funcCallRegex = new RegExp(`(?<!context\\\\.)\\\\b${fn}\\\\b(?=\\\\s*\\\\()`, 'g');\n transformed = transformed.replace(funcCallRegex, `context.${fn}`);\n });\n constants.forEach(constant => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const constantRegex = new RegExp(`\\\\b${constant}\\\\b`, 'g');\n transformed = transformed.replace(constantRegex, `context.${constant}`);\n });\n // Return as parenthesized expression\n return `(${transformed})`;\n });\n return compiled;\n }\n compileBareFunctionCalls(expression) {\n let compiled = expression;\n const functions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n // Handle bare function calls like SUM([...]) that are not inside ${...} or {...}\n // Use negative lookbehind to avoid matching if already preceded by context.\n functions.forEach(fn => {\n // eslint-disable-next-line security/detect-non-literal-regexp\n const funcCallRegex = new RegExp(`(?<!context\\\\.)\\\\b${fn}\\\\b(?=\\\\s*\\\\()`, 'g');\n compiled = compiled.replace(funcCallRegex, `context.${fn}`);\n });\n return compiled;\n }\n compileFieldReferences(expression) {\n let compiled = expression;\n // Create fresh regex each time to avoid lastIndex issues with g flag\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n // Replace {fieldName} with context['fieldName'] or field access\n compiled = compiled.replace(fieldRefPattern, (match, ref) => {\n // Handle escaped braces\n if (ref.startsWith('\\\\') && ref.endsWith('\\\\')) {\n return match; // Keep as is\n }\n // Handle nested paths like {customer.name}\n return `context['${ref.replace(/\\./g, '\\'].[')}']`;\n });\n return compiled;\n }\n compileInputReferences(expression) {\n const compiled = expression;\n // First, protect string literals to avoid replacing 'input' inside strings\n const strings = [];\n let stringProtected = compiled;\n // eslint-disable-next-line security/detect-unsafe-regex\n stringProtected = stringProtected.replace(/(['\"`])(?:(?=(\\\\?))\\2.)*?\\1/g, (match) => {\n strings.push(match);\n return `__STRING_${strings.length - 1}__`;\n });\n // Case 1: Replace input.property with context['input'].property\n const inputPropertyPattern = /(?<!context\\[')\\binput\\./g;\n stringProtected = stringProtected.replace(inputPropertyPattern, 'context[\\'input\\'].');\n // Case 2: Replace bare 'input' with context['input']\n // Use negative lookbehind to avoid replacing if already preceded by context.'\n const inputPattern = /(?<!context\\[')\\binput\\b(?!\\s*[(\\.])/g;\n stringProtected = stringProtected.replace(inputPattern, 'context[\\'input\\']');\n // Restore string literals\n let result = stringProtected;\n strings.forEach((str, idx) => {\n result = result.replace(`__STRING_${idx}__`, str);\n });\n return result;\n }\n}\n","/**\n * DependencyTracker - Extract and track field dependencies\n *\n * Analyzes expressions to find field references and build dependency graphs\n * Detects circular dependencies and calculates evaluation order\n * @private\n */\nexport class DependencyTracker {\n constructor() {\n this.escapedBracePattern = /\\\\{.*?\\\\}/g;\n }\n /**\n * Extract field names referenced in expression\n */\n extractFieldReferences(expression) {\n if (!expression)\n return [];\n const refs = new Set();\n let match;\n // Remove escaped braces first\n const cleanExpression = expression.replace(this.escapedBracePattern, '');\n // Extract field references from {field} syntax\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n while ((match = fieldRefPattern.exec(cleanExpression)) !== null) {\n const ref = match[1].trim();\n // Skip if it's a function call or operator\n if (!this.isFunctionCall(ref) && !this.isOperator(ref)) {\n // Extract field name from nested paths\n const fieldName = ref.split(/[.\\[\\]]/)[0].trim();\n if (fieldName && !this.isKeyword(fieldName)) {\n refs.add(fieldName);\n }\n }\n }\n // Extract identifiers from ${...} math expressions\n const mathExprPattern = /\\$\\{([^}]+)\\}/g;\n while ((match = mathExprPattern.exec(cleanExpression)) !== null) {\n const mathExpr = match[1];\n // Extract all identifiers from the math expression\n // Match word boundaries followed by identifier characters\n // But skip if followed by ( or . (those are function calls or property access)\n const identPattern = /\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\s*[(\\.])/g;\n let idMatch;\n while ((idMatch = identPattern.exec(mathExpr)) !== null) {\n const identifier = idMatch[1];\n // Skip keywords and constants\n if (!this.isKeyword(identifier) && identifier !== 'Math') {\n refs.add(identifier);\n }\n }\n }\n return Array.from(refs);\n }\n /**\n * Build dependency graph from multiple expressions\n */\n buildGraph(expressions) {\n const graph = {};\n const keys = Object.keys(expressions);\n for (const fieldName of keys) {\n const deps = this.extractFieldReferences(expressions[fieldName]);\n graph[fieldName] = deps;\n }\n return graph;\n }\n /**\n * Detect circular dependencies using DFS\n */\n detectCircularDependencies(graph) {\n const visited = new Set();\n const recursionStack = new Set();\n const cycles = [];\n const visit = (node, path) => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n visit(dep, [...path]);\n }\n else if (recursionStack.has(dep)) {\n const cycleStart = path.indexOf(dep);\n cycles.push([...path.slice(cycleStart), dep]);\n }\n }\n recursionStack.delete(node);\n };\n for (const node of Object.keys(graph)) {\n if (!visited.has(node)) {\n visit(node, []);\n }\n }\n return cycles;\n }\n /**\n * Get topological sort order for evaluation\n */\n getTopologicalOrder(graph) {\n const visited = new Set();\n const order = [];\n const visit = (node) => {\n if (visited.has(node))\n return;\n visited.add(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (graph[dep]) {\n visit(dep);\n }\n }\n order.push(node);\n };\n for (const node of Object.keys(graph)) {\n visit(node);\n }\n return order;\n }\n // Private helpers\n isFunctionCall(ref) {\n return /^\\w+\\s*\\(/.test(ref);\n }\n isOperator(ref) {\n return /^[+\\-*/()=!<>&|]/.test(ref);\n }\n isKeyword(name) {\n const keywords = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'and', 'or', 'in'];\n return keywords.indexOf(name.toUpperCase()) !== -1;\n }\n}\n","import { ExpressionParser } from './expression-parser';\nimport { DependencyTracker } from './dependency-tracker';\nimport { Internationalization } from '@syncfusion/ej2-base';\n/**\n * ExpressionEngine - Core evaluation engine\n *\n * Safely evaluates user-defined expressions against form state\n * Supports field references, math operations, functions, and conditionals\n * @private\n */\nexport class ExpressionEngine {\n constructor() {\n this.evaluationCache = new Map();\n this.compiledFunctions = new Map();\n this.parser = new ExpressionParser();\n this.dependencyTracker = new DependencyTracker();\n }\n /**\n * Evaluate expression against form values\n */\n evaluate(expression, formValues, options = {}, isCustomValidation = false) {\n try {\n if (!expression || expression.trim() === '') {\n return null;\n }\n const { timeout = 5000, maxDepth = 10, locale = 'en-US', throwOnError = false } = options;\n // Check cache\n const cacheKey = this.getCacheKey(expression, formValues);\n if (!isCustomValidation && this.evaluationCache.has(cacheKey)) {\n return this.evaluationCache.get(cacheKey);\n }\n // Get or compile function\n let fn = this.compiledFunctions.get(expression);\n if (!fn) {\n fn = this.parser.compile(expression, {\n timeout,\n maxDepth,\n locale,\n isCustomValidation\n });\n this.compiledFunctions.set(expression, fn);\n }\n // Execute with context\n const context = this.buildContext(formValues);\n const startTime = Date.now();\n const result = fn(context);\n // Validate timeout\n if (Date.now() - startTime > timeout) {\n const error = new Error(`Expression evaluation exceeded timeout of ${timeout}ms`);\n if (throwOnError)\n throw error;\n return null;\n }\n // Cache result\n this.evaluationCache.set(cacheKey, result);\n return result;\n }\n catch (error) {\n if (options.throwOnError) {\n throw error;\n }\n return null;\n }\n }\n /**\n * Extract field names referenced in expression\n */\n extractDependencies(expression) {\n if (!expression)\n return [];\n return this.dependencyTracker.extractFieldReferences(expression);\n }\n /**\n * Build dependency graph for all expressions\n */\n buildDependencyGraph(components) {\n const graph = {};\n components.forEach(comp => {\n if (comp.expressionValue) {\n const deps = this.extractDependencies(comp.expressionValue);\n graph[comp.name] = deps;\n }\n });\n return graph;\n }\n /**\n * Detect circular dependencies\n */\n detectCircularDependencies(graph) {\n const visited = new Set();\n const recursionStack = new Set();\n const cycles = [];\n const visit = (node, path) => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n visit(dep, [...path]);\n }\n else if (recursionStack.has(dep)) {\n const cycleStart = path.indexOf(dep);\n cycles.push([...path.slice(cycleStart), dep]);\n }\n }\n recursionStack.delete(node);\n };\n for (const node of Object.keys(graph)) {\n if (!visited.has(node)) {\n visit(node, []);\n }\n }\n return cycles;\n }\n /**\n * Get topological order for evaluation\n */\n getTopologicalOrder(graph) {\n const visited = new Set();\n const order = [];\n const visit = (node) => {\n if (visited.has(node))\n return;\n visited.add(node);\n const deps = graph[node] || [];\n for (const dep of deps) {\n visit(dep);\n }\n order.push(node);\n };\n for (const node of Object.keys(graph)) {\n visit(node);\n }\n return order;\n }\n /**\n * Clear internal caches\n */\n clearCache() {\n this.evaluationCache.clear();\n this.compiledFunctions.clear();\n }\n // Private helper methods\n getCacheKey(expression, formValues) {\n // Simple cache key (in production, use better hashing)\n return `${expression}:${JSON.stringify(formValues)}`;\n }\n buildContext(formValues) {\n const intl = new Internationalization();\n const dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy',\n type: 'date'\n });\n return Object.assign({}, formValues, { \n // Constants\n PI: Math.PI, TRUE: true, FALSE: false, NULL: null, UNDEFINED: undefined, Math: Math, \n // Aggregate Functions\n SUM: (values) => Array.isArray(values) ? values.reduce((a, b) => Number(a) + Number(b), 0) : 0, AVG: (values) => {\n if (!Array.isArray(values) || values.length === 0)\n return 0;\n const sum = values.reduce((a, b) => Number(a) + Number(b), 0);\n return sum / values.length;\n }, MIN: (values) => Array.isArray(values) && values.length > 0 ? Math.min(...values.map(Number)) : 0, MAX: (values) => Array.isArray(values) && values.length > 0 ? Math.max(...values.map(Number)) : 0, COUNT: (values) => Array.isArray(values) ? values.length : 0, \n // Math Functions\n ROUND: (value, decimals = 0) => Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals), FLOOR: Math.floor, CEIL: Math.ceil, ABS: Math.abs, SQRT: Math.sqrt, \n // String Functions\n UPPER: (text) => String(text).toUpperCase(), LOWER: (text) => String(text).toLowerCase(), CONCAT: (...strings) => strings.map(String).join(''), LENGTH: (text) => String(text).length, TRIM: (text) => String(text).trim(), SUBSTRING: (text, start, length) => length !== undefined\n ? String(text).substr(start, length)\n : String(text).substr(start), \n // Date Functions\n TODAY: () => {\n const value = dFormatter(new Date());\n return value;\n }, AGE: (birthDate) => {\n const birth = typeof birthDate === 'string' ? new Date(birthDate) : birthDate;\n const today = new Date();\n let age = today.getFullYear() - birth.getFullYear();\n const monthDiff = today.getMonth() - birth.getMonth();\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {\n age--;\n }\n return age;\n }, DATEFORMAT: (date, format) => {\n const d = typeof date === 'string' ? new Date(date) : date;\n const formatter = intl.getDateFormat({\n format: format,\n type: 'date'\n });\n // Simple date format implementation\n return formatter(d);\n }, DATEDIFF: (date1, date2) => {\n const d1 = typeof date1 === 'string' ? new Date(date1) : date1;\n const d2 = typeof date2 === 'string' ? new Date(date2) : date2;\n return Math.floor((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));\n }, \n // Add days to a date (for date arithmetic like {date} + 5)\n ADDDAYS: (date, days) => {\n const d = typeof date === 'string' ? new Date(date) : new Date(date);\n d.setDate(d.getDate() + Number(days));\n return dFormatter(d);\n }, \n // Add days to a date (for date arithmetic like {date} + 5)\n SUBDAYS: (date, days) => {\n const d = typeof date === 'string' ? new Date(date) : new Date(date);\n d.setDate(d.getDate() - Number(days));\n return dFormatter(d);\n } });\n }\n}\n/**\n * ExpressionValidator - Validates expressions before runtime\n *\n * Checks syntax, validates field references, and detects circular dependencies\n * @private\n */\nexport class ExpressionValidator {\n constructor() {\n this.supportedFunctions = [\n 'SUM', 'AVG', 'MIN', 'MAX', 'COUNT',\n 'ROUND', 'FLOOR', 'CEIL', 'ABS', 'SQRT',\n 'UPPER', 'LOWER', 'CONCAT', 'LENGTH', 'TRIM', 'SUBSTRING',\n 'TODAY', 'AGE', 'DATEFORMAT', 'DATEDIFF', 'ADDDAYS', 'SUBDAYS'\n ];\n this.keywords = ['PI', 'TRUE', 'FALSE', 'NULL', 'UNDEFINED', 'and', 'or', 'in'];\n }\n /**\n * Validate expression against available fields\n */\n validate(expression, availableFields) {\n const errors = [];\n if (!expression || expression.trim() === '') {\n return errors; // Empty expression is valid\n }\n // Check syntax\n const syntaxErrors = this.validateSyntax(expression);\n errors.push(...syntaxErrors);\n // Check field references\n const fieldErrors = this.validateFieldReferences(expression, availableFields);\n errors.push(...fieldErrors);\n // Check function calls\n const funcErrors = this.validateFunctionCalls(expression);\n errors.push(...funcErrors);\n // Check field operations based on types\n const opErrors = this.validateFieldOperations(expression, availableFields);\n errors.push(...opErrors);\n return errors;\n }\n /**\n * Validate field operations - check for invalid operators on string/date types\n */\n validateFieldOperations(expression, availableFields) {\n const errors = [];\n // Skip if not field objects with type info\n if (!Array.isArray(availableFields) || availableFields.length === 0) {\n return errors;\n }\n const firstField = availableFields[0];\n if (typeof firstField === 'string') {\n return errors; // No type information available\n }\n // Build field map from objects\n const fieldMap = new Map();\n availableFields.forEach(field => {\n if (field && typeof field === 'object' && field.name) {\n fieldMap.set(field.name, field);\n }\n });\n if (fieldMap.size === 0)\n return errors;\n // Track reported operator positions to avoid duplicates\n const reportedOperators = new Set();\n // Check each field reference for invalid operations\n const fieldRefPattern = /(\\{[^}]+\\})/g;\n let match;\n // Invalid operators for string fields (allow only + for concatenation)\n const stringInvalidOps = ['-', '*', '/', '%', '^'];\n // Operators invalid for date fields (allow + for date arithmetic with numbers)\n const dateInvalidOps = ['-', '*', '/', '%', '^', '+'];\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const fieldRef = match[0];\n const fieldName = fieldRef.slice(1, -1); // Remove { }\n const field = fieldMap.get(fieldName);\n if (!field)\n continue;\n const fieldIndex = match.index;\n const fieldEndIndex = fieldIndex + fieldRef.length;\n // Get context around field reference (including spaces)\n const textBefore = expression.substring(Math.max(0, fieldIndex - 10), fieldIndex);\n const textAfter = expression.substring(fieldEndIndex, Math.min(expression.length, fieldEndIndex + 10));\n // Extract the operator if present (skip spaces)\n const operatorBefore = textBefore.replace(/\\s+$/, '').slice(-1);\n const operatorAfter = textAfter.replace(/^\\s+/, '').charAt(0);\n // Calculate actual position of operators in the original expression\n const textBeforeTrimmed = textBefore.replace(/\\s+$/, '');\n const textAfterTrimmed = textAfter.replace(/^\\s+/, '');\n const operatorBeforePos = fieldIndex - (textBefore.length - textBeforeTrimmed.length) - 1;\n const operatorAfterPos = fieldEndIndex + (textAfter.length - textAfterTrimmed.length);\n // For STRING fields (without format)\n if (field.type === 'string' && !field.format) {\n if (operatorBefore && stringInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorBefore}' operation on string field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && stringInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorAfter}' operation on string field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n }\n // For DATE fields - allow + with numbers, reject other operators\n if (field.format === 'date' || field.format === 'date-time' || field.format === 'time') {\n if (operatorBefore && dateInvalidOps.indexOf(operatorBefore) !== -1) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorBefore}' operation on date field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n if (operatorAfter && dateInvalidOps.indexOf(operatorAfter) !== -1) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Cannot perform '${operatorAfter}' operation on date field '{${fieldName}}'`\n });\n reportedOperators.add(key);\n }\n }\n // Allow + only when combined with numbers or number fields\n if (operatorAfter === '+') {\n const operandAfter = textAfter.replace(/^\\s+/, '').substring(1).trim();\n const isNumberField = /^\\{[^}]+\\}/.test(operandAfter) && fieldMap.get(operandAfter.slice(1, -1)) && fieldMap.get(operandAfter.slice(1, -1)).type === 'number';\n const isNumberLiteral = /^\\d+/.test(operandAfter);\n if (!isNumberField && !isNumberLiteral) {\n const key = `${operatorAfterPos}:${operatorAfter}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Date field '{${fieldName}}' can only be used with +number or +{numberField}, not '${operatorAfter}${operandAfter.substring(0, 10)}'`\n });\n reportedOperators.add(key);\n }\n }\n }\n if (operatorBefore === '+') {\n const trimmedBefore = textBefore.replace(/\\s+$/, '');\n const operandBefore = trimmedBefore.substring(0, trimmedBefore.length - 1).trim();\n const isNumberField = /\\{[^}]+\\}$/.test(operandBefore) && fieldMap.get(operandBefore.slice(operandBefore.lastIndexOf('{') + 1, -1)) && fieldMap.get(operandBefore.slice(operandBefore.lastIndexOf('{') + 1, -1)).type === 'number';\n const isNumberLiteral = /\\d+$/.test(operandBefore);\n if (!isNumberField && !isNumberLiteral) {\n const key = `${operatorBeforePos}:${operatorBefore}`;\n if (!reportedOperators.has(key)) {\n errors.push({\n type: 'InvalidOperation',\n message: `Date field '{${fieldName}}' can only be used with +number or +{numberField}`\n });\n reportedOperators.add(key);\n }\n }\n }\n }\n }\n return errors;\n }\n validateSyntax(expression) {\n const errors = [];\n // Check balanced braces\n const openBraces = (expression.match(/\\{/g) || []).length;\n const closeBraces = (expression.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced braces in expression'\n });\n }\n // Check balanced parentheses\n const openParens = (expression.match(/\\(/g) || []).length;\n const closeParens = (expression.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced parentheses in expression'\n });\n }\n // Check balanced $ brackets\n const openDollar = (expression.match(/\\$\\{/g) || []).length;\n const closeDollar = (expression.match(/\\}/g) || []).length;\n if (openDollar > closeDollar) {\n errors.push({\n type: 'SyntaxError',\n message: 'Unbalanced ${ } in expression'\n });\n }\n return errors;\n }\n /**\n * @private\n */\n validateFieldReferences(expression, availableFields) {\n const errors = [];\n // Skip field validation if availableFields is not properly populated\n // This allows expressions to work at runtime even if we can't validate field names at editor time\n if (!availableFields || availableFields.length === 0) {\n return errors;\n }\n const fieldRefPattern = /\\{([^{}]+)\\}/g;\n let match;\n // Handle both string[] and AvailableField[] formats\n let availableFieldsSet;\n if (typeof availableFields[0] === 'string') {\n availableFieldsSet = new Set(availableFields);\n }\n else {\n availableFieldsSet = new Set(availableFields.map(f => f.name));\n }\n while ((match = fieldRefPattern.exec(expression)) !== null) {\n const ref = match[1].trim();\n // Skip if it's a function call\n if (this.isFunctionCall(ref))\n continue;\n // Skip if it's a math expression (contains operators or numbers)\n // This distinguishes between {fieldName} and ${5 + 3}\n if (this.isMathExpression(ref))\n continue;\n // Extract field name from nested paths (e.g., \"customer.name\" -> \"customer\")\n const fieldName = ref.split(/[.\\[\\]]/)[0].trim();\n // Check if field exists\n if (fieldName && this.keywords.indexOf(fieldName.toUpperCase()) === -1) {\n if (!availableFieldsSet.has(fieldName)) {\n errors.push({\n type: 'UndefinedField',\n message: `Field '${fieldName}' is not defined in the form`,\n field: fieldName\n });\n }\n }\n }\n return errors;\n }\n validateFunctionCalls(expression) {\n const errors = [];\n const funcPattern = /(\\w+)\\s*\\(/g;\n let match;\n while ((match = funcPattern.exec(expression)) !== null) {\n const funcName = match[1];\n // Only validate uppercase functions (user-defined lowercase functions might be allowed)\n if (funcName === funcName.toUpperCase() && this.supportedFunctions.indexOf(funcName) === -1) {\n errors.push({\n type: 'InvalidFunction',\n message: `Unknown function: '${funcName}'. Supported functions: ${this.supportedFunctions.join(', ')}`\n });\n }\n }\n return errors;\n }\n isFunctionCall(ref) {\n return /^\\w+\\s*\\(/.test(ref);\n }\n isMathExpression(ref) {\n // Check if the expression contains math operators, numbers, or other non-field-name patterns\n // Math expressions like: \"5 + 3\", \"qty * 2\", \"age > 18\", \"sum([1,2,3])\"\n // should be skipped, while field references like \"fieldName\" or \"customer.name\" should be validated\n const mathOperatorPattern = /[\\+\\-\\*\\/\\%\\=\\<\\>\\!\\&\\|\\^\\~\\s\\d]/;\n return mathOperatorPattern.test(ref);\n }\n}\n","import { Internationalization } from '@syncfusion/ej2-base';\nimport { DataManager, Query, UrlAdaptor, WebApiAdaptor, ODataV4Adaptor } from '@syncfusion/ej2-data';\nimport { ConditionalRuleEngine } from './conditional-rule-engine';\nimport { UI_TYPE_TO_SEMANTIC_TYPE } from './json-converter';\nimport { ExpressionEngine } from './expressions/expression-engine';\n/**\n * @private\n */\nexport const VALIDATION_REGEX = {\n EMAIL: /^(?!.*\\.\\.)[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/,\n // eslint-disable-next-line security/detect-unsafe-regex\n URL: /^(https?:\\/\\/)?([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}(\\/[^\\s]*)?$/,\n DATE_ISO: /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/,\n DIGITS: /^[0-9]*$/,\n PHONE: /^[+]?[0-9]{9,13}$/,\n CREDIT_CARD: /^\\d{13,16}$/\n};\n/**\n * Maps button style to Syncfusion CSS classes\n * @param style - Button style ('primary' | 'flat' | 'information' | 'error' | 'success' | 'warning')\n * @returns Space-separated CSS class string\n * @private\n */\nexport const mapButtonStyleToClass = (style) => {\n const styleMap = {\n 'primary': 'e-primary',\n 'flat': 'e-flat',\n 'information': 'e-info',\n 'error': 'e-danger',\n 'success': 'e-success',\n 'warning': 'e-warning'\n };\n return styleMap[style || 'primary'] || 'e-primary';\n};\n/**\n * Resolves button type to valid HTML button type\n * @param type - Button type ('submit' | 'reset' | 'button')\n * @returns Resolved button type\n * @private\n */\nexport const resolveButtonType = (type) => {\n return (type === 'submit' || type === 'reset') ? type : 'button';\n};\n/**\n * Maps button position to CSS justifyContent value\n * @param position - Button position ('Left' | 'Right' | 'Center')\n * @returns CSS justifyContent value\n * @private\n */\nexport const mapPositionToJustifyContent = (position) => {\n const positionMap = {\n 'Left': 'flex-start',\n 'Right': 'flex-end',\n 'Center': 'center'\n };\n return positionMap[position || 'Left'] || 'flex-start';\n};\n/**\n * @private\n */\nexport function splitWidths(input) {\n const result = input.map(v => (v === null ? NaN : Number(v)));\n const sumKnown = result.reduce((s, v) => s + (isNaN(v) ? 0 : v), 0);\n // If knowns already >= 100, unknowns become 0\n const remainingInt = Math.max(0, Math.round(100 - sumKnown));\n const unknownIndexes = result.map((v, i) => (isNaN(v) ? i : -1)).filter(i => i >= 0);\n const k = unknownIndexes.length;\n if (k === 0) {\n // nothing to split; just clamp/round knowns so they sum to 100 if you prefer, but return as-is\n return result.map(v => Math.round(v));\n }\n // Distribute integer percentage points to avoid fractional rounding problems\n const base = Math.floor(remainingInt / k);\n let remainder = remainingInt - base * k;\n // Fill unknowns with base + 1 for first `remainder` items\n unknownIndexes.forEach((idx) => {\n const add = remainder > 0 ? base + 1 : base;\n result[idx] = add;\n remainder = Math.max(0, remainder - 1);\n });\n // Convert any NaN (shouldn't remain) to 0 and round knowns\n return result.map(v => (isNaN(v) ? 0 : Math.round(v)));\n}\n/**\n * @private\n */\nexport function extractAllDescendantIds(component) {\n const childIds = [];\n function traverse(comps) {\n for (const comp of comps) {\n childIds.push(comp.id);\n // Recursively traverse nested structures\n if (comp.children && Array.isArray(comp.children)) {\n traverse(comp.children);\n }\n // Handle table cells\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n comp.tableCells.forEach((row) => {\n if (Array.isArray(row)) {\n row.forEach((cell) => {\n if (Array.isArray(cell)) {\n traverse(cell);\n }\n });\n }\n });\n }\n // Handle tab items\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n comp.tabItems.forEach((tabItem) => {\n if (tabItem.content && Array.isArray(tabItem.content)) {\n traverse(tabItem.content);\n }\n });\n }\n }\n }\n // Start with direct children\n if (component.children && Array.isArray(component.children)) {\n traverse(component.children);\n }\n // Handle table cells\n if (component.tableCells && Array.isArray(component.tableCells)) {\n component.tableCells.forEach((row) => {\n if (Array.isArray(row)) {\n row.forEach((cell) => {\n if (Array.isArray(cell)) {\n traverse(cell);\n }\n });\n }\n });\n }\n // Handle tab items\n if (component.tabItems && Array.isArray(component.tabItems)) {\n component.tabItems.forEach((tabItem) => {\n if (tabItem.content && Array.isArray(tabItem.content)) {\n traverse(tabItem.content);\n }\n });\n }\n return childIds;\n}\n/**\n * @private\n */\nexport function formatDateValues(component, value) {\n const intl = new Internationalization();\n let dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy',\n type: 'date'\n });\n if (component.type === 'date') {\n value = dFormatter(new Date(value));\n }\n if (component.type === 'time') {\n dFormatter = intl.getDateFormat({\n format: 'hh:mm a',\n type: 'time'\n });\n value = dFormatter(new Date(value));\n }\n if (component.type === 'dateTime') {\n dFormatter = intl.getDateFormat({\n format: 'MM/dd/yyyy hh:mm a',\n type: 'dateTime'\n });\n value = dFormatter(new Date(value));\n }\n if (component.type === 'dateRange' && Array.isArray(value)) {\n value = value.map(date => date ? dFormatter(new Date(date)) : null);\n }\n return value;\n}\n/**\n * @private\n */\nexport const getComponentFromSchema = (id, formSchema) => {\n if (!id || !formSchema)\n return null;\n const findInComponents = (components) => {\n for (const comp of components) {\n if (comp.id === id || comp.name === id)\n return comp;\n if (comp.children) {\n const found = findInComponents(comp.children);\n if (found)\n return found;\n }\n if (comp.tableCells) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n const found = findInComponents(cell);\n if (found)\n return found;\n }\n }\n }\n if (comp.tabItems) {\n for (const tab of comp.tabItems) {\n if (tab.content) {\n const found = findInComponents(tab.content);\n if (found)\n return found;\n }\n }\n }\n }\n return null;\n };\n return findInComponents(formSchema.components || []);\n};\n/**\n * Helper function to get the appropriate adaptor instance\n * @param adaptorType - Type of adaptor ('WebApiAdaptor' | 'UrlAdaptor' | 'ODataV4Adaptor')\n * @returns Adaptor instance\n * @private\n */\nexport const getAdaptorInstance = (adaptorType) => {\n switch (adaptorType) {\n case 'WebApiAdaptor':\n return new WebApiAdaptor();\n case 'ODataV4Adaptor':\n return new ODataV4Adaptor();\n case 'UrlAdaptor':\n default:\n return new UrlAdaptor();\n }\n};\n/**\n * Extracts data from a nested path using dot notation and array indices\n * @param data - The data object or array\n * @param path - Path to the data (e.g., 'results.items', '[0].data', 'response[0].values')\n * @returns Extracted data or empty array\n * @private\n */\nexport const extractDataFromPath = (data, path) => {\n if (!path || data === null || data === undefined)\n return data;\n // Split by dots but preserve array indices\n const parts = path.split(/\\.(?![^\\[]*\\])/); // Split by dots not inside brackets\n let current = data;\n for (const part of parts) {\n if (current === null || current === undefined) {\n return null;\n }\n // Handle array index notation like [0] or results[0]\n const arrayMatch = part.match(/^(\\w*)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const propName = arrayMatch[1];\n const index = parseInt(arrayMatch[2]);\n // If propName is empty, current should be an array\n if (!propName) {\n current = current[index];\n }\n else {\n current = current[propName] && current[propName][index];\n }\n }\n else {\n // Regular property access\n current = current[part];\n }\n }\n return current;\n};\n/**\n * Build name-indexed context from ID-indexed formValues\n * Simple traversal to map field names to their values\n * @private\n */\nconst buildNameContext = (formValues, components) => {\n const context = {};\n const traverse = (comps) => {\n comps.forEach(comp => {\n // Map name -> value from formValues (keyed by ID)\n if (comp.name && comp.id in formValues) {\n context[comp.name] = formValues[comp.id];\n }\n if (comp.children)\n traverse(comp.children);\n if (comp.tabItems)\n comp.tabItems.forEach(t => t.content && traverse(t.content));\n if (comp.tableCells)\n comp.tableCells.forEach(row => row.forEach(cell => traverse(cell)));\n });\n };\n traverse(components);\n return context;\n};\n/**\n * @private\n */\nconst sharedFieldBindingEngine = new ExpressionEngine();\n/**\n * @private\n */\nexport const resolveFieldBinding = (value, formValues, components) => {\n if (typeof value !== 'string' || !/{[^}]+}/.test(value)) {\n return value; // No field references\n }\n // Build context: map field names to values from ID-keyed formValues\n const context = components\n ? buildNameContext(formValues, components)\n : formValues;\n try {\n const result = sharedFieldBindingEngine.evaluate(value, context);\n return result !== null && result !== undefined ? String(result) : '';\n }\n catch (err) {\n return value; // Return original on error\n }\n};\n/**\n * @private\n * (useFetchOptions is NOT located here — see ./option-fetcher.ts)\n * (useFetchLookupOptions is NOT located here — see ./option-fetcher.ts)\n */\nexport const resolveOptions = (options, fetchedOptions, fetchedLookupDataSource) => {\n // If lookup type with fetched data, return fetched lookup records\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'lookup' && fetchedLookupDataSource) {\n return fetchedLookupDataSource && fetchedLookupDataSource.length > 0 ? fetchedLookupDataSource : [];\n }\n // If URL type with fetched data, return fetched options\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'url') {\n return fetchedOptions.length > 0 ? fetchedOptions : [];\n }\n // If already an array, return as-is\n if (Array.isArray(options)) {\n return options;\n }\n // If it's raw data type\n if (options && typeof options === 'object' && !Array.isArray(options) && options.type === 'raw') {\n return Array.isArray(options.data) ? options.data : [];\n }\n return [];\n};\n/**\n * @private\n */\nexport const collectAvailableFieldNames = (components) => {\n const fieldNames = [];\n const traverse = (comps) => {\n comps.forEach(comp => {\n // Only add fields that have a name and aren't layout components\n if (comp.name && ['panel', 'table', 'tabs', 'card', 'message', 'button', 'splitButton', 'staticHtml'].indexOf(comp.type) === -1) {\n // Get semantic type mapping for this component\n const semanticType = UI_TYPE_TO_SEMANTIC_TYPE[comp.type];\n if (semanticType) {\n fieldNames.push(Object.assign({ name: comp.name, type: semanticType.type }, (semanticType.format && { format: semanticType.format })));\n }\n }\n // Traverse nested components\n if (comp.children)\n traverse(comp.children);\n if (comp.tabItems) {\n comp.tabItems.forEach(tab => {\n if (tab.content)\n traverse(tab.content);\n });\n }\n if (comp.tableCells) {\n comp.tableCells.forEach(row => {\n row.forEach(cell => traverse(cell));\n });\n }\n });\n };\n traverse(components);\n return fieldNames;\n};\n/**\n * Resolve conditional data for a DataGrid component\n * Evaluates all conditionalData rules and applies the first matching one\n * Returns both dataSource and custom columns if defined\n *\n * @param conditions - Component conditions including conditional data rules\n * @param formValues - Current form field values\n * @returns Object with dataSource and columns, or undefined if no condition matches\n * @private\n */\nexport const resolveConditionalData = (conditions, formValues) => {\n if (!conditions || !conditions.conditionalData || !Array.isArray(conditions.conditionalData)) {\n return undefined;\n }\n // Evaluate each conditional data rule in order\n for (const rule of conditions.conditionalData) {\n if (ConditionalRuleEngine.evaluateCondition(rule.condition, formValues)) {\n // Condition is met - resolve and return both data source and columns\n return {\n dataSource: rule.dataSource,\n columns: rule.columns && rule.columns.length > 0 ? rule.columns : undefined\n };\n }\n }\n return undefined;\n};\n/**\n * Reads the current builder mode from the URL `mode` query parameter.\n * @returns 'Simple' | 'Developer' | undefined if not present or invalid\n * @private\n */\nexport const getCurrentMode = () => {\n if (typeof window === 'undefined')\n return undefined;\n const urlMode = new URLSearchParams(window.location.search).get('mode');\n if (urlMode === 'developer')\n return 'Developer';\n if (urlMode === 'simple')\n return 'Simple';\n return undefined;\n};\n/**\n * Navigates to a URL while preserving the current `mode` query parameter.\n * - If `mode` is already in target, it is kept as-is.\n * - If `mode` is present in the current URL, it is appended to the target.\n *\n * @param target - Target path (may include existing query params), e.g. '/?sample=builder&formId=123'\n * @private\n */\nexport const navigateTo = (target) => {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n const url = new URL('/demo' + target, window.location.origin);\n window.location.href = url.toString();\n }\n catch (_a) {\n window.location.href = '/demo' + target;\n }\n};\n/**\n * @private\n */\nexport function sanitizeId(rawId, fallback) {\n const MAX_ID_LEN = 100;\n const safeFallback = typeof fallback === 'string' && fallback ? fallback : `field_${Date.now()}_${Math.floor(Math.random() * 1000)}`;\n if (rawId === null || rawId === undefined)\n return safeFallback;\n let id = String(rawId).trim();\n // Reject obvious prototype/constructor keys outright\n if (!id || id === '__proto__' || id === 'prototype' || id === 'constructor') {\n return safeFallback;\n }\n // Replace any character that is not alnum, dash, or underscore with underscore.\n id = id.replace(/[^A-Za-z0-9_-]/g, '_');\n // Ensure it starts with a letter or underscore (prepend if necessary).\n if (!/^[A-Za-z_]/.test(id)) {\n id = `f_${id}`;\n }\n // Truncate to a reasonable max length\n if (id.length > MAX_ID_LEN) {\n id = id.slice(0, MAX_ID_LEN);\n }\n // Final guard: avoid reserved names\n if (id === '__proto__' || id === 'prototype' || id === 'constructor') {\n return safeFallback;\n }\n return id;\n}\n// Exported EJ2 data symbols re-exported for downstream consumers (form-renderer option fetcher).\n// `DataManager` / `Query` are used by OptionFetcher (see ./option-fetcher.ts).\nexport { DataManager, Query };\n","import { DataManager, Query } from '@syncfusion/ej2-data';\nimport { resolveFieldBinding, getAdaptorInstance, extractDataFromPath } from './utils';\n/**\n * @private\n */\nexport class OptionFetcher {\n /**\n * Fetch option data via `DataManager` + `Query`, supporting\n * search/sort/filter/paging/queryParams, with `resolveFieldBinding`\n * used to resolve `{field}` references in search keys and filter\n * values, and `extractDataFromPath` used to project the result.\n *\n * Mirrors `useFetchOptions` (utils.tsx lines 359–471).\n *\n * @param componentOptions - Options config (array fallback handled by\n * caller; this method only handles `type==='url'` objects).\n * @param componentId - Id of the requesting component (for stale\n * avoidance by the caller). Not used internally beyond tagging.\n * @param formValues - Current form values (id-keyed) used to resolve\n * `{field}` references when `components` is provided.\n * @param components - Schema components used to map name-keyed context\n * from id-keyed `formValues`.\n * @returns Promise resolving to the option array (or empty array on\n * error / non-url config). Never rejects — errors are caught and return `[]`.\n */\n static fetch(componentOptions, componentId, formValues, components) {\n const isUrlType = componentOptions &&\n typeof componentOptions === 'object' &&\n !Array.isArray(componentOptions) &&\n componentOptions.type === 'url' &&\n componentOptions.url;\n if (!isUrlType) {\n return Promise.resolve({ id: componentId, options: [] });\n }\n const urlConfig = componentOptions;\n return new Promise((resolve) => {\n try {\n const headers = {};\n if (urlConfig.headers && Array.isArray(urlConfig.headers)) {\n urlConfig.headers.forEach((h) => {\n if (h.key && h.key.trim()) {\n headers[h.key] = h.value;\n }\n });\n }\n // Create DataManager with selected adaptor\n const dataManager = new DataManager({\n url: urlConfig.url,\n adaptor: getAdaptorInstance(urlConfig.adaptorType),\n headers: Object.keys(headers).length ? headers : undefined\n });\n // Build Query (dynamic support)\n let query = new Query();\n if (urlConfig.search && urlConfig.search.enabled && urlConfig.search.fields && urlConfig.search.fields.length > 0) {\n const searchKey = urlConfig.search.key || 'search';\n // Resolve field bindings in search value\n const resolvedSearchValue = formValues\n ? resolveFieldBinding(searchKey, formValues, components)\n : /[{}]/.test(searchKey) ? '' : searchKey;\n query = query.search(resolvedSearchValue, urlConfig.search.fields);\n }\n // Apply sort query\n if (urlConfig.sort && urlConfig.sort.enabled && urlConfig.sort.field) {\n const sortDirection = urlConfig.sort.direction === 'descending' ? 'descending' : 'ascending';\n query = query.sortBy(urlConfig.sort.field, sortDirection);\n }\n // Apply filter queries with field binding resolution\n if (urlConfig.filters && Array.isArray(urlConfig.filters) && urlConfig.filters.length > 0) {\n urlConfig.filters.forEach((f) => {\n if (f.field && f.operator && f.value !== undefined && f.value !== '') {\n const resolvedFilterValue = formValues\n ? resolveFieldBinding(f.value, formValues, components)\n : /[{}]/.test(f.value) ? '' : f.value;\n if (resolvedFilterValue !== '') {\n query = query.where(f.field, f.operator, resolvedFilterValue);\n }\n }\n });\n }\n // Add params (query string)\n if (urlConfig.queryParams) {\n Object.keys(urlConfig.queryParams).forEach((key) => {\n query = query.addParams(key, urlConfig.queryParams[key]);\n });\n }\n // Paging\n if (urlConfig.skip) {\n query = query.skip(urlConfig.skip);\n }\n if (urlConfig.take) {\n query = query.take(urlConfig.take);\n }\n const timeoutMs = 15000;\n let timedOut = false;\n const timeoutHandle = setTimeout(() => {\n timedOut = true;\n resolve({ id: componentId, options: [] });\n }, timeoutMs);\n dataManager.executeQuery(query).then((res) => {\n if (timedOut) {\n return;\n }\n clearTimeout(timeoutHandle);\n let data = res.result;\n if (urlConfig.dataPath) {\n data = extractDataFromPath(data, urlConfig.dataPath);\n }\n let options;\n if (Array.isArray(data)) {\n options = data;\n }\n else if (typeof data === 'string') {\n options = [data];\n }\n else {\n options = [];\n }\n resolve({ id: componentId, options });\n }).catch((err) => {\n if (timedOut) {\n return;\n }\n clearTimeout(timeoutHandle);\n // console.error('Fetch error:', err);\n resolve({ id: componentId, options: [] });\n });\n }\n catch (err) {\n // console.error('Setup error:', err);\n resolve({ id: componentId, options: [] });\n }\n });\n }\n}\nexport default OptionFetcher;\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nconst resolveAttributes = (attributes) => {\n if (!attributes) {\n return {};\n }\n if (Array.isArray(attributes)) {\n return attributes.reduce((acc, item) => {\n if (item && item.key && item.value !== undefined) {\n acc[item.key] = item.value;\n }\n return acc;\n }, {});\n }\n return attributes;\n};\n/**\n * @private\n */\nexport class CheckboxGroup {\n constructor(options) {\n this.checkboxes = [];\n this.component = options.component;\n this.formState = options.formState;\n this.onChangeCb = options.onChange;\n this.optionRef = options.optionRef;\n this.enableRtl = options.enableRtl;\n this.target = options.target;\n this.container = null;\n this.itemsContainer = null;\n this.ref = options.ref;\n }\n getSelectedItems() {\n const resolvedValue = (this.formState\n ? this.formState.values[this.component.id]\n : (isNullOrUndefined(this.valueProp()) ? this.component.defaultValue : this.valueProp()));\n return Array.isArray(resolvedValue) ? resolvedValue : [];\n }\n valueProp() {\n // Used only when `formState` is absent — read the `value` option.\n return this._value;\n }\n /** Used in non-formState mode to seed the initial value. */\n setValue(value) {\n this._value = value;\n }\n handleCheckboxChange(option, checked) {\n const selectedItems = this.getSelectedItems();\n const newValue = checked\n ? [...selectedItems, option]\n : selectedItems.filter((i) => i !== option);\n if (this.formState) {\n this.onChangeCb(newValue);\n }\n }\n /**\n * Compose the size CSS class for the CheckBox.\n */\n get sizeCssClass() {\n const base = this.component.cssClass || '';\n const sizeMod = this.component.size === 'Small'\n ? ' e-small'\n : this.component.size === 'Bigger'\n ? ' e-bigger'\n : '';\n return `${base}${sizeMod}`;\n }\n /**\n * Build and append the group DOM tree. Returns the container element.\n */\n render(target) {\n const component = this.component;\n const groupLabel = component.label && component.required\n ? `${component.label} *`\n : (component.label || '');\n const host = target || this.target;\n // Outer container\n const container = document.createElement('div');\n container.className = `checkbox-group ${component.cssClass || ''}`.trim();\n container.setAttribute('role', 'group');\n container.setAttribute('aria-label', groupLabel);\n container.title = component.tooltip || '';\n const htmlAttrs = resolveAttributes(component.htmlAttributes);\n Object.keys(htmlAttrs).forEach((key) => {\n // Apply additional htmlAttributes to the container (matches spread).\n if (key !== 'class' && key !== 'className' && key !== 'style') {\n container.setAttribute(key, String(htmlAttrs[key]));\n }\n });\n const containerStyle = `display:flex;flex-direction:${component.layoutDirection === 'row' ? 'row' : 'column'};` +\n `gap:${component.gap || '8px'};align-items:flex-start;`;\n container.setAttribute('style', containerStyle);\n // Items container\n const itemsContainer = document.createElement('div');\n itemsContainer.className = 'checkbox-group-items';\n const itemsStyle = `display:flex;flex-direction:${component.layoutDirection === 'row' ? 'row' : 'column'};` +\n `flex-wrap:wrap;gap:${component.gap || '2px'};width:100%;`;\n itemsContainer.setAttribute('style', itemsStyle);\n const options = Array.isArray(component.options) ? component.options : [];\n const selectedItems = this.getSelectedItems();\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value != null ? option.value : (option.label != null ? option.label : option.key));\n const optionLabel = typeof option === 'string'\n ? option\n : (option.label != null ? option.label : (option.value != null ? option.value : String(optionValue)));\n const wrapper = document.createElement('input');\n itemsContainer.appendChild(wrapper);\n const checkBox = new CheckBox({\n label: optionLabel,\n enableRtl: this.enableRtl,\n checked: selectedItems.indexOf(optionValue) !== -1,\n disabled: !!component.disabled,\n labelPosition: component.checkboxLabelPosition || 'After',\n cssClass: this.sizeCssClass.trim(),\n htmlAttributes: htmlAttrs,\n change: (e) => {\n this.handleCheckboxChange(optionValue, e.checked);\n }\n });\n checkBox.appendTo(wrapper);\n this.ref(checkBox, idx);\n // Set the id mirroring `${component.id}_${idx}` after appendTo so\n // EJ2 preserves the wrapper id semantics.\n const inputEl = wrapper.querySelector('input[type=\"checkbox\"]');\n if (inputEl) {\n inputEl.id = `${this.component.id}_${idx}`;\n }\n // Ref callback — provide the EJ2 instance + index.\n if (this.optionRef) {\n this.optionRef(checkBox, idx);\n }\n this.checkboxes.push(checkBox);\n });\n container.appendChild(itemsContainer);\n if (host) {\n host.appendChild(container);\n }\n this.container = container;\n this.itemsContainer = itemsContainer;\n return container;\n }\n /**\n * Re-render the selection state from the current model value. Used by\n * the host after a programmatic value change.\n */\n refreshSelection() {\n const selectedItems = this.getSelectedItems();\n const options = Array.isArray(this.component.options) ? this.component.options : ['Option 1'];\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value != null ? option.value : (option.label != null ? option.label : option.key));\n const checkBox = this.checkboxes[idx];\n if (checkBox) {\n checkBox.checked = selectedItems.indexOf(optionValue) !== -1;\n }\n });\n }\n /**\n * Destroy all child EJ2 instances and detach the container.\n */\n destroy() {\n for (const cb of this.checkboxes) {\n try {\n cb.destroy();\n }\n catch (e) { /* ignore */ }\n }\n this.checkboxes = [];\n if (this.container && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n this.container = null;\n this.itemsContainer = null;\n }\n setOptions(options) {\n this.component.options = options;\n if (!this.itemsContainer) {\n return;\n }\n for (const cb of this.checkboxes) {\n try {\n cb.destroy();\n }\n catch (_a) {\n }\n }\n this.checkboxes = [];\n while (this.itemsContainer.firstChild) {\n this.itemsContainer.removeChild(this.itemsContainer.firstChild);\n }\n const selectedItems = this.getSelectedItems();\n options.forEach((option, idx) => {\n const optionValue = typeof option === 'string'\n ? option\n : (option.value || option.label || option.key);\n const optionLabel = typeof option === 'string'\n ? option\n : (option.label || option.value || String(optionValue));\n const wrapper = document.createElement('input');\n this.itemsContainer.appendChild(wrapper);\n const checkBox = new CheckBox({\n label: optionLabel,\n enableRtl: this.enableRtl,\n checked: selectedItems.indexOf(optionValue) !== -1,\n disabled: !!this.component.disabled,\n labelPosition: this.component.checkboxLabelPosition || 'After',\n cssClass: this.sizeCssClass.trim(),\n change: (e) => {\n this.handleCheckboxChange(optionValue, e.checked);\n }\n });\n checkBox.appendTo(wrapper);\n this.ref(checkBox, idx);\n const inputEl = wrapper.querySelector('input[type=\"checkbox\"]');\n if (inputEl) {\n inputEl.id = `${this.component.id}_${idx}`;\n }\n if (this.optionRef) {\n this.optionRef(checkBox, idx);\n }\n this.checkboxes.push(checkBox);\n });\n }\n}\nexport default CheckboxGroup;\n","import { ExpressionEngine } from './expression-engine';\n/**\n * @private\n */\nexport class GridExpressions {\n constructor() {\n this.engine = new ExpressionEngine();\n }\n /**\n * Convert a column value to the proper JS type for expression evaluation.\n * Form inputs return strings; numeric/boolean values must be coerced.\n */\n parseColumnValue(value, columnType) {\n // Handle null/undefined/empty\n if (value === null || value === undefined || value === '') {\n return value;\n }\n // Parse number types\n if (columnType === 'number') {\n const parsed = parseFloat(String(value));\n return isNaN(parsed) ? 0 : parsed;\n }\n // Parse boolean types\n if (columnType === 'boolean') {\n if (typeof value === 'boolean') {\n return value;\n }\n return value === 'true' || value === '1' || value === 1 || value === true;\n }\n // Return as-is for string and other types\n return value;\n }\n /**\n * Evaluate all expression-bearing columns for a single row.\n * Returns a new row object with calculated values merged in.\n */\n evaluateRowExpressions(row, columns) {\n const calculatedRow = Object.assign({}, row);\n // Find all columns with expressions\n const calculatedColumns = columns.filter((col) => col.expression && col.expression.toString().trim());\n for (const column of calculatedColumns) {\n if (!column.expression) {\n continue;\n }\n try {\n // Prepare row values with proper type conversion\n const typedRow = {};\n columns.forEach((col) => {\n const value = calculatedRow[col.field];\n typedRow[col.field] = this.parseColumnValue(value, col.type);\n });\n // Evaluate expression with current row as context\n const result = this.engine.evaluate(column.expression, typedRow, {\n throwOnError: false\n });\n // Update row with calculated value\n calculatedRow[column.field] = result;\n }\n catch (error) {\n calculatedRow[column.field] = null;\n }\n }\n return calculatedRow;\n }\n /**\n * Extract the subset of columns that carry a non-empty `expression`.\n */\n extractCalculatedColumns(columns) {\n return columns.filter((col) => col.expression && col.expression.toString().trim());\n }\n getEngine() { return this.engine; }\n}\nexport default GridExpressions;\n","import { ExpressionEngine } from './expressions/expression-engine';\n/**\n * Custom Validation Engine\n *\n * Evaluates FormIO-style custom validation expressions:\n * valid = (condition) ? true : 'error message';\n *\n * Reuses ExpressionEngine for dependency extraction and expression parsing\n * @private\n */\nexport class CustomValidationEngine {\n constructor() {\n this.expressionEngine = new ExpressionEngine();\n }\n /**\n * Validate field using custom validation expression\n *\n * @param expression - FormIO-style validation expression (generated by UI)\n * @param fieldValue - Current field value (as 'input')\n * @param formValues - All form values for cross-field references\n * @returns true if valid, error message string if invalid\n */\n validate(expression, fieldValue, formValues) {\n if (!expression || expression.trim() === '') {\n return true; // No validation rule = valid\n }\n try {\n // Inject 'input' as current field value\n const context = Object.assign({}, formValues, { input: fieldValue, valid: true // Initialize valid variable\n });\n // Parse expression - FormIO pattern uses assignment: valid = ...\n // Pattern: valid = (condition) ? true : 'error message'\n const validPattern = /valid\\s*=\\s*(.+?)\\s*\\?\\s*true\\s*:\\s*['\"](.+?)['\"]\\s*$/;\n const match = expression.match(validPattern);\n if (!match) {\n return 'Invalid validation expression format';\n }\n const condition = match[1].trim();\n const errorMessage = match[2];\n // Evaluate the condition (should return boolean)\n const conditionResult = this.expressionEngine.evaluate(condition, context, { throwOnError: false }, true);\n // If condition is true, validation passes\n if (conditionResult === true) {\n return true;\n }\n else {\n // Condition is false, return the error message\n return errorMessage;\n }\n }\n catch (error) {\n return 'Validation expression error';\n }\n }\n /**\n * Extract field dependencies from validation expression\n *\n * @param expression - Custom validation expression (or just condition)\n * @returns Array of field names referenced in expression\n */\n extractDependencies(expression) {\n if (!expression)\n return [];\n // Extract validation logic (right side of = sign if present)\n const validPattern = /valid\\s*=\\s*(.+)/;\n const match = expression.match(validPattern);\n const validationLogic = match ? match[1] : expression;\n // Use ExpressionEngine to extract field references\n const deps = this.expressionEngine.extractDependencies(validationLogic);\n // Filter out 'input' as it's the current field, not a dependency\n return deps.filter(dep => dep !== 'input');\n }\n /**\n * Validate condition syntax (simplified - no need for \"valid =\" check)\n *\n * @param condition - Validation condition (without \"valid =\" prefix)\n * @param availableFields - Available field names for reference validation\n * @returns Array of validation error messages\n */\n validateConditionSyntax(condition, availableFields) {\n if (!condition || condition.trim() === '') {\n return ['Condition cannot be empty'];\n }\n const errors = [];\n // Check for balanced parentheses\n const openParens = (condition.match(/\\(/g) || []).length;\n const closeParens = (condition.match(/\\)/g) || []).length;\n if (openParens !== closeParens) {\n errors.push(`Unbalanced parentheses (${openParens} open, ${closeParens} close)`);\n }\n // Check for balanced braces\n const openBraces = (condition.match(/\\{/g) || []).length;\n const closeBraces = (condition.match(/\\}/g) || []).length;\n if (openBraces !== closeBraces) {\n errors.push(`Unbalanced braces (${openBraces} open, ${closeBraces} close)`);\n }\n // Validate field references\n const deps = this.extractDependencies(condition);\n const invalidFields = deps.filter((field) => availableFields.indexOf(field) === -1);\n if (invalidFields.length > 0) {\n errors.push(`Unknown field references: ${invalidFields.join(', ')}`);\n }\n return errors;\n }\n /**\n * Build full FormIO expression from condition and error message\n *\n * @param condition - Validation condition (e.g., \"(input === {password})\")\n * @param errorMessage - Error message to show when validation fails\n * @returns Full FormIO expression\n */\n buildExpression(condition, errorMessage) {\n // Remove outer parentheses if present (we'll add them back in ternary)\n const trimmedCondition = condition.trim();\n // Escape single quotes in error message\n const escapedMessage = errorMessage.replace(/'/g, \"\\\\'\");\n // Build FormIO expression\n return `valid = ${trimmedCondition} ? true : '${escapedMessage}'`;\n }\n /**\n * Extract condition and error message from full FormIO expression\n * For editing existing rules\n *\n * @param expression - Full FormIO expression\n * @returns { condition, errorMessage } or null if invalid\n */\n parseExpression(expression) {\n // Pattern: valid = (condition) ? true : 'error message'\n const pattern = /valid\\s*=\\s*(.+?)\\s*\\?\\s*true\\s*:\\s*'(.+)'/;\n const match = expression.match(pattern);\n if (match) {\n return {\n condition: match[1].trim(),\n errorMessage: match[2].replace(/\\\\'/g, \"'\") // Unescape quotes\n };\n }\n return null;\n }\n}\n","import { Grid, Edit, Toolbar, Page, Resize, Sort, Filter } from '@syncfusion/ej2-grids';\nimport { GridExpressions } from './expressions/grid-expressions';\nimport { CustomValidationEngine } from './custom-validation-engine';\n/**\n * @private\n *\n * `DataGridComponent` is the Category C native reimplementation of\n * `Common/DataGridComponent.tsx` using the EJ2 `Grid` (with `Edit`,\n * `Toolbar`, `Page`, `Resize`, `Sort`, `Filter` inject modules).\n *\n * Reproduces:\n * - internal current-data state seeded from `dataSource`;\n * - calculated/expression columns (disable `allowEditing`, recompute on\n * sibling field change via edit `change` params, update UI value by\n * column type);\n * - per-column custom validation merged into `validationRules`\n * (required + custom validator via `CustomValidationEngine`);\n * - dynamic toolbar (`Add`/`Edit`/`Delete` conditional + always\n * `Update`/`Cancel`);\n * - `actionComplete` → sync state + `onDataChange` callback;\n * - `getGridData()` equivalent;\n * - column mapping (`field, headerText, type, isPrimaryKey, width,\n * format (date default 'MM/dd/yyyy'), editType, allowEditing`);\n * - `filterSettings.mode='Immediate'`.\n */\nexport class DataGridComponent {\n constructor(options) {\n this.grid = null;\n this.wrapper = null;\n /**\n * Map React custom validation to a Syncfusion-style custom validator\n * closure. Mirrors `mapCustomValidationToSyncfusion`.\n */\n this.mapCustomValidationToSyncfusion = (col) => {\n if (!col.customValidation || col.customValidation.length === 0) {\n return undefined;\n }\n return (value) => {\n const formObj = this.grid && this.grid.editModule ? this.grid.editModule.formObj : null;\n if (!formObj) {\n return true;\n }\n const rowContext = {};\n (this.columns || []).forEach((gridCol) => {\n const input = formObj.getInputElement(gridCol.field);\n if (input) {\n const v = input.value;\n rowContext[gridCol.field] = gridCol.type === 'number' ? parseInt(v, 10) : v;\n }\n });\n for (const rule of col.customValidation) {\n if (!rule.expression) {\n continue;\n }\n const fieldValue = col.type === 'number' ? parseInt(value.value, 10) : value.value;\n const result = this.validationEngine.validate(rule.expression, fieldValue, rowContext);\n return result === true;\n }\n return true;\n };\n };\n /**\n * Create edit params attaching a `change` callback for non-calculated\n * columns that have calc dependents. Mirrors `createEditParams`.\n */\n this.createEditParams = (col) => {\n if (!this.hasExpressions) {\n return undefined;\n }\n const calculatedCols = this.calculatedColumns;\n const hasDependents = calculatedCols.some((calcCol) => {\n if (!calcCol.expression) {\n return false;\n }\n return calcCol.expression.indexOf(`{${col.field}}`) !== -1;\n });\n if (!hasDependents) {\n return undefined;\n }\n return {\n params: {\n change: () => {\n if (!this.grid || !this.grid.element) {\n return;\n }\n const form = this.grid.element.querySelector('form');\n if (!form || !form.ej2_instances || !form.ej2_instances[0]) {\n return;\n }\n const formInstance = form.ej2_instances[0];\n calculatedCols.forEach((calcCol) => {\n const input = formInstance.getInputElement(calcCol.field);\n if (!input) {\n return;\n }\n try {\n const rowValues = {};\n this.columns.forEach((c) => {\n const fieldInput = formInstance.getInputElement(c.field);\n if (fieldInput) {\n rowValues[c.field] = fieldInput.value;\n }\n });\n const result = this.gridExpressions.evaluateRowExpressions(rowValues, this.columns);\n const calculatedValue = result[calcCol.field];\n if (calculatedValue !== undefined && calculatedValue !== null) {\n if (calcCol.type === 'boolean') {\n input.checked = !!calculatedValue;\n }\n else if (calcCol.type === 'number') {\n const wrapper = input.closest('.e-control-wrapper');\n const numericInput = wrapper ? wrapper.querySelector('input.e-control:not([type=\"hidden\"])') : null;\n if (numericInput && numericInput.ej2_instances && numericInput.ej2_instances[0]) {\n numericInput.ej2_instances[0].value = calculatedValue;\n }\n else {\n input.value = calculatedValue;\n }\n }\n else if (calcCol.type === 'date') {\n input.ej2_instances[0].value = new Date(calculatedValue);\n }\n else {\n input.value = calculatedValue;\n }\n }\n }\n catch (_a) {\n }\n });\n }\n }\n };\n };\n /**\n * Sync the working data on `actionComplete`. Mirrors `handleActionComplete`.\n */\n this.handleActionComplete = (args) => {\n if (!this.grid) {\n return;\n }\n const eventType = args.requestType;\n switch (eventType) {\n case 'save':\n case 'delete':\n case 'add': {\n if (this.grid.dataSource) {\n const updatedData = Array.isArray(this.grid.dataSource)\n ? this.grid.dataSource\n : [];\n this.currentData = updatedData;\n if (this.onDataChange) {\n this.onDataChange(updatedData);\n }\n }\n break;\n }\n default:\n break;\n }\n };\n this.id = options.id;\n this.columns = options.columns || [];\n this.dataSource = Array.isArray(options.dataSource) ? options.dataSource : [];\n this.height = options.height != null ? options.height : '200px';\n this.width = options.width != null ? options.width : '100%';\n this.locale = options.locale;\n this.cssClass = options.cssClass;\n this.pageSize = options.pageSize != null ? options.pageSize : 6;\n this.allowPaging = options.allowPaging !== false;\n this.allowAdding = options.allowAdding !== false;\n this.allowEditing = options.allowEditing !== false;\n this.allowDeleting = options.allowDeleting !== false;\n this.allowFiltering = options.allowFiltering === true;\n this.onDataChange = options.onDataChange;\n this.isPreviewMode = options.isPreviewMode;\n this.enableRtl = options.enableRtl;\n this.ref = options.ref;\n this.currentData = Array.isArray(this.dataSource) ? this.dataSource : [];\n this.gridExpressions = new GridExpressions();\n this.validationEngine = new CustomValidationEngine();\n }\n get calculatedColumns() {\n return this.gridExpressions.extractCalculatedColumns(this.columns);\n }\n get hasExpressions() {\n return this.calculatedColumns.length > 0;\n }\n /**\n * Build the dynamic toolbar array. Mirrors `buildToolbar`.\n */\n buildToolbar() {\n const items = [];\n if (this.allowAdding) {\n items.push('Add');\n }\n if (this.allowEditing) {\n items.push('Edit');\n }\n if (this.allowDeleting) {\n items.push('Delete');\n }\n items.push('Update', 'Cancel');\n return items;\n }\n /**\n * Map a GridColumn to the EJ2 Grid column model, merging standard + custom\n * validation rules and disabling editing on expression / no-edit columns.\n */\n mapColumn(col) {\n const validationRules = col.validationRules ? Object.assign({}, col.validationRules) : {};\n const customValidator = this.mapCustomValidationToSyncfusion(col);\n if (customValidator) {\n const errorMessage = col.customValidation && col.customValidation[0] && col.customValidation[0].expression\n ? (this.validationEngine.parseExpression\n ? this.validationEngine.parseExpression(col.customValidation[0].expression).errorMessage\n : 'Validation failed') || 'Validation failed'\n : 'Validation failed';\n validationRules.required = [true, errorMessage];\n validationRules.custom = [customValidator, errorMessage];\n }\n return {\n field: col.field,\n headerText: col.headerText,\n type: col.type || 'string',\n isPrimaryKey: col.isPrimaryKey || false,\n width: col.width,\n format: col.type === 'date' ? (col.format || 'MM/dd/yyyy') : col.format,\n editType: col.editType,\n allowEditing: col.allowEditing !== false && !col.expression,\n validationRules: validationRules,\n edit: this.createEditParams(col)\n };\n }\n /**\n * Build the grid element, instantiate `Grid`, inject services and append\n * to the target/created container. Returns the wrapper element.\n */\n render(targetOrHost) {\n // Normalize initial currentData with expression evaluation\n const normalized = Array.isArray(this.dataSource) ? this.dataSource : [];\n if (this.hasExpressions && normalized.length > 0) {\n this.currentData = normalized.map((row) => {\n const result = this.gridExpressions.evaluateRowExpressions(row, this.columns);\n return Object.assign({}, row, result);\n });\n }\n else {\n this.currentData = normalized;\n }\n const wrapper = document.createElement('div');\n wrapper.className = 'datagrid-wrapper';\n wrapper.style.width = typeof this.width === 'string' ? this.width : `${this.width}px`;\n wrapper.style.height = 'auto';\n const gridHost = document.createElement('div');\n gridHost.className = 'datagrid-grid';\n wrapper.appendChild(gridHost);\n if (this.id) {\n gridHost.id = this.id;\n }\n const grid = new Grid({\n dataSource: this.currentData,\n allowPaging: this.allowPaging,\n filterSettings: { mode: 'Immediate' },\n pageSettings: { pageSize: this.pageSize },\n editSettings: {\n allowEditing: this.allowEditing,\n allowAdding: this.allowAdding,\n allowDeleting: this.allowDeleting,\n mode: 'Normal'\n },\n enableRtl: this.enableRtl,\n locale: this.locale || 'en-US',\n cssClass: this.cssClass,\n toolbar: this.buildToolbar(),\n actionComplete: this.handleActionComplete,\n height: typeof this.height === 'string' ? this.height : `${this.height}px`,\n width: typeof this.width === 'string' ? this.width : `${this.width}px`,\n allowSorting: true,\n allowFiltering: this.allowFiltering,\n allowSelection: true,\n columns: (this.columns || []).map((c) => this.mapColumn(c))\n });\n grid.appendTo(gridHost);\n this.ref(grid);\n // Inject the required modules into the Grid prototype (executed once\n // at module load — see the static `Grid.Inject(...)` call at the\n // bottom of this file).\n this.grid = grid;\n if (targetOrHost) {\n targetOrHost.appendChild(wrapper);\n }\n this.wrapper = wrapper;\n return wrapper;\n }\n /**\n * @private\n */\n getRef() {\n return {\n getGridData: () => this.currentData,\n gridRef: { current: this.grid }\n };\n }\n /**\n * Equivalent of `getGridData()`.\n */\n getGridData() {\n return this.currentData;\n }\n /**\n * Recompute expression-bearing rows from fresh `dataSource` (mirrors the\n * useEffect on `[dataSource, hasExpressions, columns, ...]`).\n */\n setDataSource(dataSource) {\n if (!this.grid) {\n return;\n }\n const normalized = Array.isArray(dataSource) ? dataSource : [];\n if (this.hasExpressions && normalized.length > 0) {\n this.currentData = normalized.map((row) => {\n const r = this.gridExpressions.evaluateRowExpressions(row, this.columns);\n return Object.assign({}, row, r);\n });\n }\n else {\n this.currentData = normalized;\n }\n this.grid.dataSource = this.currentData;\n if (this.grid.refreshBatchData) {\n this.grid.setProperties({ dataSource: this.currentData }, true);\n }\n else {\n this.grid.dataSource = this.currentData;\n }\n if (this.grid.refresh) {\n this.grid.refresh();\n }\n }\n /**\n * Re-detect columns; refresh the grid (mirrors the useEffect on columns).\n */\n setColumns(columns) {\n if (!this.grid) {\n return;\n }\n if (!columns || columns.length === 0) {\n this.grid.columns = [];\n }\n else if (this.grid.columns.length === 0 && columns && columns.length === 1) {\n this.grid.columns = columns;\n }\n this.columns = columns;\n if (this.grid.refresh && !this.isPreviewMode) {\n if (this.dataSource && Array.isArray(this.dataSource) && this.dataSource.length > 0 && !this.hasExpressions) {\n this.grid.dataSource = this.dataSource;\n }\n this.grid.refresh();\n }\n }\n /**\n * @private\n */\n destroy() {\n if (this.grid) {\n try {\n this.grid.destroy();\n }\n catch (e) { /* ignore */ }\n this.grid = null;\n }\n if (this.wrapper && this.wrapper.parentNode) {\n this.wrapper.parentNode.removeChild(this.wrapper);\n }\n this.wrapper = null;\n this.gridExpressions = null;\n this.validationEngine = null;\n this.currentData = [];\n this.columns = [];\n this.dataSource = [];\n }\n}\nexport default DataGridComponent;\nGrid.Inject(Edit, Toolbar, Page, Resize, Sort, Filter);\n","/**\n * Extract min/max constraints from minMaxRange array\n * @private\n */\nexport class MinMaxRuleEngine {\n /**\n * Extract min/max constraints from minMaxRange array\n * Handles three cases:\n * 1. Direct values (enabled: false)\n * 2. Single field reference (enabled: true, 1 range)\n * 3. Multiple ranges (enabled: true, 2+ ranges) - takes UTMOST\n * @private\n * @param minMaxRange - Array of range configurations\n * @param formValues - Current form state values (id → value)\n * @param componentType - 'number' | 'date' | 'dateRange'\n * @returns Constraints object with appropriate keys\n */\n static getConstraints(minMaxRange, formValues, componentType = 'number') {\n // No ranges provided\n if (!minMaxRange || minMaxRange.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // First, check for CASE 1: Direct values (enabled: false)\n const directValueRange = minMaxRange.find(range => range.enabled === false);\n if (directValueRange) {\n // Use direct values without field lookup\n const minValue = this.resolveValue(directValueRange.minValue, {});\n const maxValue = this.resolveValue(directValueRange.maxValue, {});\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: minValue,\n maxDate: maxValue,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: minValue,\n maxTime: maxValue\n };\n }\n return {\n minValue,\n maxValue,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n // CASE 2 & 3: Field references (enabled: true)\n const enabledRanges = minMaxRange.filter(range => range.enabled === true);\n // No enabled ranges - return empty\n if (enabledRanges.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // Extract resolved values from each enabled range\n const resolvedRanges = enabledRanges\n .map(range => ({\n min: this.resolveValue(range.minValue, formValues),\n max: this.resolveValue(range.maxValue, formValues)\n }))\n .filter(range => range.min !== undefined || range.max !== undefined);\n // No valid ranges\n if (resolvedRanges.length === 0) {\n return this.getEmptyConstraints(componentType);\n }\n // Combine multiple ranges using UTMOST (most permissive)\n const finalMin = this.getPermissiveMin(resolvedRanges, componentType);\n const finalMax = this.getPermissiveMax(resolvedRanges, componentType);\n // Return appropriate keys based on component type\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: finalMin,\n maxDate: finalMax,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: finalMin,\n maxTime: finalMax\n };\n }\n return {\n minValue: finalMin,\n maxValue: finalMax,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n /**\n * Resolve a single value - either direct or field reference\n *\n * @param value - Direct value or field reference object\n * @param formValues - Form state values for field lookup\n * @returns Resolved value or undefined\n */\n static resolveValue(value, formValues) {\n // Direct value (number or string)\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return value;\n }\n // Field reference object\n if (value && typeof value === 'object' && value.field) {\n const fieldId = value.field;\n const fieldValue = formValues[fieldId];\n return fieldValue !== undefined ? fieldValue : undefined;\n }\n return undefined;\n }\n /**\n * Get the most permissive (widest) minimum value\n * For numbers: MIN of all mins\n * For dates: earliest date (MIN string comparison on ISO format)\n * For times: earliest time (MIN string comparison on 24-hour format)\n *\n * @param ranges - Array of {min, max} values\n * @param componentType - Type of component\n * @returns Most permissive minimum value\n */\n static getPermissiveMin(ranges, componentType) {\n if (ranges.length === 0)\n return undefined;\n if (componentType === 'date' || componentType === 'dateRange') {\n // For dates, find earliest (minimum) date\n return ranges.reduce((earliest, current) => {\n if (!current.min)\n return earliest;\n if (!earliest)\n return current.min;\n const earliestIso = this.convertToISO(earliest);\n const currentIso = this.convertToISO(current.min);\n return currentIso < earliestIso ? current.min : earliest;\n }, undefined);\n }\n if (componentType === 'time') {\n // For times, find earliest (minimum) time\n return ranges.reduce((earliest, current) => {\n if (!current.min)\n return earliest;\n if (!earliest)\n return current.min;\n const earliest24 = this.convertTimeTo24Hour(earliest);\n const current24 = this.convertTimeTo24Hour(current.min);\n return current24 < earliest24 ? current.min : earliest;\n }, undefined);\n }\n // For numbers, find minimum (skip undefined values)\n const minValues = ranges.map(r => r.min).filter(v => v !== undefined);\n return minValues.length > 0 ? Math.min(...minValues) : undefined;\n }\n /**\n * Get the most permissive (widest) maximum value\n * For numbers: MAX of all maxs\n * For dates: latest date (MAX string comparison on ISO format)\n * For times: latest time (MAX string comparison on 24-hour format)\n *\n * @param ranges - Array of {min, max} values\n * @param componentType - Type of component\n * @returns Most permissive maximum value\n */\n static getPermissiveMax(ranges, componentType) {\n if (ranges.length === 0)\n return undefined;\n if (componentType === 'date' || componentType === 'dateRange') {\n // For dates, find latest (maximum) date\n return ranges.reduce((latest, current) => {\n if (!current.max)\n return latest;\n if (!latest)\n return current.max;\n const latestIso = this.convertToISO(latest);\n const currentIso = this.convertToISO(current.max);\n return currentIso > latestIso ? current.max : latest;\n }, undefined);\n }\n if (componentType === 'time') {\n // For times, find latest (maximum) time\n return ranges.reduce((latest, current) => {\n if (!current.max)\n return latest;\n if (!latest)\n return current.max;\n const latest24 = this.convertTimeTo24Hour(latest);\n const current24 = this.convertTimeTo24Hour(current.max);\n return current24 > latest24 ? current.max : latest;\n }, undefined);\n }\n // For numbers, find maximum (skip undefined values)\n const maxValues = ranges.map(r => r.max).filter(v => v !== undefined);\n return maxValues.length > 0 ? Math.max(...maxValues) : undefined;\n }\n /**\n * Convert MM/DD/YYYY date format to ISO (YYYY-MM-DD) for comparison\n * Handles both formats gracefully\n *\n * @param dateString - Date in MM/DD/YYYY or ISO format\n * @returns ISO date string (YYYY-MM-DD)\n */\n static convertToISO(dateString) {\n if (!dateString)\n return '';\n // Already ISO format (YYYY-MM-DD)\n if (dateString.includes('-') && dateString.length === 10) {\n return dateString;\n }\n // MM/DD/YYYY format\n if (dateString.indexOf('/') !== -1) {\n const parts = dateString.split('/');\n const month = parts[0];\n const day = parts[1];\n const year = parts[2];\n if (!month || !day || !year)\n return dateString;\n const monthPadded = month.length < 2 ? '0' + month : month;\n const dayPadded = day.length < 2 ? '0' + day : day;\n return `${year}-${monthPadded}-${dayPadded}`;\n }\n return dateString;\n }\n /**\n * Convert 12-hour time format to 24-hour format for comparison\n * Handles both 12-hour (hh:mm a) and 24-hour (HH:mm) formats\n *\n * @param timeString - Time in 12-hour (hh:mm a/p) or 24-hour (HH:mm) format\n * @returns 24-hour format time string (HH:mm)\n */\n static convertTimeTo24Hour(timeString) {\n if (!timeString)\n return '';\n // Check if it contains AM/PM (12-hour format)\n const isPM = /PM/i.test(timeString);\n const isAM = /AM/i.test(timeString);\n if (isAM || isPM) {\n // Extract time part (before AM/PM)\n const timePart = timeString.replace(/\\s*(AM|PM)/i, '').trim();\n const [hours, minutes] = timePart.split(':');\n if (!hours || !minutes)\n return timeString;\n let hour = parseInt(hours, 10);\n if (isPM && hour !== 12) {\n hour += 12; // Convert PM hours (except 12) to 24-hour\n }\n else if (isAM && hour === 12) {\n hour = 0; // Convert 12 AM to 00:00\n }\n const hourStr = String(hour);\n const hourPadded = hourStr.length < 2 ? '0' + hourStr : hourStr;\n return `${hourPadded}:${minutes}`;\n }\n // Already in 24-hour format or unknown format\n return timeString;\n }\n /**\n * Get empty constraints object based on component type\n */\n static getEmptyConstraints(componentType) {\n if (componentType === 'date' || componentType === 'dateRange') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n if (componentType === 'time') {\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n return {\n minValue: undefined,\n maxValue: undefined,\n minDate: undefined,\n maxDate: undefined,\n minTime: undefined,\n maxTime: undefined\n };\n }\n /**\n * Validate if a value passes all min/max constraints (optional)\n * Can be used for client-side validation before submission\n *\n * @param value - Value to validate\n * @param constraints - Constraints to check against\n * @param componentType - Type of component\n * @returns Validation result with error message if invalid\n */\n static validateValue(value, constraints, componentType) {\n if (value === undefined || value === null || value === '') {\n return { isValid: true }; // Empty values pass (required handled separately)\n }\n if (componentType === 'date' || componentType === 'dateRange') {\n if (constraints.minDate) {\n const minIso = this.convertToISO(constraints.minDate);\n const valueIso = this.convertToISO(value);\n if (valueIso < minIso) {\n return { isValid: false, error: `Date must be on or after ${constraints.minDate}` };\n }\n }\n if (constraints.maxDate) {\n const maxIso = this.convertToISO(constraints.maxDate);\n const valueIso = this.convertToISO(value);\n if (valueIso > maxIso) {\n return { isValid: false, error: `Date must be on or before ${constraints.maxDate}` };\n }\n }\n }\n else if (componentType === 'time') {\n if (constraints.minTime) {\n if (value < constraints.minTime) {\n return { isValid: false, error: `Time must be on or after ${constraints.minTime}` };\n }\n }\n if (constraints.maxTime) {\n if (value > constraints.maxTime) {\n return { isValid: false, error: `Time must be on or before ${constraints.maxTime}` };\n }\n }\n }\n else {\n // Number type\n const numValue = Number(value);\n if (constraints.minValue !== undefined) {\n const minNum = Number(constraints.minValue);\n if (numValue < minNum) {\n return {\n isValid: false,\n error: `Value must be at least ${constraints.minValue}`\n };\n }\n }\n if (constraints.maxValue !== undefined) {\n const maxNum = Number(constraints.maxValue);\n if (numValue > maxNum) {\n return {\n isValid: false,\n error: `Value must be at most ${constraints.maxValue}`\n };\n }\n }\n }\n return { isValid: true };\n }\n}\n","import { sanitizeId, VALIDATION_REGEX } from './utils';\n/**\n * @private\n */\nconst DEFAULT_CONFIG = {\n strict: false,\n maxInputSize: 5 * 1024 * 1024,\n defaultTextType: 'textbox',\n inferTypeFromValue: true,\n generateIds: true,\n includeMetadata: true,\n customTypeMap: {},\n validateUnknownFields: false\n};\n/**\n * @private\n */\nexport class UniversalJsonParser {\n constructor(customConfig) {\n this.config = Object.assign({}, DEFAULT_CONFIG, customConfig);\n }\n parse(input) {\n const errors = [];\n const warnings = [];\n // Handle string input\n if (typeof input === 'string') {\n if (input.length > this.config.maxInputSize) {\n return this.formatError(errors, warnings, `Input exceeds maximum size of ${this.config.maxInputSize} bytes`);\n }\n const jsonValidation = validateJSON(input);\n if (!jsonValidation.valid) {\n return this.formatError(errors, warnings, (jsonValidation.errors && jsonValidation.errors[0]) || 'Invalid JSON');\n }\n try {\n input = JSON.parse(input);\n }\n catch (error) {\n return this.formatError(errors, warnings, `Failed to parse JSON: ${error.message}`);\n }\n }\n // Detect format\n const detection = this.detectFormat(input);\n // Add warnings for ambiguous format detection\n if (detection.ambiguousFormats && detection.ambiguousFormats.length > 0) {\n warnings.push(`Ambiguous format detected.`);\n warnings.push(`Using ${detection.format} format (${detection.format === 'json-schema' ? 'properties priority' : 'pages priority'})`);\n }\n // Parse based on format\n let components = [];\n switch (detection.format) {\n case 'configured-schema':\n // Already in our standard format, just use directly\n components = input.properties || [];\n break;\n case 'json-schema': {\n const jsonSchemaResult = this.parseJsonSchema(input);\n components = jsonSchemaResult.components;\n if (jsonSchemaResult.warnings) {\n warnings.push(...jsonSchemaResult.warnings);\n }\n break;\n }\n case 'surveyjs':\n components = this.parseSurveyJS(input);\n break;\n case 'openapi':\n components = this.parseOpenAPI(input);\n break;\n case 'data-inference':\n components = this.parseDataInference(input);\n // Only warn about inferred types if components were actually created\n if (components.length > 0) {\n warnings.push('Field types inferred from data; please verify');\n }\n break;\n default:\n errors.push('Could not determine input format');\n }\n if (components.length === 0) {\n errors.push('No form fields could be extracted from input');\n }\n // Add default submit button if not already present\n const hasSubmitButton = components.some((comp) => comp.type === 'button' && comp.buttonType === 'submit');\n if (!hasSubmitButton && components.length > 0) {\n components.push({\n id: this.generateComponentId('button'),\n type: 'button',\n label: 'Submit',\n style: 'primary',\n buttonType: 'submit',\n });\n }\n const schema = {\n version: input.version || \"0.1.0\",\n components\n };\n const schemaValidation = validateFormSchema(schema);\n if (!schemaValidation.valid && schemaValidation.errors) {\n errors.push(...schemaValidation.errors);\n }\n if (schemaValidation.warnings) {\n warnings.push(...schemaValidation.warnings);\n }\n if (this.config.strict && warnings.length > 0) {\n errors.push(...warnings);\n warnings.length = 0;\n }\n const sanitized = sanitizeFormSchema(schema);\n return {\n success: errors.length === 0,\n schema: sanitized,\n errors,\n warnings,\n metadata: {\n detectedFormat: detection.format,\n confidence: detection.confidence,\n sourceHints: detection.hints\n }\n };\n }\n formatError(errors, warnings, message) {\n errors.push(message);\n return {\n success: false,\n schema: null,\n errors,\n warnings,\n metadata: {\n detectedFormat: 'unknown',\n confidence: 'low',\n sourceHints: []\n }\n };\n }\n detectFormat(input) {\n const hints = [];\n const ambiguousFormats = [];\n if (!input || typeof input !== 'object') {\n return {\n format: 'unknown',\n confidence: 'low',\n hints: ['Input is not a valid object']\n };\n }\n // Check for JSON Schema indicators\n if (input.$schema && typeof input.$schema === 'string' && input.$schema.includes('json-schema')) {\n hints.push('$schema property detected');\n return { format: 'json-schema', confidence: 'high', hints };\n }\n // Detect ambiguous formats (Test Case 8)\n const hasProperties = input.properties && typeof input.properties === 'object';\n const hasPages = input.pages && Array.isArray(input.pages);\n const hasElements = input.elements && Array.isArray(input.elements);\n if (hasProperties && hasPages) {\n hints.push('Multiple format patterns detected');\n hints.push('Selected based on priority rules');\n ambiguousFormats.push('properties format', 'pages format');\n // JSON Schema has priority\n return {\n format: 'json-schema',\n confidence: 'medium',\n hints,\n ambiguousFormats\n };\n }\n // Check for SurveyJS with pages\n if (hasPages) {\n hints.push('pages array detected');\n if (input.pages[0] && input.pages[0].elements)\n hints.push('elements structure matched');\n return { format: 'surveyjs', confidence: 'high', hints };\n }\n // Check for SurveyJS with elements at root\n if (hasElements && !hasProperties) {\n hints.push('elements array at root level');\n return { format: 'surveyjs', confidence: 'medium', hints };\n }\n // Check for JSON Schema with properties\n if (hasProperties) {\n hints.push('properties object detected');\n if (input.type === 'object')\n hints.push('type: object matched');\n if (input.required && Array.isArray(input.required))\n hints.push('required array found');\n // Check for API schema indicators (example fields pattern)\n if (this.hasExampleFields(input.properties)) {\n hints.push('example fields detected (API schema pattern)');\n return { format: 'openapi', confidence: 'high', hints };\n }\n return { format: 'json-schema', confidence: 'high', hints };\n }\n // Check for Data Inference\n if (this.isDataInferenceCandidate(input)) {\n hints.push('Simple object with primitive values');\n hints.push('No schema indicators found');\n return { format: 'data-inference', confidence: 'medium', hints };\n }\n return {\n format: 'unknown',\n confidence: 'low',\n hints: ['Could not identify format']\n };\n }\n hasExampleFields(properties) {\n if (!properties || typeof properties !== 'object')\n return false;\n const keys = Object.keys(properties);\n for (const key of keys) {\n const prop = properties[key];\n if (prop && 'example' in prop) {\n return true;\n }\n }\n return false;\n }\n isDataInferenceCandidate(input) {\n if (!input || typeof input !== 'object')\n return false;\n if (input.$schema || input.properties || input.pages || input.elements)\n return false;\n const inputKeys = Object.keys(input);\n return inputKeys.every((k) => {\n const val = input[k];\n if (val === null || val === undefined)\n return true;\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean')\n return true;\n if (Array.isArray(val)) {\n return val.every((item) => typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean');\n }\n return false;\n });\n }\n inferComponentType(fieldName, value) {\n const valueType = this.inferTypeFromValue(fieldName, value);\n if (valueType.type) {\n return Object.assign({}, valueType, { confidence: 'high', method: 'value-type' });\n }\n const patternMatch = this.matchFieldNamePattern(fieldName);\n if (patternMatch.type) {\n return Object.assign({}, patternMatch, { confidence: 'high', method: 'name-pattern' });\n }\n return {\n type: this.config.defaultTextType,\n confidence: 'low',\n method: 'fallback'\n };\n }\n inferTypeFromValue(fieldName, value) {\n if (!this.config.inferTypeFromValue)\n return { type: 'textbox' };\n if (value === null || value === undefined) {\n // Even with null/undefined values, check field name patterns\n return this.matchFieldNamePattern(fieldName);\n }\n if (typeof value === 'string') {\n // Check value-based patterns first (highest confidence)\n if (value.includes('@') && value.includes('.')) {\n return { type: 'textbox', textboxType: 'email' };\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n if (/^(https?:\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}/.test(value)) {\n return { type: 'textbox', textboxType: 'url' };\n }\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n return { type: 'date' };\n }\n // For generic strings, check field name patterns\n const fieldNameMatch = this.matchFieldNamePattern(fieldName);\n if (fieldNameMatch.type !== 'textbox' || fieldNameMatch.textboxType) {\n return fieldNameMatch;\n }\n return { type: this.config.defaultTextType };\n }\n if (typeof value === 'number') {\n return { type: 'number' };\n }\n if (typeof value === 'boolean') {\n return { type: 'checkbox' };\n }\n if (Array.isArray(value)) {\n return { type: 'multiselect' };\n }\n return { type: 'textbox' };\n }\n matchFieldNamePattern(fieldName) {\n if (this.config.customTypeMap) {\n const customType = this.config.customTypeMap[fieldName.toLowerCase()];\n if (customType)\n return { type: customType };\n }\n const lower = fieldName.toLowerCase();\n const normalized = lower.replace(/[_\\-\\s]+/g, ' ');\n if (/email|mail|e-?mail/.test(normalized))\n return { type: 'textbox', textboxType: 'email' };\n if (/date|birth|birthday|dob|created|updated/.test(normalized))\n return { type: 'date' };\n if (/phone|tel|mobile|cell|cellphone|msisdn/.test(normalized))\n return { type: 'textbox', textboxType: 'number' };\n if (/url|link|uri|website/.test(normalized))\n return { type: 'textbox', textboxType: 'url' };\n if (/password|pwd|pass|security|secret|key|token/.test(normalized))\n return { type: 'textbox', textboxType: 'password' };\n if (/\\b(?:age|count|qty|quantity|amount|price|cost|salary|fee|rate|number|num)\\b/.test(normalized))\n return { type: 'number' };\n if (/active|enabled|visible|deleted|archived|approved|confirmed/.test(normalized))\n return { type: 'checkbox' };\n if (/select|choice|option|type|status|category|kind/.test(normalized))\n return { type: 'dropdown' };\n if (/description|comment|note|bio|biography|about|message|content|summary|details/.test(normalized))\n return { type: 'textarea' };\n return { type: 'textbox' };\n }\n parseJsonSchema(schema) {\n const components = [];\n const warnings = [];\n if (!schema.properties || typeof schema.properties !== 'object')\n return { components, warnings };\n const flattenedProperties = this.flattenNestedProperties(schema.properties, '', warnings);\n const flatKeys = Object.keys(flattenedProperties);\n for (const key of flatKeys) {\n const propDef = flattenedProperties[key];\n const typeInfo = this.mapJsonSchemaType(propDef);\n const requiredArr = schema.required || [];\n const isRequired = requiredArr.indexOf(key) !== -1;\n components.push(this.createComponent(key, propDef, typeInfo, { required: isRequired }));\n }\n return { components, warnings };\n }\n flattenNestedProperties(properties, prefix, warnings) {\n const flattened = {};\n let hasNested = false;\n const propKeys = Object.keys(properties);\n for (const key of propKeys) {\n const propDef = properties[key];\n const fullKey = prefix ? `${prefix}_${key}` : key;\n // Check if this is a nested object (Test Case 9)\n if (propDef.type === 'object' && propDef.properties && typeof propDef.properties === 'object') {\n hasNested = true;\n const nestedFlattened = this.flattenNestedProperties(propDef.properties, fullKey, warnings);\n Object.assign(flattened, nestedFlattened);\n }\n else {\n flattened[fullKey] = propDef;\n }\n }\n // Add warnings for nested objects\n if (hasNested && !prefix) {\n warnings.push('NESTED_OBJECTS_FLATTENED: Nested objects converted to flat structure');\n const outerKeys = Object.keys(properties);\n for (const key of outerKeys) {\n const propDef = properties[key];\n if (propDef.type === 'object' && propDef.properties) {\n this.collectFlattenedFieldNames(propDef.properties, key, warnings);\n }\n }\n }\n return flattened;\n }\n collectFlattenedFieldNames(properties, prefix, warnings) {\n const collKeys = Object.keys(properties);\n for (const key of collKeys) {\n const propDef = properties[key];\n const fullKey = `${prefix}_${key}`;\n warnings.push(`Field '${prefix}.${key}' flattened to '${fullKey}'`);\n if (propDef.type === 'object' && propDef.properties) {\n this.collectFlattenedFieldNames(propDef.properties, fullKey, warnings);\n }\n }\n }\n parseSurveyJS(schema) {\n const components = [];\n if (schema.pages && Array.isArray(schema.pages)) {\n schema.pages.forEach((page) => {\n if (page.elements && Array.isArray(page.elements)) {\n page.elements.forEach((element) => {\n components.push(this.createComponentFromSurveyJS(element));\n });\n }\n });\n }\n if (!components.length && schema.elements && Array.isArray(schema.elements)) {\n schema.elements.forEach((element) => {\n components.push(this.createComponentFromSurveyJS(element));\n });\n }\n return components;\n }\n createComponentFromSurveyJS(element) {\n const type = this.mapSurveyJSType(element.type || 'text');\n const validation = {};\n // Only add required if explicitly true\n if (element.isRequired === true) {\n validation.required = true;\n }\n if (element.validators && Array.isArray(element.validators)) {\n element.validators.forEach((validator) => {\n if (validator.type === 'numeric') {\n if (validator.minValue !== undefined)\n validation.minValue = validator.minValue;\n if (validator.maxValue !== undefined)\n validation.maxValue = validator.maxValue;\n }\n if (validator.type === 'text') {\n if (validator.minLength !== undefined)\n validation.minLength = validator.minLength;\n if (validator.maxLength !== undefined)\n validation.maxLength = validator.maxLength;\n }\n });\n }\n const component = Object.assign({ id: this.generateComponentId(type), type: type, label: element.title || element.label || this.humanizeFieldName(element.name), defaultValue: element.defaultValue, expressionValue: element.expressionValue }, Object.keys(validation).length > 0 ? validation : undefined);\n if (type === 'dropdown' || type === 'multiselect' || type === 'radio' || type === 'splitButton') {\n if (element.choices && Array.isArray(element.choices)) {\n component.options = element.choices;\n }\n }\n return component;\n }\n mapSurveyJSType(surveyType) {\n const typeMap = {\n text: 'textbox',\n email: 'email',\n number: 'number',\n checkbox: 'checkbox',\n radiogroup: 'radio',\n dropdown: 'dropdown',\n tagbox: 'multiselect',\n multiselect: 'multiselect',\n rating: 'number',\n comment: 'textarea',\n date: 'date'\n };\n return typeMap[surveyType] || 'textbox';\n }\n parseOpenAPI(schema) {\n const components = [];\n if (!schema.properties || typeof schema.properties !== 'object')\n return components;\n const openAPIKeys = Object.keys(schema.properties);\n const requiredArr = schema.required || [];\n for (const key of openAPIKeys) {\n const propDef = schema.properties[key];\n const typeInfo = this.mapJsonSchemaType(propDef);\n const isRequired = requiredArr.indexOf(key) !== -1;\n components.push(this.createComponent(key, propDef, typeInfo, { required: isRequired }));\n }\n return components;\n }\n parseDataInference(data) {\n const components = [];\n const dataKeys = Object.keys(data);\n for (const key of dataKeys) {\n const value = data[key];\n const typeInference = this.inferComponentType(key, value);\n const component = {\n id: this.generateComponentId(typeInference.type),\n type: typeInference.type,\n label: this.humanizeFieldName(key),\n defaultValue: value,\n expressionValue: undefined\n };\n if (typeInference.textboxType) {\n component.textboxType = typeInference.textboxType;\n // Add default regex patterns for email and url\n if (typeInference.textboxType === 'email') {\n component.regex = VALIDATION_REGEX['EMAIL'];\n }\n else if (typeInference.textboxType === 'url') {\n component.regex = VALIDATION_REGEX['URL'];\n }\n }\n if (typeInference.type === 'date' && component.defaultValue !== undefined && component.defaultValue !== null) {\n const formatted = this.formatDateTimeValue(component.defaultValue);\n if (formatted)\n component.defaultValue = formatted;\n }\n if (Array.isArray(value) && value.length > 0) {\n component.options = value;\n }\n components.push(component);\n }\n return components;\n }\n createComponent(fieldName, propDef, typeInfo, context) {\n const validation = {};\n // Only add required if explicitly true\n const isRequired = propDef.required !== undefined ? propDef.required : context.required;\n if (isRequired === true) {\n validation.required = true;\n }\n if (propDef.minLength)\n validation.minLength = propDef.minLength;\n if (propDef.maxLength)\n validation.maxLength = propDef.maxLength;\n if (propDef.minDate)\n validation.minDate = propDef.minDate;\n if (propDef.maxDate)\n validation.maxDate = propDef.maxDate;\n if (propDef.minTime)\n validation.minTime = propDef.minTime;\n if (propDef.minValue)\n validation.minValue = propDef.minValue;\n if (propDef.maxValue)\n validation.maxValue = propDef.maxValue;\n if (propDef.pattern) {\n validation.pattern = propDef.pattern;\n }\n const rawId = propDef.id || this.generateComponentId(typeInfo.type);\n const safeGeneratedId = sanitizeId(rawId, this.generateComponentId(typeInfo.type));\n const component = Object.assign({ id: safeGeneratedId, name: propDef.name, type: typeInfo.type, label: propDef.title || propDef.label || this.humanizeFieldName(fieldName), defaultValue: propDef.default || propDef.defaultValue || undefined, expressionValue: propDef.expressionValue || undefined, content: propDef.content, buttonType: propDef.buttonType, textboxType: propDef.textboxType }, Object.keys(validation).length > 0 ? validation : undefined);\n if (typeInfo.textboxType) {\n component.textboxType = typeInfo.textboxType;\n // Add default regex patterns for email and url\n if (typeInfo.textboxType === 'email') {\n if (!validation.pattern) {\n validation.regex = '^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$'; // Standard email regex\n validation.validationMessage = 'Please enter a valid email address';\n }\n }\n else if (typeInfo.textboxType === 'url') {\n if (!validation.pattern) {\n validation.regex = '^(https?:\\\\/\\\\/)?(www\\\\.)?[-a-zA-Z0-9@:%._\\\\+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,6}\\\\b([-a-zA-Z0-9()@:%_\\\\+.~#?&//=]*)$';\n validation.validationMessage = 'Please enter a valid URL';\n }\n }\n }\n if (typeInfo.type === 'date' && component.defaultValue !== undefined && component.defaultValue !== null) {\n const formatted = this.formatDateTimeValue(component.defaultValue);\n if (formatted)\n component.defaultValue = formatted;\n }\n if ((typeInfo.type === 'splitButton' || typeInfo.type === 'dropdown' || typeInfo.type === 'multiselect' || typeInfo.type === 'radio') && (propDef.enum || propDef.options)) {\n component.options = propDef.enum || propDef.options;\n }\n return component;\n }\n parseDateFromValue(value) {\n if (value == null)\n return null;\n // numeric timestamps\n if (typeof value === 'number') {\n // assume seconds if small\n if (value < 1e12)\n return new Date(value * 1000);\n return new Date(value);\n }\n if (typeof value === 'string') {\n const s = value.trim();\n // Try ISO / RFC parse\n const dIso = new Date(s);\n if (!isNaN(dIso.getTime()))\n return dIso;\n // yyyy-mm-dd[ T hh:mm(:ss)]\n // eslint-disable-next-line security/detect-unsafe-regex\n const m = s.match(/^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2}))?)?/);\n if (m)\n return new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]), Number(m[4] || 0), Number(m[5] || 0), Number(m[6] || 0));\n // mm/dd/yyyy or m/d/yyyy\n // eslint-disable-next-line security/detect-unsafe-regex\n const m2 = s.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})(?:[ T](\\d{1,2}):(\\d{2})(?:[:](\\d{2}))?)?/);\n if (m2)\n return new Date(Number(m2[3]), Number(m2[1]) - 1, Number(m2[2]), Number(m2[4] || 0), Number(m2[5] || 0), Number(m2[6] || 0));\n }\n return null;\n }\n formatDate(d) {\n const monthNum = d.getMonth() + 1;\n const dayNum = d.getDate();\n const mm = monthNum < 10 ? '0' + monthNum : String(monthNum);\n const dd = dayNum < 10 ? '0' + dayNum : String(dayNum);\n const yyyy = d.getFullYear();\n return `${mm}/${dd}/${yyyy}`;\n }\n // private formatTime(d: Date): string {\n // let hours = d.getHours();\n // const minutes = d.getMinutes().toString().padStart(2, '0');\n // const ampm = hours >= 12 ? 'PM' : 'AM';\n // hours = hours % 12;\n // if (hours === 0) hours = 12;\n // return `${hours.toString().padStart(2, '0')}:${minutes} ${ampm}`;\n // }\n formatDateTimeValue(value) {\n const d = this.parseDateFromValue(value);\n if (!d)\n return undefined;\n const datePart = this.formatDate(d);\n const hasTime = d.getHours() !== 0 || d.getMinutes() !== 0 || /\\dT\\d{2}:\\d{2}/.test(String(value));\n if (hasTime)\n return `${datePart}`;\n return datePart;\n }\n mapJsonSchemaType(propDef) {\n const schemaType = propDef.type;\n if (schemaType === 'string') {\n const fmt = (propDef.format || '').toString().toLowerCase();\n const text = ((propDef.title || propDef.label || '') + ' ' + (propDef.description || '')).toLowerCase();\n if (/email|mail|e-?mail/.test(fmt) || /email|mail|e-?mail/.test(text))\n return { type: 'textbox', textboxType: 'email' };\n if (/uri|url|link|website/.test(fmt) || /uri|url|link|website/.test(text))\n return { type: 'textbox', textboxType: 'url' };\n if (/phone|tel|mobile|cell|msisdn/.test(fmt) || /phone|tel|mobile|cell|msisdn/.test(text))\n return { type: 'textbox', textboxType: 'number' };\n if (/password|pwd|pass|security|secret|key/.test(fmt) || /password|pwd|pass|security|secret|key/.test(text))\n return { type: 'textbox', textboxType: 'password' };\n if (fmt === 'date' || fmt === 'date-time' || /date|birthday|dob/.test(text))\n return { type: 'date' };\n if (propDef.enum)\n return { type: 'dropdown' };\n if (propDef.options)\n return { type: 'dropdown' };\n return { type: this.config.defaultTextType };\n }\n if (schemaType === 'number' || schemaType === 'integer')\n return { type: 'number' };\n if (schemaType === 'boolean')\n return { type: 'checkbox' };\n if (schemaType === 'array')\n return { type: 'multiselect' };\n // Presentation / custom widget types\n if (schemaType === 'message')\n return { type: 'message' };\n if (schemaType === 'button')\n return { type: 'button' };\n if (schemaType === 'signature' || schemaType === 'sign')\n return { type: 'signature' };\n if (schemaType === 'image' || schemaType === 'imageEditor')\n return { type: 'imageEditor' };\n if (schemaType === 'file' || schemaType === 'fileUpload')\n return { type: 'fileUpload' };\n if (schemaType === 'color' || schemaType === 'colorPicker')\n return { type: 'colorPicker' };\n if (schemaType === 'splitButton')\n return { type: 'splitButton' };\n return { type: this.config.defaultTextType };\n }\n generateComponentId(type) {\n if (!this.config.generateIds)\n return '';\n const timestamp = Date.now();\n const random = Math.floor(Math.random() * 1000);\n return `${type}_${timestamp}_${random}`;\n }\n humanizeFieldName(fieldName) {\n let result = fieldName.replace(/_/g, ' ');\n result = result.replace(/([a-z])([A-Z])/g, '$1 $2');\n return result;\n }\n}\n/**\n * @private\n */\nexport const validateJSON = (jsonString) => {\n try {\n JSON.parse(jsonString);\n return { valid: true };\n }\n catch (error) {\n return {\n valid: false,\n errors: [`Invalid JSON syntax: ${error.message}`]\n };\n }\n};\n/**\n * @private\n */\nexport const validateFormSchema = (schema) => {\n const errors = [];\n const warnings = [];\n if (!schema.components) {\n errors.push('Missing required property: components');\n }\n else if (!Array.isArray(schema.components)) {\n errors.push('Property \"components\" must be an array');\n }\n // Validate component structure\n if (Array.isArray(schema.components)) {\n const componentIds = new Set();\n const validateComponent = (comp, path = 'root') => {\n if (!comp.id) {\n errors.push(`Component at ${path} is missing \"id\" property`);\n }\n else {\n if (componentIds.has(comp.id)) {\n errors.push(`Duplicate component ID found: ${comp.id}`);\n }\n componentIds.add(comp.id);\n }\n if (!comp.type) {\n errors.push(`Component \"${comp.id || 'unknown'}\" is missing \"type\" property`);\n }\n if (comp.children && Array.isArray(comp.children)) {\n comp.children.forEach((child, index) => {\n validateComponent(child, `${path}.children[${index}]`);\n });\n }\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n comp.tabItems.forEach((tab, tabIndex) => {\n if (tab.content && Array.isArray(tab.content)) {\n tab.content.forEach((child, index) => {\n validateComponent(child, `${path}.tabItems[${tabIndex}].content[${index}]`);\n });\n }\n });\n }\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n comp.tableCells.forEach((row, rowIndex) => {\n if (Array.isArray(row)) {\n row.forEach((cell, colIndex) => {\n if (Array.isArray(cell)) {\n cell.forEach((child, index) => {\n validateComponent(child, `${path}.tableCells[${rowIndex}][${colIndex}][${index}]`);\n });\n }\n });\n }\n });\n }\n };\n schema.components.forEach((comp, index) => {\n validateComponent(comp, `components[${index}]`);\n });\n }\n return {\n valid: errors.length === 0,\n errors: errors.length > 0 ? errors : undefined,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n};\n/**\n * @private\n */\nexport const sanitizeFormSchema = (schema) => {\n const sanitized = {\n version: schema.version || \"0.1.0\",\n components: schema.components || []\n };\n const sanitizeComponent = (comp) => {\n const sanitizedComp = Object.assign({}, comp, { _configured: true });\n if (comp.children && Array.isArray(comp.children)) {\n sanitizedComp.children = comp.children.map(sanitizeComponent);\n }\n if (comp.tabItems && Array.isArray(comp.tabItems)) {\n sanitizedComp.tabItems = comp.tabItems.map((tab) => (Object.assign({}, tab, { content: tab.content ? tab.content.map(sanitizeComponent) : [] })));\n }\n if (comp.tableCells && Array.isArray(comp.tableCells)) {\n sanitizedComp.tableCells = comp.tableCells.map((row) => row.map((cell) => Array.isArray(cell) ? cell.map(sanitizeComponent) : []));\n }\n return sanitizedComp;\n };\n sanitized.components = sanitized.components.map(sanitizeComponent);\n return sanitized;\n};\n/**\n * @private\n */\nexport const exportFormSchema = (schema) => {\n return JSON.stringify(schema, null, 2);\n};\n","/**\n * @private\n */\n/**\n * @private\n */\nexport const RESERVED_RENDERER_KEYS = [\n 'id',\n 'type',\n 'name',\n 'label',\n 'conditions',\n 'customValidation',\n 'customvalidation',\n '_configured',\n 'widget',\n 'templateId',\n 'kind',\n 'as',\n 'visibility',\n 'options',\n 'tableCells',\n 'tabItems',\n 'children',\n 'templateData',\n 'ref'\n];\n/**\n * EJ2 lifecycle / framework methods whose names MUST NOT be invoked\n * by the pass-through (would be assigned-as-data, ignored by the\n * framework, but also poison if mapped to a setter eager on init).\n *\n * @private\n */\nexport const EJ2_LIFECYCLE_KEYS = [\n 'created',\n 'destroyed',\n 'appendTo',\n 'appendToElement',\n 'append',\n 'render',\n 'addEventListener',\n 'removeEventListener',\n 'getModuleName',\n 'inject',\n 'dataBind',\n 'refresh',\n 'onPropertyChanged'\n];\n/**\n * @private\n */\nexport function pickUnmappedSchemaProps(component, explicitKeys) {\n const comp = component || {};\n const explicit = {};\n for (let exIdx = 0; exIdx < explicitKeys.length; exIdx++) {\n explicit[explicitKeys[exIdx]] = true;\n }\n for (let rIdx = 0; rIdx < RESERVED_RENDERER_KEYS.length; rIdx++) {\n explicit[RESERVED_RENDERER_KEYS[rIdx]] = true;\n }\n for (let lIdx = 0; lIdx < EJ2_LIFECYCLE_KEYS.length; lIdx++) {\n explicit[EJ2_LIFECYCLE_KEYS[lIdx]] = true;\n }\n const keys = [];\n for (const k in comp) {\n if (Object.prototype.hasOwnProperty.call(comp, k) &&\n !explicit[k] &&\n k !== '__proto__' &&\n k !== 'constructor') {\n keys.push(k);\n }\n }\n keys.sort();\n const out = {};\n for (let outIdx = 0; outIdx < keys.length; outIdx++) {\n const key = keys[outIdx];\n out[key] = comp[key];\n }\n return out;\n}\n/**\n * @private\n */\nexport function applyExtraProps(control, extra) {\n if (!control || !extra) {\n return 0;\n }\n const keys = Object.keys(extra);\n let applied = 0;\n for (let kIdx = 0; kIdx < keys.length; kIdx++) {\n const k = keys[kIdx];\n try {\n control[k] = extra[k];\n applied++;\n }\n catch (e) {\n const ctor = (control && control.constructor && control.constructor.name) || '<unknown>';\n // eslint-disable-next-line no-console\n console.warn(`[form-renderer] cannot forward schema property \"${k}\" to control of type ${ctor}:`, e);\n }\n }\n return applied;\n}\n/**\n * @private\n */\nexport function forwardExtras(control, component, explicitKeys, extras) {\n const picked = pickUnmappedSchemaProps(component, explicitKeys);\n if (extras && extras.length) {\n for (let exIdx = 0; exIdx < extras.length; exIdx++) {\n const item = extras[exIdx];\n picked[item.key] = item.value;\n }\n // Re-sort with the injected extras deterministically.\n const sorted = {};\n Object.keys(picked).sort().forEach((k) => {\n sorted[k] = picked[k];\n });\n return applyExtraProps(control, sorted);\n }\n return applyExtraProps(control, picked);\n}\n","import { isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * @private\n * `StaticHtmlRenderer` is the Category C native reimplementation of\n * `Common/StaticHtmlRenderer.tsx`.\n *\n * Renders raw HTML into a `div`. Calls `SanitizeHtmlHelper.sanitize`\n * **only when** `enableHtmlSanitizer` is true; otherwise renders the raw\n * content. Supports an optional `id`.\n *\n * Mirrors the React component's `useMemo([content])` memoization by\n * recomputing the rendered string only when `content` changes — the host\n * replaces the inner HTML directly via `update()`.\n */\nexport class StaticHtmlRenderer {\n constructor(options) {\n this.content = options.content;\n this.id = options.id;\n this.enableHtmlSanitizer = isNullOrUndefined(options.enableHtmlSanitizer) ? true : options.enableHtmlSanitizer;\n this.el = options.target || null;\n }\n resolveHtml(content) {\n try {\n if (this.enableHtmlSanitizer) {\n return SanitizeHtmlHelper.sanitize(content);\n }\n return content;\n }\n catch (error) {\n return '';\n }\n }\n /**\n * Create and return the container element with the rendered HTML\n * already injected. The caller appends the returned element to the DOM.\n */\n render() {\n const div = document.createElement('div');\n if (this.id) {\n div.id = this.id;\n }\n div.innerHTML = this.resolveHtml(this.content);\n this.el = div;\n return div;\n }\n /**\n * Update the rendered content in-place (re-runs the sanitization /\n * raw-pass-through). Used by the host when `content` changes.\n */\n update(content) {\n this.content = content;\n if (this.el) {\n this.el.innerHTML = this.resolveHtml(this.content);\n }\n }\n /**\n * Return the live host element (or null before `render()`).\n */\n getElement() {\n return this.el;\n }\n /**\n * @private\n */\n destroy() {\n if (this.el && this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = null;\n this.content = '';\n this.enableHtmlSanitizer = false;\n this.id = undefined;\n }\n}\nexport default StaticHtmlRenderer;\n","import { TextBox, NumericTextBox, MaskedTextBox, Uploader, TextArea, Slider, ColorPicker, Rating, Signature } from '@syncfusion/ej2-inputs';\nimport { CheckBox, RadioButton, Switch, Button } from '@syncfusion/ej2-buttons';\nimport { SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { DropDownList, MultiSelect, CheckBoxSelection, VirtualScroll } from '@syncfusion/ej2-dropdowns';\nimport { DatePicker, DateTimePicker, TimePicker, DateRangePicker, Islamic } from '@syncfusion/ej2-calendars';\nimport { Message } from '@syncfusion/ej2-notifications';\nimport { ImageEditor } from '@syncfusion/ej2-image-editor';\nimport { RichTextEditor, Toolbar, HtmlEditor, Link, QuickToolbar, Image as RTEImage, Count, Table, EmojiPicker, SlashMenu, CodeBlock, ClipBoardCleanup, AutoFormat, ImportExport, PasteCleanup } from '@syncfusion/ej2-richtexteditor';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { mapButtonStyleToClass, mapPositionToJustifyContent, resolveButtonType, resolveConditionalData, resolveOptions } from '../common/utils';\nimport { OptionFetcher } from '../common/option-fetcher';\nimport { CheckboxGroup } from '../common/checkbox-group';\nimport { DataGridComponent } from '../common/datagrid-component';\nimport { ConditionalRuleEngine } from '../common/conditional-rule-engine';\nimport { forwardExtras } from '../common/index';\n/**\n * @private\n */\nconst normalizeAttributes = (attributes) => {\n if (!attributes) {\n return {};\n }\n if (Array.isArray(attributes)) {\n return attributes.reduce((acc, item) => {\n if (item && item.key && item.value !== undefined) {\n acc[item.key] = item.value;\n }\n return acc;\n }, {});\n }\n return attributes;\n};\n/**\n * @private\n */\nconst applyHostId = (el, id) => {\n if (el && id) {\n el.setAttribute('id', id);\n }\n};\n/**\n * Renders a single form field component (vanilla EJ2 TS) and returns the\n * instantiated EJ2 component instance (or host element). The host owns DOM\n * attachment and ref tracking.\n *\n * @private\n */\nexport const renderFormField = (options) => {\n const { component, value, onChange, onBlur, onClick, hasError = false, locale, formState, settings, components, enableRtl, ref, l10n } = options;\n const initializedGrids = options.initializedGrids || new Set();\n const target = options.target;\n const commonProps = {\n floatLabelType: (component.floatLabelType || 'Never'),\n placeholder: component.placeholder || '',\n enabled: !component.disabled\n };\n const createValidationHandlers = (getValue) => {\n const validateOn = component.validateOn || 'Change';\n const handlers = {};\n if (!validateOn || validateOn === 'Change') {\n handlers.change = (args) => onChange(getValue(args));\n handlers.blur = () => { if (onBlur) {\n onBlur();\n } };\n }\n if (validateOn === 'Blur') {\n handlers.change = (args) => onChange(getValue(args));\n handlers.blur = () => { if (onBlur) {\n onBlur();\n } };\n }\n return handlers;\n };\n const htmlAttrs = normalizeAttributes(component.htmlAttributes);\n if (component.required) {\n htmlAttrs['aria-required'] = 'true';\n }\n const errorClass = hasError ? 'e-error' : '';\n const cssClass = `${component.cssClass || ''} ${errorClass} ${component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : ''}`.trim();\n switch (component.type) {\n case 'textbox': {\n const tb = new TextBox(Object.assign({ id: component.name, type: component.multiline ? 'hidden' : (component.textboxType ? component.textboxType : 'text'), name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue || ''), multiline: component.multiline, showClearButton: component.showClearButton, autocomplete: component.autocomplete === false || component.autocomplete === undefined ? 'off' : 'on', readonly: component.readOnly || false, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n tb.appendTo(target);\n }\n forwardExtras(tb, component, [\n 'name', 'multiline', 'textboxType', 'defaultValue',\n 'showClearButton', 'autocomplete', 'readOnly', 'cssClass',\n 'suffix', 'prefix', 'floatLabelType', 'placeholder', 'disabled'\n ]);\n ref(tb);\n return tb;\n }\n case 'textarea': {\n const ta = new TextArea(Object.assign({ id: component.name, name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue || ''), cols: component.cols || 200, rows: component.textareaRows || 4, showClearButton: component.showClearButton || false, readonly: component.readOnly || false, maxLength: component.maxLength || 255, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix, resizeMode: 'Vertical' }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n ta.appendTo(target);\n }\n forwardExtras(ta, component, [\n 'name', 'defaultValue', 'cols', 'textareaRows',\n 'showClearButton', 'readOnly', 'maxLength', 'cssClass',\n 'suffix', 'prefix', 'floatLabelType', 'placeholder', 'disabled'\n ]);\n ref(ta);\n return ta;\n }\n case 'number': {\n const numValue = value === '' ? undefined : value;\n const ntb = new NumericTextBox({\n locale: locale,\n enableRtl: enableRtl,\n floatLabelType: commonProps.floatLabelType,\n placeholder: commonProps.placeholder,\n enabled: commonProps.enabled,\n value: numValue !== undefined ? numValue : (component.defaultValue || undefined),\n decimals: component.decimals || 2,\n currency: component.currency,\n format: component.numberFormat || 'n2',\n step: component.step || 1,\n min: component.minValue || undefined,\n max: component.maxValue || undefined,\n readonly: component.readOnly || false,\n showClearButton: component.showClearButton || false,\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n appendTemplate: component.suffix,\n prependTemplate: component.prefix,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n target.setAttribute('name', component.id);\n ntb.appendTo(target);\n }\n forwardExtras(ntb, component, [\n 'name', 'defaultValue', 'decimals', 'currency', 'numberFormat',\n 'step', 'minValue', 'maxValue', 'readOnly', 'showClearButton',\n 'cssClass', 'suffix', 'prefix', 'floatLabelType', 'placeholder', 'disabled'\n ]);\n ref(ntb);\n return ntb;\n }\n case 'checkbox': {\n const checkboxLabel = component.label && component.required\n ? `${component.label} *`\n : component.label;\n const cb = new CheckBox({\n locale: locale,\n name: component.id,\n enableRtl: enableRtl,\n label: checkboxLabel,\n labelPosition: component.checkboxLabelPosition,\n checked: ((component.checked !== undefined && component.checked !== null ? component.checked : false) || (value !== undefined && value !== null ? value : false)),\n indeterminate: component.indeterminate || false,\n disabled: component.disabled,\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n change: (args) => onChange(args.checked)\n });\n if (target) {\n applyHostId(target, component.name);\n cb.appendTo(target);\n }\n forwardExtras(cb, component, [\n 'name', 'checked', 'indeterminate',\n 'checkboxLabelPosition', 'cssClass'\n ]);\n ref(cb);\n return cb;\n }\n case 'checkboxGroup': {\n const fetchedCheckboxOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedCheckboxOptions.push(...res.options);\n group.setOptions(fetchedCheckboxOptions);\n }\n }).catch(() => { });\n const resolvedCheckboxOptions = resolveOptions(component.options, fetchedCheckboxOptions);\n const finalCheckboxOptions = resolvedCheckboxOptions.length > 0\n ? resolvedCheckboxOptions\n : (component.options || ['Option 1']);\n const group = new CheckboxGroup({\n component: Object.assign({}, component, { options: finalCheckboxOptions }),\n formState: formState,\n value: value,\n enableRtl: enableRtl,\n onChange: (v) => onChange(v),\n optionRef: options.ref,\n target: target,\n ref: ref\n });\n if (target) {\n applyHostId(target, component.name);\n }\n forwardExtras(group, component, [\n 'options', 'enableRtl', 'disabled', 'readOnly', 'required',\n 'checkboxLabelPosition', 'layoutDirection', 'gap', 'size',\n 'cssClass', 'htmlAttributes'\n ]);\n group.render(target);\n return group;\n }\n case 'radio': {\n const radioOptions = Array.isArray(component.options) ? component.options : ['Option 1'];\n const wrapper = createElement('div', {\n id: `${component.name}-group`,\n className: `e-radio-group ${errorClass}`\n });\n const rbInstances = [];\n radioOptions.forEach((option, idx) => {\n const optionValue = option;\n const optionText = option;\n const row = createElement('div');\n wrapper.appendChild(row);\n const rbHost = createElement('input', {\n id: `${component.name}_${idx}_${optionValue}`,\n attrs: { type: 'radio' }\n });\n row.appendChild(rbHost);\n const rb = new RadioButton({\n name: component.id,\n label: optionText,\n enableRtl: enableRtl,\n locale: locale,\n disabled: component.disabled,\n value: optionValue,\n htmlAttributes: htmlAttrs,\n labelPosition: component.fieldLabelPosition,\n checked: component.defaultValue === optionValue || value === optionValue,\n cssClass: cssClass,\n change: (args) => {\n if (args.value === optionValue) {\n onChange(optionValue);\n }\n }\n });\n rb.appendTo(rbHost);\n ref(rb, idx);\n if (options.ref && typeof options.ref === 'function') {\n options.ref(rb, idx);\n }\n rbInstances.push(rb);\n forwardExtras(rb, component, [\n 'name', 'options', 'disabled', 'defaultValue',\n 'fieldLabelPosition', 'cssClass', 'htmlAttributes'\n ]);\n });\n if (target) {\n target.appendChild(wrapper);\n }\n return rbInstances;\n }\n case 'dropdown': {\n // Same Vanilla TS fetch adaptation as checkboxGroup (see above).\n const fetchedDropdownOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedDropdownOptions.push(...res.options);\n ddl.dataSource = fetchedDropdownOptions;\n }\n }).catch(() => { });\n const resolvedDropdownOptions = resolveOptions(component.options, fetchedDropdownOptions);\n let finalDropdownOptions = resolvedDropdownOptions.length > 0\n ? resolvedDropdownOptions\n : (component.options || ['Option 1']);\n if (component.conditions && component.conditions.choiceBasedField) {\n finalDropdownOptions = ConditionalRuleEngine.getChoiceBasedOptions(component.conditions.choiceBasedField, finalDropdownOptions, formState ? formState.values : undefined, component.conditions.choiceBasedField.primaryFieldId);\n if (finalDropdownOptions.length > 0 && value != null && finalDropdownOptions.indexOf(value) === -1) {\n if (formState) {\n formState.values[component.id] = null;\n }\n }\n }\n const ddl = new DropDownList(Object.assign({ id: component.name, name: component.id, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, locale: locale, enableRtl: enableRtl, cssClass: cssClass, dataSource: finalDropdownOptions, value: formState.values[component.id] !== undefined ? formState.values[component.id] : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), showClearButton: component.showClearButton || false, readonly: component.readOnly || false, enableVirtualization: component.enableVirtualization || false, popupHeight: component.popupHeight || '300px', popupWidth: component.popupWidth || '100%', htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n // Inject services (VirtualScroll) for the virtualization path.\n DropDownList.Inject(VirtualScroll);\n if (target) {\n ddl.appendTo(target);\n }\n forwardExtras(ddl, component, [\n 'name', 'defaultValue', 'showClearButton', 'readOnly',\n 'enableVirtualization', 'popupHeight', 'popupWidth',\n 'cssClass', 'htmlAttributes', 'floatLabelType', 'placeholder',\n 'disabled', 'fields', 'groupBy'\n ]);\n ref(ddl);\n return ddl;\n }\n case 'multiselect': {\n const fetchedMultiSelectOptions = [];\n OptionFetcher.fetch(component.options, component.id, formState ? formState.values : undefined, components)\n .then((res) => {\n if (res.id === component.id && res.options.length > 0) {\n fetchedMultiSelectOptions.push(...res.options);\n ms.dataSource = fetchedMultiSelectOptions;\n }\n }).catch(() => { });\n const resolvedMultiSelectOptions = resolveOptions(component.options, fetchedMultiSelectOptions);\n const finalMultiSelectOptions = resolvedMultiSelectOptions.length > 0\n ? resolvedMultiSelectOptions\n : (component.options || ['Option 1']);\n const ms = new MultiSelect(Object.assign({ name: component.id, enableRtl: enableRtl, locale: locale, floatLabelType: commonProps.floatLabelType, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), placeholder: component.placeholder, dataSource: finalMultiSelectOptions, fields: { text: 'text', value: 'value' }, showClearButton: component.showClearButton || false, readonly: component.readOnly || false, allowCustomValue: component.allowCustomValue || false, addTagOnBlur: component.addTagOnBlur || false, delimiterChar: component.delimiterChar || ',', showSelectAll: component.showSelectAll || false, mode: component.showSelectAll ? 'CheckBox' : (component.visualMode ? component.visualMode : undefined), selectAllText: component.selectAllText, unSelectAllText: component.unSelectAllText, showDropDownIcon: component.showDropDownIcon !== false, enableVirtualization: component.enableVirtualization || false, popupHeight: component.popupHeight || '300px', popupWidth: component.popupWidth || '100%', cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n MultiSelect.Inject(CheckBoxSelection, VirtualScroll);\n if (target) {\n ms.appendTo(target);\n }\n forwardExtras(ms, component, [\n 'name', 'defaultValue', 'placeholder', 'showClearButton',\n 'readOnly', 'allowCustomValue', 'addTagOnBlur',\n 'delimiterChar', 'showSelectAll', 'visualMode', 'selectAllText',\n 'unSelectAllText', 'showDropDownIcon', 'enableVirtualization',\n 'popupHeight', 'popupWidth', 'cssClass', 'htmlAttributes',\n 'floatLabelType', 'disabled'\n ]);\n ref(ms);\n return ms;\n }\n case 'date': {\n const dp = new DatePicker(Object.assign({ floatLabelType: commonProps.floatLabelType, id: component.name, name: component.id, enableRtl: enableRtl, locale: locale, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'MM/dd/yyyy', readOnly: component.readOnly || false, showClearButton: component.showClearButton === undefined ? false : component.showClearButton, showTodayButton: component.showTodayButton !== false ? true : false, calendarMode: component.calendarMode || 'Gregorian', dayHeaderFormat: component.dayHeaderFormat || 'Short', depth: component.depth || 'Month', start: component.start || 'Month', firstDayOfWeek: component.firstDayOfWeek || 0, min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n DatePicker.Inject(Islamic);\n if (target) {\n dp.appendTo(target);\n }\n forwardExtras(dp, component, [\n 'name', 'defaultValue', 'format', 'readOnly', 'showClearButton',\n 'showTodayButton', 'calendarMode', 'dayHeaderFormat',\n 'depth', 'start', 'firstDayOfWeek', 'minDate', 'maxDate',\n 'cssClass', 'htmlAttributes', 'floatLabelType', 'placeholder',\n 'disabled'\n ]);\n ref(dp);\n return dp;\n }\n case 'dateTime': {\n const dtp = new DateTimePicker(Object.assign({ id: component.name, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, locale: locale, enableRtl: enableRtl, name: component.id, dayHeaderFormat: component.dayHeaderFormat || 'Short', value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'MM/dd/yyyy hh:mm a', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, showTodayButton: component.showTodayButton !== false ? true : false, depth: component.depth || 'Month', start: component.start || 'Month', step: component.step || 1, readonly: component.readOnly || false, min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, minTime: component.minTime ? new Date(`2000-01-01 ${component.minTime}`) : undefined, maxTime: component.maxTime ? new Date(`2000-01-01 ${component.maxTime}`) : undefined, enableMask: false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n DateTimePicker.Inject(Islamic);\n if (target) {\n dtp.appendTo(target);\n }\n forwardExtras(dtp, component, [\n 'name', 'defaultValue', 'format', 'showClearButton',\n 'showTodayButton', 'dayHeaderFormat', 'depth', 'start', 'step',\n 'minDate', 'maxDate', 'minTime', 'maxTime', 'readOnly',\n 'cssClass', 'htmlAttributes', 'floatLabelType', 'placeholder',\n 'disabled'\n ]);\n ref(dtp);\n return dtp;\n }\n case 'time': {\n const tp = new TimePicker(Object.assign({ id: component.name, locale: locale, name: component.id, enableRtl: enableRtl, floatLabelType: commonProps.floatLabelType, placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), format: component.format || 'hh:mm a', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, step: component.step || 30, readonly: component.readOnly || false, min: component.minTime ? new Date(`2000-01-01 ${component.minTime}`) : undefined, max: component.maxTime ? new Date(`2000-01-01 ${component.maxTime}`) : undefined, enableMask: false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n tp.appendTo(target);\n }\n forwardExtras(tp, component, [\n 'name', 'defaultValue', 'format', 'showClearButton',\n 'step', 'minTime', 'maxTime', 'readOnly',\n 'cssClass', 'htmlAttributes', 'floatLabelType', 'placeholder',\n 'disabled'\n ]);\n ref(tp);\n return tp;\n }\n case 'dateRange': {\n const drp = new DateRangePicker(Object.assign({ id: component.name, locale: locale, enableRtl: enableRtl, name: component.id, floatLabelType: commonProps.floatLabelType, dayHeaderFormat: component.dayHeaderFormat || 'Short', placeholder: commonProps.placeholder, enabled: commonProps.enabled, value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : null), depth: component.depth || 'Month', start: component.start || 'Month', min: component.minDate ? new Date(component.minDate) : undefined, max: component.maxDate ? new Date(component.maxDate) : undefined, format: component.format || 'MM/dd/yyyy', separator: component.separator || ' - ', showClearButton: component.showClearButton === undefined ? false : component.showClearButton, readonly: component.readOnly || false, cssClass: cssClass, htmlAttributes: htmlAttrs }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n drp.appendTo(target);\n }\n forwardExtras(drp, component, [\n 'name', 'defaultValue', 'format', 'separator',\n 'showClearButton', 'minDate', 'maxDate', 'readOnly',\n 'dayHeaderFormat', 'depth', 'start',\n 'cssClass', 'htmlAttributes', 'floatLabelType', 'placeholder',\n 'disabled'\n ]);\n ref(drp);\n return drp;\n }\n case 'switch': {\n const sw = new Switch({\n locale: locale,\n enableRtl: enableRtl,\n value: component.defaultValue,\n name: component.id,\n checked: ((component.checked !== undefined && component.checked !== null ? component.checked : false) || (value !== undefined && value !== null ? value : false)),\n disabled: component.disabled,\n onLabel: component.onLabel || '',\n offLabel: component.offLabel || '',\n cssClass: cssClass,\n htmlAttributes: htmlAttrs,\n change: (args) => onChange(args.checked)\n });\n if (target) {\n applyHostId(target, component.name);\n sw.appendTo(target);\n }\n forwardExtras(sw, component, [\n 'name', 'defaultValue', 'checked', 'onLabel', 'offLabel',\n 'cssClass', 'htmlAttributes'\n ]);\n ref(sw);\n return sw;\n }\n case 'button': {\n const groupButtons = (component.buttonsGroups || component.buttons || []);\n if (groupButtons && groupButtons.length > 0) {\n const groupStyleObj = {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: component.gap || '8px',\n justifyContent: mapPositionToJustifyContent(component.position),\n width: component.width || undefined,\n maxWidth: '100%'\n };\n const groupContainer = createElement('div', {\n id: component.name,\n attrs: {\n role: 'group',\n 'aria-label': component.label || 'Button Group',\n className: `${cssClass} ${enableRtl ? 'e-rtl' : ''}`\n }\n });\n Object.assign(groupContainer.style, groupStyleObj);\n const btnInstances = [];\n groupButtons.forEach((btnDef, idx) => {\n const btnId = `${component.name}_${idx}`;\n let btnCssClass = [mapButtonStyleToClass(btnDef.style)].filter(Boolean).join(' ');\n btnCssClass += component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : '';\n const resolvedGroupType = resolveButtonType(btnDef.type);\n const btnHost = createElement('button', {\n id: String(btnId),\n attrs: { name: String(btnId), type: resolvedGroupType }\n });\n groupContainer.appendChild(btnHost);\n const btnInst = new Button({\n locale: locale,\n enableRtl: enableRtl,\n cssClass: btnCssClass,\n disabled: btnDef.disabled || false,\n content: btnDef.label || `Button ${idx + 1}`,\n iconCss: btnDef.iconCss,\n iconPosition: btnDef.iconPosition\n });\n btnInst.appendTo(btnHost);\n btnInst.element.onclick = (event) => {\n if (onClick) {\n onClick(event);\n }\n };\n ref(btnInst, idx);\n btnInstances.push(btnInst);\n if (options.ref && typeof options.ref === 'function') {\n options.ref(btnInst, idx);\n }\n });\n if (target) {\n target.appendChild(groupContainer);\n }\n for (let bi = 0; bi < btnInstances.length; bi++) {\n forwardExtras(btnInstances[bi], component, [\n 'buttonsGroups', 'gap', 'position', 'size', 'cssClass'\n ]);\n }\n return btnInstances;\n }\n // Fallback: single ButtonComponent when no group is configured.\n const resolvedButtonType = resolveButtonType(component.buttonType);\n const buttonCssClassList = [\n mapButtonStyleToClass(component.style),\n resolvedButtonType === 'submit' ? 'submit-btn form-submit-type' : '',\n resolvedButtonType === 'reset' ? 'form-reset-type' : '',\n component.cssClass || 'e-primary',\n component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : ''\n ].filter(Boolean).join(' ') || 'e-primary';\n const buttonContainerStyle = {\n display: 'flex',\n justifyContent: mapPositionToJustifyContent(component.position),\n width: component.width || '100%'\n };\n const container = createElement('div', {\n id: `${component.name}-container`\n });\n Object.assign(container.style, buttonContainerStyle);\n const btnHost = createElement('button', {\n id: component.name,\n attrs: { type: resolvedButtonType }\n });\n container.appendChild(btnHost);\n const btnInst = new Button({\n enableRtl: enableRtl,\n locale: locale,\n cssClass: buttonCssClassList,\n disabled: component.disabled,\n iconCss: component.iconCss,\n iconPosition: component.iconPosition,\n content: component.label,\n });\n btnInst.appendTo(btnHost);\n ref(btnInst);\n btnInst.element.onclick = (event) => {\n if (onClick) {\n onClick(event);\n }\n };\n if (target) {\n target.appendChild(container);\n }\n forwardExtras(btnInst, component, [\n 'buttonType', 'style', 'iconCss', 'iconPosition',\n 'cssClass', 'position', 'size', 'disabled'\n ]);\n return btnInst;\n }\n case 'splitButton': {\n const splitButtonCssClassList = [\n component.style === 'primary' ? 'e-primary' : '',\n component.style === 'flat' ? '' : '',\n component.style === 'information' ? 'e-info' : '',\n component.style === 'error' ? 'e-danger' : '',\n component.style === 'success' ? 'e-success' : '',\n component.style === 'warning' ? 'e-warning' : '',\n component.cssClass || '',\n component.size === 'Small' ? ' e-small' : component.size === 'Bigger' ? ' e-bigger' : ''\n ].filter(Boolean).join(' ') || undefined;\n const splitButtonContainerStyle = {\n display: 'flex',\n justifyContent: mapPositionToJustifyContent(component.position)\n };\n const container = createElement('div', {\n id: `${component.name}-container`,\n attrs: { 'aria-label': 'Splitbutton' }\n });\n Object.assign(container.style, splitButtonContainerStyle);\n const items = (component.options && component.options.length > 0\n ? component.options.map((option, index) => ( /* eslint-disable-next-line */{\n text: option,\n id: `${component.id}_option_${index}`\n }))\n : [/* eslint-disable-next-line */ { text: 'Option 1', id: `${component.id}_option_0` }]);\n const sbHost = createElement('button', {\n id: component.name\n });\n container.appendChild(sbHost);\n const sb = new SplitButton({\n locale: locale,\n enableRtl: enableRtl,\n content: component.label || 'Split Button',\n items: items,\n cssClass: splitButtonCssClassList,\n disabled: component.disabled,\n iconCss: component.iconCss,\n iconPosition: component.iconPosition || 'Left',\n click: (args) => {\n if (onClick) {\n onClick(Object.assign({}, args));\n }\n },\n select: (args) => {\n if (onClick) {\n onClick(Object.assign({}, args, { selectedItem: args.item.text }));\n }\n }\n });\n sb.appendTo(sbHost);\n if (target) {\n target.appendChild(container);\n }\n forwardExtras(sb, component, [\n 'options', 'style', 'iconCss', 'iconPosition',\n 'cssClass', 'position', 'disabled'\n ]);\n ref(sb);\n return sb;\n }\n case 'signature': {\n const canvas = createElement('canvas', {\n id: component.name,\n className: cssClass\n });\n const sig = new Signature({\n enableRtl: enableRtl,\n locale: locale,\n backgroundColor: component.backgroundColor || '',\n strokeColor: component.strokeColor || '',\n maxStrokeWidth: component.maxValue,\n minStrokeWidth: component.minValue,\n velocity: component.velocity,\n disabled: component.disabled,\n change: () => onChange(component.name)\n });\n if (target) {\n sig.appendTo(canvas);\n target.appendChild(canvas);\n }\n forwardExtras(sig, component, [\n 'backgroundColor', 'strokeColor', 'maxValue', 'minValue', 'velocity'\n ]);\n ref(sig);\n return sig;\n }\n case 'rating': {\n const rt = new Rating({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue || 0),\n disabled: component.disabled,\n cssClass: cssClass,\n allowReset: component.allowReset,\n itemsCount: component.itemsCount,\n min: component.minValue,\n precision: component.precision,\n readOnly: component.readOnly,\n showTooltip: component.showRatingTooltip || false,\n showLabel: component.showRatingLabel,\n labelPosition: component.showRatingLabel ? component.ratingLabelPosition : undefined,\n valueChanged: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n target.setAttribute('name', component.id);\n rt.appendTo(target);\n }\n forwardExtras(rt, component, [\n 'defaultValue', 'allowReset', 'itemsCount', 'minValue',\n 'precision', 'readOnly', 'showRatingTooltip',\n 'showRatingLabel', 'ratingLabelPosition', 'cssClass', 'labelPosition'\n ]);\n ref(rt);\n return rt;\n }\n case 'colorPicker': {\n const cp = new ColorPicker({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue || ''),\n disabled: component.disabled,\n enableOpacity: component.enableOpacity,\n showButtons: component.showButtons,\n showRecentColors: component.showRecentColors,\n noColor: component.showNoColor,\n cssClass: cssClass,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n cp.appendTo(target);\n }\n forwardExtras(cp, component, [\n 'defaultValue', 'enableOpacity', 'showButtons',\n 'showRecentColors', 'showNoColor', 'cssClass'\n ]);\n ref(cp);\n return cp;\n }\n case 'inputMask': {\n const im = new MaskedTextBox(Object.assign({ id: component.name, name: component.id, enableRtl: enableRtl, floatLabelType: component.floatLabelType || 'Never', placeholder: component.placeholder || '', enabled: !component.disabled, locale: locale, value: value !== undefined ? value : (component.defaultValue || ''), mask: component.mask || '000-000-0000', promptChar: component.promptChar || '_', customCharacters: component.customCharacters, readOnly: component.readOnly || false, showClearButton: component.showClearButton !== false, cssClass: cssClass, htmlAttributes: htmlAttrs, appendTemplate: component.suffix, prependTemplate: component.prefix }, createValidationHandlers((args) => args.value || '')));\n if (target) {\n im.appendTo(target);\n }\n forwardExtras(im, component, [\n 'name', 'defaultValue', 'mask', 'promptChar',\n 'customCharacters', 'readOnly', 'showClearButton',\n 'cssClass', 'htmlAttributes', 'suffix', 'prefix',\n 'floatLabelType', 'placeholder', 'disabled'\n ]);\n ref(im);\n return im;\n }\n case 'rangeSlider': {\n const sl = new Slider({\n enableRtl: enableRtl,\n locale: locale,\n value: value !== undefined ? value : (component.defaultValue !== undefined && component.defaultValue !== null ? component.defaultValue : 0),\n min: component.minValue || 0,\n max: component.maxValue || 100,\n step: component.step || 1,\n cssClass: cssClass,\n enabled: !component.disabled,\n readonly: component.readOnly,\n showButtons: component.showButtons,\n change: (args) => onChange(args.value)\n });\n if (target) {\n applyHostId(target, component.name);\n sl.appendTo(target);\n }\n forwardExtras(sl, component, [\n 'defaultValue', 'minValue', 'maxValue', 'step',\n 'cssClass', 'readOnly', 'showButtons'\n ]);\n ref(sl);\n return sl;\n }\n case 'fileUpload': {\n const up = new Uploader({\n enableRtl: enableRtl,\n locale: locale,\n type: 'file',\n enabled: !component.disabled,\n allowedExtensions: component.allowExtensions,\n asyncSettings: { saveUrl: component.saveUrl, removeUrl: component.removeUrl },\n buttons: component.buttons || {\n 'browse': 'Choose File',\n 'clear': 'Clear All',\n 'upload': 'Upload All'\n },\n maxFileSize: component.maxValue,\n minFileSize: component.minValue,\n multiple: !!component.allowMultiple,\n showFileList: component.showFileList,\n htmlAttributes: htmlAttrs,\n cssClass: cssClass,\n change: (args) => onChange(args.file)\n });\n if (target) {\n applyHostId(target, component.name);\n up.appendTo(target);\n }\n forwardExtras(up, component, [\n 'allowExtensions', 'saveUrl', 'removeUrl',\n 'buttons', 'maxValue', 'minValue',\n 'allowMultiple', 'showFileList',\n 'htmlAttributes', 'cssClass'\n ]);\n ref(up);\n return up;\n }\n case 'imageEditor': {\n const ie = new ImageEditor({\n locale: locale,\n enableRtl: enableRtl,\n disabled: component.disabled,\n cssClass: cssClass,\n height: (component.height != null ? component.height : '350px').toString(),\n width: (component.width != null ? component.width : '100%').toString(),\n editComplete: () => onChange(component.name),\n fileOpened: () => onChange(component.name)\n });\n if (target) {\n applyHostId(target, component.name);\n ie.appendTo(target);\n }\n forwardExtras(ie, component, [\n 'height', 'width', 'cssClass'\n ]);\n ref(ie);\n return ie;\n }\n case 'message': {\n const msg = new Message({\n locale: locale,\n enableRtl: enableRtl,\n severity: component.severity || component.messageType || 'info',\n variant: component.variant,\n content: component.content || 'Message',\n showCloseIcon: component.showCloseIcon,\n showIcon: ((component.showIcon === undefined ? false : component.showIcon) || false),\n cssClass: cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n msg.appendTo(target);\n }\n forwardExtras(msg, component, [\n 'severity', 'messageType', 'variant', 'content',\n 'showCloseIcon', 'showIcon', 'cssClass'\n ]);\n ref(msg);\n return msg;\n }\n case 'dataGrid': {\n const dg = component;\n const conditionalDataResult = resolveConditionalData(dg.conditions, (formState && formState.values) || {});\n const conditionalData = conditionalDataResult ? conditionalDataResult.dataSource : undefined;\n const conditionalColumns = conditionalDataResult ? conditionalDataResult.columns : undefined;\n const effectiveDataSource = conditionalData || dg.dataSource;\n const fetchedDataSource = [];\n OptionFetcher.fetch(conditionalData || dg.dataSource, dg.id, formState && formState.values, components).then((res) => {\n if (res.id === dg.id && res.options.length > 0) {\n const newDataSource = resolveOptions(conditionalData || dg.dataSource, res.options, fetchedLookupDataSource);\n gridComp.setDataSource(newDataSource);\n }\n });\n const fetchedLookupDataSource = [];\n const resolvedDataSource = conditionalData\n ? resolveOptions(conditionalData, fetchedDataSource, fetchedLookupDataSource)\n : resolveOptions(dg.dataSource, fetchedDataSource, fetchedLookupDataSource);\n const finalDataSource = resolvedDataSource.length > 0 ? resolvedDataSource : (dg.dataSource !== undefined && dg.dataSource !== null ? dg.dataSource : []);\n const finalColumns = conditionalColumns && conditionalColumns.length > 0 ? conditionalColumns : (dg.columns !== undefined && dg.columns !== null ? dg.columns : []);\n const gridHost = target || createElement('div', {\n id: dg.name,\n className: dg.cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n }\n const gridComp = new DataGridComponent({\n locale: locale,\n name: dg.name || '',\n columns: finalColumns,\n enableRtl: enableRtl,\n dataSource: (finalDataSource !== undefined && finalDataSource.length > 0) ? finalDataSource : value,\n height: (dg.height != null ? dg.height : '200px'),\n width: (dg.width != null ? dg.width : '100%'),\n pageSize: dg.pageSize || 6,\n allowPaging: dg.allowPaging !== false,\n allowFiltering: dg.allowFiltering,\n allowAdding: dg.allowAdding !== false,\n allowEditing: dg.allowEditing !== false,\n allowDeleting: dg.allowDeleting !== false,\n onDataChange: (data) => onChange(data),\n cssClass: cssClass,\n target: gridHost,\n ref: ref\n });\n gridComp.render(gridHost);\n if (!initializedGrids.has(component.id) && formState && Array.isArray(finalDataSource)) {\n formState.values[component.id] = finalDataSource;\n gridComp.isInitialized = true;\n initializedGrids.add(component.id);\n }\n forwardExtras(gridComp, component, [\n 'dataSource', 'columns', 'conditions', 'height', 'width',\n 'pageSize', 'allowPaging', 'allowFiltering', 'allowAdding',\n 'allowEditing', 'allowDeleting', 'cssClass'\n ]);\n if (typeof options.ref === 'function') {\n options.ref(gridComp);\n }\n else if (options.ref) {\n options.ref.current = gridComp;\n }\n return target || gridHost;\n }\n case 'richTextEditor': {\n const toolbarSettings = {\n items: [\n 'Undo', 'Redo', '|', 'Bold', 'Italic', 'Underline', 'StrikeThrough', 'InlineCode', '|',\n 'CreateLink', 'Image', 'CreateTable', 'CodeBlock', 'HorizontalLine', 'Blockquote', 'EmojiPicker', '|',\n 'LineHeight', 'Formats', 'Alignments', '|', 'BulletFormatList', 'NumberFormatList', 'Checklist', '|',\n 'Outdent', 'Indent', '|', 'FontColor', 'BackgroundColor', 'FontName', 'FontSize', '|',\n 'LowerCase', 'UpperCase', 'SuperScript', 'SubScript', '|', 'SourceCode', '|'\n ]\n };\n if (component.enableImportFromWord && component.enableImportFromWord.enabled) {\n toolbarSettings.items.push('ImportWord');\n }\n if (component.enableExportToWord && component.enableExportToWord.enabled) {\n toolbarSettings.items.push('ExportWord');\n }\n if (component.enableExportToPdf && component.enableExportToPdf.enabled) {\n toolbarSettings.items.push('ExportPdf');\n }\n toolbarSettings.items.push('Print');\n const hasValidService = (config) => !!config && config.enabled && typeof config.serviceUrl === 'string' && config.serviceUrl.trim() !== '';\n const importWord = hasValidService(component.enableImportFromWord)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '')\n ? (component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableImportFromWord ? component.enableImportFromWord.serviceUrl : '').replace(/^\\/+/, '')}`\n }\n : undefined;\n const exportWord = hasValidService(component.enableExportToWord)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableExportToWord ? component.enableExportToWord.serviceUrl : '')\n ? (component.enableExportToWord ? component.enableExportToWord.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableExportToWord ? component.enableExportToWord.serviceUrl : '').replace(/^\\/+/, '')}`,\n fileName: 'RichTextEditor.docx',\n stylesheet: `\n .e-rte-content {\n font-size: 1em;\n font-weight: 400;\n margin: 0;\n }\n `\n }\n : undefined;\n const exportPdf = hasValidService(component.enableExportToPdf)\n ? {\n // eslint-disable-next-line security/detect-unsafe-regex\n serviceUrl: /^(https?:)?\\/\\//i.test(component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '')\n ? (component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '')\n : `${(settings && settings.hostUrl ? settings.hostUrl : '').replace(/\\/+$/, '')}/${(component.enableExportToPdf ? component.enableExportToPdf.serviceUrl : '').replace(/^\\/+/, '')}`,\n fileName: 'RichTextEditor.pdf',\n stylesheet: `\n .e-rte-content {\n font-size: 1em;\n font-weight: 400;\n margin: 0;\n }\n `\n }\n : undefined;\n const rte = new RichTextEditor({\n locale: locale,\n toolbarSettings: toolbarSettings,\n enableRtl: enableRtl,\n value: value !== undefined ? value : (component.defaultValue || ''),\n placeholder: component.placeholder || '',\n enabled: !component.disabled,\n readonly: component.readOnly || false,\n maxLength: component.maxLength || undefined,\n cssClass: cssClass || undefined,\n height: component.height || '300px',\n width: component.width || '100%',\n htmlAttributes: htmlAttrs,\n importWord: importWord,\n exportPdf: exportPdf,\n exportWord: exportWord,\n change: (args) => onChange(args.value)\n });\n RichTextEditor.Inject(Toolbar, Link, HtmlEditor, QuickToolbar, RTEImage, Count, Table, EmojiPicker, PasteCleanup, SlashMenu, CodeBlock, ClipBoardCleanup, AutoFormat, ImportExport);\n rte.appendTo(target);\n forwardExtras(rte, component, [\n 'enableImportFromWord', 'enableExportToWord', 'enableExportToPdf',\n 'defaultValue', 'placeholder', 'readOnly', 'maxLength', 'cssClass',\n 'height', 'width', 'htmlAttributes', 'toolbarSettings'\n ]);\n ref(rte);\n return rte;\n }\n default: {\n const msg = new Message({\n locale: locale,\n enableRtl: enableRtl,\n severity: 'Warning',\n content: `${l10n.getConstant('unsupportedComponent')} : ${component.type}`,\n cssClass: cssClass\n });\n if (target) {\n applyHostId(target, component.name);\n msg.appendTo(target);\n }\n ref(msg);\n return msg;\n }\n }\n};\n","/**\n * @private\n */\nexport function resolveCustomWidget(component, settings) {\n if (!settings || settings.length === 0) {\n return null;\n }\n const compName = component.name;\n if (typeof compName === 'string' && compName.length > 0) {\n for (const entry of settings) {\n const fn = entry.fieldName;\n if (typeof fn === 'string' && fn.length > 0 && fn === compName) {\n return { entry: entry, matchKind: 'fieldName' };\n }\n }\n }\n const compTemplateId = component.templateId;\n if (typeof compTemplateId === 'string' && compTemplateId.length > 0) {\n for (const entry of settings) {\n const eid = entry.templateId;\n if (typeof eid === 'string' && eid.length > 0 && eid === compTemplateId) {\n return { entry: entry, matchKind: 'templateId' };\n }\n }\n }\n const compType = component.type;\n if (typeof compType === 'string' && compType.length > 0) {\n for (const entry of settings) {\n const et = entry.type;\n if (typeof et === 'string' && et.length > 0 && et === compType) {\n return { entry: entry, matchKind: 'type' };\n }\n }\n }\n return null;\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar FormRenderer_1;\nimport { Component, Collection, Property, Event, NotifyPropertyChanges, enableRipple, createElement, ChildProperty, isNullOrUndefined, L10n, getComponent, addClass, compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { renderFormField } from './render-form-field';\nimport { resolveCustomWidget } from './custom-widget-resolver';\nimport { mergeSchema, inferTypeFromWidget } from '../common/json-converter';\nimport { UniversalJsonParser } from '../common/parser';\nimport { VALIDATION_REGEX, formatDateValues, splitWidths } from '../common/utils';\nimport StaticHtmlRenderer from '../common/static-html-renderer';\nimport { ConditionalRuleEngine } from '../common/index';\nimport { ExpressionEngine } from '../common/expressions/expression-engine';\nimport { MinMaxRuleEngine } from '../common/minmax-rule-engine';\nimport { CustomValidationEngine } from '../common/custom-validation-engine';\n/**\n * @private\n */\nconst inputTargetTypes = [\n 'textbox',\n 'number',\n 'checkbox',\n 'dropdown',\n 'multiselect',\n 'date',\n 'dateTime',\n 'time',\n 'dateRange',\n 'switch',\n 'rating',\n 'colorPicker',\n 'inputMask',\n 'fileUpload'\n];\n/**\n * @private\n */\nexport const defaultLocale = {\n \"unsupportedComponent\": \"Unsupported Component type\"\n};\n/**\n * Specifies the custom widget settings for rendering custom templates for existing FormComponentTypes.\n */\nexport class CustomWidgetSetting extends ChildProperty {\n}\n__decorate([\n Property(null)\n], CustomWidgetSetting.prototype, \"template\", void 0);\n__decorate([\n Property('')\n], CustomWidgetSetting.prototype, \"type\", void 0);\n__decorate([\n Property('')\n], CustomWidgetSetting.prototype, \"templateId\", void 0);\n__decorate([\n Property('')\n], CustomWidgetSetting.prototype, \"fieldName\", void 0);\n/**\n * The FormRenderer component consumes a JSON form schema and renders a fully functional, Syncfusion-based form. It handles field mapping, conditional visibility/disabling, expression evaluation, custom validation, and data submission.\n *\n * ```typescript\n * let form: FormRenderer = new FormRenderer({\n * schema: formSchema,\n * submit: (args: SubmitEventArgs) => console.log(args)\n * });\n * form.appendTo('#container');\n * ```\n */\nlet FormRenderer = FormRenderer_1 = class FormRenderer extends Component {\n /**\n * @private\n */\n constructor(options, element) {\n super(options, element);\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n this.l10n = new L10n('form-renderer', defaultLocale, this.locale);\n /**\n * @private\n */\n this.formState = { values: Object.create(null), errors: Object.create(null) };\n this.validator = null;\n this.inputRefs = {};\n this.conditionalValueApplied = {};\n this.expressionEngine = null;\n this.expressionDependencyGraph = {};\n this.expressionEvaluationInProgress = false;\n this.previousFormValues = {};\n this.computedFieldNames = new Set();\n this.customValidationEngine = new CustomValidationEngine();\n this.currentFormValues = {};\n this.isInitialized = false;\n this.hasLayoutComponentsCache = false;\n this.idToLabelCache = {};\n this.initialValuesCache = {};\n this.renderedInstances = [];\n this.tooltipRefs = {};\n this.createdFired = false;\n this.rerenderScheduled = false;\n this.conditionalTriggerFieldIds = new Set();\n this.preservedFields = new Map();\n this.consumerDependencyMap = new Map();\n /**\n * @private\n */\n this.pendingChangedFieldIds = new Set();\n }\n /**\n * @private\n */\n getModuleName() {\n return 'form-renderer';\n }\n /**\n * @private\n */\n getPersistData() {\n return this.addOnPersist(['formState', JSON.stringify(this.formState)]);\n }\n /**\n * @private\n */\n preRender() {\n enableRipple(true);\n this.createdFired = false;\n this.expressionEngine = new ExpressionEngine();\n }\n /**\n * @private\n */\n render() {\n this.clearEngineCaches();\n this.removePreviousRoot();\n this.normalizeSchema();\n this.element.classList.add('form-renderer-container');\n if (this.className) {\n addClass([this.element], this.className.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n this.hasLayoutComponentsCache = this.computeHasLayoutComponents();\n this.idToLabelCache = this.computeIdToLabel();\n this.initialValuesCache = this.buildInitialValues();\n this.buildValidationRulesAndBridge();\n if (!this.isInitialized) {\n this.isInitialized = true;\n }\n if (this.isReact && this.portals) {\n this.renderReactTemplates();\n }\n if (this.formState && this.initialValuesCache) {\n const initKeys = Object.keys(this.initialValuesCache);\n for (const id of initKeys) {\n const value = this.initialValuesCache[id];\n if (!(this.formState).values[id]) {\n (this.formState).values[id] = value;\n }\n }\n }\n this.currentFormValues = Object.assign({}, (this.formState ? this.formState.values : {}));\n this.initExpressionEngine();\n this.buildConditionalDependencyMap();\n const root = createElement('form', {\n className: `form-renderer ${this.layoutClass}`,\n attrs: { role: 'region', 'aria-label': this.processedSchemaCache.settings ? (this.processedSchemaCache.settings.name || 'Form') : 'Form' }\n });\n this.element.appendChild(root);\n this.inputRefs = {};\n (this.processedSchemaCache.components || []).forEach((component) => {\n const rendered = this.renderComponent(component);\n if (rendered) {\n root.appendChild(rendered);\n this.refreshRenderedComponent(component, rendered);\n }\n });\n if (this.created && !this.createdFired) {\n setTimeout(() => {\n if (Object.keys(this.inputRefs).length > 0) {\n this.createdFired = true;\n this.trigger('created', {});\n }\n }, 0);\n }\n }\n refreshRenderedComponent(component, rendered) {\n let componentRoot = rendered;\n if (component.type === 'tabs') {\n componentRoot = rendered.querySelector(`#${component.id}.e-control.e-tab`) || rendered;\n }\n else {\n componentRoot = rendered.querySelector(`[data-field-id=\"${component.id}\"]`) || rendered;\n }\n if (component.type === 'richTextEditor') {\n const rteElement = componentRoot.querySelector('.e-richtexteditor');\n const rteInstance = rteElement ? getComponent(rteElement, 'richtexteditor') : null;\n if (rteInstance) {\n rteInstance.refreshUI();\n }\n }\n else if (component.type === 'dataGrid') {\n const toolbarElement = componentRoot.querySelector('.e-control.e-toolbar');\n const toolbarInstance = toolbarElement ? getComponent(toolbarElement, 'toolbar') : null;\n if (toolbarInstance) {\n toolbarInstance.refresh();\n }\n }\n else if (component.type === 'imageEditor') {\n const editorElement = componentRoot.querySelector('.e-control.e-image-editor');\n const editorInstance = editorElement ? getComponent(editorElement, 'image-editor') : null;\n if (editorInstance) {\n editorInstance.refresh();\n }\n }\n else if (component.type === 'tabs') {\n const tabInstance = getComponent(componentRoot, 'tab');\n if (tabInstance) {\n tabInstance.refreshOverflow();\n }\n }\n if (component.children) {\n component.children.forEach((child) => this.refreshRenderedComponent(child, rendered));\n }\n if (component.tableCells) {\n component.tableCells.forEach((row) => {\n row.forEach((cell) => cell.forEach((child) => this.refreshRenderedComponent(child, rendered)));\n });\n }\n if (component.tabItems) {\n component.tabItems.forEach((tab) => {\n if (tab.content) {\n tab.content.forEach((child) => this.refreshRenderedComponent(child, rendered));\n }\n });\n }\n }\n /**\n * @private\n */\n normalizeSchema() {\n const schema = this.schema;\n try {\n if (!schema) {\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n return;\n }\n let parsedInput = schema;\n if (typeof schema === 'string') {\n try {\n parsedInput = JSON.parse(schema);\n }\n catch (err) {\n if (this.failure) {\n this.trigger('failure', {\n error: err\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n return;\n }\n }\n const isUnifiedSchema = parsedInput && typeof parsedInput === 'object' &&\n parsedInput.properties && Array.isArray(parsedInput.layout);\n if (isUnifiedSchema) {\n this.processedSchemaCache = mergeSchema(parsedInput, this.dataModel || undefined);\n }\n else {\n const parser = new UniversalJsonParser();\n const parseResult = parser.parse(typeof schema === 'string' ? schema : JSON.stringify(schema));\n if (parseResult.success && parseResult.schema) {\n this.processedSchemaCache = parseResult.schema;\n }\n else {\n if (this.failure) {\n this.trigger('failure', {\n error: parseResult.errors\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n }\n }\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n this.processedSchemaCache = { version: '1.0.0', components: [] };\n }\n }\n /**\n * @private\n */\n computeHasLayoutComponents() {\n if (!this.processedSchemaCache.components) {\n return false;\n }\n const checkForLayoutTypes = (components) => {\n for (const comp of components) {\n if (['table', 'tabs', 'panel', 'card'].indexOf(comp.type) !== -1) {\n return true;\n }\n if (comp.children && checkForLayoutTypes(comp.children)) {\n return true;\n }\n if (comp.tableCells) {\n for (const row of comp.tableCells) {\n for (const cell of row) {\n if (checkForLayoutTypes(cell)) {\n return true;\n }\n }\n }\n }\n if (comp.tabItems) {\n for (const tab of comp.tabItems) {\n if (tab.content && checkForLayoutTypes(tab.content)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n return checkForLayoutTypes(this.processedSchemaCache.components);\n }\n /**\n * @private\n */\n get layoutClass() {\n if (this.hasLayoutComponentsCache) {\n return '';\n }\n switch (this.layout) {\n case 'TwoColumn':\n return 'twolayout';\n case 'ThreeColumn':\n return 'threelayout';\n case 'FourColumn':\n return 'fourlayout';\n case 'SingleColumn':\n default:\n return '';\n }\n }\n /**\n * @private\n */\n collectAllComponents(components) {\n const all = [];\n const traverse = (comps) => {\n comps.forEach((comp) => {\n all.push(comp);\n if (comp.children && comp.children.length > 0) {\n traverse(comp.children);\n }\n if (comp.tableCells) {\n comp.tableCells.forEach((row) => {\n row.forEach((cell) => traverse(cell));\n });\n }\n if (comp.tabItems) {\n comp.tabItems.forEach((tab) => {\n if (tab.content) {\n traverse(tab.content);\n }\n });\n }\n });\n };\n traverse(components);\n return all;\n }\n getDataModelByName() {\n const dataModel = {};\n const components = this.collectAllComponents(this.processedSchemaCache.components);\n const componentsById = {};\n components.forEach((component) => {\n componentsById[component.id] = component;\n });\n Object.keys(this.formState.values).forEach((id) => {\n const component = componentsById[id];\n if (component && component.name) {\n dataModel[component.name] = this.formState.values[id];\n }\n });\n return dataModel;\n }\n /**\n * @private\n */\n computeIdToLabel() {\n const map = {};\n const traverse = (comps) => {\n comps.forEach((comp) => {\n if (comp.label && ['panel', 'table', 'tabs', 'card', 'button', 'message', 'splitButton'].indexOf(comp.type) === -1) {\n if (comp.name) {\n map[comp.id] = comp.name;\n }\n else if (comp.label) {\n map[comp.id] = comp.label;\n }\n }\n if (comp.children) {\n traverse(comp.children);\n }\n if (comp.tableCells) {\n comp.tableCells.forEach((row) => row.forEach((cell) => traverse(cell)));\n }\n if (comp.tabItems) {\n comp.tabItems.forEach((tab) => { if (tab.content) {\n traverse(tab.content);\n } });\n }\n });\n };\n traverse(this.processedSchemaCache.components);\n return map;\n }\n /**\n * @private\n */\n buildValidationRulesAndBridge() {\n const rules = {};\n const formValues = (this.formState && this.formState.values) || {};\n const collectRules = (components, parentVisible = true) => {\n components.forEach((component) => {\n if (!component) {\n return;\n }\n const componentRules = {};\n const isVisible = parentVisible && (component.visible === false\n ? false\n : ConditionalRuleEngine.isFieldVisible(component.conditions, formValues));\n const isHidden = parentVisible && ConditionalRuleEngine.isFieldHidden(component.conditions, formValues);\n if (!isVisible || isHidden) {\n return;\n }\n const conditionalRequired = ConditionalRuleEngine.isFieldRequired(component.conditions, formValues);\n const conditionalDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const conditionalReadOnly = ConditionalRuleEngine.isFieldReadOnly(component.conditions, formValues);\n const finalRequired = !!component.required || conditionalRequired;\n const finalDisabled = !!component.disabled || conditionalDisabled;\n const finalReadOnly = !!component.readOnly || conditionalReadOnly;\n if (component.customValidation &&\n Array.isArray(component.customValidation) &&\n component.customValidation.length > 0 &&\n !finalDisabled && !finalReadOnly) {\n const customValidationExpression = component.customValidation && component.customValidation[0] && component.customValidation[0].expression;\n const validationMessage = customValidationExpression && customValidationExpression.match(/\\?\\s*true\\s*:\\s*['\"](.+?)['\"]/) ? customValidationExpression.match(/\\?\\s*true\\s*:\\s*['\"](.+?)['\"]/)[1] : undefined;\n const customMessage = validationMessage ||\n component.validationMessage ||\n `${component.label || component.id} is invalid`;\n const self = this;\n componentRules.customValidation = [\n (args) => {\n const fieldValue = args.value;\n if (finalRequired && (fieldValue === '' || fieldValue === null || fieldValue === undefined)) {\n return true;\n }\n const idToNameMap = {};\n const allComponents = self.collectAllComponents(self.processedSchemaCache.components);\n allComponents.forEach((comp) => {\n if (comp.name) {\n idToNameMap[comp.id] = comp.name;\n }\n });\n const currentFormValues = Object.assign({}, (self.currentFormValues || {}));\n const cfvKeys = Object.keys(Object.assign({}, currentFormValues));\n for (const componentId of cfvKeys) {\n const value = currentFormValues[componentId];\n const fieldName = idToNameMap[componentId];\n if (fieldName) {\n currentFormValues[fieldName] = value;\n delete currentFormValues[componentId];\n }\n }\n for (const rule of component.customValidation) {\n if (!self.customValidationEngine) {\n return true;\n }\n const result = self.customValidationEngine.validate(rule.expression, fieldValue, currentFormValues);\n if (result !== true) {\n return false;\n }\n }\n return true;\n },\n customMessage\n ];\n }\n if (finalRequired && !finalDisabled && !finalReadOnly) {\n componentRules.required = [true, component.validationMessage || `${component.label} is required`];\n }\n if (component.minLength && !finalDisabled && !finalReadOnly) {\n componentRules.minLength = [component.minLength, `Minimum ${component.minLength} characters allowed`];\n }\n if (component.maxLength && !finalDisabled && !finalReadOnly) {\n componentRules.maxLength = [component.maxLength, `Maximum ${component.maxLength} characters allowed`];\n }\n if (component.type === 'textbox' && component.textboxType && !component.regex &&\n !componentRules.regex && !finalDisabled && !finalReadOnly) {\n if (component.textboxType === 'email') {\n componentRules.regex = [VALIDATION_REGEX['EMAIL'], component.validationMessage || 'Invalid format'];\n }\n else if (component.textboxType === 'url') {\n componentRules.regex = [VALIDATION_REGEX['URL'], component.validationMessage || 'Invalid format'];\n }\n }\n if (component.regex && !finalDisabled && !finalReadOnly) {\n componentRules.regex = [component.regex, component.validationMessage || 'Invalid format'];\n }\n if (Object.keys(componentRules).length > 0) {\n rules[component.id] = componentRules;\n }\n if (component.children) {\n collectRules(component.children, isVisible && !isHidden);\n }\n if (component.tableCells) {\n component.tableCells.forEach((row) => row.forEach((cell) => collectRules(cell, isVisible && !isHidden)));\n }\n if (component.tabItems) {\n component.tabItems.forEach((tab) => {\n if (tab.content) {\n collectRules(tab.content, isVisible && !isHidden);\n }\n });\n }\n });\n };\n collectRules(this.processedSchemaCache.components);\n const previousValues = this.formState ? Object.assign({}, this.formState.values) : Object.assign({}, this.initialValuesCache);\n this.formState = {\n values: Object.assign(Object.create(null), this.initialValuesCache, previousValues),\n errors: this.enablePersistence ? this.formState.errors : Object.create(null)\n };\n if (previousValues) {\n Object.keys(previousValues).forEach((id) => {\n if (!(id in this.formState.values)) {\n this.formState.values[id] = previousValues[id];\n }\n });\n }\n if (this.validator) {\n try {\n this.validator.refresh();\n this.validator.destroy();\n }\n catch (e) { /* swallow */ }\n this.validator = null;\n }\n const self = this;\n this.validator = new FormValidator(this.element, {\n rules: rules,\n locale: this.locale,\n ignore: 'e-hidden',\n errorClass: 'e-error',\n validClass: 'e-valid',\n errorElement: 'div',\n errorContainer: 'div',\n customPlacement: (inputElement, errorElement) => {\n const name = inputElement.getAttribute('name');\n if (!name) {\n if (inputElement.parentElement) {\n inputElement.parentElement.appendChild(errorElement);\n }\n return;\n }\n const slot = document.getElementById(`error-${name}`);\n if (slot) {\n while (slot.firstChild) {\n slot.removeChild(slot.firstChild);\n }\n slot.appendChild(errorElement);\n slot.style.display = 'block';\n }\n else if (inputElement.parentElement) {\n inputElement.parentElement.appendChild(errorElement);\n }\n },\n validationComplete: (args) => {\n self.syncFormStateErrors();\n if (args && args.inputName) {\n const slot = document.getElementById(`error-${args.inputName}`);\n if (slot) {\n if (args.status === 'success') {\n while (slot.firstChild) {\n slot.removeChild(slot.firstChild);\n }\n slot.style.display = 'none';\n }\n else if (args.status === 'failure') {\n slot.style.display = 'block';\n }\n }\n }\n },\n submit: (event) => {\n if (!self.validator) {\n return;\n }\n const isValid = self.validator.validate();\n if (!isValid) {\n if (event && typeof event.preventDefault === 'function') {\n event.preventDefault();\n }\n return;\n }\n self.handleSubmitData(Object.assign({}, self.formState.values));\n if (event && typeof event.preventDefault === 'function') {\n event.preventDefault();\n }\n },\n reset: () => {\n }\n });\n if (previousValues) {\n Object.keys(previousValues).forEach((id) => {\n const inputEl = this.validator.getInputElement(id);\n if (inputEl && previousValues[id] !== undefined && previousValues[id] !== null) {\n try {\n inputEl.value = String(previousValues[id]);\n }\n catch (e) { /* swallow */ }\n }\n });\n }\n }\n /**\n * @private\n */\n syncFormStateErrors() {\n const errors = {};\n if (this.validator) {\n const errorRules = this.validator.errorRules || [];\n for (const rule of errorRules) {\n if (rule && rule.name) {\n errors[rule.name] = rule.message;\n }\n }\n }\n this.formState.errors = errors;\n }\n /**\n * @private\n */\n buildInitialValues() {\n const values = {};\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const componentIds = new Set();\n allComponents.forEach((comp) => {\n if (comp.type === 'staticHtml') {\n componentIds.add(comp.id);\n return;\n }\n if (comp.type === 'dataGrid') {\n values[comp.id] = Array.isArray(comp.dataSource)\n ? comp.dataSource\n : [];\n }\n if (comp.defaultValue !== undefined) {\n values[comp.id] = comp.defaultValue;\n }\n else {\n switch (comp.type) {\n case 'checkbox':\n case 'switch':\n values[comp.id] = false;\n break;\n default:\n break;\n }\n }\n componentIds.add(comp.id);\n });\n if (this.formState) {\n Object.keys(this.formState.values)\n .filter((key) => !componentIds.has(key))\n .forEach((key) => {\n delete (this.formState).values[key];\n });\n }\n return values;\n }\n /**\n * @private\n */\n initExpressionEngine() {\n if (!this.processedSchemaCache.components || this.processedSchemaCache.components.length === 0) {\n return;\n }\n try {\n const engine = this.expressionEngine;\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const graph = engine.buildDependencyGraph(allComponents);\n const cycles = engine.detectCircularDependencies(graph);\n if (cycles.length > 0) {\n }\n this.expressionDependencyGraph = graph;\n const computedFields = new Set();\n allComponents.forEach((comp) => {\n if (comp.expressionValue) {\n computedFields.add(comp.id);\n }\n });\n this.computedFieldNames = computedFields;\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n /**\n * @private\n */\n disposeTooltipInstance(fieldId) {\n const existingTooltip = this.tooltipRefs[fieldId] || null;\n if (existingTooltip) {\n try {\n existingTooltip.destroy();\n }\n catch (e) {\n this.trigger('failure', {\n error: e\n });\n }\n this.renderedInstances = this.renderedInstances.filter((inst) => inst !== existingTooltip);\n this.tooltipRefs[fieldId] = null;\n }\n }\n renderField(component) {\n const formState = this.formState;\n const formValues = formState ? formState.values : {};\n if (['panel', 'table', 'tabs', 'card', 'message', 'staticHtml'].indexOf(component.type) !== -1) {\n return null;\n }\n const conditionalReadOnly = ConditionalRuleEngine.isFieldReadOnly(component.conditions, formValues);\n const conditionalDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const conditionalRequired = ConditionalRuleEngine.isFieldRequired(component.conditions, formValues);\n const conditionalValue = ConditionalRuleEngine.getConditionalValue(component.conditions, formValues);\n const computedReadOnly = !!component.readOnly || conditionalReadOnly;\n const computedDisabled = !!component.disabled || conditionalDisabled;\n const computedRequired = !!component.required || conditionalRequired;\n let minMaxConstraints = MinMaxRuleEngine.getConstraints(component.minMaxRange, formValues, component.type);\n if (component.type === 'dateTime') {\n const dateConstraints = MinMaxRuleEngine.getConstraints(component.minMaxRange, formValues, 'date');\n const timeConstraints = MinMaxRuleEngine.getConstraints(component.minMaxTimeRange, formValues, 'time');\n minMaxConstraints = {\n minValue: undefined,\n maxValue: undefined,\n minDate: dateConstraints.minDate,\n maxDate: dateConstraints.maxDate,\n minTime: timeConstraints.minTime,\n maxTime: timeConstraints.maxTime\n };\n }\n const labelPos = component.labelPosition || 'top';\n const labelWidth = component.labelWidth || 'auto';\n const showLabel = !component.hideLabel && !!component.label &&\n ['checkbox', 'button', 'staticHtml'].indexOf(component.type) === -1;\n const shouldShowError = !!(formState && formState.errors[component.id]);\n const isRequiredError = shouldShowError && !!(formState && formState.errors[component.id].indexOf('required') !== -1);\n const hasError = shouldShowError && !(isRequiredError && !computedRequired);\n const conditionIsActive = conditionalValue !== undefined;\n const wasConditionActive = this.conditionalValueApplied[component.id] || false;\n if (formState) {\n if (conditionIsActive && !wasConditionActive) {\n formState.values[component.id] = conditionalValue;\n this.conditionalValueApplied[component.id] = true;\n }\n else if (!conditionIsActive && wasConditionActive) {\n this.conditionalValueApplied[component.id] = false;\n }\n }\n const formGroup = createElement('div', {\n className: 'form-group',\n attrs: { 'data-field-id': component.id, 'data-fr-field': component.id }\n });\n const fieldWrapper = createElement('div', {\n className: `field-wrapper label-${labelPos.toLowerCase()}`\n });\n if (showLabel) {\n const labelEl = createElement('label', {\n className: 'field-label'\n });\n if (inputTargetTypes.indexOf(component.type) !== -1 || component.type === 'textarea') {\n labelEl.setAttribute('for', !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name);\n }\n labelEl.style.width = labelPos.toLowerCase() === 'left' ? `${labelWidth}%` : 'auto';\n const span = createElement('span');\n span.textContent = component.label;\n labelEl.appendChild(span);\n if (computedRequired) {\n const asterisk = createElement('span', { className: 'required-asterisk' });\n asterisk.textContent = '*';\n labelEl.appendChild(asterisk);\n }\n this.disposeTooltipInstance(component.id);\n if (component.tooltip) {\n const tooltipHost = createElement('span', {\n className: 'e-msg-icon e-icons e-circle-info tooltip-icon',\n attrs: {\n 'aria-label': component.tooltip,\n title: component.tooltip,\n tabindex: '0',\n role: 'button',\n 'aria-haspopup': 'true'\n }\n });\n tooltipHost.style.cursor = 'pointer';\n tooltipHost.style.display = 'flex';\n tooltipHost.style.alignItems = 'center';\n tooltipHost.style.justifyContent = 'center';\n tooltipHost.style.flexShrink = '0';\n labelEl.appendChild(tooltipHost);\n const tooltip = new Tooltip({ content: component.tooltip, enableRtl: this.enableRtl });\n tooltip.appendTo(tooltipHost);\n this.tooltipRefs[component.id] = tooltip;\n this.renderedInstances.push(tooltip);\n }\n fieldWrapper.appendChild(labelEl);\n }\n const fieldInput = createElement('div', {\n className: 'field-input',\n });\n const isIndexedRef = (component.type === 'radio' || component.type === 'checkboxGroup') && Array.isArray(component.options);\n const setInputRef = isIndexedRef\n ? (el, idx) => {\n if (el && typeof idx === 'number') {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n }\n : (el) => {\n if (el) {\n this.inputRefs[component.name] = el;\n }\n };\n const mergedComponent = Object.assign({}, component, { readOnly: computedReadOnly, disabled: computedDisabled, required: computedRequired }, (minMaxConstraints.minValue !== undefined && { minValue: minMaxConstraints.minValue }), (minMaxConstraints.maxValue !== undefined && { maxValue: minMaxConstraints.maxValue }), (minMaxConstraints.minDate !== undefined && { minDate: minMaxConstraints.minDate }), (minMaxConstraints.maxDate !== undefined && { maxDate: minMaxConstraints.maxDate }), (minMaxConstraints.minTime !== undefined && { minTime: minMaxConstraints.minTime }), (minMaxConstraints.maxTime !== undefined && { maxTime: minMaxConstraints.maxTime }));\n const onChangeHandler = (value) => {\n if (component.type !== 'staticHtml') {\n if (component.type === 'signature') {\n const ref = this.inputRefs[value];\n value = ref.getSignature();\n }\n if (component.type === 'imageEditor') {\n const ref = this.inputRefs[value];\n const imageData = ref.getImageData();\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n const context = canvas.getContext('2d');\n if (context) {\n context.putImageData(imageData, 0, 0);\n }\n value = canvas.toDataURL();\n }\n if (component.type === 'radio' || component.type === 'checkboxGroup') {\n const inputElement = this.validator.getInputElement(component.id);\n inputElement.value = value;\n }\n value = formatDateValues(component, value);\n if (this.formState && formState) {\n this.formState.values[component.id] = value;\n formState.values[component.id] = value;\n }\n this.trigger('change', { fieldName: component.name, label: component.label || component.id, value, dataModel: this.getDataModelByName() });\n this.afterValueChange(component.id);\n }\n };\n const targetTag = inputTargetTypes.indexOf(component.type) !== -1\n ? 'input' : component.type === 'textarea' ? 'textarea' : 'div';\n const target = createElement(targetTag, {\n attrs: { 'aria-label': `${component.label} ${component.type}` }\n });\n if (component.type === 'radio' || component.type === 'checkboxGroup') {\n const inputEl = createElement('input');\n inputEl.id = !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name;\n inputEl.setAttribute('name', component.id);\n inputEl.style.display = 'none';\n inputEl.setAttribute('aria-hidden', 'true');\n target.appendChild(inputEl);\n }\n else {\n target.id = !isNullOrUndefined(this.element.id) ? this.element.id + '-' + component.name : component.name;\n target.setAttribute('name', component.id);\n }\n fieldInput.appendChild(target);\n let skipDefault = false;\n const resolvedWidget = resolveCustomWidget(component, this.customWidgetSettings);\n if (resolvedWidget) {\n let compiled = null;\n try {\n compiled = this.getTemplateFunction(resolvedWidget.entry.template);\n }\n catch (e) {\n if (this.failure) {\n this.trigger('failure', { error: e });\n }\n compiled = null;\n }\n if (compiled) {\n try {\n if (target.parentNode) {\n target.parentNode.removeChild(target);\n }\n const swappedComponent = Object.assign({}, component, {\n id: component.name,\n name: component.id,\n type: inferTypeFromWidget(component.type),\n widget: component.type\n });\n const renderedOut = compiled({\n fieldData: swappedComponent,\n value: formState ? formState.values[component.id] : undefined,\n }, this);\n let outList;\n if (renderedOut == null) {\n outList = [];\n }\n else if (Array.isArray(renderedOut)) {\n outList = renderedOut;\n }\n else if (typeof renderedOut === 'string') {\n outList = [renderedOut];\n }\n else if (typeof renderedOut === 'object'\n && !renderedOut.nodeType\n && typeof renderedOut.length === 'number'\n && typeof renderedOut.item === 'function') {\n const snapshot = [];\n const list = renderedOut;\n for (let i = 0; i < list.length; i++) {\n snapshot.push(list[i]);\n }\n outList = snapshot;\n }\n else {\n outList = [renderedOut];\n }\n for (const node of outList) {\n if (node && typeof node === 'object' && node.nodeType) {\n fieldInput.appendChild(node);\n }\n else if (typeof node === 'string') {\n const markup = this.sanitizeTemplateValue(node);\n const span = createElement('span');\n span.innerHTML = markup;\n while (span.firstChild) {\n fieldInput.appendChild(span.firstChild);\n }\n }\n else if (node && typeof node === 'object') {\n throw new Error('Custom widget template for \"' + component.name + '\" returned a ' +\n 'framework object that the vanilla renderer cannot insert. Use the ' +\n 'React/Angular/Vue wrapper (registered templates / portals) for ' +\n 'JSX or platform templates.');\n }\n }\n setInputRef(fieldInput);\n skipDefault = true;\n }\n catch (renderErr) {\n if (this.failure) {\n this.trigger('failure', { error: renderErr });\n }\n skipDefault = false;\n }\n }\n }\n if (!skipDefault) {\n const instance = renderFormField({\n component: mergedComponent,\n value: formState ? formState.values[component.id] : undefined,\n onChange: onChangeHandler,\n formState: formState,\n settings: this.processedSchemaCache.settings,\n onBlur: () => {\n if (formState && component.type !== 'staticHtml') {\n if (this.validator) {\n try {\n this.beforeValidate(component.id);\n this.validator.validate(component.id);\n }\n catch (e) { /* swallow */ }\n this.syncFormStateErrors();\n }\n }\n },\n ref: setInputRef,\n hasError: hasError,\n locale: this.locale,\n components: this.collectAllComponents(this.processedSchemaCache.components),\n enableRtl: this.enableRtl,\n target: target,\n l10n: this.l10n\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry && typeof entry.destroy === 'function') {\n this.renderedInstances.push(entry);\n }\n else if (entry instanceof HTMLElement) {\n for (const key of Object.keys(this.inputRefs)) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === entry || entry.contains(hostEl))) {\n this.renderedInstances.push(inst);\n }\n }\n }\n });\n }\n else if (instance) {\n if (typeof instance.destroy === 'function') {\n this.renderedInstances.push(instance);\n }\n else if (instance instanceof HTMLElement) {\n for (const key of Object.keys(this.inputRefs)) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === instance || instance.contains(hostEl))) {\n this.renderedInstances.push(inst);\n }\n }\n }\n }\n }\n const errorSlot = createElement('div', {\n id: 'error-' + (component.id || component.name || component.label),\n className: 'e-error-message',\n attrs: { role: 'alert', 'aria-live': 'assertive' }\n });\n errorSlot.style.display = 'none';\n if (hasError && formState && formState.errors[component.id]) {\n errorSlot.textContent = formState.errors[component.id];\n errorSlot.classList.add('e-error');\n errorSlot.style.display = 'block';\n }\n fieldInput.appendChild(errorSlot);\n fieldWrapper.appendChild(fieldInput);\n formGroup.appendChild(fieldWrapper);\n if (component.description) {\n const desc = createElement('div', {\n className: 'field-description',\n attrs: { 'aria-describedby': `description-${component.label}` }\n });\n desc.textContent = component.description;\n formGroup.appendChild(desc);\n }\n return formGroup;\n }\n /**\n * @private\n */\n renderComponent(component) {\n const formState = this.formState;\n const formValues = formState ? formState.values : {};\n const isVisible = component.visible === false\n ? false\n : ConditionalRuleEngine.isFieldVisible(component.conditions, formValues);\n const isHidden = ConditionalRuleEngine.isFieldHidden(component.conditions, formValues);\n if (!isVisible || isHidden) {\n if (formState && formState.values[component.id] !== undefined && formState.values[component.id] !== null) {\n formState.values[component.id] = null;\n }\n return null;\n }\n if (FormRenderer_1.PRESERVABLE_TYPES.has(component.type) && this.preservedFields.has(component.id)) {\n const preservedNode = this.preservedFields.get(component.id);\n if (preservedNode) {\n this.preservedFields.delete(component.id);\n return preservedNode;\n }\n }\n switch (component.type) {\n case 'panel': {\n const fieldset = createElement('fieldset', {\n className: `form-panel-renderer ${component.cssClass || ''}`\n });\n fieldset.style.minInlineSize = 'unset';\n if (component.label && !component.hideLabel) {\n const legend = createElement('legend', {\n className: !component.hideBorders ? 'panel-legend' : ''\n });\n legend.textContent = component.label;\n fieldset.appendChild(legend);\n }\n const content = createElement('div', { className: 'panel-content' });\n (component.children || []).forEach((child) => {\n const rendered = this.renderComponent(child);\n if (rendered) {\n content.appendChild(rendered);\n }\n });\n fieldset.appendChild(content);\n return fieldset;\n }\n case 'table': {\n const tableRows = component.rows || (component.tableCells ? component.tableCells.length : 2);\n const tableCols = component.columns || (component.tableCells && component.tableCells[0] ? component.tableCells[0].length : 2);\n const defaultColSpan = Math.floor(12 / tableCols);\n const columnWidthsProp = component.columnWidths;\n const splittedWidths = columnWidthsProp ? splitWidths(columnWidthsProp.widths) : [];\n const tableDiv = createElement('div', {\n className: `form-table-renderer ${component.hideBorders ? '' : 'table-border'} ${component.cssClass || ''}`,\n attrs: { role: 'group', 'aria-label': component.label || 'Table Layout' }\n });\n for (let rowIndex = 0; rowIndex < tableRows; rowIndex++) {\n const rowDiv = createElement('div', { className: 'e-form-table-row' });\n if (component.hideBorders) {\n rowDiv.style.display = 'flex';\n rowDiv.style.gap = '1.5rem';\n }\n for (let colIndex = 0; colIndex < tableCols; colIndex++) {\n const cellComponents = (component.tableCells && component.tableCells[rowIndex] &&\n component.tableCells[rowIndex][colIndex]) || [];\n const cellSpan = defaultColSpan;\n const colWidthValue = splittedWidths[colIndex];\n const isSingleColumn = tableCols === 1;\n const cellStyle = isSingleColumn ? { width: '100%' } : (colWidthValue ? { width: `${colWidthValue}%` } : {});\n const allNullWidths = !columnWidthsProp || (Array.isArray(columnWidthsProp.widths) && columnWidthsProp.widths.every((w) => w === null));\n const isFirstRow = rowIndex === 0;\n const cellDiv = createElement('div', {\n className: `e-form-table-cell ${colWidthValue ? '' : allNullWidths ? `col-${cellSpan}` : ''}`\n });\n if (component.hideBorders) {\n Object.assign(cellDiv.style, cellStyle, { padding: isFirstRow ? '0' : '12px 0 0 0' });\n }\n else {\n Object.assign(cellDiv.style, cellStyle);\n }\n cellComponents.forEach((comp) => {\n const rendered = this.renderComponent(comp);\n if (rendered) {\n cellDiv.appendChild(rendered);\n }\n });\n rowDiv.appendChild(cellDiv);\n }\n tableDiv.appendChild(rowDiv);\n }\n return tableDiv;\n }\n case 'tabs': {\n const tabsDiv = createElement('div', {\n className: `form-tabs-renderer ${component.cssClass || ''}`\n });\n const tabHost = createElement('div', {\n className: 'e-tab'\n });\n tabHost.id = component.id;\n const tabHeader = createElement('div', {\n className: 'e-tab-header'\n });\n const tabContent = createElement('div', {\n className: 'e-content'\n });\n tabHost.appendChild(tabHeader);\n tabHost.appendChild(tabContent);\n tabsDiv.appendChild(tabHost);\n (component.tabItems || []).forEach((tab) => {\n const headerItem = createElement('div');\n headerItem.textContent = tab.header;\n tabHeader.appendChild(headerItem);\n const contentItem = createElement('div');\n const contentDiv = createElement('div', { className: 'tab-content-renderer' });\n (tab.content || []).forEach((comp) => {\n const rendered = this.renderComponent(comp);\n if (rendered) {\n contentDiv.appendChild(rendered);\n }\n });\n contentItem.appendChild(contentDiv);\n tabContent.appendChild(contentItem);\n });\n const tab = new Tab({\n enableRtl: this.enableRtl,\n cssClass: component.cssClass,\n enablePersistence: true,\n animation: { previous: { effect: 'None' }, next: { effect: 'None' } },\n selected: (args) => {\n if (typeof window === 'undefined')\n return null;\n try {\n window.localStorage.setItem('tab' + component.id, JSON.stringify({\n selectedItem: args.selectedIndex\n }));\n }\n catch (_a) {\n }\n }\n });\n tab.appendTo(tabHost);\n this.renderedInstances.push(tab);\n return tabsDiv;\n }\n case 'card': {\n const fieldset = createElement('fieldset', {\n className: `e-card form-card-renderer ${component.cssClass || ''}`\n });\n fieldset.style.minInlineSize = 'unset';\n fieldset.style.padding = '0';\n const header = createElement('div', { className: 'e-card-header' });\n const caption = createElement('div', { className: 'e-card-header-caption' });\n const title = createElement('div', { className: 'e-card-title' });\n title.textContent = component.cardTitle || component.label || 'Card Title';\n caption.appendChild(title);\n if (component.cardSubtitle) {\n const sub = createElement('div', { className: 'e-card-sub-title' });\n sub.textContent = component.cardSubtitle;\n caption.appendChild(sub);\n }\n header.appendChild(caption);\n fieldset.appendChild(header);\n const content = createElement('div', { className: 'e-card-content card-content' });\n (component.children || []).forEach((child) => {\n const rendered = this.renderComponent(child);\n if (rendered) {\n content.appendChild(rendered);\n }\n });\n fieldset.appendChild(content);\n return fieldset;\n }\n case 'staticHtml': {\n const renderer = new StaticHtmlRenderer({\n content: component.defaultValue || '<p>HTML content</p>',\n id: component.id,\n enableHtmlSanitizer: component.enableHtmlSanitizer\n });\n const el = renderer.render();\n this.renderedInstances.push(renderer);\n return el;\n }\n case 'message': {\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const instance = renderFormField({\n component: component,\n locale: this.locale,\n value: undefined,\n onChange: () => { },\n enableRtl: this.enableRtl,\n target: target,\n ref: (el, idx) => {\n if (idx !== undefined) {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n else {\n this.inputRefs[component.name] = el;\n }\n },\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n case 'button': {\n if (resolveCustomWidget(component, this.customWidgetSettings)) {\n return this.renderField(component);\n }\n const buttonlDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const buttonComputed = !!component.disabled || buttonlDisabled;\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const handleButtonClick = (event) => {\n if (this.buttonClick) {\n const label = component.buttonsGroups\n ? (event.target && event.target.ej2_instances ? event.target.ej2_instances[0].content : '')\n : component.label || '';\n this.trigger('buttonClick', { fieldName: component.name, label: label, event: event });\n }\n const button = event.target;\n if (button.type && button.type === 'reset') {\n const form = button.closest('form');\n if (form) {\n form.querySelectorAll('input[type=\"checkbox\"]').forEach((cb) => {\n (cb.ej2_instances[0]).checked = false;\n });\n form.querySelectorAll('.e-control.e-multiselect.e-lib').forEach((cb) => {\n (cb.ej2_instances[0]).value = [];\n });\n }\n this.formState.values = {};\n form.reset();\n this.rerenderForm();\n this.validator.destroy();\n }\n };\n const instance = renderFormField({\n component: Object.assign({}, component, { disabled: buttonComputed }),\n value: undefined,\n onChange: () => { },\n locale: this.locale,\n onClick: handleButtonClick,\n ref: (el, idx) => {\n if (idx !== undefined) {\n this.inputRefs[`${component.name}_${idx}`] = el;\n }\n else {\n this.inputRefs[component.name] = el;\n }\n },\n enableRtl: this.enableRtl,\n target: target\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n case 'splitButton': {\n if (resolveCustomWidget(component, this.customWidgetSettings)) {\n return this.renderField(component);\n }\n const splitButtonDisabled = ConditionalRuleEngine.isFieldDisabled(component.conditions, formValues);\n const computedDisabled = !!component.disabled || splitButtonDisabled;\n const wrapper = createElement('div', { className: 'form-group' });\n const target = createElement('div');\n target.id = component.name;\n target.setAttribute('name', component.id);\n wrapper.appendChild(target);\n const handleSplitButtonEvent = (event) => {\n if (this.buttonClick) {\n this.trigger('buttonClick', { fieldName: component.name, label: component.label || '', event: event });\n }\n };\n const instance = renderFormField({\n component: Object.assign({}, component, { disabled: computedDisabled }),\n value: undefined,\n locale: this.locale,\n onChange: () => { },\n onClick: handleSplitButtonEvent,\n ref: (el) => { if (el) {\n this.inputRefs[component.name] = el;\n } },\n enableRtl: this.enableRtl,\n target: target\n });\n if (Array.isArray(instance)) {\n instance.forEach((entry) => {\n if (entry) {\n this.renderedInstances.push(entry);\n }\n });\n }\n else if (instance) {\n this.renderedInstances.push(instance);\n }\n return wrapper;\n }\n default:\n return this.renderField(component);\n }\n }\n /**\n * @private\n */\n afterValueChange(changedFieldId) {\n if (!this.formState) {\n return;\n }\n this.currentFormValues = Object.assign({}, this.formState.values);\n this.evaluateExpressions();\n this.retriggerCustomValidation();\n this.beforeValidate(changedFieldId);\n this.validator.validate(changedFieldId);\n this.syncFormStateErrors();\n if (changedFieldId && this.isConditionalTrigger(changedFieldId)) {\n this.scheduleRerender(changedFieldId);\n }\n }\n /**\n * @private\n */\n beforeValidate(fieldId) {\n const infoElement = this.element.querySelector(`#${fieldId}-info`);\n if (infoElement && infoElement.classList.contains('e-error')) {\n infoElement.classList.remove('e-error');\n }\n const inputElement = this.getInputElementByName(fieldId);\n if (!inputElement) {\n return;\n }\n const inputParent = inputElement.parentElement;\n const grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove('e-error');\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove('e-error');\n }\n else {\n inputElement.classList.remove('e-error');\n }\n if (this.validator) {\n this.validator.errorRules = [];\n }\n }\n scheduleRerender(changedFieldId) {\n if (changedFieldId) {\n this.pendingChangedFieldIds.add(changedFieldId);\n }\n if (this.rerenderScheduled) {\n return;\n }\n this.rerenderScheduled = true;\n Promise.resolve().then(() => {\n this.rerenderScheduled = false;\n const changedIds = new Set(this.pendingChangedFieldIds);\n this.pendingChangedFieldIds.clear();\n this.rerenderForm(changedIds);\n });\n }\n /**\n * @private\n */\n collectConditionFieldIds(condition, acc) {\n if (!condition) {\n return;\n }\n if (typeof condition.field === 'string') {\n acc.add(condition.field);\n }\n else if (Array.isArray(condition.rules)) {\n for (const sub of condition.rules) {\n this.collectConditionFieldIds(sub, acc);\n }\n }\n }\n collectDataSourceReferenceIds(value, allComps, target) {\n if (typeof value !== 'string') {\n return;\n }\n const matches = value.match(/\\{([^}]+)\\}/g);\n if (!matches) {\n return;\n }\n for (const match of matches) {\n const componentName = match.slice(1, -1);\n const referencedComp = allComps.find((c) => c.name === componentName);\n if (referencedComp && referencedComp.id) {\n target.add(referencedComp.id);\n }\n }\n }\n /**\n * @private\n */\n buildConditionalDependencyMap() {\n const triggers = new Set();\n const consumerDeps = new Map();\n const allComps = this.collectAllComponents(this.processedSchemaCache.components);\n for (const comp of allComps) {\n const myDeps = new Set();\n consumerDeps.set(comp.id, myDeps);\n const conditions = comp.conditions;\n if (conditions) {\n const conditionKeys = [\n 'visibleWhen',\n 'hideWhen',\n 'disabledWhen',\n 'requiredWhen',\n 'readOnlyWhen',\n 'choiceBasedField',\n 'conditionalData'\n ];\n for (const key of conditionKeys) {\n if (conditions[key]) {\n this.collectConditionFieldIds(conditions[key], triggers);\n this.collectConditionFieldIds(conditions[key], myDeps);\n }\n }\n if (Array.isArray(conditions.conditionalData)) {\n for (const item of conditions.conditionalData) {\n if (item && item.condition) {\n this.collectConditionFieldIds(item.condition, triggers);\n this.collectConditionFieldIds(item.condition, myDeps);\n }\n if (item && Array.isArray(item.conditions)) {\n for (const subCond of item.conditions) {\n this.collectConditionFieldIds(subCond, triggers);\n this.collectConditionFieldIds(subCond, myDeps);\n }\n }\n }\n }\n if (conditions.setValueWhen &&\n conditions.setValueWhen.condition) {\n this.collectConditionFieldIds(conditions.setValueWhen.condition, triggers);\n this.collectConditionFieldIds(conditions.setValueWhen.condition, myDeps);\n }\n if (conditions.choiceBasedField &&\n typeof conditions.choiceBasedField.primaryFieldId === 'string') {\n triggers.add(conditions.choiceBasedField.primaryFieldId);\n myDeps.add(conditions.choiceBasedField.primaryFieldId);\n }\n }\n const collectMinMaxReferenceIds = (range) => {\n if (!range || range.enabled !== true) {\n return;\n }\n const collectFromBound = (bound) => {\n if (bound && typeof bound === 'object' && typeof bound.field === 'string') {\n triggers.add(bound.field);\n myDeps.add(bound.field);\n }\n };\n collectFromBound(range.minValue);\n collectFromBound(range.maxValue);\n };\n const minMaxRule = comp.minMaxRange;\n if (Array.isArray(minMaxRule)) {\n for (const range of minMaxRule) {\n collectMinMaxReferenceIds(range);\n }\n }\n const minMaxTimeRule = comp.minMaxTimeRange;\n if (Array.isArray(minMaxTimeRule)) {\n for (const range of minMaxTimeRule) {\n collectMinMaxReferenceIds(range);\n }\n }\n const ds = comp.dataSource;\n if ((comp.type === 'dataGrid') &&\n ds &&\n ds.type === 'url') {\n if (ds.search && typeof ds.search.key === 'string') {\n this.collectDataSourceReferenceIds(ds.search.key, allComps, triggers);\n this.collectDataSourceReferenceIds(ds.search.key, allComps, myDeps);\n }\n if (Array.isArray(ds.filters)) {\n for (const filter of ds.filters) {\n if (typeof filter.value === 'string') {\n this.collectDataSourceReferenceIds(filter.value, allComps, triggers);\n this.collectDataSourceReferenceIds(filter.value, allComps, myDeps);\n }\n }\n }\n }\n }\n this.conditionalTriggerFieldIds = triggers;\n this.consumerDependencyMap = consumerDeps;\n }\n /**\n * @private\n */\n isConditionalTrigger(fieldId) {\n return this.conditionalTriggerFieldIds.has(fieldId);\n }\n getScrollParent() {\n let parent = this.element.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n const overflowY = style.overflowY;\n const overflowX = style.overflowX;\n const canScrollY = (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') &&\n parent.scrollHeight > parent.clientHeight;\n const canScrollX = (overflowX === 'auto' || overflowX === 'scroll' || overflowX === 'overlay') &&\n parent.scrollWidth > parent.clientWidth;\n if (canScrollY || canScrollX) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n /**\n * @private\n */\n rerenderForm(changedFieldIds) {\n const changedIds = changedFieldIds || new Set();\n const activeEl = document.activeElement;\n const focusedName = activeEl && activeEl.getAttribute\n ? activeEl.getAttribute('name')\n : null;\n let selectionStart = null;\n let selectionEnd = null;\n if (focusedName && activeEl && activeEl.selectionStart !== undefined) {\n try {\n selectionStart = activeEl.selectionStart;\n selectionEnd = activeEl.selectionEnd;\n }\n catch (e) { /* ignore */ }\n }\n const savedElementScrollTop = this.element.scrollTop;\n const savedElementScrollLeft = this.element.scrollLeft;\n const savedWindowScrollX = window.scrollX;\n const savedWindowScrollY = window.scrollY;\n const scrollParent = this.getScrollParent();\n const savedScrollParentTop = scrollParent ? scrollParent.scrollTop : 0;\n const savedScrollParentLeft = scrollParent ? scrollParent.scrollLeft : 0;\n this.preservedFields.clear();\n const allComps = this.collectAllComponents(this.processedSchemaCache.components);\n for (const comp of allComps) {\n if (!FormRenderer_1.PRESERVABLE_TYPES.has(comp.type)) {\n continue;\n }\n const myDeps = this.consumerDependencyMap.get(comp.id);\n let dependsOnChanged = false;\n if (myDeps) {\n changedIds.forEach((changedId) => {\n if (myDeps.has(changedId)) {\n dependsOnChanged = true;\n }\n });\n }\n if (dependsOnChanged) {\n continue;\n }\n const liveNode = this.element.querySelector(`[data-field-id=\"${comp.id}\"]`);\n if (liveNode && liveNode.parentElement) {\n liveNode.parentElement.removeChild(liveNode);\n this.preservedFields.set(comp.id, liveNode);\n }\n }\n this.refreshing = true;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.destroyRenderedExcludingPreserved();\n this.removePreviousRoot();\n if (this.validator) {\n this.validator.destroy();\n }\n this.render();\n this.refreshing = false;\n try {\n this.element.scrollTop = savedElementScrollTop;\n this.element.scrollLeft = savedElementScrollLeft;\n if (scrollParent) {\n scrollParent.scrollTop = savedScrollParentTop;\n scrollParent.scrollLeft = savedScrollParentLeft;\n }\n window.scrollTo(savedWindowScrollX, savedWindowScrollY);\n }\n catch (e) { /* swallow */ }\n if (focusedName) {\n const elToFocus = this.getInputElementByName(focusedName);\n if (elToFocus && typeof elToFocus.focus === 'function') {\n try {\n elToFocus.focus();\n if (selectionStart !== null && selectionEnd !== null &&\n typeof elToFocus.setSelectionRange === 'function') {\n try {\n elToFocus.setSelectionRange(selectionStart, selectionEnd);\n }\n catch (e) { /* swallow — non-text input */ }\n }\n }\n catch (e) { /* swallow */ }\n }\n }\n if (this.preservedFields.size > 0) {\n const stillKept = [];\n this.preservedFields.forEach((node, id) => {\n if (!this.element.contains(node) && !document.body.contains(node)) {\n this.destroyPreservedSubtree(node);\n try {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n catch (e) {\n // ignore\n }\n this.preservedFields.delete(id);\n }\n else {\n stillKept.push(id);\n }\n });\n stillKept.forEach((id) => this.preservedFields.delete(id));\n }\n }\n /**\n * @private\n */\n removePreviousRoot() {\n if (this.element) {\n while (this.element.childNodes.length > 0) {\n this.element.removeChild(this.element.firstChild);\n }\n }\n }\n /**\n * @private\n */\n destroyRenderedInstance(inst) {\n if (!inst || typeof inst.destroy !== 'function') {\n return;\n }\n const state = inst;\n if (state.isDestroyed || state.destroyed || state.disposed) {\n return;\n }\n const hostElement = inst.element || inst.target || (inst.hostElement && typeof inst.hostElement === 'function' ? inst.hostElement() : undefined);\n try {\n state.isDestroyed = true;\n state.destroyed = true;\n state.disposed = true;\n inst.destroy();\n }\n catch (e) {\n console.warn('FormRenderer: failed to destroy child instance.', e);\n }\n finally {\n if (hostElement && hostElement.parentNode) {\n try {\n hostElement.parentNode.removeChild(hostElement);\n }\n catch (e) {\n }\n }\n }\n }\n /**\n * @private\n */\n destroyRenderedExcludingPreserved() {\n const survived = [];\n const preservedNodes = Array.from(this.preservedFields.values());\n for (const inst of this.renderedInstances) {\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n const isPreserved = !!hostEl && preservedNodes.some((n) => n === hostEl || n.contains(hostEl));\n if (isPreserved) {\n survived.push(inst);\n }\n else {\n this.destroyRenderedInstance(inst);\n }\n }\n this.renderedInstances = survived;\n const inputRefKeys = Object.keys(this.inputRefs);\n for (const key of inputRefKeys) {\n const inst = this.inputRefs[key];\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n const isPreserved = !!hostEl && preservedNodes.some((n) => n === hostEl || n.contains(hostEl));\n if (!isPreserved) {\n delete this.inputRefs[key];\n }\n }\n this.conditionalValueApplied = {};\n this.expressionDependencyGraph = {};\n this.computedFieldNames = new Set();\n this.previousFormValues = {};\n this.conditionalTriggerFieldIds = new Set();\n }\n /**\n * @private\n */\n destroyPreservedSubtree(rootNode) {\n const survived = [];\n for (const inst of this.renderedInstances) {\n const hostEl = inst && (inst.element || inst.target || (inst.hostElement && inst.hostElement()));\n if (hostEl && (hostEl === rootNode || rootNode.contains(hostEl))) {\n this.destroyRenderedInstance(inst);\n }\n else {\n survived.push(inst);\n }\n }\n this.renderedInstances = survived;\n }\n getInputElementByName(name) {\n let inputEl = this.element.querySelector(`[name=\"${name}\"]`);\n if (!inputEl) {\n return null;\n }\n if (!inputEl.classList.contains('e-control')) {\n const eControl = inputEl.parentElement ? inputEl.parentElement.querySelector('.e-control') : null;\n if (eControl) {\n return eControl;\n }\n }\n return inputEl;\n }\n /**\n * @private\n */\n evaluateExpressions() {\n if (!this.formState || !this.expressionEngine) {\n return;\n }\n if (this.expressionEvaluationInProgress) {\n return;\n }\n try {\n this.expressionEvaluationInProgress = true;\n const engine = this.expressionEngine;\n const dependencyGraph = this.expressionDependencyGraph;\n const formValues = this.formState.values || {};\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const previousValues = this.previousFormValues;\n const computedFieldNames = this.computedFieldNames;\n const idToNameMap = {};\n allComponents.forEach((comp) => {\n if (comp.name) {\n idToNameMap[comp.id] = comp.name;\n }\n });\n const contextValues = {};\n const fvKeys = Object.keys(formValues);\n for (const componentId of fvKeys) {\n const value = formValues[componentId];\n const fieldName = idToNameMap[componentId];\n if (fieldName) {\n contextValues[fieldName] = value;\n }\n }\n const previousContextValues = Object.assign({}, previousValues);\n Object.assign(previousValues, contextValues);\n const changedFields = new Set();\n const ctxKeys = Object.keys(contextValues);\n for (const fieldName of ctxKeys) {\n const fieldId = Object.keys(idToNameMap).find((id) => idToNameMap[id] === fieldName);\n if (fieldId && contextValues[fieldName] !== previousContextValues[fieldName] && !computedFieldNames.has(fieldId)) {\n changedFields.add(fieldName);\n }\n }\n if (changedFields.size === 0) {\n return;\n }\n const evaluationOrder = engine.getTopologicalOrder(dependencyGraph);\n for (const fieldName of evaluationOrder) {\n const component = allComponents.find((c) => c.name === fieldName);\n if (component && component.expressionValue) {\n computedFieldNames.add(component.id);\n try {\n const isVisible = component.visible !== false\n ? ConditionalRuleEngine.isFieldVisible(component.conditions, formValues)\n : false;\n if (isVisible) {\n const currentValues = {};\n const fvKeys2 = Object.keys(formValues);\n for (const componentId of fvKeys2) {\n const value = formValues[componentId];\n const fn = idToNameMap[componentId];\n if (fn) {\n currentValues[fn] = value;\n }\n }\n let result = engine.evaluate(component.expressionValue, currentValues);\n result = (typeof result === 'string' && result.indexOf('undefined') !== -1)\n ? result.replace(/undefined/g, '')\n : result;\n if (result !== null && result !== undefined && result !== '') {\n switch (component.type) {\n case 'number': {\n const numResult = Number(result);\n result = isNaN(numResult) ? 0 : numResult;\n break;\n }\n case 'checkbox':\n case 'switch':\n result = Boolean(result);\n break;\n case 'textbox':\n case 'textarea':\n result = String(result);\n break;\n case 'dateRange':\n case 'checkboxGroup':\n case 'multiselect':\n break;\n default:\n result = String(result);\n break;\n }\n }\n if (result !== null && result !== undefined && result !== formValues[component.id] && this.formState) {\n this.formState.values[component.id] = result;\n if (this.validator) {\n const inputEl = this.getInputElementByName(component.id);\n if (inputEl) {\n this.syncValueToInput(inputEl, component.id, result);\n }\n }\n }\n }\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n }\n Object.assign(previousValues, contextValues);\n }\n finally {\n this.expressionEvaluationInProgress = false;\n }\n }\n /**\n * @private\n */\n retriggerCustomValidation() {\n if (!this.formState) {\n return;\n }\n if (!this.customValidationEngine) {\n return;\n }\n try {\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components);\n const formValues = this.formState.values || {};\n const previousValues = this.previousFormValues;\n const changedFields = new Set();\n Object.keys(formValues).forEach((fieldId) => {\n if (formValues[fieldId] !== previousValues[fieldId]) {\n changedFields.add(fieldId);\n }\n });\n if (changedFields.size === 0) {\n return;\n }\n const fieldsToValidate = new Set();\n changedFields.forEach((fieldId) => {\n const component = allComponents.find((c) => c.id === fieldId);\n if (component && component.customValidation && Array.isArray(component.customValidation)) {\n fieldsToValidate.add(fieldId);\n }\n });\n allComponents.forEach((component) => {\n if (component.customValidation && Array.isArray(component.customValidation)) {\n component.customValidation.forEach((rule) => {\n const deps = this.customValidationEngine.extractDependencies(rule.expression);\n deps.forEach((dep) => {\n const depComponent = allComponents.find((c) => c.id === dep || c.name === dep);\n if (depComponent && changedFields.has(depComponent.id)) {\n fieldsToValidate.add(component.id);\n }\n });\n });\n }\n });\n this.previousFormValues = Object.assign({}, formValues);\n }\n catch (error) {\n if (this.failure) {\n this.trigger('failure', {\n error: error\n });\n }\n }\n }\n /**\n * @private\n */\n handleSubmitData(data) {\n const formState = this.formState;\n const isValid = formState && formState.errors ? Object.keys(formState.errors).length === 0 : false;\n const transformedData = {};\n const formValues = formState ? formState.values : {};\n const excludedTypes = new Set(['button', 'message', 'panel', 'table', 'tabs']);\n const allComps = this.collectAllComponents(this.processedSchemaCache.components || []);\n const excludedIds = new Set(allComps.filter((c) => excludedTypes.has(c.type)).map((c) => c.id));\n const hiddenFieldIds = new Set(allComps.filter((c) => {\n if (c.visible === false) {\n return true;\n }\n if (c.conditions && c.conditions.visibleWhen) {\n if (!ConditionalRuleEngine.isFieldVisible(c.conditions, formValues)) {\n return true;\n }\n }\n if (c.conditions && c.conditions.hideWhen) {\n if (ConditionalRuleEngine.isFieldHidden(c.conditions, formValues)) {\n return true;\n }\n }\n return false;\n }).map((c) => c.id));\n const disabledFieldIds = new Set(allComps.filter((c) => {\n if (c.disabled) {\n return true;\n }\n if (c.conditions && c.conditions.disabledWhen) {\n return ConditionalRuleEngine.isFieldDisabled(c.conditions, formValues);\n }\n return false;\n }).map((c) => c.id));\n const dataKeys = Object.keys(data);\n for (const id of dataKeys) {\n const val = data[id];\n if (excludedIds.has(id) || hiddenFieldIds.has(id) || disabledFieldIds.has(id)) {\n return;\n }\n const label = this.idToLabelCache[id] || id;\n transformedData[label] = val;\n }\n if (this.submit) {\n this.trigger('submit', { data: transformedData, isValid: isValid });\n }\n }\n /**\n * Retrieves the underlying Syncfusion form-input component instance by its field name.\n * Use this to call Syncfusion component methods and properties.\n *\n * @param {string} name - Specifies the name for the built-in Syncfusion component.\n * @returns {object | null} - Specifies the instance of the Syncfusion component in the form.\n */\n getComponent(name) {\n return this.inputRefs[name] || null;\n }\n /**\n * Programmatically sets a form field's value for user edits.\n *\n * @param {string} fieldName - The field's `name` (the schema property's `name`).\n * @param {any} value - The new value to set.\n * @returns void\n */\n setFieldValue(fieldName, value) {\n const allComponents = this.collectAllComponents(this.processedSchemaCache.components || []);\n const component = allComponents.find((c) => c.name === fieldName);\n if (!component) {\n return;\n }\n if (this.formState) {\n this.formState.values[component.id] = value;\n }\n const inputEl = this.getInputElementByName(component.id);\n if (inputEl) {\n this.syncValueToInput(inputEl, component.id, value);\n }\n this.afterValueChange(component.id);\n }\n /**\n * @private\n */\n syncValueToInput(inputEl, fieldId, value) {\n if (!inputEl) {\n return;\n }\n try {\n const nativeInput = (inputEl instanceof HTMLInputElement) ? inputEl : null;\n const isCheckable = !!nativeInput &&\n (nativeInput.type === 'checkbox' || nativeInput.type === 'radio');\n const ej2Inst = inputEl.ej2_instances && inputEl.ej2_instances[0];\n if (ej2Inst) {\n if (isCheckable && typeof ej2Inst.checked !== 'undefined') {\n if (nativeInput.type === 'radio' && typeof ej2Inst.value !== 'undefined') {\n ej2Inst.checked = String(value) === String(ej2Inst.value);\n }\n else {\n ej2Inst.checked = FormRenderer_1.coerceChecked(value);\n }\n }\n else if (typeof ej2Inst.value !== 'undefined') {\n ej2Inst.value = value;\n }\n return;\n }\n if (inputEl instanceof HTMLSelectElement) {\n const strValue = (value === null || value === undefined) ? '' : String(value);\n inputEl.value = strValue;\n if (inputEl.value !== strValue && inputEl.options.length > 0) {\n for (let i = 0; i < inputEl.options.length; i++) {\n if (inputEl.options[i].text === strValue) {\n inputEl.value = inputEl.options[i].value;\n break;\n }\n }\n }\n }\n else if (nativeInput && nativeInput.type === 'radio') {\n const radios = this.element.querySelectorAll(`input[type=\"radio\"][name=\"${fieldId}\"]`);\n for (let i = 0; i < radios.length; i++) {\n radios[i].checked = String(value) === radios[i].value;\n }\n }\n else if (isCheckable) {\n nativeInput.checked = FormRenderer_1.coerceChecked(value);\n }\n else if (typeof inputEl.value !== 'undefined') {\n inputEl.value = (value === null || value === undefined) ? '' : String(value);\n }\n }\n catch (e) { /* ignore */ }\n }\n /**\n * @private\n */\n static coerceChecked(value) {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'number') {\n return value !== 0;\n }\n if (typeof value === 'string') {\n return value !== '' && value !== 'false' && value !== '0';\n }\n return !!value;\n }\n /**\n * @private\n */\n onPropertyChanged(newProps, oldProps) {\n let reRender = false;\n if (newProps.schema !== oldProps.schema) {\n reRender = true;\n }\n if (newProps.dataModel !== oldProps.dataModel) {\n reRender = true;\n }\n if (newProps.locale !== oldProps.locale) {\n reRender = true;\n }\n if (newProps.enableRtl !== oldProps.enableRtl) {\n reRender = true;\n }\n if (newProps.layout !== oldProps.layout) {\n reRender = true;\n }\n if (newProps.customWidgetSettings !== oldProps.customWidgetSettings) {\n reRender = true;\n }\n if (!reRender) {\n return;\n }\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.refreshing = true;\n this.destroyRendered();\n this.removePreviousRoot();\n this.isInitialized = false;\n this.render();\n this.refreshing = false;\n }\n /**\n * @private\n */\n destroyRendered() {\n if (this.validator) {\n try {\n this.validator.destroy();\n }\n catch (e) {\n this.trigger('failure', {\n error: e\n });\n }\n this.validator = null;\n }\n this.renderedInstances.forEach((inst) => {\n this.destroyRenderedInstance(inst);\n });\n this.renderedInstances = [];\n this.removePreviousRoot();\n this.inputRefs = {};\n this.tooltipRefs = {};\n this.conditionalValueApplied = {};\n this.expressionDependencyGraph = {};\n this.computedFieldNames = new Set();\n this.previousFormValues = {};\n this.conditionalTriggerFieldIds = new Set();\n this.consumerDependencyMap = new Map();\n this.preservedFields = new Map();\n this.pendingChangedFieldIds = new Set();\n }\n /**\n * @private\n */\n clearPersistedTabSelections() {\n if (typeof window === 'undefined')\n return null;\n try {\n const components = (this.processedSchemaCache && this.processedSchemaCache.components)\n ? this.processedSchemaCache.components\n : [];\n const allComps = this.collectAllComponents(components);\n allComps.forEach((component) => {\n if (component.type === 'tabs' && component.id) {\n window.localStorage.removeItem('tab' + component.id);\n }\n });\n }\n catch (_a) {\n }\n }\n getTemplateFunction(template) {\n let templateFn = null;\n try {\n if (typeof template === 'string' && template.indexOf('#') !== -1 && document.querySelectorAll(template).length) {\n templateFn = compile(this.sanitizeTemplateValue(document.querySelector(template).innerHTML.trim()));\n }\n else if (typeof template === 'string') {\n templateFn = compile(this.sanitizeTemplateValue(template));\n }\n else {\n templateFn = compile(template);\n }\n }\n catch (e) {\n templateFn = compile(template);\n }\n return templateFn;\n }\n /**\n * @private\n */\n sanitizeTemplateValue(value) {\n if (this.enableHtmlSanitizer && typeof value === 'string') {\n try {\n return SanitizeHtmlHelper.sanitize(value);\n }\n catch (e) { /* swallow */ }\n }\n return value;\n }\n /**\n * @private\n */\n destroy() {\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.destroyRendered();\n this.formState = { values: {}, errors: {} };\n this.expressionEngine = null;\n this.customValidationEngine = null;\n this.clearEngineCaches();\n this.clearPersistedTabSelections();\n this.consumerDependencyMap = new Map();\n this.preservedFields = new Map();\n this.conditionalTriggerFieldIds = new Set();\n super.destroy();\n }\n /**\n * @private\n */\n clearEngineCaches() {\n if (this.expressionEngine) {\n try {\n this.expressionEngine.clearCache();\n }\n catch (e) { /* swallow */ }\n }\n if (this.customValidationEngine) {\n const inner = this.customValidationEngine.expressionEngine;\n if (inner && typeof inner.clearCache === 'function') {\n try {\n inner.clearCache();\n }\n catch (e) { /* swallow */ }\n }\n }\n }\n};\nFormRenderer.PRESERVABLE_TYPES = new Set([\n 'textbox', 'textarea', 'number', 'checkbox', 'checkboxGroup', 'radio', 'dropdown', 'multiselect', 'button', 'date', 'dateTime', 'time', 'dateRange', 'switch', 'signature', 'rating', 'imageEditor', 'fileUpload', 'rangeSlider', 'colorPicker', 'inputMask', 'message', 'panel', 'table', 'tabs', 'dataGrid', 'staticHtml', 'card', 'splitButton', 'richTextEditor'\n]);\n__decorate([\n Property(null)\n], FormRenderer.prototype, \"schema\", void 0);\n__decorate([\n Property(null)\n], FormRenderer.prototype, \"dataModel\", void 0);\n__decorate([\n Property('SingleColumn')\n], FormRenderer.prototype, \"layout\", void 0);\n__decorate([\n Property('')\n], FormRenderer.prototype, \"className\", void 0);\n__decorate([\n Collection([], CustomWidgetSetting)\n], FormRenderer.prototype, \"customWidgetSettings\", void 0);\n__decorate([\n Property(false)\n], FormRenderer.prototype, \"enableHtmlSanitizer\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"submit\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"change\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"buttonClick\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"failure\", void 0);\n__decorate([\n Event()\n], FormRenderer.prototype, \"created\", void 0);\nFormRenderer = FormRenderer_1 = __decorate([\n NotifyPropertyChanges\n], FormRenderer);\nexport { FormRenderer };\nexport default FormRenderer;\n","/**\n * These enum values define the layouts available to render forms.\n */\nexport var FormLayout;\n(function (FormLayout) {\n /**\n * SingleColumn - Represents the single column layout and renders forms in a vertical layout.\n */\n FormLayout[\"SingleColumn\"] = \"SingleColumn\";\n /**\n * TwoColumn - Represents the two column layout and renders forms in a two column grid layout.\n */\n FormLayout[\"TwoColumn\"] = \"TwoColumn\";\n /**\n * ThreeColumn - Represents the three column layout which renders forms in a three column grid layout.\n */\n FormLayout[\"ThreeColumn\"] = \"ThreeColumn\";\n /**\n * FourColumn - Represents the four column layout which renders forms in a four column grid layout.\n */\n FormLayout[\"FourColumn\"] = \"FourColumn\";\n})(FormLayout || (FormLayout = {}));\n/**\n * Specifies the component types supported in the Form Renderer.\n */\nexport const FORM_COMPONENT_TYPES = [\n 'textbox', 'textarea', 'number', 'checkbox', 'checkboxGroup', 'radio',\n 'dropdown', 'multiselect', 'button', 'date', 'dateTime', 'time', 'dateRange',\n 'switch', 'signature', 'rating', 'imageEditor', 'fileUpload', 'rangeSlider',\n 'colorPicker', 'inputMask', 'message', 'panel', 'table', 'tabs', 'dataGrid',\n 'staticHtml', 'card', 'splitButton', 'richTextEditor'\n];\n"],"names":["Toolbar","RTEImage","this"],"mappings":"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"}
|