{"version":3,"file":"messaia-cdk.mjs","sources":["../../../projects/cdk/src/lib/common/models/app-setting.ts","../../../projects/cdk/src/lib/common/services/context-helper.ts","../../../projects/cdk/src/lib/dialogs/alert-dialog/alert-dialog.ts","../../../projects/cdk/src/lib/dialogs/confirm-dialog/confirm-dialog.ts","../../../projects/cdk/src/lib/dialogs/confirm-dialog/confirm-dialog.html","../../../projects/cdk/src/lib/dialogs/dialog.ts","../../../projects/cdk/src/lib/dialogs/dialog.html","../../../projects/cdk/src/lib/dialogs/prompt-dialog/prompt-dialog.ts","../../../projects/cdk/src/lib/dialogs/prompt-dialog/prompt-dialog.html","../../../projects/cdk/src/lib/dialogs/services/dialog.ts","../../../projects/cdk/src/lib/media/services/media.ts","../../../projects/cdk/src/lib/base/constants/common.ts","../../../projects/cdk/src/lib/base/constants/global-roles.ts","../../../projects/cdk/src/lib/base/enums/message-type.ts","../../../projects/cdk/src/lib/base/models/auth-user.ts","../../../projects/cdk/src/lib/base/helpers/auth-helper.ts","../../../projects/cdk/src/lib/base/models/task-dialog-data.ts","../../../projects/cdk/src/lib/base/components/task-dialog/task-dialog.ts","../../../projects/cdk/src/lib/base/components/task-dialog/task-dialog.html","../../../projects/cdk/src/lib/base/components/base.ts","../../../projects/cdk/src/lib/base/directives/dialog-maximize.ts","../../../projects/cdk/src/lib/base/components/dialog-header-actions/dialog-header-actions.ts","../../../projects/cdk/src/lib/base/components/dialog-header/dialog-header.ts","../../../projects/cdk/src/lib/form-validators/abstract/typed-form.ts","../../../projects/cdk/src/lib/form-validators/const/validation-alphabet-locale.const.ts","../../../projects/cdk/src/lib/form-validators/core/annotation-types.ts","../../../projects/cdk/src/lib/form-validators/util/regex-rules.ts","../../../projects/cdk/src/lib/form-validators/util/alphabet-regex.locale.ts","../../../projects/cdk/src/lib/form-validators/const/config-names.const.ts","../../../projects/cdk/src/lib/form-validators/const/config-required-fields.const.ts","../../../projects/cdk/src/lib/form-validators/services/entity.ts","../../../projects/cdk/src/lib/form-validators/const/validator.const.ts","../../../projects/cdk/src/lib/form-validators/const/events.const.ts","../../../projects/cdk/src/lib/form-validators/const/html-elements.const.ts","../../../projects/cdk/src/lib/form-validators/const/app.const.ts","../../../projects/cdk/src/lib/form-validators/const/decorators.const.ts","../../../projects/cdk/src/lib/form-validators/util/linq.ts","../../../projects/cdk/src/lib/form-validators/core/default-container.ts","../../../projects/cdk/src/lib/form-validators/util/regex-validator.ts","../../../projects/cdk/src/lib/form-validators/domain/form-data.ts","../../../projects/cdk/src/lib/form-validators/enums/numeric-value-type.ts","../../../projects/cdk/src/lib/form-validators/enums/ip-version.ts","../../../projects/cdk/src/lib/form-validators/enums/error-message-binding-strategy.ts","../../../projects/cdk/src/lib/form-validators/enums/reset-type.ts","../../../projects/cdk/src/lib/form-validators/util/reactive-form-config.ts","../../../projects/cdk/src/lib/form-validators/util/object-maker.ts","../../../projects/cdk/src/lib/form-validators/services/rx-form-array.ts","../../../projects/cdk/src/lib/form-validators/util/app-util.ts","../../../projects/cdk/src/lib/form-validators/util/reset-form.ts","../../../projects/cdk/src/lib/form-validators/util/instance-provider.function.ts","../../../projects/cdk/src/lib/form-validators/domain/disable-provider.ts","../../../projects/cdk/src/lib/form-validators/util/date-provider.ts","../../../projects/cdk/src/lib/form-validators/util/sanitizers.ts","../../../projects/cdk/src/lib/form-validators/services/form-control.ts","../../../projects/cdk/src/lib/form-validators/services/rx-form-group.ts","../../../projects/cdk/src/lib/form-validators/util/form-provider.ts","../../../projects/cdk/src/lib/form-validators/util/config-provider.ts","../../../projects/cdk/src/lib/form-validators/util/validator-value-checker.ts","../../../projects/cdk/src/lib/form-validators/validators-function/alpha-validation.function.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/alpha.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/alphaNumeric.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/compare.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/contains.validator.ts","../../../projects/cdk/src/lib/form-validators/algorithm/luhn-algorithm.ts","../../../projects/cdk/src/lib/form-validators/util/check-length.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/credit-card.validator.ts","../../../projects/cdk/src/lib/form-validators/validators-function/regex-validation.function.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/digit.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/email.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/hexcolor.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/lowercase.validator.ts","../../../projects/cdk/src/lib/form-validators/const/operators.const.ts","../../../projects/cdk/src/lib/form-validators/util/date-checker.function.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/maxDate.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/maxLength.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/maxNumber.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/minDate.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/minLength.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/minNumber.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/password.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/range.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/uppercase.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/required.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/pattern.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/time.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/url.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/json.validator.ts","../../../projects/cdk/src/lib/form-validators/util/relational-checker.function.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/greater-than.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/less-than.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/choice.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/different.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/numeric.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/even.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/odd.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/factor.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/leapYear.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/allOf.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/oneOf.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/noneOf.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/mac.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/ascii.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/dataUri.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/port.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/latLong.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/extension.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/fileSize.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/endsWith.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/startsWith.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/primeNumber.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/latitude.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/longitude.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/compose.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/rule.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/file.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/custom.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/unique.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/image.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/notEmpty.validator.ts","../../../projects/cdk/src/lib/form-validators/util/ip-checker.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/ip.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/cusip.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/grid.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/date.validator.ts","../../../projects/cdk/src/lib/form-validators/util/time-checker.function.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/minTime.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/maxTime.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/requiredTrue.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/mask.validator.ts","../../../projects/cdk/src/lib/form-validators/const/iban-country-wise-regex.const.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/iban.validator.ts","../../../projects/cdk/src/lib/form-validators/const/app-validators.const.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/async/base.async.validator.ts","../../../projects/cdk/src/lib/form-validators/decorators/base-decorator.function.ts","../../../projects/cdk/src/lib/form-validators/decorators/allOf.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/alpha.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/alphaNumeric.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/and.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/ascii.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/async.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/choice.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/compare.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/compose.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/contains.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/credit-card.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/cusip.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/custom.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/dataUri.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/date.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/different.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/digit.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/email.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/endsWith.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/even.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/extension.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/factor.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/file.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/fileSize.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/greater-than-equal-to.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/greater-than.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/grid.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/hexColor.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/iban.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/image.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/json.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/latitude.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/latLong.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/leapYear.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/less-than-equal-to.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/less-than.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/longitude.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/lowercase.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/mac.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/mask.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/maxDate.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/maxLength.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/maxNumber.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/maxTime.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/minDate.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/minLength.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/minNumber.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/minTime.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/model.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/non-validation-decorators/disable.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/non-validation-decorators/error.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/non-validation-decorators/update-on.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/noneOf.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/not.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/notEmpty.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/numeric.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/odd.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/oneOf.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/or.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/password.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/pattern.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/port.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/primeNumber.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/prop-array.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/prop-object.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/prop.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/range.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/required.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/requiredTrue.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/rule.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/blacklist.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/escape.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/ltrim.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/prefix.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/rtrim.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/sanitize.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/stripLow.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/suffix.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toBoolean.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toDate.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toDouble.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toFloat.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toInt.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/toString.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/trim.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/sanitize/whitelist.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/startsWith.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/time.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/unique.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/uppercase.decorator.ts","../../../projects/cdk/src/lib/form-validators/decorators/url.decorator.ts","../../../projects/cdk/src/lib/form-validators/directives/base.ts","../../../projects/cdk/src/lib/form-validators/directives/html-control-template.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/conditional-change.validator.ts","../../../projects/cdk/src/lib/form-validators/directives/rx-form.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/async-validation.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/file-control.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/image-file-control.ts","../../../projects/cdk/src/lib/form-validators/domain/element-processor/decimal.provider.ts","../../../projects/cdk/src/lib/form-validators/domain/element-processor/mask.provider.ts","../../../projects/cdk/src/lib/form-validators/util/form-const.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/control-expression-process.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/base-validator.ts","../../../projects/cdk/src/lib/form-validators/directives/template-validations/rxformcontrol.ts","../../../projects/cdk/src/lib/form-validators/enums/url-validation-type.ts","../../../projects/cdk/src/lib/form-validators/models/form-builder-configuration.ts","../../../projects/cdk/src/lib/form-validators/models/interface/i-abstract-control.ts","../../../projects/cdk/src/lib/form-validators/directives/control-host.ts","../../../projects/cdk/src/lib/common/functions/utils.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/and.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/not.validator.ts","../../../projects/cdk/src/lib/form-validators/reactive-form-validators/or.validator.ts","../../../projects/cdk/src/lib/form-validators/services/base-form-builder.ts","../../../projects/cdk/src/lib/form-validators/services/rx-form-builder.ts","../../../projects/cdk/src/lib/form-validators/services/typed-form-builder.ts","../../../projects/cdk/src/lib/form-validators/services/reactive-form.module.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/base-validator.function.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/alpha-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/allOf-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/alphaNumeric-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/choice-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/compare-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/contains-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/credit-card-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/different-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/digit-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/email-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/even-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/factor-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/greater-than-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/hexcolor-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/json-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/leapYear-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/less-than-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/lowercase-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/mac-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/maxDate-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/maxLength-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/maxNumber-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/minDate-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/minLength-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/minNumber-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/noneOf-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/numeric-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/odd-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/oneOf-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/password-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/pattern-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/range-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/required-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/time-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/uppercase-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/url-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/ascii-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/dataUri-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/port-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/latLong-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/extension-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/fileSize-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/endsWith-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/startsWith-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/primeNumber-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/latitude-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/longitude-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/compose-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/file-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/custom-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/unique-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/image-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/notEmpty-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/ip-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/cusip-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/grid-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/date-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/and-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/or-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/not-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/minTime-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/maxTime-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/requiredTrue-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/mask-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/iban-validator.extension.ts","../../../projects/cdk/src/lib/form-validators/validators-extension/rxweb-validators.ts","../../../projects/cdk/src/lib/common/helpers/dynamic-builder.ts","../../../projects/cdk/src/lib/common/models/action-item.ts","../../../projects/cdk/src/lib/common/pipes/join.ts","../../../projects/cdk/src/lib/common/pipes/map.ts","../../../projects/cdk/src/lib/common/pipes/nested-property.ts","../../../projects/cdk/src/lib/common/animations/collapse/collapse.animation.ts","../../../projects/cdk/src/lib/common/behaviors/disable-ripple.mixin.ts","../../../projects/cdk/src/lib/common/behaviors/disabled.mixin.ts","../../../projects/cdk/src/lib/common/components/enum-display/enum-display.ts","../../../projects/cdk/src/lib/common/constants/constants.ts","../../../projects/cdk/src/lib/common/directives/autofocus.ts","../../../projects/cdk/src/lib/common/directives/delayed-hover.ts","../../../projects/cdk/src/lib/common/directives/disable-control.ts","../../../projects/cdk/src/lib/common/enums/app-event-type.ts","../../../projects/cdk/src/lib/common/enums/filter-glue.ts","../../../projects/cdk/src/lib/common/enums/filter-operator.ts","../../../projects/cdk/src/lib/common/enums/salutation.ts","../../../projects/cdk/src/lib/common/functions/decorators.ts","../../../projects/cdk/src/lib/common/functions/functions.ts","../../../projects/cdk/src/lib/common/helpers/app-storage.ts","../../../projects/cdk/src/lib/common/helpers/dynamic-component-compiler.ts","../../../projects/cdk/src/lib/common/models/app-event.ts","../../../projects/cdk/src/lib/table/enums/grid.ts","../../../projects/cdk/src/lib/table/constants/constants.ts","../../../projects/cdk/src/lib/table/enums/table-column-type.ts","../../../projects/cdk/src/lib/table/models/table-column.ts","../../../projects/cdk/src/lib/table/models/table-definition.ts","../../../projects/cdk/src/lib/table/functions/functions.ts","../../../projects/cdk/src/lib/table/functions/decorators.ts","../../../projects/cdk/src/lib/common/models/base-entity.ts","../../../projects/cdk/src/lib/common/models/audit-entity.ts","../../../projects/cdk/src/lib/common/models/audit-user.ts","../../../projects/cdk/src/lib/common/models/common-error.ts","../../../projects/cdk/src/lib/common/models/common-handler-context.ts","../../../projects/cdk/src/lib/common/models/displayname-number-projection.ts","../../../projects/cdk/src/lib/common/models/displayname-projection.ts","../../../projects/cdk/src/lib/common/models/enum-metadata.ts","../../../projects/cdk/src/lib/common/models/icon.ts","../../../projects/cdk/src/lib/common/models/key-value.ts","../../../projects/cdk/src/lib/common/models/modifiable-entity.ts","../../../projects/cdk/src/lib/common/models/name-number-projection.ts","../../../projects/cdk/src/lib/common/models/name-projection.ts","../../../projects/cdk/src/lib/common/models/permission.ts","../../../projects/cdk/src/lib/common/models/save-action.ts","../../../projects/cdk/src/lib/common/models/suffix-button.ts","../../../projects/cdk/src/lib/common/models/title-projection.ts","../../../projects/cdk/src/lib/common/pipes/bind.ts","../../../projects/cdk/src/lib/common/pipes/data-source.ts","../../../projects/cdk/src/lib/common/pipes/enum.ts","../../../projects/cdk/src/lib/common/pipes/file-size.ts","../../../projects/cdk/src/lib/common/pipes/filter.ts","../../../projects/cdk/src/lib/common/pipes/first-letter.ts","../../../projects/cdk/src/lib/common/pipes/form-array.ts","../../../projects/cdk/src/lib/common/pipes/form-control.ts","../../../projects/cdk/src/lib/common/pipes/form-group.ts","../../../projects/cdk/src/lib/common/pipes/func.ts","../../../projects/cdk/src/lib/common/pipes/keys.ts","../../../projects/cdk/src/lib/common/pipes/month-name.ts","../../../projects/cdk/src/lib/common/pipes/only-number.ts","../../../projects/cdk/src/lib/common/pipes/order.ts","../../../projects/cdk/src/lib/common/pipes/placeholder.ts","../../../projects/cdk/src/lib/common/pipes/property-join.ts","../../../projects/cdk/src/lib/common/pipes/safe-html.ts","../../../projects/cdk/src/lib/common/pipes/split.ts","../../../projects/cdk/src/lib/common/pipes/time.ts","../../../projects/cdk/src/lib/common/pipes/titlecase.ts","../../../projects/cdk/src/lib/common/pipes/truncate.ts","../../../projects/cdk/src/lib/common/pipes/values.ts","../../../projects/cdk/src/lib/http/services/generic.ts","../../../projects/cdk/src/lib/common/services/base.ts","../../../projects/cdk/src/lib/common/services/enum.ts","../../../projects/cdk/src/lib/common/services/event-queue.ts","../../../projects/cdk/src/lib/common/templates/templates.ts","../../../projects/cdk/src/lib/common/public_api.ts","../../../projects/cdk/src/lib/layout/dynamic-menu/dynamic-menu.ts","../../../projects/cdk/src/lib/layout/dynamic-menu/dynamic-menu.html","../../../projects/cdk/src/lib/forms/helpers/abstract-mat-form-field.ts","../../../projects/cdk/src/lib/forms/helpers/abstract-select-form-field.ts","../../../projects/cdk/src/lib/select/directives/vd-select-option.ts","../../../projects/cdk/src/lib/select/directives/vd-select-trigger.ts","../../../projects/cdk/src/lib/select/components/select.ts","../../../projects/cdk/src/lib/select/components/select.html","../../../projects/cdk/src/lib/table/table.data-source.ts","../../../projects/cdk/src/lib/table/directives/data-source-filter.ts","../../../projects/cdk/src/lib/table/table.static-data-source.ts","../../../projects/cdk/src/lib/table/components/filter-clear/filter-clear.ts","../../../projects/cdk/src/lib/table/components/filter-clear/filter-clear.html","../../../projects/cdk/src/lib/table/components/filter-date/filter-date.ts","../../../projects/cdk/src/lib/table/components/filter-date/filter-date.html","../../../projects/cdk/src/lib/table/components/filter-input/filter-input.ts","../../../projects/cdk/src/lib/table/components/filter-input/filter-input.html","../../../projects/cdk/src/lib/table/components/filter-select/filter-select.ts","../../../projects/cdk/src/lib/table/components/filter-select/filter-select.html","../../../projects/cdk/src/lib/table/components/dynamic-table/dynamic-table.ts","../../../projects/cdk/src/lib/table/components/dynamic-table/dynamic-table.html","../../../projects/cdk/src/lib/table/models/table-column-config.ts","../../../projects/cdk/src/lib/table/models/table-query-config.ts","../../../projects/cdk/src/lib/table/models/table-config.ts","../../../projects/cdk/src/lib/base/components/dynamic-table-config-dialog/dynamic-table-config-dialog.comnponent.ts","../../../projects/cdk/src/lib/base/components/dynamic-table-config-dialog/dynamic-table-config-dialog.comnponent.html","../../../projects/cdk/src/lib/base/components/generic-list.ts","../../../projects/cdk/src/lib/base/components/generic-embedded-list.ts","../../../projects/cdk/src/lib/forms/constants/constants.ts","../../../projects/cdk/src/lib/forms/models/form-definition.ts","../../../projects/cdk/src/lib/forms/models/form-field-group-definition.ts","../../../projects/cdk/src/lib/forms/functions/functions.ts","../../../projects/cdk/src/lib/base/components/generic-form-base.ts","../../../projects/cdk/src/lib/base/components/generic-form.ts","../../../projects/cdk/src/lib/base/components/generic-reactive-form.ts","../../../projects/cdk/src/lib/base/guards/confirm-exit-guard.ts","../../../projects/cdk/src/lib/base/interceptors/base.interceptor.ts","../../../projects/cdk/src/lib/base/interceptors/caching.interceptor.ts","../../../projects/cdk/src/lib/base/services/loading-screen.ts","../../../projects/cdk/src/lib/base/interceptors/loading.interceptor.ts","../../../projects/cdk/src/lib/base/services/file.ts","../../../projects/cdk/src/lib/base/services/print.ts","../../../projects/cdk/src/lib/chips/directives/autocomplete-option.ts","../../../projects/cdk/src/lib/chips/directives/chip.ts","../../../projects/cdk/src/lib/chips/components/chips.ts","../../../projects/cdk/src/lib/chips/components/chips.html","../../../projects/cdk/src/lib/file/file-input.ts","../../../projects/cdk/src/lib/file/file.module.ts","../../../projects/cdk/src/lib/forms/components/datepicker/datepicker-header.ts","../../../projects/cdk/src/lib/forms/components/datepicker/datepicker-header.html","../../../projects/cdk/src/lib/forms/components/edit-action-row/edit-form-actions.ts","../../../projects/cdk/src/lib/forms/components/edit-action-row/edit-form-actions.html","../../../projects/cdk/src/lib/list/directives/vd-list-option.ts","../../../projects/cdk/src/lib/list/components/list.ts","../../../projects/cdk/src/lib/list/components/list.html","../../../projects/cdk/src/lib/forms/directives/mat-form-field-radio.ts","../../../projects/cdk/src/lib/forms/directives/parse-decimal.ts","../../../projects/cdk/src/lib/forms/directives/prefix.ts","../../../projects/cdk/src/lib/forms/directives/remove-whitespace.ts","../../../projects/cdk/src/lib/forms/directives/vd-generic-form-custom-field.ts","../../../projects/cdk/src/lib/forms/enums/form-field-type.ts","../../../projects/cdk/src/lib/forms/validators/native-element-injector.ts","../../../projects/cdk/src/lib/forms/components/generic-form/generic-form.ts","../../../projects/cdk/src/lib/forms/components/generic-form/generic-form.html","../../../projects/cdk/src/lib/forms/directives/mat-form-field-editor.ts","../../../projects/cdk/src/lib/forms/directives/mat-form-field-readonly.ts","../../../projects/cdk/src/lib/forms/models/form-field-definition.ts","../../../projects/cdk/src/lib/forms/functions/decorators.ts","../../../projects/cdk/src/lib/forms/helpers/value-accessor-base.ts","../../../projects/cdk/src/lib/forms/pipes/field-func.ts","../../../projects/cdk/src/lib/forms/pipes/group-filter.ts","../../../projects/cdk/src/lib/forms/validators/empty-string-reset.ts","../../../projects/cdk/src/lib/forms/validators/equal-validator.ts","../../../projects/cdk/src/lib/forms/validators/unique-validator.ts","../../../projects/cdk/src/lib/http/models/response.ts","../../../projects/cdk/src/lib/menu/enums/menu-item-target.ts","../../../projects/cdk/src/lib/menu/components/menu.ts","../../../projects/cdk/src/lib/menu/components/menu.html","../../../projects/cdk/src/lib/menu/enums/menu-scope.ts","../../../projects/cdk/src/lib/menu/models/menu-client.ts","../../../projects/cdk/src/lib/menu/models/menu-department.ts","../../../projects/cdk/src/lib/menu/models/menu-item-client.ts","../../../projects/cdk/src/lib/menu/models/menu-item-department.ts","../../../projects/cdk/src/lib/menu/models/menu-item.ts","../../../projects/cdk/src/lib/menu/models/menu.ts","../../../projects/cdk/src/lib/menu/models/menu-settings.ts","../../../projects/cdk/src/lib/menu/resolvers/menu-form-includes.resolve.ts","../../../projects/cdk/src/lib/menu/resolvers/menu-item-form-includes.resolve.ts","../../../projects/cdk/src/lib/menu/resolvers/menu-list-projection.resolve.ts","../../../projects/cdk/src/lib/menu/resolvers/menu-settings.resolve.ts","../../../projects/cdk/src/lib/menu/services/menu-items.ts","../../../projects/cdk/src/lib/menu/services/menu.ts","../../../projects/cdk/src/lib/menu/services/menu.resolve.ts","../../../projects/cdk/src/lib/layout/layout.ts","../../../projects/cdk/src/lib/layout/layout.html","../../../projects/cdk/src/lib/layout/layout-card-over/layout-card-over.ts","../../../projects/cdk/src/lib/layout/layout-card-over/layout-card-over.html","../../../projects/cdk/src/lib/layout/layout-compact/layout-compact.ts","../../../projects/cdk/src/lib/layout/layout-compact/layout-compact.html","../../../projects/cdk/src/lib/layout/layout-footer/layout-footer.ts","../../../projects/cdk/src/lib/layout/layout-footer/layout-footer.html","../../../projects/cdk/src/lib/layout/layout-manage-list/layout-manage-list.ts","../../../projects/cdk/src/lib/layout/layout-manage-list/layout-manage-list.html","../../../projects/cdk/src/lib/layout/layout-toggle.class.ts","../../../projects/cdk/src/lib/layout/layout-manage-list/layout-manage-lists.ts","../../../projects/cdk/src/lib/layout/layout-nav-list/layout-nav-list.ts","../../../projects/cdk/src/lib/layout/layout-nav-list/layout-nav-list.html","../../../projects/cdk/src/lib/layout/layout-nav-list/layout-nav-lists.ts","../../../projects/cdk/src/lib/layout/layouts.ts","../../../projects/cdk/src/lib/layout/layout-nav/layout-nav.ts","../../../projects/cdk/src/lib/layout/layout-nav/layout-nav.html","../../../projects/cdk/src/lib/layout/list-toolbar/list-toolbar.ts","../../../projects/cdk/src/lib/layout/list-toolbar/list-toolbar.html","../../../projects/cdk/src/lib/layout/navigation-drawer/navigation-drawer.ts","../../../projects/cdk/src/lib/layout/navigation-drawer/navigation-drawer.html","../../../projects/cdk/src/lib/media/directives/media-toggle.ts","../../../projects/cdk/src/lib/table/directives/vd-table-field.ts","../../../projects/cdk/src/lib/table/models/facet-value.ts","../../../projects/cdk/src/lib/table/models/facet.ts","../../../projects/cdk/src/lib/table/models/pagination.ts","../../../projects/cdk/src/lib/table/paginator-intl.ts","../../../projects/cdk/src/messaia-cdk.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppSetting {\r\n    /**\r\n     * @property Indicates if the application is running in production mode.\r\n     * @description This flag determines whether the application is in production mode, \r\n     * affecting logging and behavior for debugging purposes.\r\n     * @type {boolean}\r\n     */\r\n    public production?: boolean;\r\n\r\n    /**\r\n     * @property Indicates if debug mode is enabled for the application.\r\n     * @description This flag enables additional logging and debugging features \r\n     * when the application is not in production.\r\n     * @type {boolean}\r\n     */\r\n    public debug?: boolean;\r\n\r\n    /** \r\n     * @property Controls the visibility of the debug banner.\r\n     * @description If set to true, the debug banner will be displayed; \r\n     * otherwise, it will be hidden.\r\n     * @type {boolean}\r\n     */\r\n    public showDebugBanner?: boolean;\r\n\r\n    /**\r\n     * @property Base URL for API requests.\r\n     * @description Specifies the root URL used for making HTTP API requests.\r\n     * @type {string}\r\n     */\r\n    public apiUrl?: string;\r\n\r\n    /**\r\n     * @property URL of the frontend application.\r\n     * @description Specifies the URL where the frontend part of the application is hosted.\r\n     * @type {string}\r\n     */\r\n    public frontendUrl?: string;\r\n\r\n    /**\r\n     * @property Name of the project.\r\n     * @description Specifies the display name of the project, used in the UI and settings.\r\n     * @type {string}\r\n     */\r\n    public projectName?: string;\r\n\r\n    /**\r\n     * @property Copyright information for the project.\r\n     * @description Provides the copyright statement or information displayed in the application.\r\n     * @type {string}\r\n     */\r\n    public copyright?: string;\r\n\r\n    /**\r\n     * @property URL used for authentication services.\r\n     * @description Specifies the endpoint used for handling authentication requests.\r\n     * @type {string}\r\n     */\r\n    public authUrl?: string;\r\n\r\n    /**\r\n     * @property URL for the SPA (Single Page Application).\r\n     * @description Specifies the URL where the SPA version of the application is hosted.\r\n     * @type {string}\r\n     */\r\n    public spaUrl?: string;\r\n\r\n    /**\r\n     * @property Route to navigate to after login.\r\n     * @description Specifies the default route where users are redirected after a successful login.\r\n     * @type {string}\r\n     */\r\n    public postLoginRoute?: string;\r\n\r\n    /**\r\n     * @property Client ID for authentication.\r\n     * @description The client identifier used for OAuth or other authentication protocols.\r\n     * @type {string}\r\n     */\r\n    public authClientId?: string;\r\n\r\n    /**\r\n     * @property Response type for authentication requests.\r\n     * @description Specifies the response type for OAuth or authentication protocols (e.g., 'token', 'code').\r\n     * @type {string}\r\n     */\r\n    public authResponseType?: string;\r\n\r\n    /**\r\n     * @property Scope for authentication.\r\n     * @description Defines the access scope for authentication requests, \r\n     * usually a space-separated list of permissions.\r\n     * @type {string}\r\n     */\r\n    public authScope?: string;\r\n}","import { ActivatedRoute, Router } from \"@angular/router\";\r\nimport { AppSetting } from \"../models/app-setting\";\r\n\r\n//@dynamic\r\nexport class ContextHelper {\r\n    /**\r\n     * Provides access to information about a route associated with a component \r\n     * that is loaded in an outlet.\r\n     */\r\n    static activatedRoute: ActivatedRoute;\r\n\r\n    /**\r\n     * A service that provides navigation among views and URL manipulation capabilities.\r\n     */\r\n    static router: Router;\r\n\r\n    /**\r\n     * App settings\r\n     */\r\n    static appSetting: AppSetting;\r\n}","\r\nimport { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tselector: 'vd-alert-dialog',\r\n\ttemplate: `\r\n\t\t@if (title) {\r\n\t\t  <h1 mat-dialog-title>{{title}}</h1>\r\n\t\t}\r\n\t\t<mat-dialog-content class=\"mat-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n\t\t<mat-dialog-actions align=\"end\">\r\n\t\t  <button mat-button color=\"accent\" (click)=\"close()\">{{closeButton}}</button>\r\n\t\t</mat-dialog-actions>`,\r\n\timports: [\r\n    MatButtonModule,\r\n    MatDialogModule\r\n]\r\n})\r\nexport class VdAlertDialogComponent {\r\n\ttitle?: string;\r\n\tmessage?: string;\r\n\tcloseButton: string = $localize`:@@close:Close`;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _dialogRef \r\n\t */\r\n\tconstructor(private _dialogRef: MatDialogRef<VdAlertDialogComponent>) { }\r\n\r\n\t/**\r\n\t * Closes the dialog window\r\n\t */\r\n\tclose(): void {\r\n\t\tthis._dialogRef.close();\r\n\t}\r\n}","\r\nimport { Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n\tselector: 'vd-confirm-dialog',\r\n\ttemplateUrl: 'confirm-dialog.html',\r\n\timports: [\r\n    MatIcon,\r\n    MatButtonModule,\r\n    MatDialogModule\r\n]\r\n})\r\nexport class VdConfirmDialogComponent {\r\n\t/**\r\n\t * @property title\r\n\t * @description The title to be displayed at the top of the dialog.\r\n\t * @type {string | undefined}\r\n\t */\r\n\tpublic title?: string;\r\n\r\n\t/**\r\n\t * @property message\r\n\t * @description The message to be displayed in the dialog body.\r\n\t * @type {string | undefined}\r\n\t */\r\n\tpublic message?: string;\r\n\r\n\t/**\r\n\t * @property cancelButton\r\n\t * @description The text for the cancel button. Default is 'Cancel'.\r\n\t * @type {string}\r\n\t */\r\n\tpublic cancelButton: string = $localize`:@@cancel:Cancel`;\r\n\r\n\t/**\r\n\t * @property acceptButton\r\n\t * @description The text for the accept button. Default is 'Accept'.\r\n\t * @type {string}\r\n\t */\r\n\tpublic acceptButton: string = $localize`:@@accept:Accept`;\r\n\r\n\t/**\r\n\t * Constructor Initializes the dialog reference to control dialog behavior.\r\n\t * @param dialogRef The dialog reference to control dialog behavior.\r\n\t */\r\n\tconstructor(private dialogRef: MatDialogRef<VdConfirmDialogComponent>) { }\r\n\r\n\t/**\r\n\t * Cancels the dialog and returns 'false' to indicate cancellation.\r\n\t */\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close(false);\r\n\t}\r\n\r\n\t/**\r\n\t * Accepts the dialog and returns 'true' to indicate acceptance.\r\n\t */\r\n\tpublic accept(): void {\r\n\t\tthis.dialogRef.close(true);\r\n\t}\r\n}","@if (title) {\r\n  <h2 mat-dialog-title class=\"push-top-sm\" layout=\"row\" layout-align=\"start center\" flex>\r\n    <mat-icon fontSet=\"material-symbols-outlined\" class=\"push-right-sm tc-blue-400\">help</mat-icon>\r\n    <span>{{title}}</span>\r\n  </h2>\r\n}\r\n<mat-dialog-content class=\"mat-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n  <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n  <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" (click)=\"accept()\">{{acceptButton}}</button>\r\n</mat-dialog-actions>","\r\nimport type { QueryList } from '@angular/core';\r\nimport { AfterContentInit, Component, ContentChildren, Directive } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: 'vd-dialog-title'\r\n})\r\nexport class VdDialogTitleDirective { }\r\n\r\n@Directive({\r\n\tselector: 'vd-dialog-content'\r\n})\r\nexport class VdDialogContentDirective { }\r\n\r\n@Directive({\r\n\tselector: 'vd-dialog-actions'\r\n})\r\nexport class VdDialogActionsDirective { }\r\n\r\n@Component({\r\n\tselector: 'vd-dialog',\r\n\ttemplateUrl: './dialog.html',\r\n\tstyleUrls: ['./dialog.scss'],\r\n\timports: []\r\n})\r\nexport class VdDialogComponent implements AfterContentInit {\r\n\r\n\t@ContentChildren(VdDialogTitleDirective) dialogTitle?: QueryList<VdDialogTitleDirective>;\r\n\t@ContentChildren(VdDialogContentDirective) dialogContent?: QueryList<VdDialogContentDirective>;\r\n\t@ContentChildren(VdDialogActionsDirective) dialogActions?: QueryList<VdDialogActionsDirective>;\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tif ((this.dialogTitle?.length ?? -1) > 1) {\r\n\t\t\tthrow new Error('Duplicate vd-dialog-title component at in vd-dialog.');\r\n\t\t}\r\n\t\tif ((this.dialogContent?.length ?? -1) > 1) {\r\n\t\t\tthrow new Error('Duplicate vd-dialog-content component at in vd-dialog.');\r\n\t\t}\r\n\t\tif ((this.dialogActions?.length ?? -1) > 1) {\r\n\t\t\tthrow new Error('Duplicate vd-dialog-actions component at in vd-dialog.');\r\n\t\t}\r\n\t}\r\n}","<div class=\"vd-dialog-wrapper\">\r\n  @if ((dialogTitle?.length??0) > 0) {\r\n    <h3 class=\"vd-dialog-title md-title\">\r\n      <ng-content select=\"vd-dialog-title\"></ng-content>\r\n    </h3>\r\n  }\r\n  @if ((dialogContent?.length??0) > 0) {\r\n    <div class=\"vd-dialog-content\">\r\n      <ng-content select=\"vd-dialog-content\"></ng-content>\r\n    </div>\r\n  }\r\n  @if ((dialogActions?.length??0) > 0) {\r\n    <div class=\"vd-dialog-actions\" layout=\"row\">\r\n      <span flex></span>\r\n      <ng-content select=\"vd-dialog-actions\"></ng-content>\r\n    </div>\r\n  }\r\n</div>","\r\nimport { Component } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { VdDialogActionsDirective, VdDialogComponent, VdDialogContentDirective, VdDialogTitleDirective } from '../dialog';\r\n\r\n@Component({\r\n\tselector: 'vd-prompt-dialog',\r\n\ttemplateUrl: './prompt-dialog.html',\r\n\tstyleUrls: ['./prompt-dialog.scss'],\r\n\timports: [\r\n    FormsModule,\r\n    MatFormFieldModule,\r\n    MatButtonModule,\r\n    VdDialogComponent,\r\n    VdDialogTitleDirective,\r\n    VdDialogContentDirective,\r\n    VdDialogActionsDirective\r\n]\r\n})\r\nexport class VdPromptDialogComponent {\r\n\ttitle?: string;\r\n\tmessage?: string;\r\n\tvalue?: string;\r\n\tcancelButton: string = $localize`:@@cancel:Cancel`;\r\n\tacceptButton: string = $localize`:@@accept:Accept`;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _dialogRef \r\n\t */\r\n\tconstructor(private _dialogRef: MatDialogRef<VdPromptDialogComponent>) { }\r\n\r\n\t/**\r\n\t * Closes the dialog window\r\n\t */\r\n\tcancel(): void {\r\n\t\tthis._dialogRef.close(undefined);\r\n\t}\r\n\r\n\t/**\r\n\t * Closes the dialog window\r\n\t */\r\n\taccept(): void {\r\n\t\tthis._dialogRef.close(this.value);\r\n\t}\r\n}","<vd-dialog>\r\n  @if (title) {\r\n    <vd-dialog-title>{{title}}</vd-dialog-title>\r\n  }\r\n  <vd-dialog-content layout=\"column\" class=\"mat-subhead\">\r\n    <span [innerHtml]=\"message\"></span>\r\n    <form #form=\"ngForm\" layout=\"row\" novalidate flex>\r\n      <mat-form-field flex>\r\n        <input matInput (keydown.enter)=\"$event.preventDefault(); form.valid && accept()\" [(ngModel)]=\"value\" name=\"value\" required />\r\n      </mat-form-field>\r\n    </form>\r\n  </vd-dialog-content>\r\n  <vd-dialog-actions>\r\n    <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n    <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" [disabled]=\"!form.valid\" (click)=\"accept()\">{{acceptButton}}</button>\r\n  </vd-dialog-actions>\r\n</vd-dialog>","import { ComponentType } from '@angular/cdk/portal';\r\nimport { Injectable, Optional, Provider, SkipSelf, ViewContainerRef } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { VdAlertDialogComponent } from '../alert-dialog/alert-dialog';\r\nimport { VdConfirmDialogComponent } from '../confirm-dialog/confirm-dialog';\r\nimport { VdPromptDialogComponent } from '../prompt-dialog/prompt-dialog';\r\n\r\n/**\r\n * Interface for dialog configuration\r\n */\r\nexport interface IDialogConfig {\r\n\t/** \r\n\t * Optional title of the dialog\r\n\t */\r\n\ttitle?: string;\r\n\r\n\t/** \r\n\t * Message to display in the dialog\r\n\t */\r\n\tmessage: string;\r\n\r\n\t/** \r\n\t * View container reference\r\n\t */\r\n\tviewContainerRef?: ViewContainerRef;\r\n\r\n\t/** \r\n\t * Whether the dialog can be closed by clicking outside\r\n\t */\r\n\tdisableClose?: boolean;\r\n}\r\n\r\n/**\r\n * Interface for alert dialog configuration\r\n */\r\nexport interface IAlertConfig extends IDialogConfig {\r\n\t/** \r\n\t * Text for the close button\r\n\t */\r\n\tcloseButton?: string;\r\n}\r\n\r\n/**\r\n * Interface for confirm dialog configuration\r\n */\r\nexport interface IConfirmConfig extends IDialogConfig {\r\n\t/** \r\n\t * Text for the accept button\r\n\t */\r\n\tacceptButton?: string;\r\n\r\n\t/** \r\n\t * Text for the cancel button\r\n\t */\r\n\tcancelButton?: string;\r\n}\r\n\r\n/**\r\n * Interface for prompt dialog configuration\r\n */\r\nexport interface IPromptConfig extends IConfirmConfig {\r\n\t/** \r\n\t * Default value for the prompt input\r\n\t */\r\n\tvalue?: string;\r\n}\r\n\r\n/**\r\n * Service for managing dialogs\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class VdDialogService {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param dialogService MatDialog service for managing dialogs\r\n\t */\r\n\tconstructor(public dialogService: MatDialog) { }\r\n\r\n\t/**\r\n\t * Opens a modal dialog containing the given component.\r\n\t * @param component Component to be displayed in the dialog\r\n\t * @param config Configuration for the dialog\r\n\t * @returns Reference to the opened dialog\r\n\t */\r\n\tpublic open<T>(component: ComponentType<T>, config?: MatDialogConfig): MatDialogRef<T> {\r\n\t\t/* Opens the dialog with the specified component and configuration */\r\n\t\treturn this.dialogService.open(component, config);\r\n\t}\r\n\r\n\t/**\r\n\t * Closes all of the currently-open dialogs.\r\n\t */\r\n\tpublic closeAll(): void {\r\n\t\t/* Closes all open dialogs */\r\n\t\tthis.dialogService.closeAll();\r\n\t}\r\n\r\n\t/**\r\n\t * Opens an alert dialog with the provided configuration.\r\n\t * @param config Configuration for the alert dialog\r\n\t * @returns Reference to the opened alert dialog\r\n\t */\r\n\tpublic openAlert(config: IAlertConfig, dialogConfig?: MatDialogConfig): MatDialogRef<VdAlertDialogComponent> {\r\n\t\t/* Creates dialog configuration based on provided settings */\r\n\t\tlet matDialogConfig: MatDialogConfig = this._createConfig(config, dialogConfig);\r\n\r\n\t\t/* Opens the alert dialog with the given component and configuration */\r\n\t\tlet dialogRef: MatDialogRef<VdAlertDialogComponent> = this.dialogService.open(VdAlertDialogComponent, matDialogConfig);\r\n\r\n\t\t/* Sets the title of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.title = config.title;\r\n\r\n\t\t/* Sets the message of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.message = config.message;\r\n\r\n\t\t/* If a close button text is provided, set it on the dialog component */\r\n\t\tif (config.closeButton) {\r\n\t\t\tdialogRef.componentInstance.closeButton = config.closeButton;\r\n\t\t}\r\n\r\n\t\t/* Returns the reference to the opened dialog */\r\n\t\t/* This allows interaction with the dialog instance */\r\n\t\treturn dialogRef;\r\n\t}\r\n\r\n\t/**\r\n\t * Opens a confirm dialog with the provided configuration.\r\n\t * @param config Configuration for the confirm dialog\r\n\t * @returns Reference to the opened confirm dialog\r\n\t */\r\n\tpublic openConfirm(config: IConfirmConfig, dialogConfig?: MatDialogConfig): MatDialogRef<VdConfirmDialogComponent> {\r\n\t\t/* Creates dialog configuration based on provided settings */\r\n\t\tlet matDialogConfig: MatDialogConfig = this._createConfig(config, dialogConfig);\r\n\r\n\t\t/* Opens the confirm dialog with the given component and configuration */\r\n\t\tlet dialogRef: MatDialogRef<VdConfirmDialogComponent> = this.dialogService.open(VdConfirmDialogComponent, matDialogConfig);\r\n\r\n\t\t/* Sets the title of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.title = config.title;\r\n\r\n\t\t/* Sets the message of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.message = config.message;\r\n\r\n\t\t/* If an accept button text is provided, set it on the dialog component */\r\n\t\tif (config.acceptButton) {\r\n\t\t\tdialogRef.componentInstance.acceptButton = config.acceptButton;\r\n\t\t}\r\n\r\n\t\t/* If a cancel button text is provided, set it on the dialog component */\r\n\t\tif (config.cancelButton) {\r\n\t\t\tdialogRef.componentInstance.cancelButton = config.cancelButton;\r\n\t\t}\r\n\r\n\t\t/* Returns the reference to the opened dialog */\r\n\t\t/* This allows interaction with the dialog instance */\r\n\t\treturn dialogRef;\r\n\t}\r\n\r\n\t/**\r\n\t * Opens a prompt dialog with the provided configuration.\r\n\t * @param config Configuration for the prompt dialog\r\n\t * @returns Reference to the opened prompt dialog\r\n\t */\r\n\tpublic openPrompt(config: IPromptConfig, dialogConfig?: MatDialogConfig): MatDialogRef<VdPromptDialogComponent> {\r\n\t\t/* Creates dialog configuration based on provided settings */\r\n\t\tlet matDialogConfig: MatDialogConfig = this._createConfig(config, dialogConfig);\r\n\r\n\t\t/* Opens the prompt dialog with the given component and configuration */\r\n\t\tlet dialogRef: MatDialogRef<VdPromptDialogComponent> = this.dialogService.open(VdPromptDialogComponent, matDialogConfig);\r\n\r\n\t\t/* Sets the title of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.title = config.title;\r\n\r\n\t\t/* Sets the message of the dialog from the configuration */\r\n\t\tdialogRef.componentInstance.message = config.message;\r\n\r\n\t\t/* Sets the initial value for the prompt input from the configuration */\r\n\t\tdialogRef.componentInstance.value = config.value;\r\n\r\n\t\t/* If an accept button text is provided, set it on the dialog component */\r\n\t\tif (config.acceptButton) {\r\n\t\t\tdialogRef.componentInstance.acceptButton = config.acceptButton;\r\n\t\t}\r\n\r\n\t\t/* If a cancel button text is provided, set it on the dialog component */\r\n\t\tif (config.cancelButton) {\r\n\t\t\tdialogRef.componentInstance.cancelButton = config.cancelButton;\r\n\t\t}\r\n\r\n\t\t/* Returns the reference to the opened dialog */\r\n\t\t/* This allows interaction with the dialog instance */\r\n\t\treturn dialogRef;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates configuration for the dialog\r\n\t * @param config Configuration to be used\r\n\t * @param dialogConfig Optional additional configuration\r\n\t * @returns A new MatDialogConfig object with the specified configuration\r\n\t */\r\n\tprivate _createConfig(config: MatDialogConfig, dialogConfig?: MatDialogConfig): MatDialogConfig {\r\n\t\t/* Creates a new instance of MatDialogConfig */\r\n\t\tlet matDialogConfig: MatDialogConfig = dialogConfig ?? new MatDialogConfig();\r\n\r\n\t\t/* Sets the view container reference for the dialog configuration */\r\n\t\tmatDialogConfig.viewContainerRef = config.viewContainerRef;\r\n\r\n\t\t/* Sets whether the dialog should be closed by clicking outside */\r\n\t\tmatDialogConfig.disableClose = config.disableClose;\r\n\r\n\t\t/* Returns the configured MatDialogConfig object */\r\n\t\treturn matDialogConfig;\r\n\t}\r\n}\r\n\r\n/**\r\n * Factory function for providing the VdDialogService\r\n * @param parent Existing instance of VdDialogService or null\r\n * @param dialog MatDialog service\r\n * @returns An instance of VdDialogService\r\n */\r\nexport function DIALOG_PROVIDER_FACTORY(\r\n\tparent: VdDialogService, dialog: MatDialog): VdDialogService {\r\n\treturn parent || new VdDialogService(dialog);\r\n}\r\n\r\n/**\r\n * Provider for the VdDialogService\r\n */\r\nexport const DIALOG_PROVIDER: Provider = {\r\n\t/* If there is already a service available, use that. Otherwise, provide a new one. */\r\n\tprovide: VdDialogService,\r\n\tdeps: [[new Optional(), new SkipSelf(), VdDialogService], MatDialog],\r\n\tuseFactory: DIALOG_PROVIDER_FACTORY,\r\n};","import { Injectable, NgZone, Optional, Provider, SkipSelf } from '@angular/core';\r\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class VdMediaService {\r\n\r\n\tprivate _resizing: boolean = false;\r\n\tprivate _globalSubscription?: Subscription;\r\n\tprivate _queryMap: Map<string, string> = new Map<string, string>();\r\n\tprivate _querySources: { [key: string]: Subject<boolean> } = {};\r\n\tprivate _queryObservables: { [key: string]: Observable<boolean> } = {};\r\n\r\n\tconstructor(private _ngZone: NgZone) {\r\n\t\tthis._queryMap.set('xs', '(max-width: 599px)');\r\n\t\tthis._queryMap.set('gt-xs', '(min-width: 600px)');\r\n\t\tthis._queryMap.set('sm', '(min-width: 600px) and (max-width: 959px)');\r\n\t\tthis._queryMap.set('gt-sm', '(min-width: 960px)');\r\n\t\tthis._queryMap.set('md', '(min-width: 960px) and (max-width: 1279px)');\r\n\t\tthis._queryMap.set('gt-md', '(min-width: 1280px)');\r\n\t\tthis._queryMap.set('lg', '(min-width: 1280px) and (max-width: 1919px)');\r\n\t\tthis._queryMap.set('gt-lg', '(min-width: 1920px)');\r\n\t\tthis._queryMap.set('xl', '(min-width: 1920px)');\r\n\t\tthis._queryMap.set('landscape', 'landscape');\r\n\t\tthis._queryMap.set('portrait', 'portrait');\r\n\t\tthis._queryMap.set('print', 'print');\r\n\r\n\t\tthis._resizing = false;\r\n\r\n\t\t/* Check if we're in the browser environment before accessing 'window' */\r\n\t\tif (typeof window !== 'undefined') {\r\n\t\t\t/* Run the resize logic outside Angular to avoid triggering change detection too often */\r\n\t\t\tthis._globalSubscription = this._ngZone.runOutsideAngular(() => {\r\n\r\n\t\t\t\t/* Trigger an initial resize after a short delay */\r\n\t\t\t\tsetTimeout(() => this._onResize(), 100);\r\n\r\n\t\t\t\t/* Subscribe to window resize events */\r\n\t\t\t\treturn fromEvent(window, 'resize').subscribe(() => {\r\n\t\t\t\t\t/* Prevent handling multiple resize events at the same time */\r\n\t\t\t\t\tif (!this._resizing) {\r\n\t\t\t\t\t\tthis._resizing = true;\r\n\r\n\t\t\t\t\t\t/* Call the resize handler after a short delay to simulate debounce */\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis._onResize();\r\n\t\t\t\t\t\t\tthis._resizing = false;\r\n\t\t\t\t\t\t}, 100);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Deregisters a query so its stops being notified or used.\r\n\t */\r\n\tderegisterQuery(query: string): void {\r\n\t\tif (this._queryMap.get(query.toLowerCase())) {\r\n\t\t\tquery = this._queryMap.get(query.toLowerCase()) ?? '';\r\n\t\t}\r\n\t\tthis._querySources[query].unsubscribe();\r\n\t\tdelete this._querySources[query];\r\n\t\tdelete this._queryObservables[query];\r\n\t}\r\n\r\n\t/**\r\n\t * Used to evaluate whether a given media query is true or false given the \r\n\t * current device's screen / window size.\r\n\t */\r\n\tpublic query(query: string): boolean {\r\n\t\tif (this._queryMap.get(query.toLowerCase())) {\r\n\t\t\tquery = this._queryMap.get(query.toLowerCase()) ?? '';\r\n\t\t}\r\n\t\treturn this._ngZone.run(() => {\r\n\t\t\treturn matchMedia(query).matches;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Registers a media query and returns an [Observable] that will re-evaluate and\r\n\t * return if the given media query matches on window resize.\r\n\t * Note: don't forget to unsubscribe from [Observable] when finished watching.\r\n\t */\r\n\tpublic registerQuery(query: string): Observable<boolean> {\r\n\t\tif (this._queryMap.get(query.toLowerCase())) {\r\n\t\t\tquery = this._queryMap.get(query.toLowerCase()) ?? '';\r\n\t\t}\r\n\t\tif (!this._querySources[query]) {\r\n\t\t\tthis._querySources[query] = new Subject<boolean>();\r\n\t\t\tthis._queryObservables[query] = this._querySources[query].asObservable();\r\n\t\t}\r\n\t\treturn this._queryObservables[query];\r\n\t}\r\n\r\n\t/**\r\n\t * Trigger a match media event on all subscribed observables.\r\n\t */\r\n\tpublic broadcast(): void {\r\n\t\tthis._onResize();\r\n\t}\r\n\r\n\tprivate _onResize(): void {\r\n\t\tfor (let query in this._querySources) {\r\n\t\t\tthis._ngZone.run(() => {\r\n\t\t\t\tthis._matchMediaTrigger(query);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _matchMediaTrigger(query: string): void {\r\n\t\tthis._querySources[query].next(matchMedia(query).matches);\r\n\t}\r\n}\r\n\r\nexport function MEDIA_PROVIDER_FACTORY(parent: VdMediaService, ngZone: NgZone): VdMediaService {\r\n\treturn parent || new VdMediaService(ngZone);\r\n}\r\n\r\nexport const MEDIA_PROVIDER: Provider = {\r\n\t// If there is already a service available, use that. Otherwise, provide a new one.\r\n\tprovide: VdMediaService,\r\n\tdeps: [[new Optional(), new SkipSelf(), VdMediaService], NgZone],\r\n\tuseFactory: MEDIA_PROVIDER_FACTORY,\r\n};","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const EXPORT_DIALOG_COMPONENT = new InjectionToken<string>('EXPORT_DIALOG_COMPONENT');\r\n\r\nexport const Common = {\r\n\t/* List of allowed file extensions for uploads */\r\n\tallowedExtensions: [\r\n\t\t\".png\", \".gif\", \".jpg\", \".jpeg\", \".doc\", \".txt\", \".mp3\", \".mp4\", \".mpeg\", \".avi\", \".wav\",\r\n\t\t\".xls\", \".mpp\", \".pdf\", \".ppt\", \".tiff\", \".tif\", \".bmp\", \".docx\", \".xlsx\", \".csv\", \".pptx\",\r\n\t\t\".ps\", \".odt\", \".ods\", \".odp\", \".odg\", \".zip\", \".rar\", \".7z\", \".tar\"\r\n\t],\r\n\r\n\t/* Configuration for editor plugins */\r\n\teditorPlugins: 'link code image preview advlist lists fullscreen',//imagetools\r\n\r\n\t/* Configuration for editor toolbar */\r\n\teditorToolbar: 'undo redo | formatselect | bold italic strikethrough forecolor backcolor permanentpen formatpainter | link image media pageembed | alignleft aligncenter alignright alignjustify  | numlist bullist outdent indent | removeformat | code',\r\n\r\n\tmonths: [\r\n\t\t{ name: 'Januar', id: 1 },\r\n\t\t{ name: 'Februar', id: 2 },\r\n\t\t{ name: 'März', id: 3 },\r\n\t\t{ name: 'April', id: 4 },\r\n\t\t{ name: 'Mai', id: 5 },\r\n\t\t{ name: 'Juni', id: 6 },\r\n\t\t{ name: 'Juli', id: 7 },\r\n\t\t{ name: 'August', id: 8 },\r\n\t\t{ name: 'September', id: 9 },\r\n\t\t{ name: 'Oktober', id: 10 },\r\n\t\t{ name: 'November', id: 11 },\r\n\t\t{ name: 'Dezember', id: 12 }\r\n\t],\r\n\r\n\t/* \r\n\t * Returns the postal code pattern based on the country code.\r\n\t * @param country - The country code.\r\n\t * @returns A regular expression for validating the postal code.\r\n\t */\r\n\tpostalCodePattern: (country: string) => {\r\n\t\tswitch (country) {\r\n\t\t\tcase 'AT': /* Austria */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'BE': /* Belgium */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'BG': /* Bulgaria */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'CY': /* Cyprus */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'CZ': /* Czech Republic */\r\n\t\t\t\treturn /^\\d{3}\\s?\\d{2}$/;\r\n\t\t\tcase 'DE': /* Germany */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'DK': /* Denmark */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'EE': /* Estonia */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'ES': /* Spain */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'FI': /* Finland */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'FR': /* France */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'GR': /* Greece */\r\n\t\t\t\treturn /^\\d{3}\\s?\\d{2}$/;\r\n\t\t\tcase 'HR': /* Croatia */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'HU': /* Hungary */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'IE': /* Ireland */\r\n\t\t\t\treturn /^[A-Za-z0-9]{3}[-\\s]?[A-Za-z0-9]{4}$/;\r\n\t\t\tcase 'IT': /* Italy */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'LT': /* Lithuania */\r\n\t\t\t\treturn /^\\d{5}$/;\r\n\t\t\tcase 'LU': /* Luxembourg */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'LV': /* Latvia */\r\n\t\t\t\treturn /^LV-\\d{4}$/;\r\n\t\t\tcase 'MT': /* Malta */\r\n\t\t\t\treturn /^[A-Za-z]{3}\\s?\\d{4}$/;\r\n\t\t\tcase 'NL': /* Netherlands */\r\n\t\t\t\treturn /^\\d{4}\\s?[A-Za-z]{2}$/;\r\n\t\t\tcase 'PL': /* Poland */\r\n\t\t\t\treturn /^\\d{2}-\\d{3}$/;\r\n\t\t\tcase 'PT': /* Portugal */\r\n\t\t\t\treturn /^\\d{4}-\\d{3}$/;\r\n\t\t\tcase 'RO': /* Romania */\r\n\t\t\t\treturn /^\\d{6}$/;\r\n\t\t\tcase 'SE': /* Sweden */\r\n\t\t\t\treturn /^\\d{3}\\s?\\d{2}$/;\r\n\t\t\tcase 'SI': /* Slovenia */\r\n\t\t\t\treturn /^\\d{4}$/;\r\n\t\t\tcase 'SK': /* Slovakia */\r\n\t\t\t\treturn /^\\d{3}\\s?\\d{2}$/;\r\n\t\t\tdefault:\r\n\t\t\t\treturn ''; /* Fallback for unsupported countries or unspecified pattern */\r\n\t\t}\r\n\t}\r\n}","export const GlobalRoles = {\r\n    Administrator: 'Administrator',\r\n    SystemAdministrator: 'SystemAdministrator',\r\n    SystemSupervisor: 'SystemSupervisor',\r\n    ClientAdministrator: 'ClientAdministrator',\r\n    DepartmentAdministrator: 'DepartmentAdministrator',\r\n    ExternalAPI: 'ExternalAPI',\r\n}","export enum MessageType {\r\n    Success,\r\n    Warning,\r\n    Error,\r\n}","export class AuthUser {\r\n\tid?: number;\r\n\tsub?: number;\r\n\tname?: string;\r\n\tdisplayName?: string;\r\n\tletter?: string;\r\n\temail?: string;\r\n\trole?: string;\r\n\tpermission?: Array<string>;\r\n\taccess_token?: string;\r\n\tisAuthenticated?: boolean;\r\n\tpostLoginRoute?: string;\r\n\tclientId?: number;\r\n\tdepartmentId?: number;\r\n\tisClientAdmin?: boolean;\r\n\tisDepartmentAdmin?: boolean;\r\n}","import { AuthUser } from \"../models/auth-user\";\r\n\r\n//@dynamic\r\nexport class AuthHelper {\r\n\t/**\r\n\t * Authenticated user\r\n\t */\r\n\tpublic static user: AuthUser = new AuthUser();\r\n\r\n\t/**\r\n\t * Checks if the current user is authenticated\r\n\t */\r\n\tpublic static isAuthenticated(): boolean {\r\n\t\treturn this.user && (this.user.sub ?? 0) > 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the user has the specified permission\r\n\t * @param permission The permission to check\r\n\t */\r\n\tpublic static isPermitted(...permissions: string[]): boolean {\r\n\t\t/* Admins have full access */\r\n\t\tpermissions.push('Admin');\r\n\t\tpermissions.push('Administrator');\r\n\r\n\t\tif (this.user && Array.isArray(this.user.permission)) {\r\n\t\t\tconst userPermissions = this.user.permission.map(x => x.toLowerCase());\r\n\t\t\treturn permissions.some(permission => {\r\n\t\t\t\treturn (userPermissions?.indexOf(permission.toLowerCase()) ?? -1) >= 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the current user has on of the specified roles\r\n\t * @param roles \r\n\t */\r\n\tpublic static hasRole(...roles: string[]): boolean {\r\n\t\treturn roles.some(role => {\r\n\t\t\tif (!role || !this.user) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t/* Convert role to lower case */\r\n\t\t\trole = role.toLowerCase();\r\n\r\n\t\t\treturn (this.isString(this.user.role) && this.user.role?.toLowerCase() === role) ||\r\n\t\t\t\tArray.isArray(this.user.role) && this.user.role.map(x => x?.toLowerCase()).includes(role);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the specified variable is a string\r\n\t * @param str \r\n\t */\r\n\tpublic static isString(str: any) {\r\n\t\treturn typeof str === 'string' || str instanceof String;\r\n\t}\r\n}","import { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DialogButtonConfig } from \"./dialog-button-config\";\r\n\r\nexport class TaskDialogData<TResult> {\r\n    /**\r\n     * Optional title of the dialog\r\n     * @type {string}\r\n     */\r\n    public title?: string;\r\n\r\n    /**\r\n     * Message displayed when the task is in progress\r\n     * @type {string}\r\n     */\r\n    public inProgressMessage?: string;\r\n\r\n    /**\r\n     * Message displayed upon successful task completion\r\n     * @type {string}\r\n     */\r\n    public successMessage?: string;\r\n\r\n    /**\r\n     * Message displayed if the task encounters an error\r\n     * @type {string}\r\n     */\r\n    public errorMessage?: string;\r\n\r\n    /**\r\n     * Content of the dialog, usually descriptive text\r\n     * @type {string}\r\n     */\r\n    public content?: string;\r\n\r\n    /**\r\n     * Observable task that the dialog monitors\r\n     * @type {Observable<any>}\r\n     */\r\n    public task?: Observable<any>;\r\n\r\n    /**\r\n     * Callback function to execute on task success\r\n     * @type {Function}\r\n     */\r\n    public successCallback?: (result: TResult, dialogRef: MatDialogRef<any, TResult>) => void;\r\n\r\n    /**\r\n     * Callback function to execute when the task is canceled\r\n     * @type {Function}\r\n     */\r\n    public cancelCallback?: (dialogRef: MatDialogRef<any, TResult>) => void;\r\n\r\n    /**\r\n     * Callback function to execute if the task encounters an error\r\n     * @type {Function}\r\n     */\r\n    public errorCallback?: (errors: any, dialogRef: MatDialogRef<any, TResult>) => void;\r\n\r\n    /**\r\n     * Result of the task, if available\r\n     * @type {any}\r\n     */\r\n    public result?: any;\r\n\r\n    /**\r\n     * Boolean indicating if the task is currently in progress\r\n     * @type {boolean}\r\n     */\r\n    public inProgress: boolean = true;\r\n\r\n    /**\r\n     * Text for the close button\r\n     * @type {string}\r\n     */\r\n    public closeButtonText: string = $localize`:@@close:Close`;\r\n\r\n    /**\r\n     * Text for the cancel button\r\n     * @type {string}\r\n     */\r\n    public cancelButtonText: string = $localize`:@@cancel:Cancel`;\r\n\r\n    /**\r\n     * Text for the success button, if applicable\r\n     * @type {string}\r\n     */\r\n    public successButtonText?: string;\r\n\r\n    /**\r\n     * Callback function to execute on success button click\r\n     * @type {Function}\r\n     */\r\n    public successButtonClick?: (result: TResult, dialogRef: MatDialogRef<any, TResult>) => void;\r\n\r\n    /**\r\n     * Optional dynamic button configurations for the dialog\r\n     * @type {DialogButtonConfig<TResult>[]}\r\n     */\r\n    public buttons?: DialogButtonConfig<TResult>[];\r\n\r\n    /**\r\n     * Initializes a new instance of the TaskDialogData class.\r\n     * @param {Partial<TaskDialogData>} init - Optional initialization values for setting properties.\r\n     */\r\n    public constructor(init?: Partial<TaskDialogData<TResult>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","\r\nimport { AfterViewInit, Component, Inject, OnDestroy } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { DialogButtonConfig } from '../../models/dialog-button-config';\r\nimport { TaskDialogData } from '../../models/task-dialog-data';\r\n\r\n@Component({\r\n    selector: 'vd-task-dialog',\r\n    templateUrl: './task-dialog.html',\r\n    styleUrls: ['./task-dialog.scss'],\r\n    imports: [\r\n    MatButtonModule,\r\n    MatDialogModule,\r\n    MatProgressBarModule\r\n],\r\n})\r\nexport class VdTaskDialogComponent implements AfterViewInit, OnDestroy {\r\n    /**\r\n     * The message content displayed within the dialog.\r\n     * @type {string | undefined}\r\n     */\r\n    public content?: string;\r\n\r\n    /**\r\n     * The result of the task, if available.\r\n     * @type {any}\r\n     */\r\n    public result?: any;\r\n\r\n    /**\r\n     * Indicates whether the task is currently in progress.\r\n     * @type {boolean}\r\n     */\r\n    public inProgress: boolean = true;\r\n\r\n    /**\r\n     * Indicates if the task completed successfully.\r\n     * @type {boolean}\r\n     */\r\n    public succeeded: boolean = false;\r\n\r\n    /**\r\n     * Subject to manage task cancellation and component cleanup.\r\n     * @type {Subject<void>}\r\n     */\r\n    private unsubscribe: Subject<void> = new Subject<void>();\r\n\r\n    /**\r\n     * Constructor\r\n     * @param {MatDialogRef<VdTaskDialogComponent>} dialogRef - Reference to the dialog instance.\r\n     * @param {TaskDialogData<any>} data - Data passed into the dialog.\r\n     */\r\n    constructor(\r\n        private dialogRef: MatDialogRef<VdTaskDialogComponent>,\r\n        @Inject(MAT_DIALOG_DATA) protected data: TaskDialogData<any>\r\n    ) { }\r\n\r\n    /**\r\n     * Lifecycle hook after view initialization.\r\n     * Subscribes to the task observable and handles success or error callbacks.\r\n     */\r\n    ngAfterViewInit(): void {\r\n        this.content = this.data.inProgressMessage;\r\n\r\n        this.data.task\r\n            /* Take until unsubscribe signal */\r\n            ?.pipe(takeUntil(this.unsubscribe))\r\n            .subscribe({\r\n                /* Handle successful task completion */\r\n                next: (result: any) => {\r\n                    /* Set succeeded to true, indicating the task was successful */\r\n                    this.succeeded = true;\r\n\r\n                    /* Set inProgress to false, indicating the task is no longer running */\r\n                    this.inProgress = false;\r\n\r\n                    /* Store the result of the completed task */\r\n                    this.result = result;\r\n\r\n                    /* Update the content with the success message */\r\n                    this.content = this.data.successMessage;\r\n\r\n                    /* If a success callback is provided, invoke it with the result */\r\n                    if (this.data.successCallback) {\r\n                        this.data.successCallback(result, this.dialogRef);\r\n                    }\r\n                },\r\n\r\n                /* Handle errors that occur during task execution */\r\n                error: (errors) => {\r\n                    /* Set succeeded to false, indicating the task failed */\r\n                    this.succeeded = false;\r\n\r\n                    /* Set inProgress to false, indicating the task is no longer running */\r\n                    this.inProgress = false;\r\n\r\n                    /* Store the errors encountered during the task */\r\n                    this.result = errors;\r\n\r\n                    /* Update the content with the error message */\r\n                    this.content = this.data.errorMessage;\r\n\r\n                    /* If an error callback is provided, invoke it with the errors */\r\n                    if (this.data.errorCallback) {\r\n                        this.data.errorCallback(errors, this.dialogRef);\r\n                    }\r\n                }\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Cancels the task and closes the dialog without any result.\r\n     */\r\n    public cancel(): void {\r\n        /* Set inProgress to false, indicating task cancellation */\r\n        this.inProgress = false;\r\n\r\n        /* Emit signal to cancel any ongoing task */\r\n        this.unsubscribe.next();\r\n\r\n        /* Complete the unsubscribe subject to finalize the cancellation */\r\n        this.unsubscribe.complete();\r\n\r\n        /* Execute the cancel callback if provided */\r\n        if (this.data.cancelCallback) {\r\n            this.data.cancelCallback(this.dialogRef);\r\n        }\r\n\r\n        /* Close the dialog without returning a result */\r\n        this.close();\r\n    }\r\n\r\n    /**\r\n     * Closes the dialog without any result.\r\n     */\r\n    public close(): void {\r\n        this.dialogRef.close(undefined);\r\n    }\r\n\r\n    /**\r\n     * Closes the dialog and returns the task result on success.\r\n     */\r\n    public success(): void {\r\n        /* Check if a success button click callback is defined */\r\n        if (this.data.successButtonClick) {\r\n            /* Execute the success button click callback with the result and dialog reference */\r\n            this.data.successButtonClick(this.result, this.dialogRef);\r\n        }\r\n\r\n        /* Close the dialog and return the task result */\r\n        else {\r\n            this.dialogRef.close(this.result);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Determines whether a button should be visible based on its showWhen rule.\r\n     * @param showWhen The condition that specifies when the button is displayed.\r\n     */\r\n    public shouldShow(showWhen: DialogButtonConfig['showWhen']): boolean {\r\n        switch (showWhen) {\r\n            case 'inProgress':\r\n                return this.inProgress;\r\n            case 'succeeded':\r\n                return this.succeeded && !this.inProgress;\r\n            case 'failed':\r\n                return !this.succeeded && !this.inProgress;\r\n            case 'always':\r\n            default:\r\n                return true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the click event of a dynamic button.\r\n     * Executes its callback if provided and closes the dialog if required.\r\n     * @param btn The button configuration object.\r\n     */\r\n    public onButtonClick(btn: DialogButtonConfig): void {\r\n        /* Execute callback if defined */\r\n        if (btn.callback) {\r\n            btn.callback(this.result, this.dialogRef);\r\n        }\r\n\r\n        /* Close dialog if requested by button config */\r\n        if (btn.closeOnClick) {\r\n            this.dialogRef.close(this.result);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook for component cleanup on destruction.\r\n     * Ensures that any ongoing task is cancelled.\r\n     */\r\n    ngOnDestroy(): void {\r\n        this.unsubscribe.next();\r\n        this.unsubscribe.complete();\r\n    }\r\n}","<div mat-dialog-title class=\"mat-headline-6\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDrag cdkDragHandle>{{this.data.title}}</div>\r\n@if (inProgress) {\r\n  <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n}\r\n@if (!inProgress) {\r\n  <mat-progress-bar mode=\"determinate\" value=\"100\"></mat-progress-bar>\r\n}\r\n<div mat-dialog-content>{{content}}</div>\r\n<div mat-dialog-actions class=\"pad-top\">\r\n  @for (btn of data.buttons; track btn) {\r\n    @if (btn.type === 'flat' && shouldShow(btn.showWhen)) {\r\n      <button type=\"button\" mat-flat-button [color]=\"btn.color\" (click)=\"onButtonClick(btn)\">{{ btn.text }}</button>\r\n    }\r\n    @if (btn.type !== 'flat' && shouldShow(btn.showWhen)) {\r\n      <button type=\"button\" mat-button [color]=\"btn.color\" (click)=\"onButtonClick(btn)\">{{ btn.text }}</button>\r\n    }\r\n  }\r\n  @if (this.data.successButtonClick && succeeded) {\r\n    <button type=\"button\" mat-flat-button (click)=\"success()\" color=\"primary\" (click)=\"null\">{{this.data.successButtonText}}</button>\r\n  }\r\n  @if (inProgress) {\r\n    <button type=\"button\" mat-button (click)=\"cancel()\" autofocus>{{this.data.cancelButtonText}}</button>\r\n  }\r\n  @if (!inProgress) {\r\n    <button type=\"button\" mat-button (click)=\"close()\" autofocus>{{this.data.closeButtonText}}</button>\r\n  }\r\n</div>","import { Location } from '@angular/common';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, EventEmitter, inject, Input, OnInit, Output, QueryList, Type, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatExpansionPanel } from '@angular/material/expansion';\r\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, Router, Scroll, UrlSegment, UrlTree } from '@angular/router';\r\nimport { filter, map, merge, Observable, of, Subject, Subscription, switchMap, takeUntil, tap, timer } from 'rxjs';\r\nimport { AppSetting } from '../../common/models/app-setting';\r\nimport { ContextHelper } from '../../common/services/context-helper';\r\nimport { VdDialogService } from '../../dialogs/services/dialog';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { Menu } from '../../menu/models/menu';\r\nimport { Common } from '../constants/common';\r\nimport { GlobalRoles } from '../constants/global-roles';\r\nimport { MessageType } from '../enums/message-type';\r\nimport { ShowConfirmationDialog, ShowTaskDialog } from '../functions/dialogs';\r\nimport { AuthHelper } from '../helpers/auth-helper';\r\nimport { IBaseComponent } from '../interfaces/ibase-component';\r\nimport { AuthUser } from '../models/auth-user';\r\nimport { TaskDialogData } from '../models/task-dialog-data';\r\nimport { CanComponentDeactivate } from './can-component-deactivate';\r\nimport { VdTaskDialogComponent } from './task-dialog/task-dialog';\r\n\r\n/**\r\n * A base list component for components with pagination support.\r\n */\r\n// @dynamic\r\n@Directive()\r\nexport abstract class BaseComponent implements IBaseComponent, OnInit, AfterViewInit, CanComponentDeactivate {\r\n    /**\r\n     * Application settings.\r\n     */\r\n    public appSetting: AppSetting;\r\n\r\n    /**\r\n     * General configuration settings, with a flexible type to accommodate different configurations.\r\n     */\r\n    public settings: any = {};\r\n\r\n    /**\r\n     * Menu items for navigation.\r\n     */\r\n    public menu?: Menu;\r\n\r\n    /**\r\n     * Name of the project, used for display or logging purposes.\r\n     */\r\n    public projectName?: string;\r\n\r\n    /**\r\n     * Title of the current page, displayed in the page header.\r\n     */\r\n    public title?: string;\r\n\r\n    /**\r\n     * Subtitle of the current outlet, used for additional page context.\r\n     */\r\n    public subtitle?: string;\r\n\r\n    /**\r\n     * If true, dummy data is used for testing, and debug logs are enabled.\r\n     */\r\n    public debug: boolean = false;\r\n\r\n    /**\t \r\n     * Indicates whether a loading process is active, often used to show a loading spinner.\r\n     */\r\n    public isLoading: boolean = false;\r\n\r\n    /**\r\n     * Determines whether to handle changes in expansion panels.\r\n     */\r\n    @Input()\r\n    public handleExpansionPanelChanges: boolean = true;\r\n\r\n    /**\r\n     * Indicates whether a save operation is currently in progress.\r\n     */\r\n    public _isSaving: boolean = false;\r\n    public get isSaving(): boolean { return this._isSaving || this.isLoading; }\r\n    public set isSaving(isSaving: boolean) { this.isLoading = this._isSaving = isSaving; }\r\n\r\n    /**\r\n     * Indicates whether the editor has been initialized.\r\n     */\r\n    public isEditorInitialized: boolean = false;\r\n\r\n    /**\r\n     * Stores any errors encountered during requests or operations.\r\n     */\r\n    public errors: Array<string> = new Array<string>();\r\n\r\n    /**\r\n     * Utility to evaluate media queries based on the current screen or window size.\r\n     */\r\n    public media: VdMediaService;\r\n\r\n    /**\r\n     * List of permitted file extensions for upload or selection.\r\n     */\r\n    public allowedExtensions: string[] = Common.allowedExtensions;\r\n\r\n    /**\r\n     * Plugins enabled in the TinyMCE editor.\r\n     */\r\n    public editorPlugins: string = Common.editorPlugins;\r\n\r\n    /**\r\n     * Toolbar configuration for TinyMCE editor.\r\n     */\r\n    public editorToolbar: string = Common.editorToolbar;\r\n\r\n    /**\r\n     * Additional configuration settings for the editor.\r\n     */\r\n    public editorConfig: any = {};\r\n\r\n    /**\r\n     * Service for navigation and URL manipulation.\r\n     */\r\n    public router: Router;\r\n\r\n    /**\r\n     * Optional hash value appended to URLs for bookmarking or state management.\r\n     */\r\n    public urlHash?: string;\r\n\r\n    /**\r\n     * CSS class name(s) applied to the component.\r\n     */\r\n    public className?: string;\r\n\r\n    /**\r\n     * Permission flag for creating new entries.\r\n     */\r\n    public canCreate: boolean = false;\r\n\r\n    /**\r\n     * Permission flag for reading new entries.\r\n     */\r\n    public canRead: boolean = false;\r\n\r\n    /**\r\n     * Permission flag for updating existing entries.\r\n     */\r\n    public canUpdate: boolean = false;\r\n\r\n    /**\r\n     * Permission flag for deleting entries.\r\n     */\r\n    public canDelete: boolean = false;\r\n\r\n    /**\r\n     * Full path of the current route.\r\n     */\r\n    public currentRoute?: string;\r\n\r\n    /**\r\n     * Base path of the current route, excluding specific parameters or sub-paths.\r\n     */\r\n    public currentBaseRoute?: string;\r\n\r\n    /**\r\n     * URL to navigate back to after saving changes.\r\n     */\r\n    public returnUrl?: string;\r\n\r\n    /**\r\n     * Object representing the current authenticated user.\r\n     */\r\n    public currentUser: AuthUser = AuthHelper.user;\r\n\r\n    /**\r\n     * Indicates if the current user has admin privileges.\r\n     */\r\n    public isAdmin = AuthHelper.hasRole(GlobalRoles.Administrator);\r\n\r\n    /**\r\n     * Indicates if the current user has client admin privileges.\r\n     */\r\n    public isClientAdmin = AuthHelper.hasRole(GlobalRoles.ClientAdministrator);\r\n\r\n    /**\r\n     * Indicates if the current user has department admin privileges.\r\n     */\r\n    public isDepartmentAdmin = AuthHelper.hasRole(GlobalRoles.DepartmentAdministrator);\r\n\r\n    /**\r\n     * Event emitter for reload actions, useful for refreshing data.\r\n     */\r\n    @Output()\r\n    public reload: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Service for setting the document's title.\r\n     */\r\n    protected titleService: Title;\r\n\r\n    /**\r\n     * Service for displaying snack bar notifications.\r\n     */\r\n    protected snackBarService: MatSnackBar;\r\n\r\n    /**\r\n     * Reference to the currently displayed snack bar, if any.\r\n     */\r\n    protected snackBarRef?: MatSnackBarRef<TextOnlySnackBar>\r\n\r\n    /**\r\n     * Service for displaying confirmation and prompt dialogs.\r\n     */\r\n    protected dialogService: VdDialogService;\r\n\r\n    /**\r\n     * Service for opening modal dialogs.\r\n     */\r\n    protected dialog: MatDialog;\r\n\r\n    /**\r\n     * Service for managing browser location and history.\r\n     */\r\n    protected location: Location;\r\n\r\n    /**\r\n     * If true, sets a URL hash for navigation state.\r\n     */\r\n    protected setUrlHash: boolean = true;\r\n\r\n    /**\r\n     * Query list for accessing expansion panel elements as DOM references.\r\n     */\r\n    @ViewChildren(MatExpansionPanel, { read: ElementRef })\r\n    protected matExpansionPanelElementQueryList?: QueryList<ElementRef>;\r\n\r\n    /**\r\n     * Query list for accessing MatExpansionPanel component references.\r\n     */\r\n    @ViewChildren(MatExpansionPanel)\r\n    protected matExpansionPanelQueryList?: QueryList<MatExpansionPanel>;\r\n\r\n    /**\r\n     * Subscriptions for expansion panel changes, managed to avoid memory leaks.\r\n     */\r\n    protected matExpansionPanelSubscriptions: Subscription[] = [];\r\n\r\n    /**\r\n     * Create a beep audio object and load a sound file from a data URL.\r\n     */\r\n    protected beepAudio = new Audio(\"data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=\");\r\n\r\n    /**\r\n     * Create a warn audio object and load a sound file from a data URL.\r\n     */\r\n    protected warnAudio = new Audio(\"data:audio/mp3;base64,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\");\r\n\r\n    /**\r\n     * Initializes services and application settings, sets up context helpers, \r\n     * and initializes the editor with default configurations.\r\n     *\r\n     * @param route - ActivatedRoute instance for accessing route parameters and data.\r\n     * @param changeDetectorRef - ChangeDetectorRef instance for manually triggering change detection.\r\n     */\r\n    constructor(protected route: ActivatedRoute, protected changeDetectorRef: ChangeDetectorRef) {\r\n        /* Initialize the Title service */\r\n        this.titleService = inject(Title);\r\n\r\n        /* Initialize the dialog service for showing modals */\r\n        this.dialogService = inject(VdDialogService);\r\n\r\n        /* Initialize the Material dialog for managing dialogs */\r\n        this.dialog = inject(MatDialog);\r\n\r\n        /* Initialize the media service for media queries and broadcast */\r\n        this.media = inject(VdMediaService);\r\n\r\n        /* Initialize the snackbar service for notifications */\r\n        this.snackBarService = inject(MatSnackBar);\r\n\r\n        /* Initialize the router service for navigation */\r\n        this.router = inject(Router);\r\n\r\n        /* Initialize the application settings */\r\n        this.appSetting = inject(AppSetting);\r\n\r\n        /* Initialize the location service for URL manipulation */\r\n        this.location = inject(Location);\r\n\r\n        /* Set up context helpers with route and application settings */\r\n        ContextHelper.activatedRoute = route;\r\n        ContextHelper.router = this.router;\r\n        ContextHelper.appSetting = this.appSetting;\r\n\r\n        /* Initialize the editor with default configurations */\r\n        this.initEditor();\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after data-bound properties of a directive are initialized\r\n     */\r\n    ngOnInit(): void {\r\n        /* Get menu items from route snapshot */\r\n        var mainRoute = this.getMainRoute(this.route.snapshot);\r\n        if (mainRoute) {\r\n            this.menu = mainRoute.data[\"menu\"];\r\n            this.setTitles();\r\n        }\r\n\r\n        /* Set project name & debug mode */\r\n        this.projectName = this.appSetting.projectName;\r\n        this.debug = this.appSetting.debug ?? false;\r\n\r\n        /* Check if the user has permission to create, update, and delete */\r\n        this.canCreate ||= AuthHelper.isPermitted('Create');\r\n        this.canUpdate ||= AuthHelper.isPermitted('Update');\r\n        this.canDelete ||= AuthHelper.isPermitted('Delete');\r\n\r\n        /* Get the hash from the URL */\r\n        this.route.fragment.subscribe((fragment: string | any) => this.urlHash = fragment);\r\n\r\n        /* Check permissions based on the route */\r\n        if (this.route.parent) {\r\n            this.route.parent.url.subscribe((url: UrlSegment[]) => {\r\n                this.className ??= url.length ? url[0].path.replace(/(.*)s$/, '$1').replace(/^./, (url[0].path[0] || '').toUpperCase()) : '';\r\n                this.canCreate ||= AuthHelper.isPermitted(`Create${this.className}`);\r\n                this.canUpdate ||= AuthHelper.isPermitted(`Update${this.className}`);\r\n                this.canDelete ||= AuthHelper.isPermitted(`Delete${this.className}`);\r\n            });\r\n        }\r\n\r\n        /* Check if running in a browser environment before using 'window' */\r\n        if (typeof window !== 'undefined') {\r\n            /* Set the current route as a base64-encoded string */\r\n            this.currentRoute = window.btoa(this.router.url);\r\n        }\r\n\r\n        /* Extract the base route without query parameters or matrix params */\r\n        this.currentBaseRoute = this.router.url?.split('?')[0]?.split(';')[0];\r\n\r\n        /**\r\n         * Set the page title based on the navigation end event\r\n         */\r\n        this.router.events.subscribe(x => {\r\n            let navigationEnd = (x as Scroll)?.routerEvent as NavigationEnd;\r\n            if (navigationEnd) {\r\n                this.setTitles();\r\n                this.currentRoute = window.btoa(navigationEnd.url);\r\n            }\r\n        });\r\n\r\n        /* Retrieve the return URL if any from the query parameters */\r\n        this.route.queryParams.subscribe(x => this.setReturnUrl(x[\"returnUrl\"]));\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after a component's view has been fully initialized\r\n     */\r\n    ngAfterViewInit(): void {\r\n        /* Broadcast to all listener observables when loading the page */\r\n        this.media.broadcast();\r\n\r\n        /* Set page titles */\r\n        this.setTitles();\r\n\r\n        /* \r\n         * Force a new change detection cycle since change detections \r\n         * have finished when `ngAfterViewInit` is executed\r\n         */\r\n        this.changeDetectorRef.detectChanges();\r\n\r\n        /* Listen for expansion panel changes if enabled */\r\n        if (this.handleExpansionPanelChanges) {\r\n            this.onExpansionPanelChanges();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Reloads the current page or component.\r\n     * \r\n     * This method navigates temporarily to the root URL and then \r\n     * navigates back to the current URL to effectively refresh the page or component.\r\n     *\r\n     * @param callback - A function to be called after the navigation is successful,\r\n     *                   receives the current URL as an argument.\r\n     */\r\n    public reloadPage(callback?: (currentUrl: string) => void): void {\r\n        let currentUrl = this.router.url;\r\n        this.router.navigateByUrl('/', { replaceUrl: true }).then(() => {\r\n            this.router.navigateByUrl(currentUrl, { replaceUrl: true }).then(() => {\r\n                /* Execute the callback if provided */\r\n                if (callback) {\r\n                    callback(currentUrl);\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Navigates back to the return URL if it exists.\r\n     */\r\n    public navigateToReturnUrl(): void {\r\n        if (this.returnUrl) {\r\n            /* Parse the return URL into a UrlTree object */\r\n            let urlTree: UrlTree = this.router.parseUrl(this.returnUrl);\r\n\r\n            /* Navigate to the return URL */\r\n            this.router.navigateByUrl(urlTree.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Expands the specified expansion panel path (supporting nested IDs) and collapses others.\r\n     * @param panelPath - The dot-separated ID path (e.g., 'warehouse.orders.details').\r\n     */\r\n    public expandPanelPath(panelId: string): void {\r\n        /* Split the panel ID into parts to handle nested panels */\r\n        panelId?.split('.')\r\n            /* Reduce the panel ID into an array of cumulative IDs to handle nested panels */\r\n            ?.reduce((accumulator: any, currentValue, index) => accumulator.concat((index > 0 ? (accumulator.slice(-1).join('.') + '.') : '') + currentValue), [])\r\n            ?.forEach((hash: string) => {\r\n                /* Find the index of the panel with the specified element ID */\r\n                var expansionPanelIndex = this.matExpansionPanelElementQueryList?.toArray()?.findIndex(x => x.nativeElement.id == hash) ?? -1;\r\n                if (expansionPanelIndex >= 0) {\r\n                    /* Open the specified panel */\r\n                    this.matExpansionPanelQueryList?.toArray()[expansionPanelIndex]?.open();\r\n\r\n                    /* Detect changes */\r\n                    this.changeDetectorRef.detectChanges();\r\n                }\r\n            });\r\n    }\r\n\r\n    /* \r\n     * Forces a new change detection cycle since change detections \r\n     * have finished when `ngAfterViewInit` is executed.\r\n     */\r\n    public detectChanges(): void {\r\n        /* Trigger change detection */\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Sets the return URL after decoding it.\r\n     *\r\n     * @param returnUrl - The encoded return URL to set.\r\n     */\r\n    protected setReturnUrl(returnUrl: string): void {\r\n        try {\r\n            /* Decode and set the return URL, handling potential errors */\r\n            this.returnUrl = returnUrl ? decodeURIComponent(atob(returnUrl)) : undefined;\r\n        } catch (error) {\r\n            /* Handle error silently */\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Listen for expansion panel changes\r\n     */\r\n    protected onExpansionPanelChanges(): void {\r\n        /* Listen for expansion panel changes */\r\n        this.matExpansionPanelQueryList?.changes.subscribe(_ => {\r\n            /* Unsubscribe from old 'opened' and 'closed' subscriptions */\r\n            this.matExpansionPanelSubscriptions.forEach(x => x.unsubscribe());\r\n\r\n            /* Detect changes */\r\n            this.changeDetectorRef.detectChanges();\r\n\r\n            /* Get the panel ends with the ID 'new' */\r\n            var newExpansionPanelIndex = this.matExpansionPanelElementQueryList?.toArray()?.findIndex(x => x.nativeElement?.id?.endsWith('.new')) ?? -1;\r\n            if (newExpansionPanelIndex >= 0) {\r\n                /* Close all panels */\r\n                this.matExpansionPanelQueryList?.first?.accordion?.closeAll();\r\n\r\n                /* Open the new panel */\r\n                this.matExpansionPanelQueryList?.toArray()[newExpansionPanelIndex]?.open();\r\n\r\n                /* Detect changes */\r\n                this.changeDetectorRef.detectChanges();\r\n            } else {\r\n                /* Otherwise, expand the panel based on the URL hash if set */\r\n                this.expandPanelPath(this.urlHash ?? '');\r\n            }\r\n\r\n            /* Array to hold all panel event streams */\r\n            const panelStateChanges$: Observable<{ action: string; hash: any; }>[] = [];\r\n\r\n            /* Used to cancel pending close events when another panel opens */\r\n            const openedSignal$ = new Subject<void>();\r\n\r\n            /* Prepare observables for all panels */\r\n            this.matExpansionPanelQueryList?.forEach(y => {\r\n\r\n                /* Map closed events to their target parent hash */\r\n                panelStateChanges$.push(y.closed.pipe(\r\n                    switchMap(_ => {\r\n                        /* Get the id of the current closed panel */\r\n                        const currentPanelId = y['_viewContainerRef']?.element?.nativeElement?.id;\r\n                        const currentPanelIdParts = currentPanelId?.split('.');\r\n\r\n                        /* Extract parent ID if nested */\r\n                        const parentHash = (currentPanelIdParts && currentPanelIdParts.length > 1)\r\n                            ? currentPanelIdParts.slice(0, -1).join('.')\r\n                            : null;\r\n\r\n                        /* Delay close handling so a near-simultaneous open can cancel it */\r\n                        return timer(50).pipe(\r\n                            takeUntil(openedSignal$),\r\n                            /* Ignore close when another panel is opening/opened */\r\n                            filter(_ => !(this.matExpansionPanelQueryList?.toArray()?.some(panel => {\r\n                                const panelId = panel['_viewContainerRef']?.element?.nativeElement?.id;\r\n                                return panel.expanded && panelId && panelId !== currentPanelId;\r\n                            }) ?? false)),\r\n                            map(_ => ({ action: 'close', hash: parentHash }))\r\n                        );\r\n                    })\r\n                ));\r\n\r\n                /* Map opened events to their target hash */\r\n                panelStateChanges$.push(y.opened.pipe(\r\n                    tap(_ => openedSignal$.next()),\r\n                    map(_ => {\r\n                        /* Get the id of the current opened panel */\r\n                        const currentPanelId = y['_viewContainerRef']?.element?.nativeElement?.id;\r\n                        return { action: 'open', hash: currentPanelId };\r\n                    })\r\n                ));\r\n\r\n            });\r\n\r\n            /* Merge all event streams to handle concurrent open/close actions */\r\n            if (panelStateChanges$.length > 0) {\r\n                this.matExpansionPanelSubscriptions.push(\r\n                    merge(...panelStateChanges$).subscribe(eventState => {\r\n                        if (this.setUrlHash) {\r\n                            /* If a valid hash exists, set it as url segment */\r\n                            if (eventState.hash) {\r\n                                this.router.navigate([], { fragment: eventState.hash, replaceUrl: true });\r\n                            }\r\n                            /* \r\n                             * Otherwise remove the segment from the url (only on open actions to prevent \r\n                             * clearing the hash when collapsing a nested child) \r\n                             */\r\n                            else if (eventState.action === 'open') {\r\n                                this.router.navigate([], { replaceUrl: true });\r\n                            }\r\n                        }\r\n\r\n                        /* Detect changes ONCE after the concurrent event storm settles */\r\n                        this.changeDetectorRef.detectChanges();\r\n                    })\r\n                );\r\n            }\r\n        });\r\n\r\n        /* Notify expansion panel list changes */\r\n        if (this.matExpansionPanelQueryList) {\r\n            this.matExpansionPanelQueryList.notifyOnChanges();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets the main route from the given snapshot by traversing up to the parent routes\r\n     * if the current snapshot does not have a menu defined.\r\n     *\r\n     * @param snapshot - The activated route snapshot to evaluate.\r\n     * @returns The main route snapshot that has a menu defined.\r\n     */\r\n    protected getMainRoute(snapshot: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\r\n        if (snapshot && snapshot!.parent && !snapshot.data[\"menu\"]) {\r\n            /* Recursively call to get the main route from the parent snapshot */\r\n            return this.getMainRoute(snapshot!.parent!);\r\n        }\r\n\r\n        return snapshot;\r\n    }\r\n\r\n    /**\r\n     * Shows a confirm dialog to delete a single item.\r\n     *\r\n     * @returns An observable that emits the result of the dialog after it is closed.\r\n     */\r\n    protected showDeleteItemDialog(): Observable<any> {\r\n        return this.dialogService.openConfirm({\r\n            message: $localize`:@@dialog.message.delete.one:Are you sure you want to delete this item?`,\r\n            title: $localize`:@@dialog.title.delete:Confirm Delete`,\r\n            cancelButton: $localize`:@@cancel:Cancel`,\r\n            acceptButton: $localize`:@@delete:Delete`,\r\n        }).afterClosed();\r\n    }\r\n\r\n    /**\r\n     * Shows a confirm dialog to delete multiple selected items.\r\n     *\r\n     * @returns An observable that emits the result of the dialog after it is closed.\r\n     */\r\n    protected showDeleteItemsDialog(): Observable<any> {\r\n        return this.dialogService.openConfirm({\r\n            message: $localize`:@@dialog.message.delete.list:Are you sure you want to delete the selected items?`,\r\n            title: $localize`:@@dialog.title.delete:Confirm Delete`,\r\n            cancelButton: $localize`:@@cancel:Cancel`,\r\n            acceptButton: $localize`:@@delete:Delete`,\r\n        }).afterClosed();\r\n    }\r\n\r\n    /**\r\n     * Shows a confirmation dialog to send some data.\r\n     * \r\n     * @param message - The message to display in the confirmation dialog.\r\n     * @param observable - The Observable operation to execute upon confirmation.\r\n     * @param successCallback - Optional callback invoked on successful completion of the Observable.\r\n     * @param errorCallback - Optional callback invoked if the Observable errors.\r\n     * @param acceptButtonText - Optional text for the accept button (default is localized \"Yes\").\r\n     * @param cancelButtonText - Optional text for the cancel button (default is localized \"Cancel\").\r\n     * @param dialogConfig - Optional Angular Material dialog configuration.\r\n     */\r\n    public showConfirmationDialog: ShowConfirmationDialog = (\r\n        message,\r\n        observable,\r\n        successCallback?,\r\n        errorCallback?,\r\n        acceptButtonText?,\r\n        cancelButtonText?,\r\n        dialogConfig?\r\n    ) => {\r\n        this.dialogService\r\n            .openConfirm({\r\n                message: message,\r\n                title: $localize`:@@dialog.title.confirm:Confirm`,\r\n                cancelButton: cancelButtonText ?? $localize`:@@cancel:Cancel`,\r\n                acceptButton: acceptButtonText ?? $localize`:@@yes:Yes`,\r\n            }, dialogConfig ?? (<MatDialogConfig>{ maxWidth: 480 }))\r\n            .afterClosed().subscribe((accept: boolean) => {\r\n                if (accept) {\r\n                    observable.subscribe({\r\n                        next: (x) => {\r\n                            this.showMessage($localize`:@@snackbar.send.success:Data sent successfully.`);\r\n                            if (successCallback) {\r\n                                successCallback(x);\r\n                            }\r\n                        }, error: (errors) => {\r\n                            this.isSaving = false;\r\n                            if (errorCallback) {\r\n                                errorCallback(errors);\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Opens a task dialog with the specified configuration.\r\n     * \r\n     * @typeparam TResult - The type of the result returned from the dialog.\r\n     * @param {Partial<TaskDialogData<TResult>>} config - Configuration options for the task dialog, including messages, callbacks, and observable tasks.\r\n     * \r\n     * @example \r\n     * // Example of how to call showTaskDialog\r\n     * this.showTaskDialog({\r\n     *     title: 'Processing Task',\r\n     *     inProgressMessage: 'Your task is currently in progress...',\r\n     *     successMessage: 'Task completed successfully!',\r\n     *     errorMessage: 'An error occurred while processing your task.',\r\n     *     task: this.someObservableTask(), // Your observable task goes here\r\n     *     successButtonClick: (result, dr) => {\r\n     *         console.log('Success button clicked!', result);\r\n     *         // Optionally handle the dialog reference here\r\n     *         dr.close(result); // Close the dialog with the result\r\n     *     },\r\n     *     successCallback: (result) => {\r\n     *         console.log('Success!', result);\r\n     *     },\r\n     *     errorCallback: (errors) => {\r\n     *         console.error('Error!', errors);\r\n     *     },\r\n     *     cancelCallback: () => {\r\n     *         console.log('Task was canceled.');\r\n     *     },\r\n     * });\r\n     */\r\n    public showTaskDialog: ShowTaskDialog = <TResult = any>(config: Partial<TaskDialogData<TResult>>, dialogConfig?: MatDialogConfig<TResult>): MatDialogRef<VdTaskDialogComponent, TResult> => {\r\n        return this.openDialog<VdTaskDialogComponent>(VdTaskDialogComponent, Object.assign(dialogConfig ?? {}, <MatDialogConfig>{\r\n            data: new TaskDialogData(config),\r\n            disableClose: true\r\n        }));\r\n    };\r\n\r\n    /**\r\n     * Opens a dialog of the specified type with the provided configuration.\r\n     *\r\n     * @typeparam T - The type of the component to be opened as a dialog.\r\n     * @typeparam D - The type of the data passed to the dialog (default is any).\r\n     * @param {Type<T>} dialogType - The component type to open as a dialog.\r\n     * @param {MatDialogConfig<D>} config - The configuration options for the dialog, such as data and styles.\r\n     * @param {Function} [callback] - Optional callback function to execute after the dialog is closed.\r\n     * \r\n     * @returns {MatDialogRef<T, D>} A reference to the opened dialog.\r\n     * \r\n     * @example\r\n     * // Example of how to use openDialog\r\n     * const dialogRef = this.openDialog(MyDialogComponent, {\r\n     *     data: { dialog data here },\r\n     *     width: '800px',\r\n     *     panelClass: 'custom-dialog-class'\r\n     * }, () => {\r\n     *     console.log('Dialog closed.');\r\n     * });\r\n     * \r\n     * // Handling the result from the dialog\r\n     * dialogRef.afterClosed().subscribe(result => {\r\n     *     if (result) {\r\n     *         console.log('Dialog result:', result);\r\n     *     }\r\n     * });\r\n     */\r\n    public openDialog<T, D = any>(dialogType: Type<T>, config: MatDialogConfig<D>, callback?: Function): MatDialogRef<T, D> {\r\n        /* Open the dialog with specified type and configuration */\r\n        var dialogRef = this.dialog.open(dialogType, Object.assign({\r\n            width: '650px', /* Default width for the dialog */\r\n            data: {}, /* Default data passed to the dialog */\r\n            panelClass: ['dialog-full-screen'] /* Class for the dialog panel */\r\n        }, config)); /* Merge user-defined config with defaults */\r\n\r\n        /* If a callback is provided, subscribe to the dialog's afterClosed event */\r\n        if (callback) {\r\n            /* Execute callback after the dialog is closed */\r\n            dialogRef.afterClosed().subscribe(_ => callback());\r\n        }\r\n\r\n        /* Return the reference to the opened dialog */\r\n        return dialogRef;\r\n    }\r\n\r\n    /**\r\n     * Displays a message using the snack bar service.\r\n     * \r\n     * @param message The message to display.\r\n     * @param type The type of the message (Success, Warning, or Error). Defaults to Success.\r\n     * @param duration Optional duration (in milliseconds) to show the message.\r\n     *                 If omitted, duration is adjusted based on message length.\r\n     * @param actionLabel The label for the action button. Defaults to 'OK'.\r\n     * @param playSound A flag indicating whether to play a warning sound when the message type is Warning or Error. Defaults to false.\r\n     * @returns An observable that emits when the action button is clicked.\r\n     */\r\n    public showMessage(\r\n        message: string,\r\n        type: MessageType = MessageType.Success,\r\n        duration?: number,\r\n        actionLabel: string = $localize`:@@ok:OK`,\r\n        playSound: boolean = false\r\n    ): Observable<void> {\r\n        /* Default snack bar class to 'primary' (for success messages) */\r\n        let snackBarClass = 'primary';\r\n\r\n        /* If duration is not provided, calculate it based on message length */\r\n        if (duration === undefined) {\r\n            /* Calculate duration: base 2000ms + 50ms per character, min 2000ms, max 10000ms */\r\n            duration = Math.min(\r\n                Math.max(2000 + message.length * 50, 2000),\r\n                10000\r\n            );\r\n        }\r\n\r\n        /* Determine the appropriate CSS class based on the message type */\r\n        switch (type) {\r\n            case MessageType.Success:\r\n                snackBarClass = 'primary';\r\n                break;\r\n\r\n            case MessageType.Warning:\r\n                snackBarClass = 'warn';\r\n\r\n                /* Play the warning sound if the playSound flag is true */\r\n                if (playSound) {\r\n                    this.playWarnSound();\r\n                }\r\n                break;\r\n\r\n            case MessageType.Error:\r\n                snackBarClass = 'error';\r\n\r\n                /* Play the warning sound if the playSound flag is true */\r\n                if (playSound) {\r\n                    this.playWarnSound();\r\n                }\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n\r\n        /* Display the message in the snack bar, with specified duration and CSS class */\r\n        this.snackBarRef = this.snackBarService.open(\r\n            message,\r\n            actionLabel,\r\n            {\r\n                duration: duration,\r\n                panelClass: [snackBarClass]\r\n            }\r\n        );\r\n\r\n        /* Emits when the action button is clicked */\r\n        return this.snackBarRef.onAction().pipe(map(() => { }));\r\n    }\r\n\r\n    /**\r\n     * Closes the currently displayed snack bar message, if any.\r\n     */\r\n    public closeMessage(): void {\r\n        this.snackBarRef?.dismiss();\r\n    }\r\n\r\n    /**\r\n     * Initializes the TinyMCE editor with custom configuration.\r\n     * \r\n     * @param editorConfig Optional configuration to override default editor settings\r\n     */\r\n    protected initEditor(editorConfig: any = {}) {\r\n        /* Merge the provided editor configuration with default settings */\r\n        Object.assign(this.editorConfig, {\r\n            /* Disable promotions in the editor */\r\n            promotion: false,\r\n            /* Use the minimized version of TinyMCE */\r\n            suffix: '.min',\r\n            /* Disable default TinyMCE skin */\r\n            skin: false,\r\n            /* Set editor height to 170px */\r\n            height: '210px',\r\n            /* Disable loading external CSS for editor content */\r\n            content_css: false,\r\n            /* Set the plugins to be used in the editor */\r\n            plugins: this.editorPlugins,\r\n            /* Set the toolbar configuration */\r\n            toolbar: this.editorToolbar,\r\n            /* Always paste content as plain text */\r\n            paste_as_text: true,\r\n            /* Set the editor language to German */\r\n            language: 'de',\r\n            /* Specify the URL to load the German language file */\r\n            language_url: '/assets/tinymce/langs/de.js',\r\n            /* Set the base URL for documents/files used in the editor */\r\n            document_base_url: `${this.appSetting.apiUrl}file/`,\r\n            /* Enable automatic uploads for file inputs */\r\n            automatic_uploads: true,\r\n            /* Use relative URLs for links and images */\r\n            relative_urls: true,\r\n            /* Disable automatic conversion of relative URLs to absolute URLs */\r\n            convert_urls: false,\r\n            /* Extend valid HTML elements to allow specific attributes */\r\n            extended_valid_elements: 'span[id|class|style],+@[data-options]',\r\n            /* Allow HTML in named anchors */\r\n            allow_html_in_named_anchor: true\r\n        }, editorConfig);\r\n\r\n        /* Mark the editor as initialized */\r\n        this.isEditorInitialized = true;\r\n    }\r\n\r\n    /**\r\n     * Sets the title and subtitle based on the current menu and route\r\n     */\r\n    protected setTitles(): void {\r\n        /* Check if the menu object is available */\r\n        if (this.menu) {\r\n            /* Set the browser tab title using the menu title, if available */\r\n            this.titleService.setTitle(this.menu.title ?? '');\r\n            /* Update the local title variable from the title service */\r\n            this.title = this.titleService.getTitle();\r\n\r\n            /* If there are no submenu items, exit the method */\r\n            if (!this.menu.items) {\r\n                return;\r\n            }\r\n\r\n            /* Try to retrieve the subtitle from the URL parameters */\r\n            var subtitle = this.route?.snapshot?.paramMap?.get('subtitle');\r\n            if (subtitle) {\r\n                /* Attempt to decode the subtitle if it's Base64 encoded */\r\n                try {\r\n                    this.subtitle = window.atob(subtitle);\r\n                } catch (e) {\r\n                    /* If decoding fails, use the raw subtitle */\r\n                    this.subtitle = subtitle;\r\n                }\r\n            } else {\r\n                /* Get the current route path, excluding query parameters and matrix parameters */\r\n                let currentRoute = this.router.url.split('?')[0]?.split(';')[0];\r\n\r\n                /* Ensure the route doesn't have a trailing slash */\r\n                currentRoute = currentRoute.endsWith('/') ? currentRoute.substring(0, -1) : currentRoute;\r\n\r\n                /* Find the submenu item that matches the current route */\r\n                var submenu = this.menu.items.filter(x => x.path == currentRoute)[0];\r\n                if (submenu) {\r\n                    /* Set the subtitle to the matching submenu's title */\r\n                    this.subtitle = submenu.title;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Navigate based on the provided array of commands and a starting point.\r\n     * @param commands Array of commands representing the route to navigate to\r\n     * @param queryParams Optional query parameters to append to the URL\r\n     * @param fragment Optional fragment (anchor) to append to the URL\r\n     * @param preserveFragment Whether to preserve the current fragment in the URL\r\n     */\r\n    public navigate(commands: any[], queryParams?: any, fragment?: string, preserveFragment?: boolean): void {\r\n        this.router.navigate(commands, {\r\n            /* Merge any additional query parameters with a default returnUrl */\r\n            queryParams: Object.assign({ returnUrl: this.currentRoute }, queryParams || {}),\r\n            /* Set the fragment, if provided */\r\n            fragment: fragment,\r\n            /* Preserve the fragment from the previous URL if specified */\r\n            preserveFragment: preserveFragment,\r\n            /* Make the route relative to the current route if applicable */\r\n            relativeTo: this.route\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Plays a short beep sound using an embedded audio file in base64 format.\r\n     * The method loads and plays the audio file immediately upon calling.\r\n     */\r\n    public playBeepSound(): void {\r\n        try {\r\n            this.beepAudio.play();\r\n        } catch (error) { }\r\n    }\r\n\r\n    /**\r\n     * Plays a short warning sound using an embedded audio file in base64 format.\r\n     * The method loads and plays the audio file immediately upon calling.\r\n     */\r\n    public playWarnSound(): void {\r\n        try {\r\n            this.warnAudio.play();\r\n        } catch (error) { }\r\n    }\r\n\r\n    /**\r\n     * Logs a message to the console if debug mode is enabled\r\n     * @param message The message to log\r\n     * @param optionalParams Optional parameters for the log\r\n     */\r\n    public log(message: any, ...optionalParams: any[]): void {\r\n        /* Check if debug mode is enabled */\r\n        if (this.debug) {\r\n            /* Log the message and optional parameters to the console */\r\n            console.log(message, optionalParams);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Logs a warning message to the console if debug mode is enabled\r\n     * @param message The warning message to log\r\n     * @param optionalParams Optional parameters for the warning\r\n     */\r\n    public warn(message: string, ...optionalParams: any[]): void {\r\n        /* Check if debug mode is enabled */\r\n        if (this.debug) {\r\n            /* Log the warning message and optional parameters to the console */\r\n            console.warn(message, optionalParams);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Convert an object to HttpHeaders.\r\n     * \r\n     * @param body The object whose properties will be converted into headers\r\n     * @returns HttpHeaders object containing the key-value pairs from the body\r\n     */\r\n    protected toHttpHeaders(body: any): HttpHeaders {\r\n        /* If the body is null or undefined, return empty headers */\r\n        if (!body) {\r\n            return new HttpHeaders();\r\n        }\r\n\r\n        /* Convert the object's properties to HttpHeaders, filtering out null or empty values */\r\n        return Object.getOwnPropertyNames(body)\r\n            .filter(key => body[key] != null && body[key] != '')\r\n            .reduce((p, key) => p.set(key, body[key]), new HttpHeaders());\r\n    }\r\n\r\n    /**\r\n     * Parses and formats HTTP response errors.\r\n     * @param errors The error object returned from the HTTP response\r\n     */\r\n    protected parseErrors(errors: any): void {\r\n        /* Initialize the errors array and reset loading/saving indicators */\r\n        this.errors = [];\r\n        this.isLoading = false;\r\n        this.isSaving = false;\r\n\r\n        /* If there are errors, iterate through them and add them to the errors array */\r\n        if (errors) {\r\n            Object.keys(errors).forEach(el => {\r\n                let error = errors[el];\r\n                /* If the error is an array, iterate over the array and add each error */\r\n                if (Array.isArray(error)) {\r\n                    error.forEach(err => {\r\n                        this.errors.push(err);\r\n                    });\r\n                } else if (typeof error === \"string\") {\r\n                    /* If the error is a string, add it directly to the errors array */\r\n                    this.errors.push(error);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handle Http operation that failed.\r\n     * Let the app continue.\r\n     * @param operation - name of the operation that failed\r\n     * @param result - optional value to return as the observable result\r\n     */\r\n    protected handleError<T>(operation = 'operation', result?: T) {\r\n        return (error: any): Observable<T> => {\r\n\r\n            /* Parse the error messages */\r\n            this.parseErrors(error);\r\n\r\n            /* Log to console */\r\n            this.warn(`${operation} failed: ${error.message}`);\r\n\r\n            /* Let the app keep running by returning an empty result */\r\n            return of(result as T);\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Cleans the object by removing properties that are null, undefined, or empty strings\r\n     * @param obj The object to clean\r\n     * @returns The cleaned object\r\n     */\r\n    protected clean(obj: any): any {\r\n        try {\r\n            /* Iterate through all properties of the object */\r\n            for (var propName in obj) {\r\n                /* If the property value is null, undefined, or an empty string, delete it */\r\n                if (obj[propName] === null || obj[propName] === undefined || obj[propName] === \"\") {\r\n                    delete obj[propName];\r\n                }\r\n            }\r\n        } catch (error) {\r\n            /* Error handling can be done here if necessary */\r\n        }\r\n\r\n        /* Return the cleaned object */\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * Sanitizes the specified object by removing falsy values and converting string numbers to numbers\r\n     * @param obj The object to sanitize\r\n     * @param ignore Properties to ignore during the sanitization\r\n     * @returns The sanitized object\r\n     */\r\n    protected sanitizeObject(obj: any, ...ignore: string[]): any {\r\n        /* Iterate over object keys and filter out falsy values */\r\n        return Object.keys(obj)\r\n            .filter(x => obj[x])\r\n            /* Ignore properties that are in the ignore list (case insensitive) */\r\n            .filter(x => !(ignore || []).map(x => x.toLowerCase()).includes(x.toLowerCase()))\r\n            /* Convert string numbers to actual numbers */\r\n            .reduce((result: any, key) => {\r\n                result[key] = isNaN(+obj[key]) ? obj[key] : +obj[key];\r\n                return result;\r\n            }, {});\r\n    }\r\n\r\n    /**\r\n     * Checks if the user has selected any text in the document\r\n     * @returns True if text is selected, otherwise false\r\n     */\r\n    protected isTextSelected = (): boolean =>\r\n        /* Use the window.getSelection API to check if text is selected */\r\n        (window?.getSelection()?.toString()?.length ?? 0) > 0;\r\n\r\n    /**\r\n     * A callback used for any custom cleanup that needs to occur when the instance is destroyed\r\n     */\r\n    protected ngOnDestroy() {\r\n        /* Unsubscribe from all MatExpansionPanel subscriptions */\r\n        this.matExpansionPanelSubscriptions.forEach(x => x.unsubscribe());\r\n    }\r\n\r\n    /**\r\n     * Called by the router before deactivating the route.\r\n     * Return true to allow navigation, false to prevent it,\r\n     * or a Promise/Observable that resolves to a boolean.\r\n     */\r\n    public canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {\r\n        /* Allow navigation by default */\r\n        return true;\r\n    }\r\n}","import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\r\n\r\n/**\r\n * Directive that allows a dialog to be maximized via double-click on the handle.\r\n */\r\n@Directive({\r\n    selector: '[vdDialogMaximize]',\r\n    exportAs: 'dialogMaximize',\r\n    standalone: true\r\n})\r\nexport class VdDialogMaximizeDirective {\r\n    /** \r\n     * The selector used to identify the root overlay pane to be resized. \r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public rootElementSelector: string = '.cdk-overlay-pane';\r\n\r\n    /**\r\n     * Whether the dialog is currently maximized. \r\n     * @type {boolean}\r\n     */\r\n    public isMaximized: boolean = false;\r\n\r\n    /**\r\n     * Constructor that injects ElementRef and Renderer2 for DOM manipulation.\r\n     * @param elementRef The ElementRef of the host element.\r\n     * @param renderer The Renderer2 instance for DOM manipulation.\r\n     */\r\n    constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\r\n\r\n    /**\r\n     * Listens for the double-click event on the host element to toggle maximization.\r\n     */\r\n    @HostListener('dblclick')\r\n    public toggle(): void {\r\n        /* Find the closest ancestor element that matches the rootElementSelector. This is typically the overlay pane that contains the dialog. */\r\n        const pane = this.elementRef.nativeElement.closest(this.rootElementSelector);\r\n        if (!pane) {\r\n            return;\r\n        }\r\n\r\n        /* Toggle the maximized state */\r\n        this.isMaximized = !this.isMaximized;\r\n\r\n        /* Add or remove the 'dialog-maximized' class based on the maximized state */\r\n        if (this.isMaximized) {\r\n            this.renderer.addClass(pane, 'dialog-maximized');\r\n            /* Reset the transform style to ensure the maximized dialog isn't offset by drag coordinates */\r\n            this.renderer.setStyle(pane, 'transform', 'none', 1);\r\n        } else {\r\n            this.renderer.removeClass(pane, 'dialog-maximized');\r\n            /* Removing the style allows cdkDrag to re-apply its internal transforms when dragged again */\r\n            this.renderer.removeStyle(pane, 'transform');\r\n        }\r\n    }\r\n}","import { Component, Input } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { VdDialogMaximizeDirective } from '../../directives/dialog-maximize';\r\n\r\n/** \r\n * Component that provides standard maximize and close actions for dialogs.\r\n */\r\n@Component({\r\n    selector: 'vd-dialog-header-actions',\r\n    template: `\r\n        <div class=\"dialog-actions\" layout=\"row\" layout-align=\"start center\">\r\n            <button mat-icon-button (click)=\"maximize.toggle()\" type=\"button\">\r\n                <mat-icon>{{ maximize.isMaximized ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n            </button>\r\n            <button mat-icon-button (click)=\"dialogRef.close()\" type=\"button\">\r\n                <mat-icon>close</mat-icon>\r\n            </button>\r\n        </div>`,\r\n    styles: [`\r\n        .dialog-actions { display: flex; gap: 4px; }`\r\n    ],\r\n    imports: [\r\n        MatButtonModule,\r\n        MatIconModule\r\n    ]\r\n})\r\nexport class VdDialogHeaderActionsComponent {\r\n    /**\r\n     * Reference to the maximize directive instance. \r\n     * @type {VdDialogMaximizeDirective}\r\n     */\r\n    @Input({ required: true })\r\n    public maximize!: VdDialogMaximizeDirective;\r\n\r\n    /**\r\n     * Reference to the parent dialog to allow closing. \r\n     * @type {MatDialogRef<any>}\r\n     */\r\n    @Input({ required: true })\r\n    public dialogRef!: MatDialogRef<any>;\r\n}","import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\r\nimport { Component, Input } from '@angular/core';\r\nimport { MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { VdDialogMaximizeDirective } from '../../directives/dialog-maximize';\r\nimport { VdDialogHeaderActionsComponent } from '../dialog-header-actions/dialog-header-actions';\r\n\r\n/** * Reusable dialog header that handles dragging, maximizing, and closing.\r\n */\r\n@Component({\r\n    selector: 'vd-dialog-header',\r\n    template: `\r\n        <div vdDialogMaximize \r\n             #maximize=\"dialogMaximize\" \r\n             cdkDrag \r\n             cdkDragRootElement=\".cdk-overlay-pane\" \r\n             [cdkDragDisabled]=\"maximize.isMaximized\"\r\n             cdkDragHandle\r\n             class=\"dialog-header-container pad-right-sm push-none\" \r\n             layout=\"row\" \r\n             layout-align=\"space-between center\">            \r\n            <span mat-dialog-title class=\"pad-left-sm push-left-sm\" flex>\r\n                <ng-content></ng-content>\r\n            </span>\r\n            <vd-dialog-header-actions [maximize]=\"maximize\" [dialogRef]=\"dialogRef\"></vd-dialog-header-actions>\r\n        </div>`,\r\n    styles: [`\r\n        .dialog-header-container {\r\n            cursor: move;\r\n            display: flex;\r\n            width: 100%;\r\n        }`\r\n    ],\r\n    imports: [\r\n        MatDialogTitle,\r\n        VdDialogMaximizeDirective,\r\n        VdDialogHeaderActionsComponent,\r\n        CdkDragHandle,\r\n        CdkDrag\r\n    ]\r\n})\r\nexport class VdDialogHeaderComponent {\r\n    /** \r\n     * Reference to the dialog instance to allow the close button to work. \r\n     * @type {MatDialogRef<any>}\r\n     */\r\n    @Input({ required: true })\r\n    public dialogRef!: MatDialogRef<any>;\r\n}","import { IFormGroup } from '../models/interface/i-form-group'\r\n\r\n/**\r\n * This class sets up a blueprint for creating typed forms by providing a property (formGroup) \r\n * for handling form data of a specific type (T). Users can extend this class and implement \r\n * the formGroup property as needed to create typed forms for their applications.\r\n */\r\nexport abstract class TypedForm<T> {\r\n    /**\r\n     * Represents the form group that handles form data of the specified type (T).\r\n     * Implementations should assign an appropriate form group to this property.\r\n     */\r\n    public formGroup?: IFormGroup<T>\r\n}","export const ValidationAlphabetLocale: { [key: string]: string } = {\r\n    'danish': 'danish',\r\n    'french': 'french',\r\n    'german': 'german',\r\n    'greek': 'greek',\r\n    'spanish': 'spanish',\r\n    'russian': 'russian'\r\n}","export const AnnotationTypes: { [key: string]: string } = {\r\n\tnumeric: 'numeric',\r\n\trequired: 'required',\r\n\tminLength: 'minLength',\r\n\tmaxLength: 'maxLength',\r\n\tminNumber: 'minNumber',\r\n\tmaxNumber: 'maxNumber',\r\n\tpattern: 'pattern',\r\n\tpassword: 'password',\r\n\tcompare: 'compare',\r\n\tminDate: 'minDate',\r\n\tmaxDate: 'maxDate',\r\n\talpha: 'alpha',\r\n\talphaNumeric: 'alphaNumeric',\r\n\temail: 'email',\r\n\thexColor: 'hexColor',\r\n\tlowerCase: 'lowerCase',\r\n\turl: 'url',\r\n\tupperCase: 'upperCase',\r\n\tnested: 'nested',\r\n\tpropArray: 'propArray',\r\n\tpropObject: 'propObject',\r\n\tcontains: 'contains',\r\n\trange: 'range',\r\n\tcustom: 'custom',\r\n\tdigit: \"digit\",\r\n\tcreditCard: \"creditCard\",\r\n\ttime: \"time\",\r\n\tjson: \"json\",\r\n\tgreaterThan: \"greaterThan\",\r\n\tgreaterThanEqualTo: \"greaterThanEqualTo\",\r\n\tlessThan: \"lessThan\",\r\n\tlessThanEqualTo: \"lessThanEqualTo\",\r\n\tchoice: \"choice\",\r\n\tdifferent: \"different\",\r\n\teven: \"even\",\r\n\todd: \"odd\",\r\n\tfactor: \"factor\",\r\n\tleapYear: \"leapYear\",\r\n\tallOf: \"allOf\",\r\n\toneOf: \"oneOf\",\r\n\tnoneOf: \"noneOf\",\r\n\tmac: \"mac\",\r\n\tascii: \"ascii\",\r\n\tdataUri: \"dataUri\",\r\n\tport: \"port\",\r\n\tlatLong: \"latLong\",\r\n\textension: \"extension\",\r\n\tfileSize: \"fileSize\",\r\n\tendsWith: \"endsWith\",\r\n\tstartsWith: \"startsWith\",\r\n\tprimeNumber: \"primeNumber\",\r\n\tlatitude: \"latitude\",\r\n\tlongitude: \"longitude\",\r\n\tcompose: \"compose\",\r\n\trule: \"rule\",\r\n\tfile: \"file\",\r\n\timage: \"image\",\r\n\tunique: \"unique\",\r\n\tnotEmpty: \"notEmpty\",\r\n\tip: \"ip\",\r\n\tcusip: \"cusip\",\r\n\tgrid: \"grid\",\r\n\tdate: 'date',\r\n\tand: 'and',\r\n\tor: 'or',\r\n\tnot: 'not',\r\n\tminTime: 'minTime',\r\n\tmaxTime: 'maxTime',\r\n\trequiredTrue: 'requiredTrue',\r\n\tmask: 'mask',\r\n\tiban: 'iban',\r\n\tupdateOn: 'updateOn'\r\n}\r\n","\r\nexport const RegExRule: { [key: string]: any } = {\r\n  alpha: /^[a-zA-Z]+$/,\r\n  alphaExits: /[a-zA-Z]/,\r\n  alphaWithSpace: /^[a-zA-Z\\s]+$/,\r\n  macId: /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/,\r\n  onlyDigit: /^[0-9]+$/,\r\n  isDigitExits: /[0-9]/,\r\n  lowerCase: /[a-z]/,\r\n  upperCase: /[A-Z]/,\r\n  specialCharacter: /[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi,\r\n  advancedEmail: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\r\n  basicEmail: /^(([^<>()\\[\\]\\\\.,,:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n  alphaNumeric: /^[0-9a-zA-Z]+$/,\r\n  alphaNumericWithSpace: /^[0-9a-zA-Z\\s]+$/,\r\n  hexColor: /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,\r\n  strictHexColor: /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i,\r\n  float: /^(?:[-+]?(?:[0-9]+))?(?:\\.[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$/,\r\n  decimal: /^[-+]?([0-9]+|\\.[0-9]+|[0-9]+\\.[0-9]+)$/,\r\n  hexaDecimal: /^[0-9A-F]+$/i,\r\n  date: /^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/,\r\n  time: /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/,\r\n  timeWithSeconds: /^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/,\r\n  url: /^(https?:\\/\\/(?:www\\.|(?!www)|(?!a-zA-Z))[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www)|(?!a-zA-Z))[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]\\.[^\\s]{2,})$/,\r\n  localhostUrl: /^(https?:\\/\\/localhost\\:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])|localhost\\::([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])|https?:\\/\\/localhost\\::([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))$/,\r\n  interanetUrl: /^(https?:\\/\\/[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9])$/,\r\n  ascii: /^[\\x00-\\x7F]+$/,\r\n  dataUri: /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*?)$/i,\r\n  lat: /^\\(?[+-]?(90(\\.0+)?|[1-8]?\\d(\\.\\d+)?)$/,\r\n  long: /^\\s?[+-]?(180(\\.0+)?|1[0-7]\\d(\\.\\d+)?|\\d{1,2}(\\.\\d+)?)\\)?$/,\r\n  ipV4: /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/,\r\n  ipV6: /^((?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(:[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(:[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(:[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(:[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(:[a-fA-F\\d]{1,4}){1,6}|:)|(?::((?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(%[0-9a-zA-Z]{1,})?$/,\r\n  cidrV4: /^(3[0-2]|[12]?[0-9])$/,\r\n  cidrV6: /^(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\r\n  cusip: /^[0-9A-Z]{9}$/,\r\n  grid: /^[GRID:]*([0-9A-Z]{2})[-\\s]*([0-9A-Z]{5})[-\\s]*([0-9A-Z]{10})[-\\s]*([0-9A-Z]{1})$/g\r\n}\r\n\r\n\r\n","export const alphabet = {\r\n    'danish': /^[A-ZÆØÅ]+$/,\r\n    'french': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/,\r\n    'german': /^[A-ZÄÖÜß]+$/,\r\n    'spanish': /^[a-zñáéíóúü]+$/i,\r\n    'russian': /^[А-ЯЁ]+$/,\r\n\r\n};\r\n\r\nexport const alphaWithWhitespace = {\r\n    'danish': /^[A-ZÆØÅ\\s]+$/,\r\n    'french': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ\\s]+$/,\r\n    'german': /^[A-ZÄÖÜß\\s]+$/,\r\n    'spanish': /^[a-zñáéíóúü\\s]+$/i,\r\n    'russian': /^[А-ЯЁ\\s]+$/,\r\n\r\n};\r\n\r\nexport const alphanumeric = {\r\n    'danish': /^[0-9A-ZÆØÅ]+$/,\r\n    'french': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/,\r\n    'german': /^[0-9A-ZÄÖÜß]+$/,\r\n    'spanish': /^[0-9a-zñáéíóúü]+$/i,\r\n    'russian': /^[0-9А-ЯЁ]+$/,\r\n};\r\n\r\nexport const alphanumericWithWitespace = {\r\n    'danish': /^[0-9A-ZÆØÅ]+$/,\r\n    'french': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/,\r\n    'german': /^[0-9A-ZÄÖÜß]+$/,\r\n    'spanish': /^[0-9a-zñáéíóúü\\s]+$/i,\r\n    'russian': /^[0-9А-ЯЁ]+$/,\r\n};\r\n\r\n","/**\r\n * Constant string representing an array configuration.\r\n */\r\nexport const ARRAY_CONFIG: string = \"ArrayConfig\";\r\n\r\n/**\r\n * Constant string representing a field configuration.\r\n */\r\nexport const FIELD_CONFIG: string = \"FieldConfig\";\r\n\r\n/**\r\n * Constant string representing an IP configuration.\r\n */\r\nexport const IP_CONFIG: string = \"IpConfig\";\r\n\r\n/**\r\n * Constant string representing a number configuration.\r\n */\r\nexport const NUMBER_CONFIG: string = \"NumberConfig\";\r\n\r\n/**\r\n * Constant string representing a password configuration.\r\n */\r\nexport const PASSWORD_CONFIG: string = \"PasswordConfig\";\r\n\r\n/**\r\n * Constant string representing a pattern configuration.\r\n */\r\nexport const PATTERN_CONFIG: string = \"PatternConfig\";\r\n\r\n/**\r\n * Constant string representing a range configuration.\r\n */\r\nexport const RANGE_CONFIG: string = \"RangeConfig\";\r\n\r\n/**\r\n * Constant string representing a relational operator configuration.\r\n */\r\nexport const RELATIONAL_OPERATOR_CONFIG: string = \"RelationalOperatorConfig\";","import {\r\n    ARRAY_CONFIG,\r\n    FIELD_CONFIG,\r\n    IP_CONFIG,\r\n    NUMBER_CONFIG,\r\n    PASSWORD_CONFIG,\r\n    PATTERN_CONFIG,\r\n    RANGE_CONFIG\r\n} from './config-names.const';\r\n\r\n/**\r\n * Constant object representing required fields for different configurations.\r\n */\r\nexport const CONFIG_REQUIRED_FIELDS: { [key: string]: string[] } = {\r\n    /**\r\n     * Required fields for ArrayConfig.\r\n     */\r\n    [ARRAY_CONFIG]: [\"matchValues\"],\r\n\r\n    /**\r\n     * Required fields for FieldConfig.\r\n     */\r\n    [FIELD_CONFIG]: [\"fieldName\"],\r\n\r\n    /**\r\n     * Required fields for IpConfig.\r\n     */\r\n    [IP_CONFIG]: [\"version\"],\r\n\r\n    /**\r\n     * Required fields for PasswordConfig.\r\n     */\r\n    [PASSWORD_CONFIG]: [\"validation\"],\r\n\r\n    /**\r\n     * Required fields for NumberConfig.\r\n     */\r\n    [NUMBER_CONFIG]: [\"value\"],\r\n\r\n    /**\r\n     * Required fields for PatternConfig.\r\n     */\r\n    [PATTERN_CONFIG]: [\"expression\"],\r\n\r\n    /**\r\n     * Required fields for RangeConfig.\r\n     */\r\n    [RANGE_CONFIG]: [\"minimumNumber\", \"maximumNumber\"],\r\n};\r\n","\r\nfunction isObjectType(value: any) {\r\n    return !(typeof value == \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value instanceof Date);\r\n}\r\n\r\nfunction isObject(value: any): boolean {\r\n    return Object.prototype.toString.call(value) === '[object Object]';\r\n}\r\n\r\nexport function clone(jsonObject: { [key: string]: any }) {\r\n    let jObject: any = {};\r\n    if (isObjectType(jsonObject)) {\r\n        for (var columnName in jsonObject) {\r\n            if ((columnName != \"formGroup\")) {\r\n                if (Array.isArray(jsonObject[columnName])) {\r\n                    jObject[columnName] = [];\r\n                    for (let row of jsonObject[columnName]) {\r\n                        if (isObject(row)) {\r\n                            jObject[columnName].push(clone(row));\r\n                        }\r\n\r\n                        else {\r\n                            jObject[columnName].push(row);\r\n                        }\r\n                    }\r\n                } else if (typeof jsonObject[columnName] == \"object\" && !(jsonObject[columnName] instanceof RegExp)) {\r\n                    jObject[columnName] = clone(jsonObject[columnName]);\r\n                }\r\n                else {\r\n                    jObject[columnName] = jsonObject[columnName];\r\n                }\r\n            }\r\n        }\r\n\r\n        return jObject;\r\n    }\r\n\r\n    else {\r\n        return jsonObject;\r\n    }\r\n}\r\n\r\nexport function merge(firstObject: { [key: string]: any }, secondObject: { [key: string]: any }) {\r\n    for (var columnName in secondObject) {\r\n        if (Array.isArray(secondObject[columnName])) {\r\n            if (!firstObject[columnName]) {\r\n                firstObject[columnName] = [];\r\n            }\r\n\r\n            for (let row of secondObject[columnName]) {\r\n                firstObject[columnName].push(clone(row));\r\n            }\r\n        } else if (typeof firstObject[columnName] == \"object\" && !(firstObject[columnName] instanceof RegExp)) {\r\n            firstObject[columnName] = merge(firstObject[columnName], secondObject[columnName]);\r\n        }\r\n        else {\r\n            firstObject[columnName] = secondObject[columnName];\r\n        }\r\n    }\r\n\r\n    return firstObject;\r\n}\r\n\r\nexport function isMatched(jsonObject: { [key: string]: any }, compareObject: { [key: string]: any }): boolean {\r\n    let isModified: boolean = false;\r\n    for (var columnName in compareObject) {\r\n        if (Array.isArray(jsonObject[columnName])) {\r\n            for (var i = 0; i < jsonObject[columnName].length; i++) {\r\n                isModified = isMatched(jsonObject[columnName][i], compareObject[columnName][i])\r\n            }\r\n        } else if (typeof jsonObject[columnName] == \"object\" && !(jsonObject[columnName] instanceof RegExp)) {\r\n            isModified = isMatched(jsonObject[columnName], compareObject[columnName]);\r\n        }\r\n        else {\r\n            isModified = !(jsonObject[columnName] == compareObject[columnName]);\r\n        }\r\n        if (isModified) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    return isModified;\r\n}\r\n","/**\r\n * Represents the state of being invalid.\r\n */\r\nexport const INVALID: string = \"INVALID\";\r\n\r\n/**\r\n * Represents a property.\r\n */\r\nexport const PROPERTY: string = \"property\";\r\n\r\n/**\r\n * Represents an object property.\r\n */\r\nexport const OBJECT_PROPERTY: string = \"objectProperty\";\r\n\r\n/**\r\n * Represents an array property.\r\n */\r\nexport const ARRAY_PROPERTY: string = \"arrayProperty\";\r\n\r\n/**\r\n * Represents a string data type.\r\n */\r\nexport const STRING: string = \"string\";\r\n\r\n/**\r\n * Represents a message.\r\n */\r\nexport const MESSAGE: string = \"message\";\r\n\r\n/**\r\n * Represents a blank value.\r\n */\r\nexport const BLANK: string = \"\";","/**\r\n * Event type for keypress event.\r\n */\r\nexport const KEYPRESS: string = \"onkeypress\";\r\n\r\n/**\r\n * Event type for onchange event.\r\n */\r\nexport const ONCHANGE: string = \"onchange\";\r\n\r\n/**\r\n * Event type for onclick event.\r\n */\r\nexport const ONCLICK: string = \"onclick\";\r\n\r\n/**\r\n * Event type for onkeyup event.\r\n */\r\nexport const ONKEYUP: string = \"onkeyup\";\r\n\r\n/**\r\n * Event type for onblur event.\r\n */\r\nexport const ONBLUR: string = \"onblur\";\r\n\r\n/**\r\n * Event type for onfocus event.\r\n */\r\nexport const ONFOCUS: string = \"onfocus\";\r\n\r\n/**\r\n * Element value identifier.\r\n */\r\nexport const ELEMENT_VALUE: string = \"value\";\r\n\r\n/**\r\n * Event type for blur event.\r\n */\r\nexport const BLUR: string = \"blur\";\r\n\r\n/**\r\n * Event type for focus event.\r\n */\r\nexport const FOCUS: string = \"focus\";\r\n\r\n/**\r\n * Event type for change event.\r\n */\r\nexport const CHANGE: string = \"change\";\r\n\r\n/**\r\n * Event type for keydown event.\r\n */\r\nexport const KEY_DOWN: string = \"keydown\";\r\n\r\n/**\r\n * Event type for keypress event.\r\n */\r\nexport const KEY_PRESS: string = \"keypress\";\r\n\r\n/**\r\n * Event type for paste event.\r\n */\r\nexport const PASTE: string = \"paste\";","/**\r\n * Element type for input elements.\r\n */\r\nexport const INPUT: string = \"INPUT\";\r\n\r\n/**\r\n * Element type for select elements.\r\n */\r\nexport const SELECT: string = \"SELECT\";\r\n\r\n/**\r\n * Element type for checkbox elements.\r\n */\r\nexport const CHECKBOX: string = \"checkbox\";\r\n\r\n/**\r\n * Element type for radio elements.\r\n */\r\nexport const RADIO: string = \"radio\";\r\n\r\n/**\r\n * Element type for file input elements.\r\n */\r\nexport const FILE: string = \"file\";\r\n\r\n/**\r\n * Element type for textarea elements.\r\n */\r\nexport const TEXTAREA: string = \"textarea\";","/**\r\n * Constant string representing the error for form controls.\r\n */\r\nexport const CONTROLS_ERROR: string = \"controlsError\";\r\n\r\n/**\r\n * Constant string representing a synchronous value change.\r\n */\r\nexport const VALUE_CHANGED_SYNC: string = \"valueChangedSync\";\r\n\r\n/**\r\n * Constant string representing a function type.\r\n */\r\nexport const FUNCTION_STRING: string = \"function\";\r\n\r\n/**\r\n * Constant string representing an object type.\r\n */\r\nexport const OBJECT_STRING: string = \"object\";\r\n\r\n/**\r\n * Constant string representing the RxWeb Validator.\r\n */\r\nexport const RX_WEB_VALIDATOR: string = \"rxwebValidator\";\r\n\r\n/**\r\n * Constant string representing a number type.\r\n */\r\nexport const NUMBER: string = \"number\";\r\n\r\n/**\r\n * Constant string representing a boolean type.\r\n */\r\nexport const BOOLEAN: string = \"boolean\";\r\n\r\n/**\r\n * Constant string representing a custom type.\r\n */\r\nexport const CUSTOM: string = \"custom\";\r\n\r\n/**\r\n * Constant string representing a template validation configuration.\r\n */\r\nexport const TEMPLATE_VALIDATION_CONFIG: string = \"template-validation-config\";\r\n\r\n/**\r\n * Constant string representing a conditional validator.\r\n */\r\nexport const CONDITIONAL_VALIDATOR: string = \"conditionalValidator\";\r\n\r\n/**\r\n * Constant string representing a validator configuration.\r\n */\r\nexport const VALIDATOR_CONFIG: string = \"validatorConfig\";\r\n\r\n/**\r\n * Constant string representing the 'this' keyword.\r\n */\r\nexport const THIS: string = \"this\";\r\n\r\n/**\r\n * Constant string used as a separator for certain codes.\r\n */\r\nexport const RXCODE: string = \"-rxw-\";\r\n\r\n/**\r\n * Constant string representing a model.\r\n */\r\nexport const MODEL: string = \"model\";\r\n\r\n/**\r\n * Constant string representing a model instance.\r\n */\r\nexport const MODEL_INSTANCE: string = \"modelInstance\";\r\n\r\n/**\r\n * Constant string representing a patch operation.\r\n */\r\nexport const PATCH: string = \"patch\";","export const DECORATORS:{[key:string]:string} = {\r\n    disabled:'disabled',\r\n    error: 'error',\r\n    trim:'trim',\r\n    ltrim:'ltrim',\r\n    rtrim:'rtrim',\r\n    blacklist:'blacklist',\r\n    stripLow:'stripLow',\r\n    toBoolean:'toBoolean',\r\n    toDate:'toDate',\r\n    toDouble:'toDouble',\r\n    toFloat:'toFloat',\r\n    toInt:'toInt',\r\n    string:'toString',\r\n    whitelist: 'whitelist',\r\n    escape: 'escape',\r\n    prefix: 'prefix',\r\n    suffix: 'suffix',\r\n    sanitize: 'sanitize',\r\n    elementClass: 'elementClass',\r\n    updateOn:'updateOn'\r\n}","import { THIS } from \"../const/app.const\";\r\nexport class Linq {\r\n    static functionCreator(expression: string): any {\r\n        var functionSetter: any = [];\r\n        var match = expression.match(/^\\s*\\(?\\s*([^)]*)\\s*\\)?\\s*=>(.*)/);\r\n        if (match) {\r\n            var splitSelect = match![2].split(\",\");\r\n            for (var i = 0; i < splitSelect.length; i++) {\r\n                var equalToOperator = splitSelect[i].match(/^\\s*\\(?\\s*([^)]*)\\s*\\)?\\s*|===|!==|==|!=|>=|>|<=|<|(.*)/);\r\n                if (equalToOperator !== null) {\r\n                    functionSetter = new Function(match![1], \"return \" + equalToOperator.input);\r\n                } else {\r\n                    equalToOperator = splitSelect[i].match(/^\\s*\\(?\\s*([^)]*)\\s*\\)?\\s*=(.*)/);\r\n                    if (equalToOperator === null) {\r\n                        functionSetter = new Function(match![1], \"return \" + (splitSelect as any).input);\r\n                    } else {\r\n                        functionSetter = new Function(match![1], \"return \" + equalToOperator.input);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (splitSelect.length == 0) {\r\n                functionSetter = { accessFunction: new Function(match[1], \"return \" + match[2]) };\r\n            }\r\n\r\n            return functionSetter;\r\n        }\r\n    }\r\n\r\n    static execute(jObject: { [key: string]: any }, config: any, parentObject: { [key: string]: any }, modelInstance: { [key: string]: any }, isDynamicConfig: boolean): boolean {\r\n        let expressionFunction: Function | string = isDynamicConfig ? config.dynamicConfig : config.conditionalExpression;\r\n        let lastParam = isDynamicConfig ? config : modelInstance;\r\n        if (parentObject && typeof expressionFunction == \"string\")\r\n            expressionFunction = Linq.functionCreator(expressionFunction);\r\n        if (parentObject && expressionFunction)\r\n            return modelInstance && modelInstance.constructor !== Object ? (<Function>expressionFunction).call(modelInstance, parentObject, jObject, lastParam) : (<Function>expressionFunction)(parentObject, jObject, lastParam);\r\n        return true;\r\n    }\r\n\r\n    private static getConditionPath(texts: string[]): string {\r\n        let path = \"\";\r\n        for (var i = 1; i < texts.length; i++)\r\n            path += (texts.length - 1) == i ? texts[i].trim() : `${texts[i].trim()}.`\r\n        return path;\r\n    }\r\n\r\n    private static expressionParser(expression: any, isNonValidationExpression: boolean) {\r\n        let columns: any[] = [];\r\n        let expressionString = expression.toString();\r\n        let expressionArguments = Linq.extractArguments(expressionString);\r\n\r\n        if (expressionArguments.length > 0) {\r\n            let splitTexts: any[] = [];\r\n            expressionString.replace(/\\s/g, '').replace(new RegExp(/{|}/, \"g\"), \"\").split(new RegExp(/return|===|!==|==|!=|>=|>|<=|<|&&/)).forEach((t: any) => {\r\n                let texts = t.replace(/\\(|\\)/g, \"\").split(\"||\");\r\n                for (let text of texts) {\r\n                    splitTexts.push(text);\r\n                }\r\n            });\r\n\r\n            splitTexts.forEach(t => {\r\n                expressionArguments.forEach((x, i) => {\r\n                    t = t.trim();\r\n                    if (t.startsWith(x + '.')) {\r\n                        var splitText = t.split('.');\r\n                        if (splitText.length == 2 || (splitText.length >= 2 && isNonValidationExpression)) {\r\n                            if (!isNonValidationExpression) {\r\n                                columns.push({ propName: splitText[1].trim(), argumentIndex: i == 3 ? 0 : i == 2 ? 1 : i == 1 ? -1 : i });\r\n                            }\r\n                            else {\r\n                                columns.push({ propName: this.getConditionPath(splitText), argumentIndex: i == 3 ? 0 : i == 2 ? 1 : i == 1 ? -1 : i });\r\n                            }\r\n                        }\r\n                        else {\r\n                            var arrayProp = splitText[1].split('[');\r\n                            let jObject = {\r\n                                propName: splitText[splitText.length - 1].trim(),\r\n                                objectPropName: arrayProp[0],\r\n                                arrayIndex: arrayProp.length > 1 ? arrayProp[1].replace(\"]\", \"\") : undefined,\r\n                                argumentIndex: i === 3 ? 0 : i === 2 ? 1 : i\r\n                            }\r\n\r\n                            columns.push(jObject);\r\n                        }\r\n                    }\r\n                })\r\n            })\r\n        }\r\n        return columns;\r\n    }\r\n\r\n    private static extractArguments(splitText: string): string[] {\r\n        let expressionArguments: string[] = [THIS];\r\n        if (splitText[0].trim() !== \"(\" && !splitText.trim().startsWith(\"function\")) {\r\n            let text = splitText[0].split(\"=>\")[0];\r\n            expressionArguments.push(text.trim().replace(\"(\", \"\").replace(\")\", \"\"))\r\n        } else {\r\n            let splitTexts = splitText.match(/\\(([^)]+)\\)/g);\r\n            if (splitTexts && splitTexts[0]) {\r\n                splitTexts[0].split(\",\").forEach(t => expressionArguments.push(t.trim().replace(\"(\", \"\").replace(\")\", \"\")));\r\n            }\r\n        }\r\n        return expressionArguments;\r\n    }\r\n\r\n    static expressionColumns(expression: any, isNonValidationExpression: boolean = false) {\r\n        var columns = [];\r\n        let splitExpressions: any[] = [];\r\n        if (typeof expression == \"string\") {\r\n            expression.split(\"=>\")[1].split(\" && \").forEach(t => {\r\n                t.split(\" || \").forEach(x => {\r\n                    splitExpressions.push(x.trim().split(' ')[0])\r\n                })\r\n            });\r\n\r\n            splitExpressions.forEach(t => {\r\n                var splitText = t.split('.');\r\n                if (splitText.length == 2) {\r\n                    columns.push({ propName: splitText[1].trim() });\r\n                }\r\n                else {\r\n                    var arrayProp = splitText[1].split('[');\r\n                    let jObject = {\r\n                        propName: splitText[splitText.length - 1].trim(),\r\n                        objectPropName: arrayProp[0],\r\n                        arrayIndex: arrayProp.length > 1 ? arrayProp[1].replace(\"]\", \"\") : undefined\r\n                    }\r\n\r\n                    columns.push(jObject);\r\n                }\r\n            })\r\n        }\r\n        else {\r\n            columns = Linq.expressionParser(expression, isNonValidationExpression);\r\n        }\r\n\r\n        return columns;\r\n    }\r\n\r\n    static dynamicConfigParser(expression: Function, propName: string): any[] {\r\n        let controlNames: any[] = [];\r\n        let expressionString = expression.toString();\r\n        let expressionArguments = Linq.extractArguments(expressionString);\r\n        let splitString: string[] = expressionString.replace(new RegExp(/\\r?\\n|\\r|;/g), ' ').replace(/[\"%()\\{}=\\\\?�`'#<>|,;:+-]+/g, \" \").split(/ /g);\r\n        if (expressionArguments.length > 3) {\r\n            expressionArguments.splice(expressionArguments.length - 1, 1);\r\n        }\r\n\r\n        expressionArguments.forEach(t => {\r\n            splitString.filter(x => x != `${t}.${propName}` && x.startsWith(`${t}.`)).forEach(x => {\r\n                let split = x.split('.');\r\n                if (split.length == 2) {\r\n                    controlNames.push({ propName: x.replace(`${t}.`, '') });\r\n                }\r\n                else {\r\n                    var arrayProp = split[1].split('[');\r\n                    let jObject = {\r\n                        propName: split[split.length - 1].trim(),\r\n                        objectPropName: arrayProp[0],\r\n                        arrayIndex: arrayProp.length > 1 ? arrayProp[1].replace(\"]\", \"\") : undefined,\r\n                    }\r\n                    controlNames.push(jObject);\r\n                }\r\n            });\r\n        });\r\n\r\n        return controlNames;\r\n    }\r\n}\r\n","import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY, RXCODE } from \"../const\";\r\nimport { DECORATORS } from \"../const/decorators.const\";\r\nimport { PropsConfig } from \"../models/config/props-config\";\r\nimport { DecoratorConfiguration } from \"../models/decorator-configuration\";\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { PropertyInfo } from \"../models/property-info\";\r\nimport { Linq } from \"../util/linq\";\r\nimport { AnnotationTypes } from \"./annotation-types\";\r\n\r\n/**\r\n * Represents a default container for managing instance configurations.\r\n * \r\n * Manages the configuration and instantiation of validation decorators, sanitizers, and other properties for classes.\r\n * This class serves as a container for managing instance-related configurations and properties.\r\n */\r\nexport class DefaultContainer {\r\n    /**\r\n  * Represents whether the container is operating in experimental mode.\r\n  * Experimental mode may introduce features that are still under development or testing.\r\n  */\r\n    public isExperimental: boolean = false;\r\n\r\n    /**\r\n     * Array containing instances and their configurations.\r\n     * Each element represents an instance of the application with associated properties and decorators.\r\n     */\r\n    private instances: InstanceContainer[] = [];\r\n\r\n    /**\r\n     * Counter used for generating unique identifiers for model instances.\r\n     * This counter is incremented each time a new model instance is added to the container.\r\n     */\r\n    public modelIncrementCount: number = 0;\r\n\r\n    /**\r\n     * Retrieves an instance container based on the provided instance function.\r\n     * @param instanceFunc The instance function.\r\n     * @returns The instance container.\r\n     */\r\n    public get<T>(instanceFunc: any): InstanceContainer {\r\n        return this.instances.filter(instance => instance.instance === instanceFunc)[0];\r\n    }\r\n\r\n    /**\r\n     * Retrieves or creates an instance container based on the provided parameters.\r\n     * @param target The target.\r\n     * @param parameterIndex The parameter index.\r\n     * @param propertyKey The property key.\r\n     * @param decoratorType The decorator type.\r\n     * @returns The instance container.\r\n     */\r\n    public getInstance(target: any, parameterIndex: any, propertyKey: string, decoratorType: string) {\r\n        /* Determine if the property key is defined */\r\n        let isPropertyKey = (propertyKey != undefined);\r\n\r\n        /* Get the instance function based on whether the property key is defined */\r\n        let instanceFunc = !isPropertyKey ? target : target.constructor;\r\n\r\n        /* Filter instances to find the one matching the instance function */\r\n        let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0];\r\n\r\n        /* If no instance is found, create a new instance container */\r\n        if (!instance) {\r\n            instance = this.addInstanceContainer(instanceFunc);\r\n        }\r\n\r\n        /* Return the instance container */\r\n        return instance;\r\n    }\r\n\r\n    /**\r\n     * Adds property configurations to the instance container.\r\n     * @param target The target.\r\n     * @param configs The configurations.\r\n     */\r\n    public addPropsConfig(target: any, configs?: PropsConfig[]) {\r\n        /* Find the instance container associated with the target */\r\n        let instanceContainer = this.instances.find(instance => instance.instance === target);\r\n\r\n        /* Check if the instance container exists */\r\n        if (instanceContainer) {\r\n            /* Iterate through the provided configurations or an empty array if none are provided */\r\n            for (let config of configs ?? []) {\r\n                /* Iterate through the property names in the configuration */\r\n                for (let prop of config.propNames) {\r\n                    /* Find the property info in the instance container's properties */\r\n                    let propertyInfo = instanceContainer.properties?.find(t => t.name == prop && (t.propertyType !== OBJECT_PROPERTY && t.propertyType !== ARRAY_PROPERTY));\r\n\r\n                    /* If the property info exists, add property configuration */\r\n                    if (propertyInfo) {\r\n                        this.addPropConfig(target, [propertyInfo], config)\r\n                    } else {\r\n                        /* If the property name is ':all:', add property configuration for all properties */\r\n                        if (prop === \":all:\") {\r\n                            this.addPropConfig(target, instanceContainer.properties?.filter(t => t.propertyType !== OBJECT_PROPERTY && t.propertyType !== ARRAY_PROPERTY)!, config);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else if (configs === undefined) {\r\n            /* If the instance container does not exist and no configurations are provided, create a new instance container */\r\n            this.addInstanceContainer(target);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a property configuration to the instance container.\r\n     * @param target The target.\r\n     * @param properties The properties.\r\n     * @param config The configuration.\r\n     */\r\n    public addPropConfig(target: any, properties: PropertyInfo[], config: PropsConfig) {\r\n        /* Iterates through the provided properties and applies configurations based on the provided config object */\r\n        for (var propertyInfo of properties) {\r\n            let excludeProp: boolean = false;\r\n\r\n            /* Check if excludePropNames exist in the config */\r\n            if (config.excludePropNames) {\r\n                /* Check if the current property should be excluded based on its name */\r\n                excludeProp = config.excludePropNames.find(t => t == propertyInfo.name) !== undefined;\r\n            }\r\n\r\n            /* If the property should not be excluded */\r\n            if (!excludeProp) {\r\n                /* Apply validation configurations */\r\n                if (config.validationConfig) {\r\n                    /* Iterate through the validation configurations */\r\n                    for (let typeName in config.validationConfig) {\r\n                        /* Initialize validation for the property */\r\n                        this.init({ constructor: target }, 0, propertyInfo.name, typeName, (config.validationConfig as any)[typeName] === true ? undefined : (config.validationConfig as any)[typeName], false);\r\n                    }\r\n                }\r\n\r\n                /* Apply error decorator configuration */\r\n                if (config.error) {\r\n                    this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.error, DECORATORS[\"error\"])\r\n                }\r\n\r\n                /* Apply disable decorator configuration */\r\n                if (config.disable) {\r\n                    this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.disable, DECORATORS[\"disabled\"])\r\n                }\r\n\r\n                /* Apply elementClass decorator configuration */\r\n                if (config.elementClass) {\r\n                    this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.elementClass, DECORATORS[\"elementClass\"])\r\n                }\r\n\r\n                /* Apply ignore configuration */\r\n                if (config.ignore) {\r\n                    propertyInfo.ignore = config.ignore\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a sanitizer to the instance container.\r\n     * @param target The target.\r\n     * @param parameterIndex The parameter index.\r\n     * @param propertyKey The property key.\r\n     * @param decoratorType The decorator type.\r\n     * @param value The value.\r\n     */\r\n    public addSanitizer(target: any, parameterIndex: any, propertyKey: string, decoratorType: string, value?: any) {\r\n        /* Retrieves the instance container based on the provided parameters and adds a sanitizer configuration to it */\r\n        let instance = this.getInstance(target, parameterIndex, propertyKey, decoratorType);\r\n        if (instance) {\r\n            /* Check if the sanitizers object for the property exists */\r\n            if (!(instance.sanitizers as any)[propertyKey]) {\r\n                (instance.sanitizers as any)[propertyKey] = [];\r\n            }\r\n\r\n            /* Push the sanitizer configuration to the sanitizers object */\r\n            (instance.sanitizers as any)[propertyKey].push({ name: decoratorType, config: value });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a decorator configuration to the instance container.\r\n     * @param target The target.\r\n     * @param parameterIndex The parameter index.\r\n     * @param propertyKey The property key.\r\n     * @param config The configuration.\r\n     * @param decoratorType The decorator type.\r\n     */\r\n    public addDecoratorConfig(target: any, parameterIndex: any, propertyKey: string, config: any, decoratorType: string): void {\r\n        /* Determine if the property key is defined */\r\n        let isPropertyKey = (propertyKey != undefined);\r\n\r\n        /* Determine the function or constructor to be used as instanceFunc */\r\n        let instanceFunc = !isPropertyKey ? target : target.constructor;\r\n\r\n        /* Find the instance container based on instanceFunc */\r\n        let instance = this.instances.find(instance => instance.instance === instanceFunc);\r\n\r\n        /* If the instance container doesn't exist, create a new one */\r\n        if (!instance) {\r\n            instance = this.addInstanceContainer(instanceFunc);\r\n        }\r\n\r\n        /* Add conditional expressions to the non-validation decorators of the instance container */\r\n        (instance?.nonValidationDecorators as any)[decoratorType].conditionalExpressions[propertyKey] = config.conditionalExpression;\r\n\r\n        /* Extract columns from the conditional expression */\r\n        let columns = Linq.expressionColumns(config.conditionalExpression, true);\r\n\r\n        /* Iterate over each column */\r\n        columns.forEach(column => {\r\n            if (column.argumentIndex !== -1) {\r\n                /* Construct the column name based on whether objectPropName is defined */\r\n                let columnName = (!column.objectPropName) ? `${column.propName}${RXCODE}${column.argumentIndex}` : `${column.objectPropName}.${column.propName}${RXCODE}${column.argumentIndex}`;\r\n\r\n                /* Check if the column exists in changeDetection and initialize it if necessary */\r\n                if (!(instance?.nonValidationDecorators as any)[decoratorType].changeDetection[columnName]) {\r\n                    (instance?.nonValidationDecorators as any)[decoratorType].changeDetection[columnName] = [];\r\n                }\r\n\r\n                /* Add the property key to the changeDetection column */\r\n                let disabledColumns = (instance?.nonValidationDecorators as any)[decoratorType].changeDetection[columnName];\r\n                if (disabledColumns.indexOf(columnName) === -1) {\r\n                    disabledColumns.push(propertyKey);\r\n                }\r\n            } else {\r\n                /* Handle the controlProp if argumentIndex is -1 */\r\n                if (!(instance?.nonValidationDecorators as any)[decoratorType].controlProp[propertyKey]) {\r\n                    (instance?.nonValidationDecorators as any)[decoratorType].controlProp[propertyKey] = {};\r\n                }\r\n\r\n                /* Set the column name to true in controlProp */\r\n                (instance?.nonValidationDecorators as any)[decoratorType].controlProp[propertyKey][column.propName.replace(\";\", \"\")] = true;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Initializes a decorator configuration.\r\n     * @param target The target.\r\n     * @param parameterIndex The parameter index.\r\n     * @param propertyKey The property key.\r\n     * @param annotationType The annotation type.\r\n     * @param config The configuration.\r\n     * @param isAsync Indicates whether it's an asynchronous operation.\r\n     */\r\n    public init(target: any, parameterIndex: any, propertyKey: string, annotationType: string, config: any, isAsync: boolean): void {\r\n        /* Define the decorator configuration */\r\n        var decoratorConfiguration: DecoratorConfiguration = {\r\n            propertyIndex: parameterIndex,\r\n            propertyName: propertyKey,\r\n            annotationType: annotationType,\r\n            config: config,\r\n            isAsync: isAsync,\r\n            isValidator: annotationType !== \"updateOn\"\r\n        }\r\n\r\n        /* Determine if the property key is defined */\r\n        let isPropertyKey = (propertyKey != undefined);\r\n\r\n        /* Determine the function or constructor to be used as instanceFunc */\r\n        this.addAnnotation(!isPropertyKey ? target : target.constructor, decoratorConfiguration);\r\n    }\r\n\r\n    /**\r\n     * Initializes a property object.\r\n     * @param name The name.\r\n     * @param propertyType The property type.\r\n     * @param entity The entity.\r\n     * @param target The target.\r\n     * @param config The configuration.\r\n     */\r\n    public initPropertyObject(name: string, propertyType: string, entity: any, target: any, config?: any) {\r\n        /* Define the property information */\r\n        var propertyInfo: PropertyInfo = {\r\n            name: name,\r\n            propertyType: propertyType,\r\n            entity: entity,\r\n            dataPropertyName: config ? config.name : undefined,\r\n            entityProvider: config ? config.entityProvider : undefined\r\n        }\r\n\r\n        /* Add the property to the target's constructor */\r\n        this.addProperty(target.constructor, propertyInfo);\r\n    }\r\n\r\n    /**\r\n     * Adds an instance container to the list of instances.\r\n     * @param instanceFunc The instance function.\r\n     * @returns The added instance container.\r\n     */\r\n    public addInstanceContainer(instanceFunc: any): InstanceContainer {\r\n        /* Define an instance container */\r\n        let instanceContainer: InstanceContainer = {\r\n            instance: instanceFunc,     /* Instance associated with the container */\r\n            propertyAnnotations: [],    /* Annotations for the properties */\r\n            properties: [],             /* Properties associated with the instance */\r\n            nonValidationDecorators: {\r\n                /* Disabled decorators */\r\n                disabled: {\r\n                    conditionalExpressions: {}, /* Conditional expressions for disabled decorators */\r\n                    changeDetection: {},        /* Change detection for disabled decorators */\r\n                    controlProp: {}             /* Control properties for disabled decorators */\r\n                },\r\n\r\n                /* Error decorators */\r\n                error: {\r\n                    conditionalExpressions: {}, /* Conditional expressions for error decorators */\r\n                    changeDetection: {},        /* Change detection for error decorators */\r\n                    controlProp: {}             /* Control properties for error decorators */\r\n                },\r\n\r\n                /* Element class decorators */\r\n                elementClass: {\r\n                    conditionalExpressions: {}, /* Conditional expressions for element class decorators */\r\n                    changeDetection: {},        /* Change detection for element class decorators */\r\n                    controlProp: {}             /* Control properties for element class decorators */\r\n                }\r\n            },\r\n\r\n            /* Sanitizers associated with the instance */\r\n            sanitizers: {}\r\n        };\r\n\r\n        /* Add the instance container to the instances array */\r\n        this.instances.push(instanceContainer);\r\n\r\n        /* Return the created instance container */\r\n        return instanceContainer;\r\n    }\r\n\r\n    /**\r\n     * Adds a property to the instance container.\r\n     * @param instanceFunc The instance function.\r\n     * @param propertyInfo The property information.\r\n     * @param isFromAnnotation Indicates whether it's added from an annotation.\r\n     */\r\n    public addProperty(instanceFunc: any, propertyInfo: PropertyInfo, isFromAnnotation: boolean = false): void {\r\n        /* Find the instance in the instances array */\r\n        let instance = this.instances.find(instance => instance.instance === instanceFunc);\r\n\r\n        /* Check if the instance exists */\r\n        if (instance) {\r\n            /* Add property information to the existing instance */\r\n            this.addPropertyInfo(instance, propertyInfo, !isFromAnnotation);\r\n        } else {\r\n            /* Create a new instance container if it doesn't exist */\r\n            instance = this.addInstanceContainer(instanceFunc);\r\n\r\n            /* Add property information to the newly created instance */\r\n            this.addPropertyInfo(instance, propertyInfo);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds property information to the instance container.\r\n     * @param instance The instance container.\r\n     * @param propertyInfo The property information.\r\n     * @param isAddProperty Indicates whether it's added as a new property.\r\n     */\r\n    public addPropertyInfo(instance: InstanceContainer, propertyInfo: PropertyInfo, isAddProperty: boolean = false) {\r\n        /* Find the property with the same name in the instance's properties */\r\n        var property = instance.properties?.find(t => t.name == propertyInfo.name);\r\n\r\n        /* Check if the property doesn't already exist */\r\n        if (!property) {\r\n            /* Add the property information to the instance's properties */\r\n            instance.properties?.push(propertyInfo);\r\n        } else if (isAddProperty) {\r\n            /* Update property information if requested */\r\n            property.dataPropertyName = propertyInfo.dataPropertyName;\r\n            property.defaultValue = propertyInfo.defaultValue;\r\n            property.valuePath = propertyInfo.valuePath;\r\n            property.value = propertyInfo.value;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds an annotation to the instance container.\r\n     * @param instanceFunc The instance function.\r\n     * @param decoratorConfiguration The decorator configuration.\r\n     */\r\n    public addAnnotation(instanceFunc: any, decoratorConfiguration: DecoratorConfiguration): void {\r\n        /* Add property information to the instance */\r\n        this.addProperty(instanceFunc, { propertyType: PROPERTY, name: decoratorConfiguration.propertyName }, true);\r\n\r\n        /* Find or create the instance in the instances array */\r\n        let instance = this.instances.find(instance => instance.instance === instanceFunc);\r\n        if (instance) {\r\n            /* Add the decorator configuration to the instance's property annotations */\r\n            instance.propertyAnnotations.push(decoratorConfiguration);\r\n        } else {\r\n            instance = this.addInstanceContainer(instanceFunc);\r\n            instance.propertyAnnotations.push(decoratorConfiguration);\r\n        }\r\n\r\n        /* Add change validation based on the provided configuration */\r\n        if (decoratorConfiguration.config && decoratorConfiguration.config.conditionalExpression) {\r\n            let columns = Linq.expressionColumns(decoratorConfiguration.config.conditionalExpression);\r\n            this.addChangeValidation(instance, decoratorConfiguration.propertyName, columns);\r\n        }\r\n\r\n        /* Add dynamic configuration and validation */\r\n        if (decoratorConfiguration.config && decoratorConfiguration.config.dynamicConfig) {\r\n            let columns = Linq.dynamicConfigParser(decoratorConfiguration.config.dynamicConfig, decoratorConfiguration.propertyName);\r\n            this.addChangeValidation(instance, decoratorConfiguration.propertyName, columns);\r\n        }\r\n\r\n        /* Set conditional columns based on the decorator configuration */\r\n        this.setConditionalColumns(instance, decoratorConfiguration);\r\n    }\r\n\r\n    /**\r\n     * Sets conditional columns based on the decorator configuration.\r\n     * @param instance The instance container.\r\n     * @param decoratorConfiguration The decorator configuration.\r\n     */\r\n    public setConditionalColumns(instance: any, decoratorConfiguration: DecoratorConfiguration) {\r\n        /* Checks if there is an instance and decorator configuration present */\r\n        if (instance && decoratorConfiguration.config) {\r\n            /* Handles logical annotations (AND, OR, NOT) */\r\n            if (decoratorConfiguration.annotationType == AnnotationTypes[\"and\"] ||\r\n                decoratorConfiguration.annotationType == AnnotationTypes[\"or\"] ||\r\n                decoratorConfiguration.annotationType == AnnotationTypes[\"not\"]\r\n            ) {\r\n                /* Iterates over validation configurations */\r\n                Object.keys(decoratorConfiguration.config.validation).forEach(t => {\r\n                    /* Checks if the validation configuration is not a boolean */\r\n                    if (typeof decoratorConfiguration.config.validation[t] !== \"boolean\") {\r\n                        /* Sets logical conditional based on the validation configuration */\r\n                        this.setLogicalConditional(instance, t, decoratorConfiguration.config.validation[t].fieldName, decoratorConfiguration.propertyName)\r\n                    }\r\n                });\r\n            } else {\r\n                /* Sets logical conditional for non-logical annotations */\r\n                this.setLogicalConditional(instance, decoratorConfiguration.annotationType, decoratorConfiguration.config.fieldName, decoratorConfiguration.propertyName);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets logical conditionals based on the decorator configuration.\r\n     * @param instance The instance container.\r\n     * @param annotationType The annotation type.\r\n     * @param fieldName The field name.\r\n     * @param propertyName The property name.\r\n     */\r\n    public setLogicalConditional(instance: any, annotationType: string, fieldName: string, propertyName: string) {\r\n        /* \r\n         * Checks if there is an instance and annotation type with applicable conditions\r\n         * for setting conditional value properties.\r\n         */\r\n        if (instance && (\r\n            (annotationType == AnnotationTypes[\"compare\"] ||\r\n                annotationType == AnnotationTypes[\"greaterThan\"] ||\r\n                annotationType == AnnotationTypes[\"greaterThanEqualTo\"] ||\r\n                annotationType == AnnotationTypes[\"lessThan\"] ||\r\n                annotationType == AnnotationTypes[\"lessThanEqualTo\"] ||\r\n                annotationType == AnnotationTypes[\"different\"] ||\r\n                annotationType == AnnotationTypes[\"factor\"] ||\r\n                annotationType == AnnotationTypes[\"minTime\"] ||\r\n                annotationType == AnnotationTypes[\"maxTime\"]) ||\r\n            (annotationType == AnnotationTypes[\"creditCard\"] && fieldName) ||\r\n            ((annotationType == AnnotationTypes[\"minDate\"] || annotationType == AnnotationTypes[\"maxDate\"]) && fieldName)\r\n        )) {\r\n            /* Sets conditional value property based on the conditions */\r\n            this.setConditionalValueProp(instance, fieldName, propertyName);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets conditional value properties based on the decorator configuration.\r\n     * @param instance The instance container.\r\n     * @param propertyName The property name.\r\n     * @param refPropertyName The reference property name.\r\n     */\r\n    public setConditionalValueProp(instance: InstanceContainer, propertyName: string, refPropertyName: string) {\r\n        /* Checks if propName exists */\r\n        if (propertyName) {\r\n            /* Splits propName into individual properties */\r\n            let splitProps = propertyName.split ? propertyName.split('.') : '';\r\n\r\n            /* Checks if the length of splitProps is less than 2 */\r\n            if (splitProps.length < 2) {\r\n                /* Initializes conditionalValidationProps if it does not exist */\r\n                if (!instance.conditionalValidationProps) {\r\n                    instance.conditionalValidationProps = {};\r\n                }\r\n\r\n                /* Initializes conditionalValidationProps[propName] if it does not exist */\r\n                if (!instance.conditionalValidationProps[propertyName]) {\r\n                    instance.conditionalValidationProps[propertyName] = [];\r\n                }\r\n\r\n                /* Pushes refPropName into conditionalValidationProps[propName] if it does not exist */\r\n                if (instance.conditionalValidationProps[propertyName].indexOf(refPropertyName) == -1) {\r\n                    instance.conditionalValidationProps[propertyName].push(refPropertyName);\r\n                }\r\n            } else {\r\n                /* Adds change validation for complex properties */\r\n                this.addChangeValidation(instance, refPropertyName, [{\r\n                    argumentIndex: 1,\r\n                    objectPropName: splitProps[0],\r\n                    propName: splitProps[1],\r\n                    referencePropName: refPropertyName\r\n                }]);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds change validation based on the columns.\r\n     * @param instance The instance container.\r\n     * @param propertyName The property name.\r\n     * @param columns The columns.\r\n     */\r\n    public addChangeValidation(instance: InstanceContainer, propertyName: string, columns: any[]): void {\r\n        /* Checks if instance exists. */\r\n        if (instance) {\r\n            /* Initializes conditionalValidationProps if it does not exist. */\r\n            if (!instance.conditionalValidationProps) {\r\n                instance.conditionalValidationProps = {};\r\n            }\r\n\r\n            /* Iterates through columns. */\r\n            columns.forEach(t => {\r\n                /* Checks if propName exists and objectPropName does not exist. */\r\n                if (t.propName && !t.objectPropName) {\r\n                    /* Initializes conditionalValidationProps[t.propName] if it does not exist. */\r\n                    if (!(instance.conditionalValidationProps as any)[t.propName]) {\r\n                        (instance.conditionalValidationProps as any)[t.propName] = [];\r\n                    }\r\n\r\n                    /* Pushes propertyName into conditionalValidationProps[t.propName] if it does not exist. */\r\n                    if ((instance.conditionalValidationProps as any)[t.propName].indexOf(propertyName) == -1) {\r\n                        (instance.conditionalValidationProps as any)[t.propName].push(propertyName);\r\n                    }\r\n                } else {\r\n                    /* Checks if propName and objectPropName exist. */\r\n                    if (t.propName && t.objectPropName) {\r\n                        /* Initializes conditionalObjectProps if it does not exist. */\r\n                        if (!instance.conditionalObjectProps) {\r\n                            instance.conditionalObjectProps = [];\r\n                        }\r\n\r\n                        /* Sets referencePropName and adds it to conditionalObjectProps. */\r\n                        t.referencePropName = propertyName;\r\n                        instance.conditionalObjectProps[\"push\"](t);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Represents a default container for managing instance configurations.\r\n * \r\n * Manages the configuration and instantiation of validation decorators, sanitizers, and other properties for classes.\r\n * This class serves as a container for managing instance-related configurations and properties.\r\n */\r\nexport const defaultContainer = new DefaultContainer();","import { PasswordValidation } from \"../models/password-validation.model\";\r\nimport { RegExRule } from \"./regex-rules\";\r\n\r\nconst ALPHABET: string = \"alphabet\";\r\nconst DIGIT: string = \"digit\";\r\nconst CONTAINS: string = \"contains\";\r\nconst LOWERCASE: string = \"lowerCase\";\r\nconst UPPERCASE: string = \"upperCase\";\r\nconst SPECIAL_CHARACTER: string = \"specialCharacter\";\r\nconst MIN_LENGTH: string = \"minLength\";\r\nconst MAX_LENGTH: string = \"maxLength\";\r\n\r\nexport class RegexValidator {\r\n    static isExits(value: any, regex: RegExp): boolean {\r\n        return value.match(regex) != null;\r\n    }\r\n\r\n    static isValid(value: any, regex: RegExp): boolean {\r\n        return regex.test(value);\r\n    }\r\n\r\n    static isNotBlank(value: any, isRemoveSpace: boolean = false): boolean {\r\n        return !isRemoveSpace ?\r\n            (value === 0) || (value !== undefined && value !== null && value !== \"\") :\r\n            (value === 0) || (value !== undefined && value !== null && String(value).trim() !== \"\")\r\n    }\r\n\r\n    static isValidPassword(passwordValidation: PasswordValidation, value: string): { [key: string]: any } {\r\n        let isValid = false;\r\n        let jObject: { [key: string]: any } = {};\r\n        let keyName = \"status\";\r\n        let objectProperties = Object.getOwnPropertyNames(passwordValidation)\r\n        for (let propertyName of objectProperties) {\r\n            switch (propertyName) {\r\n                case ALPHABET:\r\n                    isValid = RegexValidator.isExits(value, RegExRule[\"alphaExits\"]);\r\n                    keyName = ALPHABET;\r\n                    break;\r\n                case DIGIT:\r\n                    isValid = RegexValidator.isValid(value, RegExRule[\"isDigitExits\"]);\r\n                    keyName = DIGIT;\r\n                    break;\r\n                case CONTAINS:\r\n                    isValid = value.indexOf((passwordValidation as any)[CONTAINS]) != -1;\r\n                    keyName = CONTAINS;\r\n                    break;\r\n                case LOWERCASE:\r\n                    isValid = RegexValidator.isValid(value, RegExRule[\"lowerCase\"]);\r\n                    keyName = LOWERCASE;\r\n                    break;\r\n                case UPPERCASE:\r\n                    isValid = RegexValidator.isValid(value, RegExRule[\"upperCase\"]);\r\n                    keyName = UPPERCASE;\r\n                    break;\r\n                case SPECIAL_CHARACTER:\r\n                    isValid = RegexValidator.isExits(value, RegExRule[\"specialCharacter\"]);\r\n                    keyName = SPECIAL_CHARACTER;\r\n                    break;\r\n                case MIN_LENGTH:\r\n                    isValid = value.length >= (passwordValidation as any)[propertyName];\r\n                    keyName = MIN_LENGTH;\r\n                    break;\r\n                case MAX_LENGTH:\r\n                    isValid = value.length <= (passwordValidation as any)[propertyName];\r\n                    keyName = MAX_LENGTH;\r\n                    break;\r\n            }\r\n            if (!isValid)\r\n                break;\r\n        }\r\n\r\n        return { isValid: isValid, keyName: keyName }\r\n    }\r\n\r\n    static isZero(value: any) {\r\n        return value == 0;\r\n    }\r\n\r\n    static commaRegex(): RegExp {\r\n        return new RegExp(\",\", \"g\");\r\n    }\r\n}\r\n","import { FormDataConfig } from '../models/interface/form-data-config';\r\nimport { RegexValidator } from '../util/regex-validator';\r\n\r\n/* Constants for data types */\r\nconst OBJECT: string = \"object\";\r\nconst BOOLEAN: string = \"boolean\";\r\n\r\n/* Class responsible for providing methods to convert JSON data to FormData */\r\nexport class FormDataProvider {\r\n\r\n    /**\r\n     * Converts a JavaScript object to FormData.\r\n     * @param jObject The JavaScript object to convert.\r\n     * @param options Additional options for the conversion.\r\n     * @returns The converted FormData object.\r\n     */\r\n    public convertToFormData(jObject: { [key: string]: any }, options?: FormDataConfig): FormData {\r\n        return this.convertFormData(jObject, undefined, undefined, options);\r\n    }\r\n\r\n    /**\r\n     * Recursively converts a JavaScript object to FormData.\r\n     * @param jObject The JavaScript object to convert.\r\n     * @param currentFormData The current FormData object (used for recursive calls).\r\n     * @param parentKey The parent key (used for recursive calls).\r\n     * @param options Additional options for the conversion.\r\n     * @returns The converted FormData object.\r\n     */\r\n    public convertFormData(jObject: { [key: string]: any }, currentFormData?: FormData, parentKey?: string, options?: FormDataConfig): FormData {\r\n        /* Initialize formData with currentFormData if available, otherwise create a new FormData object */\r\n        let formData = currentFormData || new FormData();\r\n\r\n        /* Initialize propName to an empty string */\r\n        let propName: string = '';\r\n\r\n        /* Iterate over each property in the jObject */\r\n        for (var columnName in jObject) {\r\n            /* Set propName to columnName if there's no parentKey, otherwise use parentKey[columnName] format */\r\n            propName = !parentKey ? columnName : `${parentKey}[${columnName}]`;\r\n\r\n            /* Check if the property value is an array */\r\n            if (Array.isArray(jObject[columnName])) {\r\n                /* If it's an array, iterate over each element */\r\n                jObject[columnName].forEach((row: any, index: number) => {\r\n                    /* Set arrayPropName to columnName[index] format */\r\n                    let arrayPropName = `${columnName}[${index}]`;\r\n\r\n                    /* If the element is an object, recursively call convertFormData */\r\n                    if (typeof row === OBJECT) {\r\n                        this.convertFormData(row, formData, arrayPropName, options);\r\n                    } else {\r\n                        /* If not an object, call nonObjectValueBind */\r\n                        this.nonObjectValueBind(row, formData, arrayPropName, options);\r\n                    }\r\n                });\r\n            } else if (jObject[columnName] !== null && !(jObject[columnName] instanceof Date) && typeof jObject[columnName] === OBJECT && !(jObject[columnName] instanceof File || jObject[columnName] instanceof FileList)) {\r\n                /* If the property value is an object, recursively call convertFormData */\r\n                this.convertFormData(jObject[columnName], formData, propName, options);\r\n            } else {\r\n                /* If the property value is neither an array nor an object, call nonObjectValueBind */\r\n                this.nonObjectValueBind(jObject[columnName], formData, propName, options);\r\n            }\r\n        }\r\n\r\n        /* Return the resulting FormData object */\r\n        return formData;\r\n    }\r\n\r\n    /**\r\n     * Binds non-object values to FormData.\r\n     * @param value The value to bind.\r\n     * @param formData The FormData object.\r\n     * @param propName The property name.\r\n     * @param options Additional options for the conversion.\r\n     */\r\n    public nonObjectValueBind(value: any, formData: FormData, propName: string, options?: FormDataConfig) {\r\n        /* Check if the value type is boolean */\r\n        if (typeof value === BOOLEAN) {\r\n            /* Convert the boolean value to true or false and append to formData */\r\n            let formValue: any = value ? true : false;\r\n            formData.append(propName, formValue);\r\n        }\r\n\r\n        /* Check if the value is a FileList */\r\n        else if (value instanceof FileList) {\r\n            /* Iterate over each item in the FileList */\r\n            for (var i = 0; i < value.length; i++) {\r\n                /* Append the file item to formData */\r\n                formData.append(\r\n                    options && options.excludeImageIndex && value.length === 1 ? propName : `${propName}[${i}]`,\r\n                    value.item(i) as Blob\r\n                );\r\n            }\r\n        }\r\n\r\n        /* For other types of values */\r\n        else {\r\n            /* Check if the value is not blank using RegexValidator */\r\n            if (RegexValidator.isNotBlank(value)) {\r\n                /* Append the value to formData */\r\n                formData.append(propName, value);\r\n            }\r\n        }\r\n    }\r\n}","export enum NumericValueType{\r\n    PositiveNumber = 1,\r\n    NegativeNumber,\r\n    Both\r\n}\r\n","export enum IpVersion {\r\n  V4 = 1,\r\n  V6,\r\n  AnyOne\r\n}\r\n","export enum ErrorMessageBindingStrategy {\r\n    None,\r\n    OnSubmit,\r\n    OnDirty,\r\n    OnTouched,\r\n    OnDirtyOrTouched,\r\n    OnDirtyOrSubmit,\r\n    OnTouchedOrSubmit\r\n}\r\n","export enum ResetFormType {\r\n    ControlsOnly = 1,\r\n    FormGroupsOnly,\r\n    FormArraysOnly,\r\n    ControlsAndFormGroupsOnly,\r\n    DefinedPropsOnly,\r\n    All\r\n}\r\n","\r\nexport class ReactiveFormConfig {\r\n    static i18n: { language?: string, validationMessage?: () => any } = {};\r\n    static number: { [key: string]: any } = {}\r\n    static json: { [key: string]: any } = {};\r\n    static autoInstancePush: boolean = false;\r\n    static set(jObject: { [key: string]: any }): void {\r\n        if (jObject) {\r\n            ReactiveFormConfig.json = jObject;\r\n        }\r\n    }\r\n\r\n    static get(path: string): any {\r\n        let jObject: { [key: string]: any } | undefined;\r\n        if (ReactiveFormConfig.json) {\r\n            let splitPath = path.split('.');\r\n            for (let columnName of splitPath) {\r\n                jObject = (!jObject) ? ReactiveFormConfig.json[columnName] : jObject[columnName];\r\n                if (!jObject) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return jObject;\r\n    }\r\n}\r\n","import { ReactiveFormConfig } from \"./reactive-form-config\";\r\n\r\nexport class ObjectMaker {\r\n    static language: string = \"\";\r\n    static toJson(key: string, config: any, values: any) {\r\n        ObjectMaker.setMessage();\r\n        let message = config ? config.message : null;\r\n        let messageKey = undefined;\r\n        if (!message && config && config.messageKey) {\r\n            messageKey = config.messageKey;\r\n        }\r\n\r\n        let messageText = (message) ? message : (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"validationMessage\"] && ReactiveFormConfig.json[\"validationMessage\"][messageKey || key]) ? ReactiveFormConfig.json[\"validationMessage\"][messageKey || key] : '';\r\n        values.forEach((t: any, index: number) => {\r\n            if (t instanceof Date) {\r\n                t = this.getDateString(t);\r\n            }\r\n\r\n            messageText = messageText.replace(`{{${index}}}`, t);\r\n        });\r\n\r\n        let jObject: any = {};\r\n        jObject[key] = {\r\n            message: messageText, refValues: values\r\n        };\r\n\r\n        if (config && config.isAddMessageKey) {\r\n            jObject[\"messageKey\"] = messageKey;\r\n        }\r\n\r\n        return jObject;\r\n    }\r\n\r\n    static null() {\r\n        return null;\r\n    }\r\n\r\n    static getPasswordMessage() {\r\n        let messageKey = \"password\";\r\n        return (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"validationMessage\"] && ReactiveFormConfig.json[\"validationMessage\"][messageKey]) ? ReactiveFormConfig.json[\"validationMessage\"][messageKey] : ''\r\n    }\r\n\r\n    static setMessage() {\r\n        if (ReactiveFormConfig.i18n && ReactiveFormConfig.i18n.validationMessage && ObjectMaker.language !== ReactiveFormConfig.i18n.language) {\r\n            if (!ReactiveFormConfig.json) {\r\n                ReactiveFormConfig.json = {};\r\n            }\r\n\r\n            ReactiveFormConfig.json[\"validationMessage\"] = ReactiveFormConfig.i18n.validationMessage();\r\n            ObjectMaker.language = ReactiveFormConfig.i18n.language ?? 'en-US';\r\n        }\r\n    }\r\n\r\n    static getDateString(value: Date) {\r\n        let seperator = ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].seperator ? ReactiveFormConfig.json[\"baseConfig\"].seperator : \"/\";\r\n        let dateFormat = ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].dateFormat ? ReactiveFormConfig.json[\"baseConfig\"].dateFormat : \"mdy\";\r\n        if (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"internationalization\"] && ReactiveFormConfig.json[\"internationalization\"].dateFormat && ReactiveFormConfig.json[\"internationalization\"].seperator) {\r\n            seperator = ReactiveFormConfig.json[\"internationalization\"].seperator;\r\n            dateFormat = ReactiveFormConfig.json[\"internationalization\"].dateFormat;\r\n        }\r\n\r\n        let result: string = '';\r\n        let year = value.getFullYear().toString();\r\n        let month = String(value.getMonth() + 1);\r\n        let day = String(value.getDay());\r\n        switch (dateFormat) {\r\n            case 'ymd':\r\n                result = \"\".concat(year, seperator, month, seperator, day)\r\n                break;\r\n            case 'dmy':\r\n                result = \"\".concat(day, seperator, month, seperator, year)\r\n                break;\r\n            case 'mdy':\r\n                result = \"\".concat(month, seperator, day, seperator, year)\r\n                break;\r\n        }\r\n        return result;\r\n    }\r\n}\r\n","import { FormArray } from \"@angular/forms\";\r\n\r\nimport { PATCH, VALUE_CHANGED_SYNC } from \"../const/app.const\";\r\nimport { ResetFormType } from \"../enums/reset-type\";\r\nimport { ObjectMaker } from '../util/object-maker';\r\nimport { clone, isMatched } from './entity';\r\n\r\nconst PROP_ARRAY: string = \"propArray\";\r\n\r\nexport class RxFormArray extends FormArray {\r\n    private _baseValue?: any[];\r\n    private _isModified: boolean = false;\r\n    private _modified: any[] = [];\r\n\r\n    constructor(private arrayObject: any[], controls: any, validatorOrOpts?: any, asyncValidator?: any, private arrayConfig?: { allowMaxIndex?: number, messageKey?: string }) {\r\n        super(controls, validatorOrOpts, asyncValidator);\r\n        this.cloneObject(arrayObject);\r\n    }\r\n\r\n    get isModified() {\r\n        return this._isModified;\r\n    }\r\n\r\n    override push(control: any, options: { emitEvent?: boolean, isAddedInstance: boolean } = { isAddedInstance: false }) {\r\n        let formGroup: any = this.root;\r\n        if (this.arrayObject)\r\n            if (control.modelInstance) {\r\n                if (!options.isAddedInstance) {\r\n                    this.arrayObject.push(control.modelInstance);\r\n                }\r\n                else {\r\n                    this.arrayObject[this.arrayObject.length] = control.modelInstance;\r\n                }\r\n            }\r\n\r\n        super.push(control);\r\n        if (formGroup[VALUE_CHANGED_SYNC]) {\r\n            formGroup.valueChangedSync();\r\n        }\r\n\r\n        this.patch()\r\n        this.checkValidation()\r\n    }\r\n\r\n    patch() {\r\n        this.checkModification();\r\n        if (this.parent) {\r\n            (this.parent as any)[PATCH]();\r\n        }\r\n    }\r\n\r\n    resetForm(options?: {\r\n        index: number,\r\n        groupOption: {\r\n            resetType?: ResetFormType,\r\n            with?: string[],\r\n            value?: { [key: string]: any }\r\n        },\r\n        pushFunction: (value: Object) => boolean;\r\n    }) {\r\n        if (options && options.index >= 0 && options.groupOption) {\r\n            (<any>this.controls[options.index]).resetForm(options.groupOption)\r\n        } else {\r\n            for (var i = 0; i < this._baseValue!.length; i++) {\r\n                if (this.controls[i] !== undefined) {\r\n                    (<any>this.controls[i]).resetForm({ value: (this._baseValue as any)[i] });\r\n                }\r\n                else {\r\n                    if (options && options.pushFunction) {\r\n                        let formGroup = options.pushFunction((this._baseValue as any)[i]);\r\n                        this.push(formGroup);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    commit() {\r\n        this._baseValue = []\r\n        for (let formGroup of this.controls) {\r\n            (<any>formGroup).commit();\r\n            this._baseValue.push(clone(formGroup.value));\r\n        }\r\n\r\n        this.patch();\r\n    }\r\n\r\n\r\n    override removeAt(index: number, options: { emitEvent?: boolean, isRemovedInstance?: boolean } = { isRemovedInstance: false }) {\r\n        let formGroup: any = this.root;\r\n        if (!options.isRemovedInstance) {\r\n            this.arrayObject.splice(index, 1);\r\n        }\r\n        else {\r\n            for (var i = index; i < this.arrayObject.length - 1; i++) {\r\n                this.arrayObject[i] = this.arrayObject[i + 1];\r\n            }\r\n\r\n            this.arrayObject.pop();\r\n        }\r\n\r\n\r\n        super.removeAt(index, options);\r\n        if (formGroup[VALUE_CHANGED_SYNC]) {\r\n            formGroup.valueChangedSync();\r\n        }\r\n\r\n        this.patch()\r\n        this.checkValidation();\r\n    }\r\n\r\n    private checkValidation() {\r\n        setTimeout(() => {\r\n            if (this.arrayConfig != undefined && this.arrayConfig.allowMaxIndex && this.length > this.arrayConfig.allowMaxIndex)\r\n                this.setErrors(ObjectMaker.toJson(PROP_ARRAY, this.arrayConfig, [this.length, this.arrayConfig.allowMaxIndex]));\r\n            else if (this.errors && this.errors[PROP_ARRAY])\r\n                delete this.errors[PROP_ARRAY];\r\n        })\r\n    }\r\n\r\n    private checkModification() {\r\n        this._isModified = !(this._baseValue!.length == this.controls.length);\r\n        if (!this._isModified)\r\n            for (var i = 0; i < this.controls.length; i++) {\r\n                this._isModified = isMatched(this._baseValue![i], this.controls[i].value)\r\n                if (this._isModified) {\r\n                    break;\r\n                }\r\n            }\r\n    }\r\n\r\n    private cloneObject(value: any[]) {\r\n        this._baseValue = [];\r\n        for (let row of value) {\r\n            this._baseValue.push(clone(row));\r\n        }\r\n    }\r\n\r\n\r\n}\r\n","import { AbstractControl, FormArray, FormGroup } from \"@angular/forms\";\r\nimport { NumericValueType } from '../enums';\r\nimport { RxFormArray } from \"../services/rx-form-array\";\r\nimport { ReactiveFormConfig } from \"./reactive-form-config\";\r\n\r\nconst MODEL_INSTANCE_VALUE = \"modelInstanceValue\";\r\n\r\nexport class ApplicationUtil {\r\n\t/**\r\n\t * Gets the value of the parent control object\r\n\t * @param control \r\n\t * @returns \r\n\t */\r\n\tpublic static getParentObjectValue(control: AbstractControl): { [key: string]: any } {\r\n\t\treturn control.parent ? this.parentObjectValue(control.parent)?.value : {};\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the value of the prant model instance\r\n\t * @param control \r\n\t * @returns \r\n\t */\r\n\tpublic static getParentModelInstanceValue(control: AbstractControl): { [key: string]: any } {\r\n\t\treturn control.parent ? (this.parentObjectValue(control.parent) as any)[MODEL_INSTANCE_VALUE] : {};\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the root control of the specified control\r\n\t * @param control \r\n\t * @returns \r\n\t */\r\n\tpublic static getRootFormGroup(control: AbstractControl): FormGroup {\r\n\t\treturn control.parent ? this.getRootFormGroup(control.parent) : <FormGroup>control;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets parent control\r\n\t * @param control \r\n\t * @returns \r\n\t */\r\n\tprivate static getParentControl(control: AbstractControl) {\r\n\t\treturn control.parent ? this.parentObjectValue(control.parent) : control;\r\n\t}\r\n\r\n\tpublic static getFormControlName(control: AbstractControl) {\r\n\t\tlet controlName: string = '';\r\n\t\tif (control.parent) {\r\n\t\t\tfor (var formControlName in control.parent.controls) {\r\n\t\t\t\tif ((control.parent.controls as any)[formControlName] == control) {\r\n\t\t\t\t\tcontrolName = formControlName;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn controlName;\r\n\t}\r\n\r\n\tpublic static getParentFormArray(control: AbstractControl): FormArray | null {\r\n\t\tif (control.parent && !(control.parent instanceof FormArray || control.parent instanceof RxFormArray)) {\r\n\t\t\tlet parent = this.getParentFormArray(control.parent)\r\n\t\t\treturn parent;\r\n\t\t}\r\n\r\n\t\treturn control.parent as FormArray;\r\n\t}\r\n\r\n\tpublic static toLower(value: any) {\r\n\t\tif (value)\r\n\t\t\treturn String(value).toLowerCase().trim();\r\n\t\treturn value;\r\n\t}\r\n\r\n\tpublic static getControl(fieldName: string, formGroup: FormGroup) {\r\n\t\tlet splitText = fieldName.split('.');\r\n\t\tif (splitText.length > 1) {\r\n\t\t\tvar formControl: any = formGroup;\r\n\t\t\tsplitText.forEach((name, index) => { formControl = formControl.controls[name] })\r\n\t\t\treturn formControl;\r\n\t\t} else\r\n\t\t\treturn formGroup.controls[fieldName];\r\n\r\n\t}\r\n\r\n\tpublic static getFormControl(fieldName: string, control: AbstractControl) {\r\n\t\tlet splitText = fieldName.split('.');\r\n\t\tif (splitText.length > 1 && control.parent) {\r\n\t\t\tvar formControl: any = this.getParentControl(control);\r\n\t\t\tsplitText.forEach((name, index) => { formControl = formControl.controls[name] })\r\n\t\t\treturn formControl;\r\n\t\t}\r\n\t\treturn (control.parent) ? control.parent.get([fieldName]) : undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets parent controil recursively\r\n\t * @param control \r\n\t * @returns \r\n\t */\r\n\tprivate static parentObjectValue(control: FormGroup | FormArray): FormGroup | FormArray {\r\n\t\treturn control?.parent ? this.parentObjectValue(control.parent) : control;\r\n\t}\r\n\r\n\tpublic static isNumeric(value: any) {\r\n\t\treturn (value - parseFloat(value) + 1) >= 0;\r\n\t}\r\n\r\n\tpublic static notEqualTo(primaryValue: any, secondaryValue: any) {\r\n\t\tlet firstValue = (primaryValue === undefined || primaryValue === null) ? \"\" : primaryValue;\r\n\t\tlet secondValue = (secondaryValue === undefined || secondaryValue === null) ? \"\" : secondaryValue;\r\n\t\tif (firstValue instanceof Date && secondValue instanceof Date)\r\n\t\t\treturn +firstValue != +secondValue;\r\n\t\treturn (firstValue != secondValue)\r\n\t}\r\n\r\n\tpublic static numericValidation(allowDecimal: boolean, acceptValue: NumericValueType) {\r\n\t\tlet decimalSymbol: string;\r\n\t\tif (ReactiveFormConfig && ReactiveFormConfig.number) {\r\n\t\t\tdecimalSymbol = (ReactiveFormConfig.json && ReactiveFormConfig.json[\"allowDecimalSymbol\"]) ? ReactiveFormConfig.json[\"allowDecimalSymbol\"] : ReactiveFormConfig.number[\"decimalSymbol\"];\r\n\t\t} else {\r\n\t\t\tdecimalSymbol = \".\";\r\n\t\t}\r\n\r\n\t\tacceptValue = (acceptValue == undefined) ? NumericValueType.PositiveNumber : acceptValue;\r\n\t\tlet regex = /^[0-9]+$/;\r\n\t\tswitch (acceptValue) {\r\n\t\t\tcase NumericValueType.PositiveNumber:\r\n\t\t\t\tregex = (!allowDecimal) ? /^[0-9]+$/ : (decimalSymbol == \".\" || decimalSymbol == undefined) ? /^[0-9\\.]+$/ : /^[0-9\\,]+$/;\r\n\t\t\t\tbreak;\r\n\t\t\tcase NumericValueType.NegativeNumber:\r\n\t\t\t\tregex = (!allowDecimal) ? /^[-][0-9]+$/ : (decimalSymbol == \".\" || decimalSymbol == undefined) ? /^[-][0-9\\.]+$/ : /^[-][0-9\\,]+$/;\r\n\t\t\t\tbreak;\r\n\t\t\tcase NumericValueType.Both:\r\n\t\t\t\tregex = (!allowDecimal) ? /^[-|+]?[0-9]+$/ : (decimalSymbol == \".\" || decimalSymbol == undefined) ? /^[-|+]?[0-9\\.]+$/ : /^[-|+]?[0-9\\,]+$/;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn regex;\r\n\t}\r\n\r\n\tpublic static configureControl(control: any, config: any, type: string) {\r\n\t\tif (!control.validatorConfig) {\r\n\t\t\tlet jObject: any = {};\r\n\t\t\tjObject[type] = config;\r\n\t\t\tObject.assign(control, { validatorConfig: jObject })\r\n\t\t} else {\r\n\t\t\tcontrol.validatorConfig[type] = config;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static lowerCaseWithTrim(value: string) {\r\n\t\treturn typeof value === \"string\" ? value.toLowerCase().trim() : String(value).toLowerCase().trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Check if a value is an object\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tpublic static isObject(value: any): boolean {\r\n\t\treturn Object.prototype.toString.call(value) === '[object Object]';\r\n\t}\r\n\r\n\t/**\r\n\t * Check if a value is an object\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tpublic static isArray(value: any): boolean {\r\n\t\treturn Array.isArray(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Clones the specified object value\r\n\t * @param value \r\n\t * @returns \r\n\t */\r\n\tpublic static cloneValue(value: any): any {\r\n\t\treturn ApplicationUtil.isObject(value) ? ApplicationUtil.isArray(value) ? [...value] : { ...value } : value;\r\n\t}\r\n}\r\n","import { FormArray, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { ResetFormType } from \"../enums/reset-type\";\r\n\r\nexport function isResetControl(controlName: string, control: any, options?: {\r\n    resetType?: ResetFormType,\r\n    with?: string[],\r\n    value?: { [key: string]: any }\r\n}) {\r\n    let isReset: boolean = true;\r\n    if (options) {\r\n        isReset = false;\r\n        if (options.resetType)\r\n            switch (options.resetType) {\r\n                case ResetFormType.ControlsOnly:\r\n                    isReset = control instanceof FormControl;\r\n                    break;\r\n                case ResetFormType.ControlsAndFormGroupsOnly:\r\n                    isReset = control instanceof FormControl || control instanceof FormGroup;\r\n                    break;\r\n                case ResetFormType.FormGroupsOnly:\r\n                    isReset = control instanceof FormGroup;\r\n                    break;\r\n                case ResetFormType.FormArraysOnly:\r\n                    isReset = control instanceof FormArray;\r\n                    break;\r\n                case ResetFormType.DefinedPropsOnly:\r\n                    isReset = options.value ? Object.keys(options.value).indexOf(controlName) != -1 : false;\r\n                    break;\r\n                default:\r\n                    isReset = true;\r\n                    break;\r\n            }\r\n        if (!isReset && options.with)\r\n            isReset = options.with.filter(x => x.split('.')[0] == controlName.split('.')[0])[0] !== undefined;\r\n        if (!isReset && options.value && (options.resetType === undefined || options.resetType !== ResetFormType.DefinedPropsOnly))\r\n            isReset = true;\r\n    }\r\n    return isReset;\r\n}\r\n\r\nexport function getNestedOptions(controlName: string, options?: { resetType?: ResetFormType, with?: string[], value?: { [key: string]: any } }) {\r\n    if (options) {\r\n        let jObjectOptions: {\r\n            resetType?: ResetFormType,\r\n            with?: string[],\r\n            value?: { [key: string]: any }\r\n        } = {};\r\n\r\n        if (options.resetType) {\r\n            jObjectOptions.resetType = (options.resetType == ResetFormType.FormGroupsOnly || options.resetType == ResetFormType.FormArraysOnly) ? ResetFormType.ControlsOnly : options.resetType;\r\n        }\r\n\r\n        if (options.with) {\r\n            let nestedControls = options.with.filter(t => t.split('.')[0] == controlName);\r\n            let controlNames = nestedControls.map(x => {\r\n                let splitControls = x.split('.');\r\n                splitControls.splice(0, 1);\r\n                return splitControls.join('.');\r\n            });\r\n\r\n            jObjectOptions.with = controlNames;\r\n        }\r\n        if (options.value && options.value[controlName]) {\r\n            jObjectOptions.value = options.value[controlName];\r\n        }\r\n\r\n        return Object.keys(jObjectOptions).length > 0 ? jObjectOptions : undefined;\r\n    }\r\n\r\n    return undefined;\r\n}","import { defaultContainer } from '../core/default-container'; /* Importing defaultContainer from 'defaultContainer' module */\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { clone, merge } from '../services/entity'; /* Importing clone and merge functions from 'entity' module */\r\n\r\n/**\r\n * Function to provide an instance of a given function with optional entity object.\r\n * @param instanceFunc The function to provide an instance of.\r\n * @param entityObject Optional entity object.\r\n * @returns An instance container.\r\n */\r\nexport function instanceProvider(instanceFunc: any, entityObject?: any): InstanceContainer {\r\n    /* Getting an instance from the defaultContainer */\r\n    let instance: any = defaultContainer.get(instanceFunc);\r\n\r\n    /* Setting the prototype based on the entityObject or instanceFunc */\r\n    let prototype: any = entityObject ? entityObject.__proto__ : getInstance(instanceFunc, []).__proto__;\r\n\r\n    /* Checking if prototype's prototype exists */\r\n    if (prototype.__proto__) {\r\n\r\n        /* Initializing loop flag */\r\n        let isLoop = false;\r\n        do {\r\n            /* Checking if prototype's prototype is not Object */\r\n            isLoop = prototype.__proto__.constructor != Object;\r\n            if (isLoop) {\r\n                /* Getting extendClassInstance from defaultContainer */\r\n                let extendClassInstance: any = defaultContainer.get(prototype.__proto__.constructor);\r\n\r\n                /* Cloning instance */\r\n                var instanceClone = clone(instance);\r\n\r\n                /* Cloning extendClassInstance */\r\n                var extendClassInstanceClone = clone(extendClassInstance);\r\n\r\n                /* Start: Removing properties from extendClassInstanceClone.properties that exist in instanceClone.properties */\r\n                instanceClone.properties?.forEach((property: any) => {\r\n                    /* Find the index of the property in extendClassInstanceClone */\r\n                    const index = extendClassInstanceClone.properties?.findIndex((p: any) => p.name === property.name);\r\n                    /* If the property exists in extendClassInstanceClone, remove it */\r\n                    if (index !== -1) {\r\n                        extendClassInstanceClone.properties?.splice(index, 1);\r\n                    }\r\n                });\r\n\r\n                /* Merge instanceClone with modified extendClassInstanceClone */\r\n                instance = merge(instanceClone, extendClassInstanceClone)\r\n                prototype = prototype.__proto__;\r\n            }\r\n        } while (isLoop)\r\n    }\r\n\r\n    return instance;\r\n}\r\n\r\n/**\r\n * Function to get an instance of a model with object arguments.\r\n * @param model The model to instantiate.\r\n * @param objectArguments Arguments for the model instantiation.\r\n * @returns The instantiated class instance.\r\n */\r\nexport function getInstance(model: any, objectArguments: any[]) {\r\n    let classInstance = Object.create(model.prototype)\r\n    try {\r\n        /* Try to apply arguments to the model */\r\n        model.apply(classInstance, objectArguments);\r\n    } catch (ex) {\r\n        /* If applying arguments fails, use Reflect.construct */\r\n        classInstance = Reflect.construct(model, objectArguments);\r\n    }\r\n\r\n    return classInstance;\r\n}\r\n","import { AbstractControl, FormGroup } from \"@angular/forms\";\r\nimport { MODEL_INSTANCE, RXCODE } from \"../const/app.const\";\r\nimport { OBJECT_PROPERTY } from \"../const/validator.const\";\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { instanceProvider } from \"../util/instance-provider.function\";\r\n\r\n/**\r\n * Provides functionality for disabling form controls based on decorator configuration.\r\n */\r\nexport class DisableProvider {\r\n\r\n    /**\r\n     * Initializes a new instance of the DisableProvider class.\r\n     * @param decoratorType The type of decorator.\r\n     * @param entityObject The entity object associated with the decorator.\r\n     */\r\n    constructor(private decoratorType: string, private entityObject: { [key: string]: any }) { }\r\n\r\n    /**\r\n     * Gets the name of the form group associated with the provided form control.\r\n     * @param currentFormGroup The current form group.\r\n     * @returns The name of the form group.\r\n     */\r\n    public getFormGroupName(currentFormGroup: FormGroup): string {\r\n        /* Initialize keyName as an empty string */\r\n        let keyName = '';\r\n\r\n        /* Check if the currentFormGroup has a parent */\r\n        if (currentFormGroup.parent) {\r\n            /* Iterate over the control names of the parent FormGroup */\r\n            for (var controlName of Object.keys(currentFormGroup.parent.controls)) {\r\n                /* Check if the current control is the same as the currentFormGroup */\r\n                if ((currentFormGroup.parent.controls as any)[controlName] == currentFormGroup) {\r\n                    /* If it matches, assign the controlName to keyName and exit the loop */\r\n                    keyName = controlName;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        /* Return the keyName */\r\n        return keyName;\r\n\r\n    }\r\n\r\n    /**\r\n     * Processes disabling based on zero arguments.\r\n     * @param control The form control.\r\n     * @param columnName The name of the column.\r\n     * @returns An array of disabled columns.\r\n     */\r\n    public zeroArgumentProcess(control: AbstractControl, columnName: string) {\r\n        /* Initialize disabledColumns array */\r\n        let disabledColumns: any[] = [];\r\n\r\n        /* Add disabled columns from the parent FormGroup */\r\n        this.getDisabledColumns(<FormGroup>control.parent, `${columnName}${RXCODE}0`, false).forEach(t => disabledColumns.push(t));\r\n\r\n        /* Get the top control path */\r\n        let path = this.topControlPath(control, columnName);\r\n\r\n        /* Split the path into segments */\r\n        let splitPath = path.split(\".\");\r\n\r\n        /* Check if the path has multiple segments */\r\n        if (splitPath.length > 1) {\r\n            /* Get the root form group */\r\n            let rootFormGroup = ApplicationUtil.getRootFormGroup(control);\r\n\r\n            /* Add disabled columns from the root form group */\r\n            this.getDisabledColumns(rootFormGroup, `${path}${RXCODE}0`, true).forEach(t => disabledColumns.push(t));\r\n\r\n            /* Initialize controlPath */\r\n            let controlPath: string = '';\r\n\r\n            /* Iterate through the segments of the path */\r\n            for (var i = 0; i < splitPath.length - 2; i++) {\r\n                let controlName = splitPath[i];\r\n\r\n                /* Update controlPath */\r\n                controlPath = `${path.replace(`${controlName}.`, '')}${RXCODE}-0`;\r\n\r\n                /* Check if the control exists in the root form group */\r\n                if (rootFormGroup.controls[controlName]) {\r\n                    /* Add disabled columns from the control */\r\n                    this.getDisabledColumns(<FormGroup>rootFormGroup.controls[controlName], controlPath, true, controlName).forEach(t => disabledColumns.push(t));\r\n\r\n                    /* Update rootFormGroup */\r\n                    rootFormGroup = <FormGroup>rootFormGroup.controls[controlName];\r\n                }\r\n            }\r\n        }\r\n\r\n        /* Return the disabledColumns array */\r\n        return disabledColumns;\r\n    }\r\n\r\n    /**\r\n     * Gets the disabled columns for the provided form group.\r\n     * @param formGroup The form group.\r\n     * @param columnName The name of the column.\r\n     * @param isRoot Indicates whether the form group is the root form group.\r\n     * @param pathName The path name.\r\n     * @returns An array of disabled columns.\r\n     */\r\n    private getDisabledColumns(formGroup: FormGroup, columnName: string, isRoot: Boolean, pathName: string = \"\") {\r\n        /* Check if the formGroup has a MODEL_INSTANCE */\r\n        if ((formGroup as any)[MODEL_INSTANCE]) {\r\n            /* Get the instance container using instanceProvider */\r\n            let instanceContainer = instanceProvider((formGroup as any)[MODEL_INSTANCE].constructor, this.entityObject);\r\n\r\n            /* Return the result of getChangeDetectionColumns */\r\n            return this.getChangeDetectionColumns(instanceContainer, columnName, isRoot, pathName);\r\n        }\r\n\r\n        /* If no MODEL_INSTANCE, return an empty array */\r\n        return [];\r\n    }\r\n\r\n    /**\r\n     * Gets the change detection columns for the provided instance container.\r\n     * @param instanceContainer The instance container.\r\n     * @param columnName The name of the column.\r\n     * @param isRoot Indicates whether the form group is the root form group.\r\n     * @param pathName The path name.\r\n     * @returns An array of change detection columns.\r\n     */\r\n    private getChangeDetectionColumns(instanceContainer: InstanceContainer, columnName: string, isRoot: Boolean, pathName: string = \"\") {\r\n        /* Initialize an array to store conditional disable controls */\r\n        let conditionalDisableControls: any[] = [];\r\n\r\n        /* Retrieve columns from instanceContainer based on decoratorType and columnName */\r\n        let columns = (instanceContainer.nonValidationDecorators as any)[this.decoratorType].changeDetection[columnName];\r\n\r\n        /* Check if columns exist */\r\n        if (columns) {\r\n            /* Iterate through columns */\r\n            columns.forEach((t: any) => {\r\n                /* Push control path, conditional expression, and isRoot status to conditionalDisableControls */\r\n                conditionalDisableControls.push({ controlPath: pathName ? `${pathName}.${t}` : t, conditionalExpression: (instanceContainer.nonValidationDecorators as any)[this.decoratorType].conditionalExpressions[t], isRoot: isRoot });\r\n            });\r\n        }\r\n\r\n        /* Return the array of conditional disable controls */\r\n        return conditionalDisableControls;\r\n    }\r\n\r\n    /**\r\n     * Gets the top control path based on the form control and column name.\r\n     * @param control The form control.\r\n     * @param columnName The name of the column.\r\n     * @returns The top control path.\r\n     */\r\n    private topControlPath(control: AbstractControl | FormGroup, columnName: string): string {\r\n        /* Check if the control has a parent */\r\n        if (control.parent) {\r\n            /* Retrieve the name of the parent form group */\r\n            let name = this.getFormGroupName((<FormGroup>control.parent))\r\n            if (name) {\r\n                /* Append the column name to the parent form group name */\r\n                columnName = `${name}.${columnName}`;\r\n\r\n                /* Recursively call the topControlPath function with the parent control and the updated column name */\r\n                return this.topControlPath(control.parent, columnName);\r\n            }\r\n        }\r\n\r\n        return columnName;\r\n    }\r\n\r\n    /**\r\n     * Retrieves the disabled expressions for child controls within the provided form group.\r\n     * @param formGroup The form group.\r\n     * @param columnName The name of the column.\r\n     * @param path The path for the controls.\r\n     * @returns An array of disabled expressions for child controls.\r\n     */\r\n    public childControlDisabledExpression(formGroup: FormGroup, columnName: string, path: string = \"\"): any[] {\r\n        /* Initialize an array to store disabled columns */\r\n        let disabledColumns: any[] = [];\r\n\r\n        /* Check if the form group has a model instance */\r\n        if ((formGroup as any)[MODEL_INSTANCE]) {\r\n            /* Get the instance container for the model */\r\n            let instanceContainer = defaultContainer.get((formGroup as any)[MODEL_INSTANCE].constructor);\r\n            if (instanceContainer) {\r\n                /* Iterate through the change detection columns and push them to the disabledColumns array */\r\n                this.getChangeDetectionColumns(instanceContainer, columnName, true, path).forEach(t => disabledColumns.push(t));\r\n\r\n                /* Filter properties of type OBJECT_PROPERTY */\r\n                var props = instanceContainer.properties?.filter(t => t.propertyType == OBJECT_PROPERTY);\r\n                props?.forEach(t => {\r\n                    /* Check if the form group has controls for the property */\r\n                    if (formGroup.controls[t.name]) {\r\n                        /* Get the disabled columns for the nested form group */\r\n                        let columns = this.getDisabledColumns(<FormGroup>formGroup.controls[t.name], columnName, true, path ? `${path}.${t.name}` : `${t.name}`);\r\n                        columns.forEach(x => disabledColumns.push(x));\r\n\r\n                        /* Recursively call childControlDisabledExpression for nested form groups */\r\n                        this.childControlDisabledExpression((<FormGroup>formGroup.controls[t.name]), columnName, path ? `${path}.${t.name}` : `${t.name}`).forEach(y => disabledColumns.push(y))\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        /* Return the array of disabled columns */\r\n        return disabledColumns;\r\n    }\r\n\r\n    /**\r\n     * Processes disabling based on one argument.\r\n     * @param control The form control or form group.\r\n     * @param columnName The name of the column.\r\n     * @returns An array of disabled columns.\r\n     */\r\n    public oneArgumentProcess(control: AbstractControl | FormGroup, columnName: string): any[] {\r\n        /* Get the top control path */\r\n        let path = this.topControlPath(control, columnName);\r\n\r\n        /* Get the root form group */\r\n        let rootFormGroup = ApplicationUtil.getRootFormGroup(control);\r\n\r\n        /* Get the child columns */\r\n        let childColumns = this.childControlDisabledExpression(rootFormGroup, path);\r\n\r\n        /* Return the child columns */\r\n        return childColumns;\r\n    }\r\n}","import { ApplicationUtil } from './app-util';\r\nimport { ReactiveFormConfig } from \"./reactive-form-config\";\r\n\r\nconst ISO_DATE_REGEX = /^(?:[\\+-]?\\d{4}(?!\\d{2}\\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\\1(?:[12]\\d|0[1-9]|3[01]))?|W(?:[0-4]\\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[1-6])))(?:[T\\s](?:(?:(?:[01]\\d|2[0-3])(?:(:?)[0-5]\\d)?|24\\:?00)(?:[\\.,]\\d+(?!:))?)?(?:\\2[0-5]\\d(?:[\\.,]\\d+)?)?(?:[zZ]|(?:[\\+-])(?:[01]\\d|2[0-3]):?(?:[0-5]\\d)?)?)?)?$/;\r\n\r\nexport class DateProvider {\r\n\r\n    isDate(value: any): Boolean {\r\n        return value instanceof Date && !isNaN(value.valueOf());\r\n    }\r\n\r\n    private getRegex(dateFormat: string): RegExp {\r\n        var regExp: string = '';\r\n\r\n        switch (dateFormat) {\r\n            case 'ymd':\r\n                regExp = \"^(?:[0-9]{4})-(1[0-2]|0?[1-9])-(3[01]|[12][0-9]|0?[1-9])$\";\r\n                break;\r\n            case 'dmy':\r\n                regExp = \"^(3[01]|[12][0-9]|0?[1-9])-(1[0-2]|0?[1-9])-(?:[0-9]{2})?[0-9]{2}$\";\r\n                break;\r\n            case 'mdy':\r\n                regExp = \"^(1[0-2]|0?[1-9])-(3[01]|[12][0-9]|0?[1-9])-(?:[0-9]{2})?[0-9]{2}$\";\r\n                break;\r\n        }\r\n\r\n        return new RegExp(regExp);\r\n    }\r\n\r\n    regex(config: any) {\r\n        var regExp: RegExp;\r\n        if (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"internationalization\"] && ReactiveFormConfig.json[\"internationalization\"].dateFormat && ReactiveFormConfig.json[\"internationalization\"].seperator)\r\n            regExp = this.getRegex(config.dateFormat || ReactiveFormConfig.json[\"internationalization\"].dateFormat)\r\n        else\r\n            regExp = (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].dateFormat) ? this.getRegex(config.dateFormat || ReactiveFormConfig.json[\"baseConfig\"].dateFormat) : this.getRegex(config.dateFormat || \"mdy\");\r\n        return regExp;\r\n    }\r\n\r\n    getDate(value: string | Date, configDateFormat?: string, isBaseFormat: boolean = false): Date {\r\n        let year: number = 0;\r\n        let month: number = 0;\r\n        let day: number = 0;\r\n\r\n        if (!this.isDate(value)) {\r\n            let seperator: string;\r\n            let dateFormat: string;\r\n            if (ISO_DATE_REGEX.test(<string>value)) {\r\n                return new Date(value);\r\n            } else {\r\n                seperator = ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].seperator ? ReactiveFormConfig.json[\"baseConfig\"].seperator : \"/\";\r\n                dateFormat = configDateFormat || ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].dateFormat ? ReactiveFormConfig.json[\"baseConfig\"].dateFormat : \"mdy\";\r\n            }\r\n\r\n            if (!isBaseFormat && ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"internationalization\"] && ReactiveFormConfig.json[\"internationalization\"].dateFormat && ReactiveFormConfig.json[\"internationalization\"].seperator) {\r\n                seperator = ReactiveFormConfig.json[\"internationalization\"].seperator;\r\n                dateFormat = configDateFormat || ReactiveFormConfig.json[\"internationalization\"].dateFormat;\r\n            }\r\n            switch (dateFormat) {\r\n                case 'ymd':\r\n                    [year, month, day] = (<String>value).split(seperator).map((val: string) => +val);\r\n                    break;\r\n                case 'dmy':\r\n                    [day, month, year] = (<String>value).split(seperator).map((val: string) => +val);\r\n                    break;\r\n                case 'mdy':\r\n                    [month, day, year] = (<String>value).split(seperator).map((val: string) => +val);\r\n                    break;\r\n            }\r\n            return new Date(year, month - 1, day);\r\n        } else\r\n            return <Date>value;\r\n    }\r\n\r\n    isValid(value: string | Date, config: any): Boolean {\r\n        if (config && config.isValid) {\r\n            return config.isValid(value);\r\n        }\r\n\r\n        if (typeof value == \"string\") {\r\n            if (config && config.allowISODate && ISO_DATE_REGEX.test(<string>value)) {\r\n                return true;\r\n            }\r\n\r\n            let seperator = '/'\r\n            if (ReactiveFormConfig && ReactiveFormConfig.json && ReactiveFormConfig.json[\"baseConfig\"] && ReactiveFormConfig.json[\"baseConfig\"].seperator) {\r\n                seperator = ReactiveFormConfig.json[\"baseConfig\"].seperator;\r\n            }\r\n\r\n            if (ReactiveFormConfig.json && ReactiveFormConfig.json[\"internationalization\"] && ReactiveFormConfig.json[\"internationalization\"].seperator) {\r\n                seperator = ReactiveFormConfig.json[\"internationalization\"].seperator;\r\n            }\r\n\r\n            if (value.split(seperator).length !== 3) {\r\n                return false;\r\n            }\r\n\r\n            value = value.replace(seperator, '-').replace(seperator, '-');\r\n\r\n            return this.regex(config).test(value);\r\n        } else {\r\n            return this.isDate(value);\r\n        }\r\n    }\r\n\r\n    getConfigDateValue(config: any) {\r\n        let date = config.value;\r\n        if (config.value && typeof config.value == \"string\") {\r\n            date = this.getDate(config.value, config.dateFormat, true);\r\n        }\r\n\r\n        return date;\r\n    }\r\n\r\n    getCompareDate(config: any, control: any) {\r\n        let date = this.getConfigDateValue(config);\r\n        if (config.fieldName) {\r\n            let checkControl: any = ApplicationUtil.getFormControl(config.fieldName, control);\r\n            if (checkControl && checkControl.value) {\r\n                date = this.getDate(checkControl.value, config.dateFormat)\r\n            }\r\n        }\r\n\r\n        return date;\r\n    }\r\n}\r\n","import { SanitizeConfig } from '../models/config/sanitize-config';\r\nimport { ApplicationUtil } from './app-util';\r\nimport { DateProvider } from './date-provider';\r\nimport { ReactiveFormConfig } from \"./reactive-form-config\";\r\n\r\nfunction isNotBlank(value: any) {\r\n    return (value !== undefined && value !== null && value !== \"\");\r\n}\r\nfunction trim(value: any) {\r\n    if (isNotBlank(value))\r\n        if (typeof value === \"string\")\r\n            return value.trim();\r\n    return value;\r\n};\r\n\r\nfunction ltrim(value: any) {\r\n    if (isNotBlank(value))\r\n        if (typeof value === \"string\")\r\n            return value.replace(/^\\s+/g, '');\r\n    return value;\r\n}\r\n\r\nfunction rtrim(value: any) {\r\n    if (isNotBlank(value))\r\n        if (typeof value === \"string\")\r\n            return value.replace(/\\s+$/g, '');\r\n    return value;\r\n}\r\n\r\nfunction blacklist(value: any, chars: String) {\r\n    if (isNotBlank(value))\r\n        if (typeof value === \"string\")\r\n            return value.replace(new RegExp('[$' + chars + ']+', 'g'), '');\r\n    return value;\r\n};\r\n\r\nfunction stripLow(value: any, keepNewLines: boolean) {\r\n    let chars: String = keepNewLines === true ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';\r\n    return blacklist(value, chars);\r\n}\r\n\r\nfunction toBoolean(value: any, strict: boolean) {\r\n    if (isNotBlank(value)) {\r\n        if (strict) {\r\n            return value === '1' || value === 'true';\r\n        }\r\n        return value !== '0' && value !== 'false' && value !== '';\r\n    }\r\n    return value;\r\n}\r\n\r\nfunction toFloat(value: any) {\r\n    if (isNotBlank(value)) {\r\n        var decimalSymbol = '.';\r\n        if (ReactiveFormConfig && ReactiveFormConfig.number) {\r\n            decimalSymbol = (ReactiveFormConfig.json && ReactiveFormConfig.json[\"allowDecimalSymbol\"]) ? ReactiveFormConfig.json[\"allowDecimalSymbol\"] : ReactiveFormConfig.number[\"decimalSymbol\"];\r\n        }\r\n        if (decimalSymbol == ',' && typeof value == \"string\")\r\n            value = value.replace(',', '.');\r\n        if (ApplicationUtil.isNumeric(value))\r\n            return parseFloat(value)\r\n    }\r\n\r\n    return null;\r\n}\r\nfunction toDouble(value: any) {\r\n    return toFloat(value)\r\n}\r\n\r\nfunction toInt(value: any, radix: number) {\r\n    if (isNotBlank(value)) {\r\n        if (ApplicationUtil.isNumeric(value)) {\r\n            return parseInt(value, radix || 10);\r\n        }\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\nfunction toString(value: any, radix: number) {\r\n    if (isNotBlank(value)) {\r\n        return String(value);\r\n    }\r\n\r\n    return value;\r\n}\r\nfunction whitelist(value: any, chars: string) {\r\n    if (isNotBlank(value)) {\r\n        if (typeof value === \"string\") {\r\n            return value.replace(new RegExp(`[^${chars}]+`, 'g'), '');\r\n        }\r\n    }\r\n\r\n    return value;\r\n}\r\n\r\nfunction toDate(value: any, config: any) {\r\n    var dateProvider = new DateProvider();\r\n    if (isNotBlank(value)) {\r\n        if (typeof value === \"string\" && dateProvider.isValid(value, config)) {\r\n            value = dateProvider.getDate(value);\r\n            return value;\r\n        }\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\nfunction escape(value: string) {\r\n    if (isNotBlank(value)) {\r\n        return (value.replace(/&/g, '&amp;')\r\n            .replace(/\"/g, '&quot;')\r\n            .replace(/'/g, '&#x27;')\r\n            .replace(/</g, '&lt;')\r\n            .replace(/>/g, '&gt;')\r\n            .replace(/\\//g, '&#x2F;')\r\n            .replace(/\\\\/g, '&#x5C;')\r\n            .replace(/`/g, '&#96;'));\r\n    }\r\n\r\n    return value;\r\n}\r\n\r\nfunction prefix(value: any, text: string) {\r\n    if (isNotBlank(value)) {\r\n        return `${text}${value}`;\r\n    }\r\n\r\n    return value;\r\n}\r\n\r\nfunction suffix(value: any, text: string) {\r\n    if (isNotBlank(value)) {\r\n        return `${value}${text}`;\r\n    }\r\n\r\n    return value;\r\n}\r\n\r\nfunction sanitize(value: any, config: SanitizeConfig) {\r\n    return config.custom(value)\r\n}\r\n\r\nexport const SANITIZERS: { [key: string]: Function } = {\r\n    trim: trim,\r\n    ltrim: ltrim,\r\n    rtrim: rtrim,\r\n    blacklist: blacklist,\r\n    stripLow: stripLow,\r\n    toBoolean: toBoolean,\r\n    toDouble: toDouble,\r\n    toFloat: toFloat,\r\n    toInt: toInt,\r\n    'toString': toString,\r\n    whitelist: whitelist,\r\n    toDate: toDate,\r\n    escape: escape,\r\n    prefix: prefix,\r\n    suffix: suffix,\r\n    sanitize: sanitize\r\n}","import { AbstractControl, AbstractControlOptions, AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from \"@angular/forms\";\r\nimport { CONTROLS_ERROR, MESSAGE, VALUE_CHANGED_SYNC } from '../const';\r\nimport { MODEL_INSTANCE, PATCH, RXCODE } from \"../const/app.const\";\r\nimport { DECORATORS } from \"../const/decorators.const\";\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { DisableProvider } from '../domain/disable-provider';\r\nimport { ErrorMessageBindingStrategy } from \"../enums\";\r\nimport { DataSanitizer } from \"../models/data-sanitizer\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ReactiveFormConfig } from \"../util/reactive-form-config\";\r\nimport { SANITIZERS } from \"../util/sanitizers\";\r\n\r\nconst DIRTY: string = \"dirty\";\r\nconst TOUCHED: string = \"touched\";\r\nconst UNTOUCHED: string = \"untouched\";\r\nconst PRISTINE: string = \"pristine\";\r\nconst PENDING: string = \"pending\";\r\n\r\nexport class RxFormControl extends FormControl {\r\n    /**\r\n * Current language used for error message localization.\r\n * @type {string | undefined}\r\n */\r\n    private _language?: string;\r\n\r\n    /**\r\n     * The key or name of the control.\r\n     * @type {string}\r\n     */\r\n    private keyName: string;\r\n\r\n    /**\r\n     * Single string representation of the current error message.\r\n     * @type {string | undefined}\r\n     */\r\n    private _errorMessage?: string;\r\n\r\n    /**\r\n     * Array of error messages for the control.\r\n     * @type {string[]}\r\n     */\r\n    private _errorMessages: string[] = [];\r\n\r\n    /**\r\n     * Provider to determine if control should be disabled.\r\n     * @type {DisableProvider | undefined}\r\n     */\r\n    private _disableProvider?: DisableProvider;\r\n\r\n    /**\r\n     * Strategy to bind error messages.\r\n     * @type {ErrorMessageBindingStrategy}\r\n     */\r\n    private _errorMessageBindingStrategy: ErrorMessageBindingStrategy;\r\n\r\n    /**\r\n     * Optional function expression for custom error message logic.\r\n     * @type {Function | undefined}\r\n     */\r\n    private _messageExpression?: Function;\r\n\r\n    /**\r\n     * Optional function expression to assign CSS class names.\r\n     * @type {Function | undefined}\r\n     */\r\n    private _classNameExpression?: Function;\r\n\r\n    /**\r\n     * Indicates whether the message expression passed.\r\n     * @type {boolean}\r\n     */\r\n    private _isPassedExpression: Boolean = false;\r\n\r\n    /**\r\n     * Control properties dictionary, with boolean flags.\r\n     * @type {{ [key: string]: boolean } | undefined}\r\n     */\r\n    private _controlProp?: { [key: string]: boolean };\r\n\r\n    /**\r\n     * Class name control properties dictionary.\r\n     * @type {{ [key: string]: boolean } | undefined}\r\n     */\r\n    private _classNameControlProp?: { [key: string]: boolean };\r\n\r\n    /**\r\n     * The base value of the control.\r\n     * @type {any}\r\n     */\r\n    private _baseValue: any;\r\n\r\n    /**\r\n     * Flag indicating if the control value has been modified.\r\n     * @type {boolean}\r\n     */\r\n    private _isModified: boolean;\r\n\r\n    /**\r\n     * Flag indicating if the control is dirty.\r\n     * @type {boolean}\r\n     */\r\n    private _dirty: boolean = false;\r\n\r\n    /**\r\n     * Array of synchronous validator functions.\r\n     * @type {ValidatorFn[]}\r\n     */\r\n    private _validators: ValidatorFn[];\r\n\r\n    /**\r\n     * Array of asynchronous validator functions.\r\n     * @type {AsyncValidatorFn[]}\r\n     */\r\n    private _asyncValidators: AsyncValidatorFn[];\r\n\r\n    /**\r\n     * Backend error messages keyed by error name.\r\n     * @type {{ [key: string]: string }}\r\n     */\r\n    public backEndErrors: { [key: string]: string } = {};\r\n\r\n    /**\r\n     * Indicates if updating the control element's class should be performed.\r\n     * @type {boolean | Function | undefined}\r\n     */\r\n    public updateOnElementClass?: boolean | Function;\r\n\r\n    /**\r\n     * Optional pre-hook function executed before certain operations.\r\n     * @type {Function | undefined}\r\n     */\r\n    public preHook?: Function;\r\n\r\n    /**\r\n     * Optional post-hook function executed after certain operations.\r\n     * @type {Function | undefined}\r\n     */\r\n    public postHook?: Function;\r\n\r\n    /**\r\n     * Gets the array of error messages for the control.\r\n     * Updates the error messages if necessary based on the current errors and language.\r\n     * @type {string[]}\r\n     */\r\n    get errorMessages(): string[] {\r\n        if (!this._messageExpression) {\r\n            if (this._errorMessages.length == 0 && this.errors)\r\n                this.setControlErrorMessages();\r\n        }\r\n        else if (this._messageExpression && !this._isPassedExpression)\r\n            return [];\r\n        if (!this.errors && this._errorMessages.length > 0)\r\n            this.setControlErrorMessages();\r\n        if (this._language != this.getLanguage())\r\n            this.setControlErrorMessages();\r\n        return this._errorMessages;\r\n    }\r\n\r\n    /**\r\n     * Gets a single error message string for the control.\r\n     * Updates the error message if necessary based on the current errors and language.\r\n     * Returns undefined if no error message should be shown.\r\n     * @type {string | undefined}\r\n     */\r\n    get errorMessage(): string | undefined {\r\n        if (!this._messageExpression) {\r\n            if (this._errorMessage == undefined && this.errors) {\r\n                this.setControlErrorMessages();\r\n            }\r\n        }\r\n\r\n        else if (this._messageExpression && !this._isPassedExpression) {\r\n            return undefined;\r\n        }\r\n\r\n        if (!this.errors && this._errorMessage) {\r\n            this.setControlErrorMessages();\r\n        }\r\n\r\n        if (this._language != this.getLanguage()) {\r\n            this.setControlErrorMessages();\r\n        }\r\n\r\n        return this._errorMessage;\r\n    }\r\n\r\n    /**\r\n     * Gets the associated entity object.\r\n     * @type {any}\r\n     */\r\n    get entityObject(): any { return this._entityObject; }\r\n\r\n    /**\r\n     * Gets the base object for comparison or reset.\r\n     * @type {any}\r\n     */\r\n    get baseObject(): any { return this._baseObject; }\r\n\r\n    /**\r\n     * Constructor to initialize RxFormControl.\r\n     * @param formState Initial state or value of the control.\r\n     * @param validatorOrOpts Synchronous validators or control options.\r\n     * @param _entityObject Entity object associated with this control.\r\n     * @param _baseObject Base object for initial values or reset.\r\n     * @param controlName Name/key of this control.\r\n     * @param _sanitizers Array of data sanitizers to preprocess values.\r\n     */\r\n    constructor(\r\n        formState: any,\r\n        validatorOrOpts: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\r\n        private _entityObject: { [key: string]: any },\r\n        private _baseObject: { [key: string]: any },\r\n        controlName: string,\r\n        private _sanitizers: DataSanitizer[]\r\n    ) {\r\n        super(formState, validatorOrOpts)\r\n        this.defineErrorsProperty();\r\n        this._baseValue = formState === undefined ? null : this.getFormState(formState);\r\n        this._isModified = false;\r\n        this.keyName = controlName;\r\n        this._validators = (validatorOrOpts as AbstractControlOptions).validators as ValidatorFn[];\r\n        this._asyncValidators = (validatorOrOpts as AbstractControlOptions).asyncValidators as AsyncValidatorFn[];\r\n        this._errorMessageBindingStrategy = ReactiveFormConfig.get(\"reactiveForm.errorMessageBindingStrategy\") as ErrorMessageBindingStrategy;\r\n        if (this._sanitizers) {\r\n            var floatSanitizer = this._sanitizers.filter(t => t.name == \"toFloat\")[0]\r\n            if (floatSanitizer && this._baseValue && ReactiveFormConfig.number && ReactiveFormConfig.number[\"decimalSymbol\"] == \",\") {\r\n                let baseValue = String(this._baseValue);\r\n                if (baseValue.indexOf('.') != -1) {\r\n                    this._baseValue = baseValue.replace(\".\", ReactiveFormConfig.number[\"decimalSymbol\"]);\r\n                    super.setValue(this._baseValue);\r\n                }\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    private defineErrorsProperty() {\r\n        Object.defineProperty(this, \"errors\", {\r\n            configurable: true,\r\n            get() {\r\n                if (this._language && this._language != this.getLanguage() && this.validator) {\r\n                    this[\"errors\"] = this.validator(this)\r\n                }\r\n                return this._errors;\r\n            },\r\n            set(value) { this._errors = value; },\r\n        })\r\n    }\r\n\r\n    private getFormState(value: any) {\r\n        let baseValue = value\r\n        if (Array.isArray(value)) {\r\n            baseValue = [];\r\n            value.forEach(t => baseValue.push(t));\r\n        }\r\n        return baseValue;\r\n    }\r\n\r\n    get isModified() {\r\n        return this._isModified;\r\n    }\r\n\r\n    getValidators(): ValidatorFn[] {\r\n        return this.getValidatorSource(this._validators);\r\n    }\r\n\r\n    getAsyncValidators(): AsyncValidatorFn[] {\r\n        return this.getValidatorSource(this._asyncValidators);\r\n    }\r\n\r\n    private getValidatorSource(validators: any[]) {\r\n        if (validators)\r\n            return Array.isArray(validators) ? [...validators] : [validators]\r\n        return [];\r\n    }\r\n\r\n    override setValidators(newValidator: ValidatorFn | ValidatorFn[] | null) {\r\n        this._validators = newValidator as ValidatorFn[];\r\n        super.setValidators(newValidator);\r\n    }\r\n\r\n    override setAsyncValidators(newValidator: AsyncValidatorFn | AsyncValidatorFn[] | null): void {\r\n        this._asyncValidators = newValidator as AsyncValidatorFn[];\r\n        super.setAsyncValidators(newValidator);\r\n    }\r\n\r\n    override setValue(value: any, options?: {\r\n        dirty?: boolean;\r\n        updateChanged?: boolean;\r\n        onlySelf?: boolean;\r\n        emitEvent?: boolean;\r\n        isThroughDynamic?: boolean;\r\n    }): void {\r\n        (<any>this.parent).changing = true;\r\n        let parsedValue = this.getSanitizedValue(value)\r\n        if (options && options.dirty)\r\n            this._baseObject[this.keyName] = value;\r\n        this._entityObject[this.keyName] = parsedValue;\r\n        super.setValue(value, options);\r\n\r\n        this.bindError();\r\n        this.bindClassName();\r\n        this.executeExpressions();\r\n        this.callPatch();\r\n        if (options && !options.updateChanged && (this.root as any)[VALUE_CHANGED_SYNC]) {\r\n            (this.root as any)[VALUE_CHANGED_SYNC]();\r\n        }\r\n        (<any>this.parent).changing = false;\r\n    }\r\n\r\n    getControlValue() {\r\n        return this.getSanitizedValue(this.value);\r\n    }\r\n\r\n    bindError() {\r\n        if (this._messageExpression)\r\n            this._isPassedExpression = this.executeExpression(this._messageExpression, this);\r\n        this.setControlErrorMessages();\r\n        var t: any = this;\r\n        t[\"errors\"] = this.errors;\r\n    }\r\n\r\n    bindClassName() {\r\n        if (this.updateOnElementClass && typeof this.updateOnElementClass === \"function\") {\r\n            let className = this.executeExpression(this._classNameExpression!, this);\r\n            let updateElement = this.updateOnElementClass as Function;\r\n            updateElement(className);\r\n        }\r\n    }\r\n\r\n\r\n    setBackEndErrors(error: { [key: string]: string }) {\r\n        Object.keys(error).forEach(key => this.backEndErrors[key] = error[key]);\r\n        this.setControlErrorMessages();\r\n    }\r\n\r\n    clearBackEndErrors(errors?: { [key: string]: any }) {\r\n        if (!errors)\r\n            this.backEndErrors = {};\r\n        else\r\n            Object.keys(errors).forEach(t => delete this.backEndErrors[t]);\r\n        this.setControlErrorMessages();\r\n    }\r\n\r\n    override markAsTouched(opts?: {\r\n        onlySelf?: boolean;\r\n    }): void {\r\n        let currentState = this.touched;\r\n        super.markAsTouched(opts);\r\n        if (currentState != this.touched)\r\n            this.runControlPropChangeExpression([TOUCHED, UNTOUCHED])\r\n\r\n    }\r\n\r\n    override markAsUntouched(opts?: {\r\n        onlySelf?: boolean;\r\n    }): void {\r\n        let currentState = this.untouched;\r\n        super.markAsUntouched(opts);\r\n        if (currentState != this.untouched)\r\n            this.runControlPropChangeExpression([UNTOUCHED, TOUCHED])\r\n    }\r\n\r\n    override markAsDirty(opts?: {\r\n        onlySelf?: boolean;\r\n    }): void {\r\n        let currentState = this._dirty;\r\n        super.markAsDirty(opts);\r\n        this._dirty = true;\r\n        if (currentState != this._dirty)\r\n            this.runControlPropChangeExpression([DIRTY])\r\n    }\r\n\r\n    override markAsPristine(opts?: {\r\n        onlySelf?: boolean;\r\n    }): void {\r\n        let currentState = this.pristine;\r\n        super.markAsPristine(opts);\r\n        if (currentState != this.pristine)\r\n            this.runControlPropChangeExpression([PRISTINE])\r\n    }\r\n\r\n    override markAsPending(opts?: {\r\n        onlySelf?: boolean;\r\n        emitEvent?: boolean;\r\n    }): void {\r\n        let currentState = this.pending;\r\n        super.markAsDirty(opts);\r\n        if (currentState != this.pending)\r\n            this.runControlPropChangeExpression([PENDING])\r\n    }\r\n\r\n    runControlPropChangeExpression(propNames: string[]) {\r\n        propNames.forEach(name => {\r\n            if ((this._controlProp && this._messageExpression && this._controlProp[name]) || (!this._messageExpression && this.checkErrorMessageStrategy()))\r\n                this.bindError();\r\n            if (this._classNameControlProp && this._classNameControlProp[name])\r\n                this.bindClassName();\r\n        });\r\n    }\r\n\r\n    refresh() {\r\n        this.getMessageExpression(<FormGroup>this.parent, this.keyName);\r\n        this.bindConditionalControls(DECORATORS[\"disabled\"], \"_refDisableControls\");\r\n        this.bindConditionalControls(DECORATORS[\"error\"], \"_refMessageControls\");\r\n        this.bindConditionalControls(DECORATORS[\"elementClass\"], \"_refClassNameControls\");\r\n        this.executeExpressions();\r\n        this.bindError();\r\n    }\r\n\r\n    override  reset(value?: any, options: any = {}) {\r\n        if (value !== undefined)\r\n            this.setValue(value, options);\r\n        else\r\n            this.setValue(this.getFormState(this._baseValue), options);\r\n        this._dirty = false;\r\n    }\r\n\r\n    commit() {\r\n        this._baseValue = this.value;\r\n        this.callPatch();\r\n    }\r\n\r\n    private callPatch() {\r\n        this._isModified = this.getValue(this._baseValue) != this.getValue(this.value);\r\n        if (this.parent && (this.parent as any)[PATCH])\r\n            (this.parent as any)[PATCH](this.keyName);\r\n    }\r\n\r\n    private checkErrorMessageStrategy() {\r\n        let isBind: boolean = true;\r\n        switch (this._errorMessageBindingStrategy) {\r\n            case ErrorMessageBindingStrategy.OnSubmit:\r\n                isBind = (<any>this.parent).submitted;\r\n                break;\r\n            case ErrorMessageBindingStrategy.OnDirty:\r\n                isBind = this._dirty;\r\n                break;\r\n            case ErrorMessageBindingStrategy.OnTouched:\r\n                isBind = this.touched;\r\n                break;\r\n            case ErrorMessageBindingStrategy.OnDirtyOrTouched:\r\n                isBind = this._dirty || this.touched;\r\n                break;\r\n            case ErrorMessageBindingStrategy.OnDirtyOrSubmit:\r\n                isBind = this._dirty || (<any>this.parent).submitted;\r\n                break;\r\n            case ErrorMessageBindingStrategy.OnTouchedOrSubmit:\r\n                isBind = this.touched || (<any>this.parent).submitted;\r\n                break;\r\n            default:\r\n                isBind = true;\r\n        }\r\n        return isBind;\r\n    }\r\n\r\n    private executeExpressions() {\r\n        this.processExpression(\"_refDisableControls\", \"disabled\");\r\n        this.processExpression(\"_refMessageControls\", \"bindError\");\r\n        this.processExpression(\"_refClassNameControls\", \"bindClassName\");\r\n    }\r\n\r\n    private getMessageExpression(formGroup: FormGroup, keyName: string): void {\r\n        if ((formGroup as any)[MODEL_INSTANCE]) {\r\n            let instanceContainer = defaultContainer.get((formGroup as any)[MODEL_INSTANCE].constructor);\r\n            if (instanceContainer) {\r\n                this._messageExpression = (instanceContainer!.nonValidationDecorators!.error.conditionalExpressions as any)[keyName]\r\n                this._controlProp = instanceContainer!.nonValidationDecorators!.error.controlProp[this.keyName];\r\n                this._classNameExpression = (instanceContainer!.nonValidationDecorators!.elementClass.conditionalExpressions as any)[keyName];\r\n                this._classNameControlProp = instanceContainer!.nonValidationDecorators!.elementClass.controlProp[keyName];\r\n                if (this._classNameExpression)\r\n                    this.updateOnElementClass = true;\r\n            }\r\n\r\n        }\r\n    }\r\n\r\n    private getSanitizedValue(value: any) {\r\n        if (this._sanitizers) {\r\n            for (let sanitizer of this._sanitizers) {\r\n                value = SANITIZERS[sanitizer.name](value, sanitizer.config);\r\n            }\r\n        }\r\n        return value;\r\n    }\r\n\r\n    private bindConditionalControls(decoratorType: string, refName: string) {\r\n        this._disableProvider = new DisableProvider(decoratorType, this._entityObject);\r\n        (this as any)[refName] = this._disableProvider.zeroArgumentProcess(this, this.keyName);\r\n        this._disableProvider.oneArgumentProcess(this, `${this.keyName}${RXCODE}1`).forEach(t => (this as any)[refName].push(t));\r\n    }\r\n\r\n    private setControlErrorMessages() {\r\n        if ((!this._messageExpression && this.checkErrorMessageStrategy()) || this._isPassedExpression) {\r\n            this._errorMessages = [];\r\n            if (this.errors) {\r\n                Object.keys(this.errors).forEach(t => {\r\n                    if (this.parent) {\r\n                        (this.parent as any)[CONTROLS_ERROR][this.keyName] = this._errorMessage = this.getErrorMessage(this.errors!, t);\r\n                        if (!this._errorMessage) {\r\n                            let errorObject = ObjectMaker.toJson(t, undefined, (this.errors as any)[t] && (this.errors as any)[t][t] ? [(this.errors as any)[t][t]] : []);\r\n                            (this.parent as any)[CONTROLS_ERROR][this.keyName] = this._errorMessage = this.getErrorMessage(errorObject, t);\r\n                        }\r\n                    } else {\r\n                        this._errorMessage = this.getErrorMessage(this.errors!, t)\r\n                    }\r\n\r\n                    this._errorMessages.push(this._errorMessage!);\r\n                })\r\n            } else {\r\n                this._errorMessage = undefined;\r\n                if (this.parent) {\r\n                    (this.parent as any)[CONTROLS_ERROR][this.keyName] = undefined\r\n                    delete (this.parent as any)[CONTROLS_ERROR][this.keyName];\r\n                }\r\n            }\r\n            let backEndErrors = Object.keys(this.backEndErrors);\r\n            if (backEndErrors.length > 0)\r\n                backEndErrors.forEach(t => { this._errorMessages.push(this._errorMessage = this.backEndErrors[t]); })\r\n        } else {\r\n            this._errorMessages = [];\r\n            this._errorMessage = undefined;\r\n        }\r\n        this._language = this.getLanguage();\r\n\r\n    }\r\n\r\n    private getLanguage() {\r\n        return (ReactiveFormConfig.i18n && ReactiveFormConfig.i18n.language) ? ReactiveFormConfig.i18n.language : undefined;\r\n    }\r\n\r\n    private getErrorMessage(errorObject: { [key: string]: string }, keyName: string) {\r\n        if (errorObject[keyName] && (errorObject as any)[keyName][MESSAGE]) {\r\n            return (errorObject as any)[keyName][MESSAGE];\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    private processExpression(propName: string, operationType: string) {\r\n        if ((this as any)[propName])\r\n            for (var controlInfo of (this as any)[propName]) {\r\n                let control = controlInfo.isRoot ? ApplicationUtil.getControl(controlInfo.controlPath, ApplicationUtil.getRootFormGroup(this)) : ApplicationUtil.getFormControl(controlInfo.controlPath, this);\r\n                if (control) {\r\n                    if (operationType == \"disabled\") {\r\n                        let result = this.executeExpression(controlInfo.conditionalExpression, control);\r\n                        if (result)\r\n                            control.disable()\r\n                        else\r\n                            control.enable();\r\n                    } else if (operationType == \"bindError\")\r\n                        control.bindError();\r\n                    else if (operationType == \"bindClassName\")\r\n                        control.bindClassName();\r\n\r\n                }\r\n            }\r\n    }\r\n\r\n    private executeExpression(expression: Function, control: AbstractControl): Boolean {\r\n        return expression.call(\r\n            (control.parent as any)[MODEL_INSTANCE],\r\n            control,\r\n            ApplicationUtil.getParentModelInstanceValue(this),\r\n            (control.parent as any)[MODEL_INSTANCE]\r\n        );\r\n    }\r\n\r\n    private getValue(value: any) {\r\n        return value !== undefined && value !== null && value !== \"\" ? value : \"\";\r\n    }\r\n}\r\n","import { AbstractControl, AsyncValidatorFn, FormArray, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { FormDataProvider } from \"../domain/form-data\";\r\nimport { ResetFormType } from \"../enums/reset-type\";\r\nimport { FormDataConfig } from \"../models/interface/form-data-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { RegexValidator } from '../util/regex-validator';\r\nimport { getNestedOptions, isResetControl } from '../util/reset-form';\r\nimport { clone } from './entity';\r\nimport { RxFormControl } from \"./form-control\";\r\nimport { RxFormArray } from './rx-form-array';\r\n\r\n/**\r\n * Represents an extended version of FormGroup with additional functionality.\r\n */\r\nexport class RxFormGroup extends FormGroup {\r\n    /**\r\n     * Represents the base object containing key-value pairs for the form data.\r\n     */\r\n    private baseObject: { [key: string]: any };\r\n\r\n    /**\r\n     * Provides functionality for converting form data to FormData.\r\n     */\r\n    private formDataProvider: FormDataProvider;\r\n\r\n    /**\r\n     * Indicates whether the form group has been submitted.\r\n     */\r\n    private _submitted: boolean = false;\r\n\r\n    /**\r\n     * Contains the modified values of the form group.\r\n     */\r\n    private _modified: { [key: string]: any } = {};\r\n\r\n    /**\r\n     * Indicates whether the form group has been modified.\r\n     */\r\n    private _isModified: boolean = false;\r\n\r\n    /**\r\n     * Indicates whether the form group is changing.\r\n     */\r\n    public changing: boolean = false;\r\n\r\n    /**\r\n     * Creates an instance of RxFormGroup.\r\n     * \r\n     * @param model The model associated with the form group.\r\n     * @param entityObject The entity object containing form data.\r\n     * @param controls The initial controls for the form group.\r\n     * @param validatorOrOpts The validators for the form group.\r\n     * @param asyncValidator The asynchronous validators for the form group.\r\n     */\r\n    constructor(\r\n        private model: any,\r\n        private entityObject: { [key: string]: any },\r\n        controls: { [key: string]: AbstractControl; },\r\n        validatorOrOpts?: any,\r\n        asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\r\n    ) {\r\n        super(controls, validatorOrOpts, asyncValidator);\r\n\r\n        this.baseObject = {};\r\n\r\n        for (var column in this.entityObject) {\r\n            this.baseObject[column] = this.entityObject[column]\r\n        }\r\n\r\n        this.formDataProvider = new FormDataProvider();\r\n    }\r\n\r\n    /**\r\n     * Binds the primary key of the model instance to the provided JSON object.\r\n     * \r\n     * @param modelInstance The model instance.\r\n     * @param jObject The JSON object to bind.\r\n     */\r\n    bindPrimaryKey(modelInstance: any, jObject: { [key: string]: any }) {\r\n        let instanceContainer = defaultContainer.get(modelInstance.constructor);\r\n        if (instanceContainer) {\r\n            let primaryKeyProp = instanceContainer.properties?.filter(x => x.isPrimaryKey)[0];\r\n            if (primaryKeyProp && this.modelInstance[primaryKeyProp.name]) {\r\n                jObject[primaryKeyProp.name] = this.modelInstance[primaryKeyProp.name];\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets the modified value of the form group.\r\n     * \r\n     * @returns The modified value as an object.\r\n     */\r\n    public get modifiedValue(): { [key: string]: any } {\r\n        let jObject: any = {};\r\n        if (Object.keys(this._modified).length > 0) {\r\n            this.bindPrimaryKey(this.modelInstance, jObject)\r\n            for (var columnName in this._modified) {\r\n                if (this.controls[columnName] instanceof RxFormGroup) {\r\n                    jObject[columnName] = (<RxFormGroup>this.controls[columnName]).modifiedValue;\r\n                }\r\n                else if (this.controls[columnName] instanceof FormArray) {\r\n                    let formArray = this.controls[columnName] as FormArray;\r\n                    jObject[columnName] = [];\r\n\r\n                    for (var i = 0; i < this._modified[columnName].length; i++) {\r\n                        let modifiedValue = (<RxFormGroup>formArray.controls[i]).modifiedValue\r\n                        if (Object.keys(modifiedValue).length > 0) {\r\n                            jObject[columnName].push(modifiedValue);\r\n                        }\r\n                    }\r\n\r\n                    if (jObject[columnName].length == 0) {\r\n                        delete jObject[columnName];\r\n                    }\r\n                } else {\r\n                    jObject[columnName] = this._modified[columnName];\r\n                }\r\n            }\r\n\r\n            return jObject;\r\n        }\r\n\r\n        return this._modified;\r\n    }\r\n\r\n    /**\r\n     * Checks if the form group is modified.\r\n     * \r\n     * @returns A boolean indicating whether the form group is modified.\r\n     */\r\n    public get isModified() { return this._isModified; }\r\n\r\n    /**\r\n     * Patches the form group.\r\n     * \r\n     * @param controlName Optional. The name of the control to patch.\r\n     */\r\n    public patch(controlName?: string) {\r\n        if (controlName) {\r\n            let control = <RxFormControl>this.controls[controlName];\r\n            this.processModified(controlName, control);\r\n        } else {\r\n            this.nestedFormsModification();\r\n        }\r\n\r\n        this._isModified = Object.keys(this._modified).length > 0;\r\n        if (!this._isModified) {\r\n            this.nestedArrayIsModified();\r\n        }\r\n\r\n        if (this.parent && (<RxFormGroup>this.parent).patch) {\r\n            (<RxFormGroup>this.parent).patch();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if the form group is dirty.\r\n     * \r\n     * @returns A boolean indicating whether the form group is dirty.\r\n     */\r\n    public isDirty(): boolean {\r\n        let isDirty: boolean = false;\r\n        for (let name in this.value) {\r\n            let currentValue = this.modelInstance[name];\r\n\r\n            if (!(this.controls[name] instanceof FormGroup || this.controls[name] instanceof FormArray)) {\r\n                isDirty = ApplicationUtil.notEqualTo(this.baseObject[name], currentValue);\r\n            }\r\n\r\n            else if (this.controls[name] instanceof RxFormGroup) {\r\n                isDirty = (<RxFormGroup>this.controls[name]).isDirty();\r\n            }\r\n\r\n            else if (this.controls[name] instanceof FormArray) {\r\n                for (let formGroup of (<FormArray>this.controls[name]).controls) {\r\n                    isDirty = (<RxFormGroup>formGroup).isDirty();\r\n                }\r\n            }\r\n\r\n            if (isDirty) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return isDirty;\r\n    }\r\n\r\n    /**\r\n     * Resets the form group.\r\n     * \r\n     * @param options Optional. Options for resetting the form group.\r\n     */\r\n    public resetForm(options?: { resetType?: ResetFormType, with?: string[], value?: { [key: string]: any } }): void {\r\n        for (let name in this.controls) {\r\n            if (isResetControl(name, this.controls[name], options)) {\r\n                if (this.controls[name] instanceof FormGroup) {\r\n                    (<RxFormGroup>this.controls[name]).resetForm(getNestedOptions(name, options));\r\n                }\r\n\r\n                else if (this.controls[name] instanceof FormArray) {\r\n                    (<RxFormArray>this.controls[name]).resetForm(options && options.value ? options.value[name] : undefined);\r\n                }\r\n\r\n                else {\r\n                    if (options && options.value && RegexValidator.isNotBlank(options.value[name])) {\r\n                        this.controls[name].reset(options.value[name]);\r\n                    }\r\n                    else {\r\n                        this.controls[name].reset();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Commits changes in the form group.\r\n     */\r\n    public commit() {\r\n        for (let name in this.controls) {\r\n            if (this.controls[name] instanceof FormGroup) {\r\n                (<RxFormGroup>this.controls[name]).commit();\r\n            }\r\n            else if (this.controls[name] instanceof FormArray) {\r\n                (<RxFormArray>this.controls[name]).commit();\r\n            }\r\n            else {\r\n                (<RxFormControl>this.controls[name]).commit();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Patches the model value of the form group.\r\n     * \r\n     * @param value The value to patch.\r\n     * @param options Optional. Options for patching the value.\r\n     */\r\n    public patchModelValue(value: { [key: string]: any; }, options?: { onlySelf?: boolean; emitEvent?: boolean; }): void {\r\n        if (value) {\r\n            for (let name in this.controls) {\r\n                if (this.controls[name] instanceof RxFormGroup && value[name]) {\r\n                    (<RxFormGroup>this.controls[name]).patchModelValue(value[name], options);\r\n                }\r\n\r\n                else if (this.controls[name] instanceof FormArray && Array.isArray(value[name])) {\r\n                    let index = 0;\r\n                    for (let formGroup of (<FormArray>this.controls[name]).controls) {\r\n                        if (value[name][index]) {\r\n                            (<RxFormGroup>formGroup).patchModelValue(value[name][index], options);\r\n                        }\r\n\r\n                        index = index + 1;\r\n                    }\r\n                } else {\r\n                    if (value[name] !== undefined) {\r\n                        this.controls[name].patchValue(value[name], options);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves error summary of the form group.\r\n     * \r\n     * @param onlyMessage Indicates whether to include only error messages.\r\n     * @returns The error summary as an object.\r\n     */\r\n    public getErrorSummary(onlyMessage: boolean): { [key: string]: any } {\r\n        let jObject: { [key: string]: any } = {};\r\n        Object.keys(this.controls).forEach(columnName => {\r\n            if (this.controls[columnName] instanceof FormGroup) {\r\n                let error = (<RxFormGroup>this.controls[columnName]).getErrorSummary(false);\r\n                if (Object.keys(error).length > 0) {\r\n                    jObject[columnName] = error;\r\n                }\r\n            }\r\n            else if (this.controls[columnName] instanceof FormArray) {\r\n                let index = 0;\r\n                for (let formGroup of (<FormArray>this.controls[columnName]).controls) {\r\n                    let error = (<RxFormGroup>formGroup).getErrorSummary(false);\r\n                    if (Object.keys(error).length > 0) {\r\n                        error[\"index\"] = index;\r\n                        if (!jObject[columnName]) {\r\n                            jObject[columnName] = [];\r\n                        }\r\n\r\n                        jObject[columnName].push(error);\r\n                    }\r\n\r\n                    index++;\r\n                }\r\n            } else {\r\n                if (this.controls[columnName].errors) {\r\n                    let error = this.controls[columnName].errors;\r\n                    if (onlyMessage)\r\n                        for (let validationName in error) {\r\n                            jObject[columnName] = error[validationName]?.message;\r\n                        }\r\n                    else {\r\n                        jObject[columnName] = error;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        return jObject;\r\n    }\r\n\r\n    /**\r\n     * Synchronizes value changes in the form group.\r\n     */\r\n    public valueChangedSync() {\r\n        Object.keys(this.controls).forEach(columnName => {\r\n            if (!(this.controls[columnName] instanceof FormArray || this.controls[columnName] instanceof RxFormArray) && !(this.controls[columnName] instanceof FormGroup || this.controls[columnName] instanceof RxFormGroup) && !(this.entityObject[columnName] instanceof FormControl || this.entityObject[columnName] instanceof RxFormControl) && (<RxFormControl>this.controls[columnName]).getControlValue && ApplicationUtil.notEqualTo((<RxFormControl>this.controls[columnName]).getControlValue(), this.entityObject[columnName])) {\r\n                this.controls[columnName].setValue(this.entityObject[columnName], { updateChanged: true });\r\n            } else if ((this.controls[columnName] instanceof FormArray || this.controls[columnName] instanceof RxFormArray)) {\r\n                for (let formGroup of (<FormArray>this.controls[columnName]).controls) {\r\n                    (<RxFormGroup>formGroup).valueChangedSync();\r\n                }\r\n            } else if ((this.controls[columnName] instanceof RxFormGroup)) {\r\n                (<RxFormGroup>this.controls[columnName]).valueChangedSync();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Refreshes disabled state of controls in the form group.\r\n     */\r\n    public refreshDisable() {\r\n        Object.keys(this.controls).forEach(columnName => {\r\n            if (!(this.controls[columnName] instanceof FormArray || this.controls[columnName] instanceof RxFormArray) && !(this.controls[columnName] instanceof FormGroup || this.controls[columnName] instanceof RxFormGroup)) {\r\n                (<RxFormControl>this.controls[columnName]).refresh();\r\n            } else if ((this.controls[columnName] instanceof RxFormGroup)) {\r\n                (<RxFormGroup>this.controls[columnName]).refreshDisable();\r\n            }\r\n        })\r\n\r\n    }\r\n\r\n    /**\r\n     * Binds error messages to controls in the form group.\r\n     */\r\n    public bindErrorMessages() {\r\n        Object.keys(this.controls).forEach(columnName => {\r\n            if (!(this.controls[columnName] instanceof FormArray || this.controls[columnName] instanceof RxFormArray) && !(this.controls[columnName] instanceof FormGroup || this.controls[columnName] instanceof RxFormGroup)) {\r\n                (<RxFormControl>this.controls[columnName]).bindError();\r\n            } else if ((this.controls[columnName] instanceof RxFormGroup)) {\r\n                (<RxFormGroup>this.controls[columnName]).bindErrorMessages();\r\n            }\r\n        })\r\n    }\r\n\r\n    /**\r\n     * Gets or sets the submitted state of the form group.\r\n     */\r\n    public get submitted() { return this._submitted; }\r\n    public set submitted(value: boolean) {\r\n        this._submitted = value;\r\n\r\n        Object.keys(this.controls).forEach(columnName => {\r\n            if (this.controls[columnName] instanceof FormArray) {\r\n                let formArray = this.controls[columnName] as FormArray;\r\n\r\n                for (let formGroup of formArray.controls) {\r\n                    (<RxFormGroup>formGroup).submitted = value;\r\n                }\r\n            } else if (this.controls[columnName] instanceof FormGroup) {\r\n                (<RxFormGroup>this.controls[columnName]).submitted = value;\r\n            } else {\r\n                (<RxFormControl>this.controls[columnName]).bindError();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Gets the model instance value of the form group.\r\n     */\r\n    public get modelInstanceValue() { return clone(this.entityObject); }\r\n\r\n    /**\r\n    * Gets the model instance of the form group.\r\n    */\r\n    public get modelInstance() { return this.entityObject; }\r\n\r\n    /**\r\n     * Gets the errors of the controls in the form group.\r\n     */\r\n    public get controlsError(): { [key: string]: any } { return this.getErrorSummary(true); }\r\n\r\n    /**\r\n     * Converts the form group to FormData.\r\n     * @param options Optional. Options for converting to FormData.\r\n     * @returns The FormData object.\r\n     */\r\n    public toFormData(options?: FormDataConfig): FormData {\r\n        return this.formDataProvider.convertToFormData(this.value, options);\r\n    }\r\n\r\n    /**\r\n     * Processes the modification of a control within the form group.\r\n     * @param controlName The name of the control being modified.\r\n     * @param control The control object.\r\n     */\r\n    private processModified(controlName: string, control: any) {\r\n        if (control.isModified) {\r\n            this._modified[controlName] = control.value;\r\n        }\r\n        else {\r\n            delete this._modified[controlName];\r\n        }\r\n\r\n        this._isModified = Object.keys(this._modified).length > 0;\r\n    }\r\n\r\n    /**\r\n     * Checks if any nested array within the form group is modified.\r\n     */\r\n    private nestedArrayIsModified() {\r\n        for (var controlName in this.controls) {\r\n            if (this.controls[controlName] instanceof RxFormArray) {\r\n                this._isModified = (<RxFormArray>this.controls[controlName]).isModified;\r\n            }\r\n\r\n            if (this._isModified) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets backend errors for the form group controls.\r\n     * @param errors Object containing the backend errors.\r\n     */\r\n    public setBackEndErrors(errors: { [key: string]: any }) {\r\n        Object.keys(errors).forEach(controlName => {\r\n            if (this.controls[controlName]) {\r\n                if (this.controls[controlName] instanceof FormGroup) {\r\n                    (<RxFormGroup>this.controls[controlName]).setBackEndErrors(errors[controlName])\r\n                }\r\n                else {\r\n                    (<RxFormControl>this.controls[controlName]).setBackEndErrors(errors[controlName]);\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    /**\r\n     * Clears backend errors for the form group controls.\r\n     * @param errors Optional object containing specific errors to clear.\r\n     */\r\n    public clearBackEndErrors(errors?: { [key: string]: any }) {\r\n        let clearErrors = errors ? Object.keys(errors) : Object.keys(this.controls);\r\n        clearErrors.forEach(controlName => {\r\n            if (this.controls[controlName]) {\r\n                if (this.controls[controlName] instanceof FormGroup) {\r\n                    errors ? (<RxFormGroup>this.controls[controlName]).clearBackEndErrors(errors[controlName]) : (<RxFormGroup>this.controls[controlName]).clearBackEndErrors()\r\n                }\r\n                else {\r\n                    errors ? (<RxFormControl>this.controls[controlName]).clearBackEndErrors(errors[controlName]) : (<RxFormGroup>this.controls[controlName]).clearBackEndErrors()\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Modifies nested forms within the form group.\r\n     */\r\n    private nestedFormsModification() {\r\n        for (var controlName in this.controls) {\r\n            if (this.controls[controlName] instanceof RxFormGroup) {\r\n                this.processModified(controlName, this.controls[controlName]);\r\n            }\r\n            else if (this.controls[controlName] instanceof RxFormArray) {\r\n                if ((<RxFormArray>this.controls[controlName]).isModified) {\r\n                    let formGroups = (<RxFormArray>this.controls[controlName]).controls;\r\n                    this._modified[controlName] = [];\r\n                    for (var formGroup of formGroups) {\r\n                        if ((<RxFormGroup>formGroup).isModified) {\r\n                            if (!this._modified[controlName]) {\r\n                                this._modified[controlName] = [];\r\n                            }\r\n\r\n                            this._modified[controlName].push((<RxFormGroup>formGroup).modifiedValue)\r\n                        }\r\n\r\n                    }\r\n\r\n                    if (this._modified[controlName].length == 0) {\r\n                        delete this._modified[controlName];\r\n                    }\r\n\r\n                }\r\n                else if (this._modified[controlName]) {\r\n                    delete this._modified[controlName];\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\nimport { RxFormGroup } from \"../services/rx-form-group\";\r\nimport { ApplicationUtil } from './app-util';\r\nimport { Linq } from './linq';\r\n\r\n/**\r\n * Utility class for processing form rules and expressions.\r\n */\r\nexport class FormProvider {\r\n    /**\r\n     * Process a rule for a given control.\r\n     * \r\n     * @param control The control to apply the rule to.\r\n     * @param config The rule configuration object.\r\n     * @param isDynamicConfig Indicates whether the rule configuration is dynamic.\r\n     * @returns A boolean indicating whether the rule was processed successfully, or an object containing error messages if the rule failed.\r\n     */\r\n    public static processRule(control: AbstractControl, config: any, isDynamicConfig: boolean = false): boolean | { [key: string]: any } {\r\n        /* Check if the expression has already been processed, if so, return true */\r\n        if (config && config.expressionProcessed) {\r\n            return true;\r\n        }\r\n\r\n        /* Get the value of the form group containing the control */\r\n        const formGroupValue = ApplicationUtil.getParentObjectValue(control);\r\n\r\n        /* Clone the parent object's value */\r\n        const parentObject = (control.parent) ? ApplicationUtil.cloneValue(control.parent.value) : undefined;\r\n\r\n        /* Initialize the model instance */\r\n        let modelInstance = undefined;\r\n\r\n        /* If the control has a parent and the parent is an instance of RxFormGroup, assign its model instance */\r\n        if (control.parent && control.parent instanceof RxFormGroup) {\r\n            modelInstance = (<RxFormGroup>control.parent).modelInstance;\r\n        }\r\n\r\n        /* If the parent object exists, update its form control value and disable configurations */\r\n        if (parentObject) {\r\n            this.updateFormControlValue(parentObject, control.parent!.controls, control, config);\r\n            this.forDisableUpdate(parentObject, config)\r\n        }\r\n\r\n        /* If there is a conditional expression, evaluate it and return the result */\r\n        else if (config.conditionalExpression) {\r\n            return config.conditionalExpression((control as any)['entityObject'] ?? {}, this.parentControl(control)?.value ?? {});\r\n        }\r\n\r\n        /* If none of the above conditions are met, execute the rule using Linq */\r\n        return Linq.execute(formGroupValue, config, parentObject, modelInstance!, isDynamicConfig);\r\n    }\r\n\r\n    /**\r\n     * Updates the value of a form control in the parent object.\r\n     * \r\n     * @param parentObject The parent object containing the form control.\r\n     * @param controls The controls within the parent object.\r\n     * @param control The control whose value needs to be updated.\r\n     * @param config The rule configuration object.\r\n     */\r\n    private static updateFormControlValue(parentObject: { [key: string]: any }, controls: any, control: AbstractControl, config: any) {\r\n        /* Iterate through each control in the parent object */\r\n        for (var controlName in parentObject) {\r\n            /* Check if the value associated with the controlName is not an object */\r\n            if (!(parentObject[controlName] instanceof Object)) {\r\n                /* Check if the current control matches the target control */\r\n                if (controls[controlName] === control) {\r\n                    /* Update the value of the control in the parent object */\r\n                    parentObject[controlName] = control.value;\r\n                    /* Exit the loop since the control value has been updated */\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the disable configuration in the parent object.\r\n     * \r\n     * @param parentObject The parent object containing the form controls.\r\n     * @param config The rule configuration object.\r\n     */\r\n    private static forDisableUpdate(parentObject: any, config: any) {\r\n        if (config.disableConfig) {\r\n            Object.keys(config.disableConfig).forEach(column => parentObject[column] = config.disableConfig[column])\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Recursively gets the parent control of a control.\r\n     * \r\n     * @param control The control whose parent control is needed.\r\n     * @returns The parent control of the given control.\r\n     */\r\n    private static parentControl(control: AbstractControl): AbstractControl {\r\n        return control && control['_parent'] ? this.parentControl(control['_parent']) : control;\r\n    }\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\nimport { CONFIG_REQUIRED_FIELDS } from \"../const/config-required-fields.const\";\r\nimport { clone } from \"../services/entity\";\r\nimport { FormProvider } from \"./form-provider\";\r\n\r\nexport function getConfigObject(config: any, control: any, configName: string = ''): any {\r\n    return (config != undefined && config != true) ? configProvider(control, config, configName) : {};\r\n}\r\n\r\nfunction configProvider(control: AbstractControl, config: any, configName: string): any {\r\n    if (config.dynamicConfig) {\r\n        let currentConfig = FormProvider.processRule(control, clone(config), true)\r\n        if (typeof currentConfig != \"boolean\") {\r\n            currentConfig[\"conditionalExpression\"] = config.conditionalExpression;\r\n            currentConfig[\"dynamicConfig\"] = config.dynamicConfig;\r\n\r\n            Object.keys(config).forEach(t => {\r\n                if ((t != \"conditionalExpression\" && t != \"dynamicConfig\") || (currentConfig as any)[t] === undefined) {\r\n                    (currentConfig as any)[t] = config[t];\r\n                }\r\n            });\r\n\r\n            return currentConfig;\r\n        } else {\r\n            return config;\r\n        }\r\n    }\r\n\r\n    return checkRequiredProps(config, configName);\r\n}\r\n\r\nfunction checkRequiredProps(config: any, configName: string) {\r\n    let props = CONFIG_REQUIRED_FIELDS[configName];\r\n    if (configName) {\r\n        props.forEach(prop => {\r\n            if (config[prop] === undefined) {\r\n                throw new Error(`Pass the property of '${prop}' with value in the ${configName}, otherwise it won't work.`);\r\n            }\r\n        })\r\n    }\r\n\r\n    return config\r\n}","import { AbstractControl } from \"@angular/forms\";\r\nimport { FormProvider } from \"./form-provider\";\r\nimport { RegexValidator } from \"./regex-validator\";\r\n\r\nexport class ValidatorValueChecker {\r\n\tstatic pass(control: AbstractControl, config: any): boolean {\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\treturn RegexValidator.isNotBlank(control.value)\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tstatic passArrayValue(control: AbstractControl, config: any) {\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\treturn typeof control.value === \"string\" ? RegexValidator.isNotBlank(control.value) : control.value instanceof Array;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { alphabet, alphanumeric, alphanumericWithWitespace, alphaWithWhitespace } from \"../util/alphabet-regex.locale\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ReactiveFormConfig } from \"../util/reactive-form-config\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\n/* Perform alpha validation on the provided control */\r\n/**\r\n * @param configModel Optional configuration model.\r\n * @param control The form control to validate.\r\n * @param regExps Array of regular expression patterns to validate against.\r\n * @param key The key for the validation message.\r\n * @returns An object representing the validation result.\r\n */\r\nexport function alphaValidation(configModel?: AlphaConfig, control?: AbstractControl, regExps?: RegExp[], key?: string) {\r\n    /* Retrieve the configuration object based on the provided model and control */\r\n    let config = getConfigObject(configModel, control);\r\n\r\n    /* Check if the control value passes the validator with the provided configuration */\r\n    if (ValidatorValueChecker.pass(control!, config)) {\r\n        /* Get regular expression patterns based on the key and configuration */\r\n        regExps = getRegex(key!, regExps!, config)!;\r\n\r\n        /* Determine if the value is valid against the regular expression patterns */\r\n        var isValid = (!config || !config.allowWhiteSpace) ? RegexValidator.isValid(control!.value, regExps[0]) : RegexValidator.isValid(control!.value, regExps[1]);\r\n\r\n        /* If the value is not valid, return a JSON object representing the validation error */\r\n        if (!isValid) {\r\n            return ObjectMaker.toJson(key!, config, [control!.value]);\r\n        }\r\n    }\r\n\r\n    /* If the value passes validation or no validation is performed, return null */\r\n    return ObjectMaker.null();\r\n}\r\n\r\n\r\n/**\r\n * Get regular expression patterns based on the provided key and configuration.\r\n * @param key The key for the validation message.\r\n * @param regExps Array of regular expression patterns to validate against.\r\n * @param config The configuration object.\r\n * @returns An array of regular expression patterns.\r\n */\r\nfunction getRegex(key: string, regExps: RegExp[], config: any) {\r\n    /* Update regular expression patterns based on the configuration */\r\n    if (config.allowCharacters) {\r\n        if (config.allowWhiteSpace) {\r\n            regExps[1] = new RegExp(`^[0-9a-zA-Z @${config.allowCharacters}]+$`, ``);\r\n        }\r\n        else {\r\n            regExps[0] = new RegExp(`^[0-9a-zA-Z @${config.allowCharacters}]+$`, ``);\r\n        }\r\n    }\r\n\r\n    /* Determine regular expression patterns based on the validation key */\r\n    switch (key) {\r\n        case \"alpha\":\r\n            /* Retrieve alpha locale from configuration or default validation locale */\r\n            var alphaLocale = config.locale ? config.locale : ReactiveFormConfig.json && ReactiveFormConfig.json[\"defaultValidationLocale\"] && ReactiveFormConfig.json[\"defaultValidationLocale\"].alpha ? ReactiveFormConfig.json[\"defaultValidationLocale\"].alpha : \"\";\r\n\r\n            /* Return regular expression patterns based on alpha locale */\r\n            return [\r\n                alphaLocale && alphaLocale in alphabet ? (alphabet as any)[alphaLocale] : regExps[0],\r\n                alphaLocale && alphaLocale in alphaWithWhitespace ? (alphaWithWhitespace as any)[alphaLocale] : regExps[1]\r\n            ];\r\n\r\n        case \"alphaNumeric\":\r\n            /* Retrieve alphaNumeric locale from configuration or default validation locale */\r\n            var alphaNumericLocale = config.locale ? config.locale : ReactiveFormConfig.json && ReactiveFormConfig.json[\"defaultValidationLocale\"] && ReactiveFormConfig.json[\"defaultValidationLocale\"].alphaNumeric ? ReactiveFormConfig.json[\"defaultValidationLocale\"].alphaNumeric : \"\";\r\n\r\n            /* Return regular expression patterns based on alphaNumeric locale */\r\n            return [\r\n                alphaNumericLocale && alphaNumericLocale in alphanumeric ? (alphanumeric as any)[alphaNumericLocale] : regExps[0],\r\n                alphaNumericLocale && alphaNumericLocale in alphanumericWithWitespace ? (alphanumericWithWitespace as any)[alphaNumericLocale] : regExps[1]\r\n            ];\r\n\r\n        default:\r\n            return null;\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { alphaValidation } from \"../validators-function/alpha-validation.function\";\r\n\r\n/**\r\n * Validator function to check if the input contains only alphabetic characters.\r\n * @param configModel - Configuration model for the alpha validator.\r\n * @returns Validator function.\r\n */\r\nexport function alphaValidator(configModel?: AlphaConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Use alphaValidation function with specified rules and annotation type */\r\n    return alphaValidation(configModel, control, [RegExRule[\"alpha\"], RegExRule[\"alphaWithSpace\"]], AnnotationTypes[\"alpha\"]);\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { alphaValidation } from \"../validators-function/alpha-validation.function\";\r\n\r\n/**\r\n * Validator function to check if the input contains only alphanumeric characters.\r\n * @param configModel - Configuration model for the alphanumeric validator.\r\n * @returns Validator function.\r\n */\r\nexport function alphaNumericValidator(configModel?: AlphaConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Use alphaValidation function with specified rules and annotation type */\r\n    return alphaValidation(configModel, control, [RegExRule[\"alphaNumeric\"], RegExRule[\"alphaNumericWithSpace\"]], AnnotationTypes[\"alphaNumeric\"]);\r\n  };\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { FIELD_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CompareConfig } from \"../models/config/compare-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\n/**\r\n * Validator function to compare the values of two form controls in a FormGroup.\r\n * @param configModel - Configuration model for the compare validator.\r\n * @returns Validator function.\r\n */\r\nexport function compareValidator(configModel?: CompareConfig): ValidatorFn {\r\n  return (control: AbstractControl): ValidationErrors | null => {\r\n    /* Get configuration object */\r\n    let config = getConfigObject(configModel, control, FIELD_CONFIG);\r\n\r\n    /* Get the compare control from the FormGroup */\r\n    const compareControl: any = ApplicationUtil.getFormControl(config.fieldName, control);\r\n\r\n    /* Get values from the controls */\r\n    const controlValue = control.value;\r\n    const compareControlValue = (compareControl) ? compareControl.value : '';\r\n\r\n    /* Check if either control value is not blank */\r\n    if (RegexValidator.isNotBlank(controlValue) || RegexValidator.isNotBlank(compareControlValue)) {\r\n      /* Check if the values of the controls are not equal */\r\n      if (!(compareControl && compareControl.value === controlValue))\r\n        /* Return validation error if the values are not equal */\r\n        return ObjectMaker.toJson(AnnotationTypes[\"compare\"], config, [controlValue, compareControlValue]);\r\n    }\r\n\r\n    /* Return null if validation passes */\r\n    return ObjectMaker.null();\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DefaultConfig } from \"../models/config/default-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function containsValidator(configModel?: DefaultConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control);\r\n        if (ValidatorValueChecker.pass(control, config)) {\r\n            let failed = false;\r\n            const values = config.values ? config.values : [config.value];\r\n            for (let value of values) {\r\n                failed = control.value.indexOf(value) == -1;\r\n                if (!failed)\r\n                    break;\r\n            }\r\n            if (failed)\r\n                return ObjectMaker.toJson(AnnotationTypes[\"contains\"], config, [control.value, config.value]);\r\n        }\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","/**\r\n * Calculates the checksum according to the Luhn algorithm for the provided string of digits.\r\n * The Luhn algorithm is commonly used for validating identification numbers like credit card numbers.\r\n * \r\n * @param numbers A string of digits for which the checksum is to be calculated.\r\n * @returns The calculated checksum value.\r\n */\r\nexport function calculate(numbers: string) {\r\n    /* Initialize the sum of digits */\r\n    let numberSum = 0;\r\n\r\n    /* Iterate through each character in the input string and add it to the sum */\r\n    for (var i = 0; i < numbers.length; i++) {\r\n        numberSum += parseInt(numbers.substring(i, i + 1));\r\n    }\r\n\r\n    /* Define preset deltas for certain digit positions */\r\n    let deltas = new Array(0, 1, 2, 3, 4, -4, -3, -2, -1, 0);\r\n\r\n    /* Iterate through the input string from right to left, skipping every other character */\r\n    for (var i = numbers.length - 1; i >= 0; i -= 2) {\r\n        /* Extract the value corresponding to the character from the deltas array and add it to the sum */\r\n        numberSum += deltas[parseInt(numbers.substring(i, i + 1))];\r\n    }\r\n\r\n    /* Calculate the modulus of the sum with respect to 10 */\r\n    let modulus = numberSum % 10;\r\n\r\n    /* Calculate the complement of the modulus (10 minus the modulus) */\r\n    modulus = 10 - modulus;\r\n\r\n    /* If the modulus is 10, set it to 0 */\r\n    if (modulus == 10) {\r\n        modulus = 0;\r\n    }\r\n\r\n    /* Return the calculated checksum value */\r\n    return modulus;\r\n}","export function checkLength(length: number, checks: number[]): boolean {\r\n  let isPassed = false;\r\n  for (let check of checks) {\r\n    isPassed = (check == length)\r\n    if (isPassed) {\r\n      break;\r\n    }\r\n  }\r\n\r\n  return isPassed;\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { calculate } from '../algorithm/luhn-algorithm';\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CreditCardConfig } from \"../models/config/credit-card-config\";\r\nimport { checkLength } from '../util/check-length';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function creditCardValidator(configModel?: CreditCardConfig): ValidatorFn {\r\n    let cardDigits: { [key: string]: number[] } = {\r\n        AmericanExpress: [15],\r\n        DinersClub: [14, 16, 19],\r\n        Discover: [16, 19],\r\n        JCB: [16, 19],\r\n        Maestro: [12, 16, 19],\r\n        MasterCard: [16],\r\n        Visa: [13, 16, 19]\r\n    }\r\n    function validate(creditCardNumber: string) {\r\n        var digit = parseInt(creditCardNumber.substring(creditCardNumber.length - 1, creditCardNumber.length));\r\n        return calculate(creditCardNumber.substring(0, creditCardNumber.length - 1)) == parseInt(String(digit)) ? !0 : !1\r\n    }\r\n\r\n    function getCardProviderName(cardNumber: string) {\r\n        var cardProviderName = \"\";\r\n        return /^(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\\d+$/.test(cardNumber) ? cardProviderName = \"Maestro\" : /^5[1-5]/.test(cardNumber) ? cardProviderName = \"MasterCard\" : /^4/.test(cardNumber) ? cardProviderName = \"Visa\" : /^3[47]/.test(cardNumber) ? cardProviderName = \"AmericanExpress\" : /^(?:2131|1800|35)/.test(cardNumber) ? cardProviderName = \"JCB\" : /^3(?:0[0-5]|[68])/.test(cardNumber) ? cardProviderName = \"DinersClub\" : /^6(?:011|5)/.test(cardNumber) && (cardProviderName = \"Discover\"), cardProviderName;\r\n    }\r\n\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        const controlValue = control.value;\r\n        let config = getConfigObject(configModel, control);\r\n        const parentObject = (control.parent) ? control.parent.value : undefined;\r\n        if (FormProvider.processRule(control, config)) {\r\n            if (RegexValidator.isNotBlank(controlValue)) {\r\n                let isValid = false;\r\n                let cardTypes = config.fieldName && parentObject[config.fieldName] ? [parentObject[config.fieldName]] : config.creditCardTypes\r\n                let cardType: string = '';\r\n                for (let creditCardType of cardTypes) {\r\n                    isValid = checkLength(controlValue.length, cardDigits[creditCardType]) && getCardProviderName(controlValue) == creditCardType && validate(controlValue);\r\n                    cardType = creditCardType;\r\n                    if (isValid)\r\n                        break;\r\n                }\r\n                if (!isValid)\r\n                    return ObjectMaker.toJson(AnnotationTypes[\"creditCard\"], config, [controlValue, cardType])\r\n            }\r\n        }\r\n        return ObjectMaker.null();\r\n\r\n    }\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\n/**\r\n * Perform regex validation on the provided control.\r\n * @param configModel Optional configuration model.\r\n * @param control The form control to validate.\r\n * @param regExp The regular expression pattern to validate against.\r\n * @param key The key for the validation message.\r\n * @returns An object representing the validation result.\r\n */\r\nexport function regexValidation(configModel?: BaseConfig, control?: AbstractControl, regExp?: RegExp, key?: string) {\r\n    let config = getConfigObject(configModel, control);\r\n    return validate(config, control!, regExp!, key!)\r\n}\r\n\r\n/**\r\n * Validate the control against the provided regular expression pattern.\r\n * @param config The configuration object.\r\n * @param control The form control to validate.\r\n * @param regExp The regular expression pattern to validate against.\r\n * @param key The key for the validation message.\r\n * @returns An object representing the validation result.\r\n */\r\nexport function validate(config: any, control: AbstractControl, regExp: RegExp, key: string) {\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n        if (!RegexValidator.isValid(control.value, regExp)) {\r\n            return ObjectMaker.toJson(key, config, [control.value]);\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DigitConfig } from \"../models/config/digit-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function digitValidator(configModel?: DigitConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"onlyDigit\"], AnnotationTypes[\"digit\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { EmailConfig } from \"../models/config/email-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function emailValidator(configModel?: EmailConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"basicEmail\"], AnnotationTypes[\"email\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { HexColorConfig } from \"../models/config/hex-color-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function hexColorValidator(configModel?: HexColorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"strictHexColor\"], AnnotationTypes[\"hexColor\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function lowercaseValidator(configModel?: MessageConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(control.value === control.value.toLowerCase()))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"lowerCase\"], config, [control.value])\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","export  const  OPERATORS:{[key:string]:string} =  {\r\n    lessThan:\"<\",\r\n    greaterThan:\">\",\r\n    lessThanEqualTo:\"<=\",\r\n    greaterThanEqualTo:\">=\"\r\n}","import { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { OPERATORS } from \"../const/operators.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { DateProvider } from \"./date-provider\";\r\nimport { FormProvider } from \"./form-provider\";\r\nimport { ObjectMaker } from \"./object-maker\";\r\nimport { RegexValidator } from \"./regex-validator\";\r\n\r\nfunction runCondition(leftValue: Date, rightValue: Date, operator: string): boolean {\r\n    let result: boolean = false;\r\n    switch (operator) {\r\n        case OPERATORS[\"lessThan\"]:\r\n        case OPERATORS[\"greaterThan\"]:\r\n            result = leftValue > rightValue;\r\n            break;\r\n        case OPERATORS[\"lessThanEqualTo\"]:\r\n        case OPERATORS[\"greaterThanEqualTo\"]:\r\n            result = leftValue >= rightValue;\r\n            break;\r\n    }\r\n    return result;\r\n}\r\n\r\nexport function dateChecker(control: AbstractControl, config: any, operationType: string): { [key: string]: any } | null {\r\n    config = getConfigObject(config, control);\r\n    var dateProvider = new DateProvider();\r\n    if (FormProvider.processRule(control, config)) {\r\n        if (RegexValidator.isNotBlank(control.value)) {\r\n            let checkDate = dateProvider.getCompareDate(config, control);\r\n            if (dateProvider.isDate(control.value) || dateProvider.isValid(control.value, config)) {\r\n                let currentControlValue = dateProvider.getDate(control.value);\r\n                let isValid = operationType == AnnotationTypes[\"minDate\"] ? runCondition(currentControlValue, checkDate, config.operator || OPERATORS[\"greaterThanEqualTo\"]) : runCondition(checkDate, currentControlValue, config.operator || OPERATORS[\"lessThanEqualTo\"])\r\n                if (!isValid)\r\n                    return ObjectMaker.toJson(operationType, config, [control.value, checkDate])\r\n            } else\r\n                return ObjectMaker.toJson(operationType, config, [control.value, checkDate])\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}\r\n\r\nexport function validateDate(control: AbstractControl, config: any, operationType: string): { [key: string]: any } | null {\r\n    config = getConfigObject(config, control);\r\n    var dateProvider = new DateProvider();\r\n    if (FormProvider.processRule(control, config)) {\r\n        if (RegexValidator.isNotBlank(control.value)) {\r\n            if (!dateProvider.isDate(control.value) && !dateProvider.isValid(control.value, config)) {\r\n                return ObjectMaker.toJson(operationType, config, [control.value])\r\n            }\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxDateConfig } from \"../models/config/max-date-config\";\r\nimport { dateChecker } from \"../util/date-checker.function\";\r\n\r\nexport function maxDateValidator(configModel?: MaxDateConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return dateChecker(control, configModel, AnnotationTypes[\"maxDate\"]);\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { NUMBER_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function maxLengthValidator(configModel?: NumberConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, NUMBER_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(control.value.length <= config.value)) {\r\n        return ObjectMaker.toJson(AnnotationTypes[\"maxLength\"], config, [control.value, config.value])\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { NUMBER_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function maxNumberValidator(configModel?: NumberConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, NUMBER_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(parseFloat(control.value) <= config.value)) {\r\n        return ObjectMaker.toJson(AnnotationTypes[\"maxNumber\"], config, [control.value, config.value])\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinDateConfig } from \"../models/config/min-date-config\";\r\nimport { dateChecker } from \"../util/date-checker.function\";\r\n\r\nexport function minDateValidator(configModel?: MinDateConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return dateChecker(control, configModel, AnnotationTypes[\"minDate\"]);\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { NUMBER_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function minLengthValidator(configModel?: NumberConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, NUMBER_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(String(control.value).length >= config.value))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"minLength\"], config, [control.value, config.value])\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { NUMBER_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function minNumberValidator(configModel?: NumberConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, NUMBER_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(parseFloat(control.value) >= config.value))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"minNumber\"], config, [control.value, config.value])\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { PASSWORD_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { PasswordConfig } from \"../models/config/password-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function passwordValidator(configModel?: PasswordConfig): ValidatorFn {\r\n\tfunction getMessageObject(jObject: { [key: string]: any }, keyName: string) {\r\n\t\tif (!jObject[\"message\"] && !jObject[\"messageKey\"]) {\r\n\t\t\tlet message = ObjectMaker.getPasswordMessage();\r\n\t\t\tjObject[\"message\"] = message && typeof message == \"string\" ? message : ApplicationUtil.isObject(message) ? message[keyName] : \"\";\r\n\t\t\tif (!jObject[\"message\"]) {\r\n\t\t\t\tjObject[\"message\"] = message[\"password\"];\r\n\t\t\t}\r\n\r\n\t\t\tjObject[\"messageKey\"] = \"\";\r\n\t\t}\r\n\r\n\t\treturn jObject\r\n\t}\r\n\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control, PASSWORD_CONFIG);\r\n\t\tlet controlValue = control.value;\r\n\t\tif (RegexValidator.isNotBlank(controlValue)) {\r\n\t\t\tlet validation = RegexValidator.isValidPassword(config.validation, controlValue);\r\n\t\t\tlet jObject: any = {};\r\n\t\t\tjObject.message = (config.message && config.message[validation[\"keyName\"]]) ? config.message[validation[\"keyName\"]] : typeof config.message == \"string\" ? config.message : '';\r\n\t\t\tjObject.messageKey = (config.messageKey && config.messageKey[validation[\"keyName\"]]) ? config.messageKey[validation[\"keyName\"]] : typeof config.messageKey == \"string\" ? config.messageKey : \"\";\r\n\t\t\tjObject = getMessageObject(jObject, validation[\"keyName\"]);\r\n\r\n\t\t\tif (!validation[\"isValid\"]) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"password\"], jObject, [controlValue]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { RANGE_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RangeConfig } from \"../models/config/range-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function rangeValidator(configModel?: RangeConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control, RANGE_CONFIG);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tif (!((control.value || control.value === 0) && parseFloat(control.value) >= config.minimumNumber && parseFloat(control.value) <= config.maximumNumber)) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"range\"], config, [control.value, config.minimumNumber, config.maximumNumber])\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function uppercaseValidator(configModel?: MessageConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tif (!(control.value === control.value.toUpperCase())) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"upperCase\"], config, [control.value])\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RequiredConfig } from \"../models/config/required-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function requiredValidator(configModel?: RequiredConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\tif (!RegexValidator.isNotBlank(control.value)) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"required\"], config, [])\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { PATTERN_CONFIG } from \"../const/config-names.const\";\r\nimport { PatternConfig } from \"../models/config/pattern-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function patternValidator(configModel?: PatternConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control, PATTERN_CONFIG);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tfor (var pattern in config.expression) {\r\n\t\t\t\tif (!(RegexValidator.isValid(control.value, config.expression[pattern]))) {\r\n\t\t\t\t\treturn ObjectMaker.toJson(pattern, config, [control.value])\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { TimeConfig } from \"../models/config/time-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function timeValidator(configModel?: TimeConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tlet isValid = config.allowSeconds ? RegexValidator.isValid(control.value, RegExRule[\"timeWithSeconds\"]) : RegexValidator.isValid(control.value, RegExRule[\"time\"]);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"time\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DefaultConfig } from \"../models/config/default-config\";\r\nimport { UrlConfig } from \"../models/config/url-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { validate } from \"../validators-function/regex-validation.function\";\r\n\r\nfunction urlValidation(configModel?: UrlConfig, control?: AbstractControl) {\r\n    var regex = RegExRule[\"url\"];\r\n    let config = getConfigObject(configModel, control);\r\n    if (config && config.urlValidationType) {\r\n        switch (config.urlValidationType) {\r\n            case 1:\r\n                regex = RegExRule[\"url\"];\r\n                break;\r\n            case 2:\r\n                regex = RegExRule[\"localhostUrl\"];\r\n                break;\r\n            case 3:\r\n                regex = RegExRule[\"interanetUrl\"];\r\n                break;\r\n        }\r\n    }\r\n\r\n    return validate(config, control!, regex, AnnotationTypes[\"url\"])\r\n}\r\n\r\nexport function urlValidator(configModel?: DefaultConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        return urlValidation(configModel, control)\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DefaultConfig } from \"../models/config/default-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function jsonValidator(configModel?: DefaultConfig): ValidatorFn {\r\n  function process(value: string) {\r\n    var result: boolean = false;\r\n\r\n    try {\r\n      var json = JSON.parse(value);\r\n      result = !!json && typeof json === 'object'\r\n    }\r\n    catch (ex) {\r\n      result = false;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!process(control.value))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"json\"], config, [control.value]);\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, FormArray, FormGroup } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ApplicationUtil } from \"./app-util\";\r\nimport { FormProvider } from \"./form-provider\";\r\nimport { ObjectMaker } from \"./object-maker\";\r\nimport { RegexValidator } from \"./regex-validator\";\r\n\r\nconst operatorOpposite: { [key: string]: string } = {\r\n    [AnnotationTypes[\"greaterThan\"]]: AnnotationTypes[\"lessThan\"],\r\n    [AnnotationTypes[\"lessThan\"]]: AnnotationTypes[\"greaterThan\"],\r\n    [AnnotationTypes[\"greaterThanEqualTo\"]]: AnnotationTypes[\"lessThanEqualTo\"],\r\n    [AnnotationTypes[\"lessThanEqualTo\"]]: AnnotationTypes[\"greaterThanEqualTo\"],\r\n}\r\n\r\nexport function relationalCheck(control: AbstractControl, config: any, relationalOperatorName: string) {\r\n    config = getConfigObject(config, control);\r\n    const matchControl = config.fieldName ? ApplicationUtil.getFormControl(config.fieldName, control) : undefined;\r\n    const matchControlValue = (matchControl) ? matchControl.value : config.value !== undefined ? config.value : '';\r\n    if (FormProvider.processRule(control, config)) {\r\n        if (config.isArrayControl) {\r\n            return arrayControlValidation(control, config, relationalOperatorName);\r\n        }\r\n        if (isValid(control, matchControlValue, relationalOperatorName) === false) {\r\n            return ObjectMaker.toJson(relationalOperatorName, config, [control.value, matchControlValue]);\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}\r\n\r\nfunction isValid(control: AbstractControl, matchControlValue: any, relationalOperatorName: string): boolean | null {\r\n    if (RegexValidator.isNotBlank(control.value) && RegexValidator.isNotBlank(matchControlValue)) {\r\n        let isValid = false;\r\n        switch (relationalOperatorName) {\r\n            case AnnotationTypes[\"greaterThan\"]:\r\n                isValid = parseFloat(control.value) > parseFloat(matchControlValue);\r\n                break;\r\n            case AnnotationTypes[\"lessThan\"]:\r\n                isValid = parseFloat(control.value) < parseFloat(matchControlValue)\r\n                break;\r\n            case AnnotationTypes[\"greaterThanEqualTo\"]:\r\n                isValid = parseFloat(control.value) >= parseFloat(matchControlValue)\r\n                break;\r\n            case AnnotationTypes[\"lessThanEqualTo\"]:\r\n                isValid = parseFloat(control.value) <= parseFloat(matchControlValue)\r\n                break;\r\n        }\r\n\r\n        return isValid;\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\nfunction setTimeFunc(invalidateControls: AbstractControl[]) {\r\n    let timeOut = setTimeout(() => {\r\n        invalidateControls.forEach(t => {\r\n            t.updateValueAndValidity();\r\n        })\r\n        clearTimeout(timeOut);\r\n    }, 200);\r\n}\r\n\r\nfunction arrayControlValidation(control: AbstractControl, config: any, relationalOperatorName: string) {\r\n    let formArray = ApplicationUtil.getParentFormArray(control);\r\n    let parentFormGroup = control.parent ? control.parent : undefined;\r\n    let oppositeOperator = operatorOpposite[relationalOperatorName];\r\n    let updateValidityControls: any[] = [];\r\n\r\n    if (formArray && parentFormGroup && formArray?.controls?.length > 1) {\r\n        let indexOf = formArray.controls.indexOf(parentFormGroup);\r\n        let fieldName = ApplicationUtil.getFormControlName(control);\r\n        let valid: boolean | null = true;\r\n        if (indexOf > 0) {\r\n            valid = validateControl(formArray, control, indexOf - 1, fieldName, oppositeOperator, relationalOperatorName, updateValidityControls)\r\n        }\r\n\r\n        if (valid && formArray.controls.length > indexOf + 1) {\r\n            valid = validateControl(formArray, control, indexOf + 1, fieldName, relationalOperatorName, relationalOperatorName, updateValidityControls);\r\n        }\r\n\r\n        if (updateValidityControls.length > 0) {\r\n            setTimeFunc(updateValidityControls);\r\n        }\r\n\r\n        if (valid === false) {\r\n            return ObjectMaker.toJson(relationalOperatorName, config, [control.value])\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}\r\n\r\nfunction validateControl(formArray: FormArray, control: AbstractControl, indexOf: number, fieldName: string, oppositeOperator: string, relationalOperatorName: string, updateValidityControls: any[]) {\r\n    let valid: boolean | null = false;\r\n    let formGroup = formArray.controls[indexOf] as FormGroup;\r\n    if (formGroup && formGroup.controls) {\r\n        let formControl = formGroup.controls[fieldName];\r\n        valid = isValid(control, formControl.value, oppositeOperator);\r\n        if (valid && formControl.errors && formControl.errors[relationalOperatorName]) {\r\n            updateValidityControls.push(formControl);\r\n        }\r\n    }\r\n\r\n    return valid;\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { relationalCheck } from \"../util/relational-checker.function\";\r\n\r\nexport function greaterThanValidator(configModel?: RelationalOperatorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return relationalCheck(control, configModel, AnnotationTypes[\"greaterThan\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { relationalCheck } from \"../util/relational-checker.function\";\r\n\r\nexport function greaterThanEqualToValidator(configModel?: RelationalOperatorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return relationalCheck(control, configModel, AnnotationTypes[\"greaterThanEqualTo\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { relationalCheck } from \"../util/relational-checker.function\";\r\n\r\nexport function lessThanEqualToValidator(configModel?: RelationalOperatorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return relationalCheck(control, configModel, AnnotationTypes[\"lessThanEqualTo\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { relationalCheck } from \"../util/relational-checker.function\";\r\n\r\nexport function lessThanValidator(configModel?: RelationalOperatorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return relationalCheck(control, configModel, AnnotationTypes[\"lessThan\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ChoiceConfig } from \"../models/config/choice-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\n/**\r\n * Validator function to validate the number of choices in an array.\r\n * @param configModel - Configuration model for the choice validator.\r\n * @returns Validator function.\r\n */\r\nexport function choiceValidator(configModel?: ChoiceConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        /* Get configuration object */\r\n        let config = getConfigObject(configModel, control);\r\n\r\n        /* Process rule using FormProvider */\r\n        if (FormProvider.processRule(control, config)) {\r\n            /* Check if control value is an array */\r\n            if (control.value instanceof Array) {\r\n                /* Set default values for minLength and maxLength if not provided */\r\n                config.minLength = (config.minLength == undefined) ? 0 : config.minLength;\r\n                config.maxLength = (config.maxLength == undefined) ? 0 : config.maxLength;\r\n\r\n                /* Check if the length of the array is within the specified range */\r\n                if ((((control.value.length) < config.minLength) || (config.maxLength !== 0 && control.value.length > config.maxLength)))\r\n                    /* Return validation error if the number of choices is outside the specified range */\r\n                    return ObjectMaker.toJson(AnnotationTypes[\"choice\"], config, [control.value]);\r\n            }\r\n        }\r\n\r\n        /* Return null if validation passes */\r\n        return ObjectMaker.null();\r\n    };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { FIELD_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DifferentConfig } from \"../models/config/compare-config\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function differentValidator(configModel?: DifferentConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, FIELD_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      const differentControl = ApplicationUtil.getFormControl(config.fieldName, control);\r\n      const differentControlValue = (differentControl) ? differentControl.value : '';\r\n      if (!(differentControl && differentControl.value != control.value))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"different\"], config, [control.value, differentControlValue]);\r\n    }\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumericConfig } from \"../models/config/numeric-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function numericValidator(configModel?: NumericConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        if (configModel && (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"numeric\"]])) {\r\n            ApplicationUtil.configureControl(control, configModel, AnnotationTypes[\"numeric\"]);\r\n        }\r\n\r\n        let config = getConfigObject(configModel, control);\r\n        if (ValidatorValueChecker.pass(control, config)) {\r\n            if (!RegexValidator.isValid(control.value, ApplicationUtil.numericValidation(config.allowDecimal, config.acceptValue))) {\r\n                return ObjectMaker.toJson(AnnotationTypes[\"numeric\"], config, [control.value]);\r\n            }\r\n        }\r\n\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function evenValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      if (!(control.value % 2 == 0))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"even\"], config, [control.value]);\r\n    }\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function oddValidator(configModel?: BaseConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tif (!(!(control.value % 2 == 0)) || !ApplicationUtil.isNumeric(control.value)) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"odd\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { FactorConfig } from \"../models/config/factor-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function factorValidator(configModel?: FactorConfig): ValidatorFn {\r\n  function positiveFactors(dividend: number, value: number) {\r\n    let isPositive = false;\r\n    for (var index = 1; index <= Math.floor(Math.sqrt(dividend)); index += 1) {\r\n      if (dividend % index === 0) {\r\n        if (index == value)\r\n          isPositive = true;\r\n        if (dividend / index !== index)\r\n          if ((dividend / index) == value)\r\n            isPositive = true;\r\n        if (isPositive)\r\n          break;\r\n      }\r\n    }\r\n    return isPositive;\r\n  }\r\n\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    const dividendField: any = (control.parent && config.fieldName) ? ApplicationUtil.getFormControl(config.fieldName, control) : undefined\r\n    const dividend = (config.fieldName && dividendField) ? dividendField.value : config.dividend;\r\n    if (FormProvider.processRule(control, config)) {\r\n      if (RegexValidator.isNotBlank(control.value) && dividend > 0) {\r\n        if (!RegexValidator.isValid(control.value, RegExRule[\"onlyDigit\"]) || !positiveFactors(dividend, parseInt(control.value)))\r\n          return ObjectMaker.toJson(AnnotationTypes[\"factor\"], config, [control.value]);\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function leapYearValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      var isValid = (control.value % 100 === 0) ? (control.value % 400 === 0) : (control.value % 4 === 0);\r\n      if (!isValid)\r\n        return ObjectMaker.toJson(AnnotationTypes[\"leapYear\"], config, [control.value]);\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { ARRAY_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\n/**\r\n * Validator function to check if all values in the array match the specified values.\r\n * @param configModel - Configuration model for the array validator.\r\n * @returns Validator function.\r\n */\r\nexport function allOfValidator(configModel?: ArrayConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Get configuration object */\r\n    let config = getConfigObject(configModel, control, ARRAY_CONFIG);\r\n\r\n    /* Check if the array values pass validation */\r\n    if (ValidatorValueChecker.passArrayValue(control, config)) {\r\n      /* Initialize test result to false */\r\n      let testResult = false;\r\n\r\n      /* Check if all values in the array match the specified values */\r\n      for (let value of config.matchValues) {\r\n        testResult = control.value.some((y: any) => y == value);\r\n        if (!testResult)\r\n          break;\r\n      }\r\n\r\n      /* If not all values match, return validation error */\r\n      if (!testResult)\r\n        return ObjectMaker.toJson(AnnotationTypes[\"allOf\"], config, [control.value]);\r\n    }\r\n\r\n    /* Return null if validation passes */\r\n    return ObjectMaker.null();\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { ARRAY_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function oneOfValidator(configModel?: ArrayConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control, ARRAY_CONFIG);\r\n        if (ValidatorValueChecker.passArrayValue(control, config)) {\r\n            var testResult = false;\r\n            for (let value of config.matchValues) {\r\n                let matchValue = ApplicationUtil.lowerCaseWithTrim(value);\r\n                testResult = Array.isArray(control.value) ? control.value.some((y) => ApplicationUtil.lowerCaseWithTrim(y) === matchValue) : ApplicationUtil.lowerCaseWithTrim(control.value) === matchValue;\r\n                if (testResult) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!testResult) {\r\n                return ObjectMaker.toJson(AnnotationTypes[\"oneOf\"], config, [control.value]);\r\n            }\r\n        }\r\n\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { ARRAY_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from \"../util/form-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\nexport function noneOfValidator(configModel?: ArrayConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control, ARRAY_CONFIG);\r\n        if (FormProvider.processRule(control, config)) {\r\n            var testResult = false;\r\n            for (let value of config.matchValues) {\r\n                let matchValue = ApplicationUtil.lowerCaseWithTrim(value);\r\n                testResult = Array.isArray(control.value) ? control.value.some((y) => ApplicationUtil.lowerCaseWithTrim(y) === matchValue) : ApplicationUtil.lowerCaseWithTrim(control.value) === matchValue;\r\n                if (testResult)\r\n                    break;\r\n            }\r\n            if (testResult)\r\n                return ObjectMaker.toJson(AnnotationTypes[\"noneOf\"], config, [control.value]);\r\n        }\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function macValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"macId\"], AnnotationTypes[\"mac\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\n/**\r\n * Validator function to check if the input contains only ASCII characters.\r\n * @param configModel - Configuration model for the ASCII validator.\r\n * @returns Validator function.\r\n */\r\nexport function asciiValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Use regexValidation function with ASCII rule and annotation type */\r\n    return regexValidation(configModel, control, RegExRule[\"ascii\"], AnnotationTypes[\"ascii\"]);\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function dataUriValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"dataUri\"], AnnotationTypes[\"dataUri\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function portValidator(configModel?: BaseConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tlet isValid = RegexValidator.isValid(control.value, RegExRule[\"onlyDigit\"]) && (control.value >= 0 && control.value <= 65535);\r\n\t\t\tif (!isValid) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"port\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\nexport function latLongValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      let splitText = control.value.split(',')\r\n      if (!(splitText.length > 1 && RegexValidator.isValid(splitText[0], RegExRule[\"lat\"]) && RegexValidator.isValid(splitText[1], RegExRule[\"long\"])))\r\n        return ObjectMaker.toJson(AnnotationTypes[\"latLong\"], config, [control.value]);\r\n    }\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n\r\n","import { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ExtensionConfig } from \"../models/config/extension-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function extensionValidator(configModel?: ExtensionConfig): any {\r\n  return (control: AbstractControl, files: FileList): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"extension\"]])\r\n      ApplicationUtil.configureControl(control, config, AnnotationTypes[\"extension\"]);\r\n    if (files && FormProvider.processRule(control, config)) {\r\n      if (RegexValidator.isNotBlank(control.value)) {\r\n        let testResult = true;\r\n        let extension: string = '';\r\n        for (var i = 0; i < files.length; i++) {\r\n          let file: File = files.item(i)!;\r\n          let splitText = file.name.split(\".\");\r\n          extension = splitText[splitText.length - 1];\r\n          let result = config.extensions.filter((t: any) => { return extension.toLowerCase() == t.toLowerCase() })[0];\r\n          if (!result && !configModel?.isExcludeExtensions) {\r\n            testResult = false;\r\n            break;\r\n          } else {\r\n            if (result && configModel?.isExcludeExtensions) {\r\n              testResult = false;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        if (!testResult)\r\n          return ObjectMaker.toJson(AnnotationTypes[\"extension\"], config, [extension, config.extensions.join(\",\")]);\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { SizeConfig } from \"../models/config/size-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function fileSizeValidator(configModel?: SizeConfig): any {\r\n\treturn (control: AbstractControl, files: FileList): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"fileSize\"]])\r\n\t\t\tApplicationUtil.configureControl(control, config, AnnotationTypes[\"fileSize\"]);\r\n\t\tif (files && FormProvider.processRule(control, config)) {\r\n\t\t\tif (RegexValidator.isNotBlank(control.value)) {\r\n\t\t\t\tlet minFileSize = config.minSize ? config.minSize : 0;\r\n\t\t\t\tlet testResult = false;\r\n\t\t\t\tlet fileSize: number = 0;\r\n\r\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\r\n\t\t\t\t\tlet file: File = files.item(i)!;\r\n\t\t\t\t\tfileSize = file.size;\r\n\t\t\t\t\ttestResult = (!(fileSize >= minFileSize && fileSize <= config.maxSize));\r\n\t\t\t\t\tif (testResult) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (testResult) {\r\n\t\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"fileSize\"], config, [fileSize, minFileSize, config.maxSize]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { StringValueConfig } from \"../models/config/string-value-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function endsWithValidator(configModel?: StringValueConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      let failed = false;\r\n      let values = config.values ? config.values : [config.value];\r\n      for (let value of values) {\r\n        var endString = String(control.value).substr(control.value.length - value.length, value.length);\r\n        failed = (endString != value);\r\n        if (!failed)\r\n          break;\r\n      }\r\n      if (failed)\r\n        return ObjectMaker.toJson(AnnotationTypes[\"endsWith\"], config, [control.value, config.value]);\r\n    }\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { StringComparisonConfig } from \"../models/config/string-comparison-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function startsWithValidator(configModel?: StringComparisonConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control);\r\n        if (ValidatorValueChecker.pass(control, config)) {\r\n            let failed = false;\r\n            let values = config.values ? config.values : [config.value];\r\n            for (let value of values) {\r\n                let startString = String(control.value).substr(0, value.length);\r\n                failed = (config.isRestrict && String(startString).toLowerCase() == String(value).toLowerCase()) || (!config.isRestrict && startString != value)\r\n                if (!failed) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (failed) {\r\n                return ObjectMaker.toJson(AnnotationTypes[\"startsWith\"], config, [control.value, config.value]);\r\n            }\r\n        }\r\n\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function primeNumberValidator(configModel?: BaseConfig): ValidatorFn {\r\n\tfunction isPrime(value: any): boolean {\r\n\t\tlet isPrimeNumber = value != 1;\r\n\t\tfor (var i = 2; i < value; i++) {\r\n\t\t\tif (value % i == 0) {\r\n\t\t\t\tisPrimeNumber = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn isPrimeNumber;\r\n\t}\r\n\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tif (!ApplicationUtil.isNumeric(control.value) || !isPrime(control.value)) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"primeNumber\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function latitudeValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"lat\"], AnnotationTypes[\"latitude\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { regexValidation } from \"../validators-function/regex-validation.function\";\r\n\r\nexport function longitudeValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return regexValidation(configModel, control, RegExRule[\"long\"], AnnotationTypes[\"longitude\"])\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ComposeConfig } from \"../models/config/compose-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\n/**\r\n * Validator function to compose multiple validators together.\r\n * @param configModel - Configuration model for the compose validator.\r\n * @returns Validator function.\r\n */\r\nexport function composeValidator(configModel?: ComposeConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Get configuration object */\r\n    let config = getConfigObject(configModel, control);\r\n\r\n    /* Process rule using FormProvider */\r\n    if (FormProvider.processRule(control, config)) {\r\n      if (config.validators) {\r\n        let result = undefined;\r\n\r\n        /* Iterate through each validator and apply it */\r\n        for (let validator of config.validators) {\r\n          result = validator(control);\r\n\r\n          /* If the result is not null, break the loop */\r\n          if (result)\r\n            break;\r\n        }\r\n\r\n        /* If a validation error is found, return it */\r\n        if (result)\r\n          return (config.messageKey || config.message) ? ObjectMaker.toJson(config.messageKey || AnnotationTypes[\"compose\"], config, [control.value]) : result;\r\n      }\r\n    }\r\n\r\n    /* Return null if validation passes */\r\n    return ObjectMaker.null();\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { RuleConfig } from \"../models/config/rule-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\nexport function ruleValidator(configModel?: RuleConfig, entity?: any): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\tlet result = null;\r\n\t\t\tfor (let rule of config.customRules) {\r\n\t\t\t\tresult = rule(entity);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (result) {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { FileConfig } from \"../models/config/file-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function fileValidator(configModel?: FileConfig): any {\r\n  return (control: AbstractControl, files: FileList): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"file\"]])\r\n      ApplicationUtil.configureControl(control, config, AnnotationTypes[\"file\"]);\r\n    if (files) {\r\n      if (FormProvider.processRule(control, config)) {\r\n        if (RegexValidator.isNotBlank(control.value)) {\r\n          let minFiles = config.minFiles ? config.minFiles : 0;\r\n          let maxFiles = config.maxFiles ? config.maxFiles : files.length;\r\n          if (!(files.length > 0 && files[0] instanceof File && files.length >= minFiles && files.length <= maxFiles))\r\n            return ObjectMaker.toJson(AnnotationTypes[\"file\"], config, [files.length, minFiles, maxFiles]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { CustomConfig } from \"../models/config/custom-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\nexport function customValidator(configModel?: CustomConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\tconst formGroupValue = ApplicationUtil.getParentObjectValue(control);\r\n\t\t\tconst parentObject = (control.parent) ? control.parent.value : undefined;\r\n\t\t\tlet result = null;\r\n\t\t\tfor (let rule of config.customRules) {\r\n\t\t\t\tresult = rule(formGroupValue, parentObject, config.additionalValue);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (result) {\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, FormArray, FormGroup, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { UniqueConfig } from \"../models/config/unique-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function uniqueValidator(configModel?: UniqueConfig): ValidatorFn {\r\n\tvar setTimeoutFunc = (invalidateControls: AbstractControl[], controlValues: any[]) => {\r\n\t\tlet timeOut = setTimeout(() => {\r\n\t\t\tinvalidateControls.forEach(t => {\r\n\t\t\t\tlet isMatched = controlValues.filter(x => x == t.value)[0]\r\n\t\t\t\tif (!isMatched)\r\n\t\t\t\t\tt.updateValueAndValidity();\r\n\t\t\t})\r\n\t\t\tclearTimeout(timeOut);\r\n\t\t}, 200)\r\n\t}\r\n\r\n\tvar additionalValidation = (config: UniqueConfig, fieldName: string, formGroup: AbstractControl, formArray: FormArray, currentValue: any) => {\r\n\t\tlet indexOf = formArray.controls.indexOf(formGroup);\r\n\t\tlet formArrayValue: any[] = [];\r\n\t\tif (indexOf != -1) {\r\n\t\t\tformArray.value.forEach((t: any, i: number) => {\r\n\t\t\t\tif (indexOf != i) {\r\n\t\t\t\t\tformArrayValue.push(t)\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn config!.additionalValidation!(currentValue, indexOf, fieldName, formGroup.value, formArrayValue);\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\tif (RegexValidator.isNotBlank(control.value)) {\r\n\t\t\t\tlet formArray = ApplicationUtil.getParentFormArray(control);\r\n\t\t\t\tlet parentFormGroup = control.parent ? control.parent : undefined;\r\n\t\t\t\tlet invalidateControls: AbstractControl[] = [];\r\n\t\t\t\tlet controlValues = [];\r\n\r\n\t\t\t\tif (formArray && parentFormGroup) {\r\n\t\t\t\t\tlet currentValue = control.value;\r\n\t\t\t\t\tlet fieldName = ApplicationUtil.getFormControlName(control);\r\n\t\t\t\t\tlet isMatched = false;\r\n\r\n\t\t\t\t\tfor (let formGroup of formArray.controls) {\r\n\t\t\t\t\t\tif (formGroup != parentFormGroup) {\r\n\t\t\t\t\t\t\tvar _formGroup = formGroup as FormGroup;\r\n\t\t\t\t\t\t\tisMatched = (ApplicationUtil.toLower(_formGroup.controls[fieldName].value) == ApplicationUtil.toLower(currentValue) && !(_formGroup.controls[fieldName].errors && (_formGroup.controls as any)[fieldName].errors[AnnotationTypes[\"unique\"]]))\r\n\t\t\t\t\t\t\tif (_formGroup.controls[fieldName].errors && (_formGroup.controls as any)[fieldName].errors[AnnotationTypes[\"unique\"]]) {\r\n\t\t\t\t\t\t\t\tvar matchedControl = formArray.controls.filter((t: any) => (t.controls as any)[fieldName] != (_formGroup.controls as any)[fieldName] && ApplicationUtil.toLower((t.controls as any)[fieldName].value) == ApplicationUtil.toLower((_formGroup.controls as any)[fieldName].value))[0];\r\n\t\t\t\t\t\t\t\tif (!matchedControl) {\r\n\t\t\t\t\t\t\t\t\tinvalidateControls.push(_formGroup.controls[fieldName])\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tcontrolValues.push(_formGroup.controls[fieldName].value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (isMatched) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (invalidateControls.length > 0) {\r\n\t\t\t\t\t\tsetTimeoutFunc(invalidateControls, controlValues);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet validation = false;\r\n\t\t\t\t\tif (config.additionalValidation) {\r\n\t\t\t\t\t\tvalidation = additionalValidation(config, fieldName, parentFormGroup, formArray, currentValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (isMatched && !validation) {\r\n\t\t\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"unique\"], config, [control.value])\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ImageConfig } from \"../models/config/image-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function imageValidator(configModel?: ImageConfig): any {\r\n\treturn (control: AbstractControl, files: FileList): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"image\"]]) {\r\n\t\t\tApplicationUtil.configureControl(control, config, AnnotationTypes[\"image\"]);\r\n\t\t}\r\n\r\n\t\tif (!files) {\r\n\t\t\treturn ObjectMaker.null();\r\n\t\t}\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\t\tif (RegexValidator.isNotBlank(control.value)) {\r\n\t\t\t\t\tlet testResult = false;\r\n\t\t\t\t\tfor (var i = 0; i < files.length; i++) {\r\n\t\t\t\t\t\tlet file: File = files.item(i)!;\r\n\t\t\t\t\t\tlet type = file.type ? file.type.split('/') : [];\r\n\t\t\t\t\t\ttestResult = type.length > 1 && type[0] == \"image\";\r\n\t\t\t\t\t\tif (!testResult) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet image = new Image();\r\n\t\t\t\t\t\tconfig.minWidth = config.minWidth ? config.minWidth : 0;\r\n\t\t\t\t\t\tconfig.minHeight = config.minHeight ? config.minHeight : 0;\r\n\t\t\t\t\t\timage.onload = () => {\r\n\t\t\t\t\t\t\ttestResult = (image.width >= config.minWidth && image.height >= config.minHeight) && (image.width <= config.maxWidth && image.height <= config.maxHeight);\r\n\t\t\t\t\t\t\tif (!testResult) {\r\n\t\t\t\t\t\t\t\tresolve(ObjectMaker.toJson(AnnotationTypes[\"image\"], config, [image.width, image.height]));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tresolve(ObjectMaker.null());\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\timage.onerror = () => { resolve(ObjectMaker.toJson(AnnotationTypes[\"image\"], config, [])); }\r\n\t\t\t\t\t\timage.src = URL.createObjectURL(file)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!testResult) {\r\n\t\t\t\t\t\tresolve(ObjectMaker.toJson(AnnotationTypes[\"image\"], config, []));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn ObjectMaker.null();\r\n\t\t})\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\n\r\nexport function notEmptyValidator(configModel?: BaseConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (FormProvider.processRule(control, config)) {\r\n\t\t\tif (!RegexValidator.isNotBlank(control.value, true)) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"notEmpty\"], config, [])\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { RegExRule } from \"./regex-rules\";\r\nimport { RegexValidator } from \"./regex-validator\";\r\n\r\nexport function checkIpV4(value: any) {\r\n\tlet isValid = RegexValidator.isValid(value, RegExRule[\"ipV4\"]);\r\n\tif (isValid) {\r\n\t\tconst splitDots = value.split('.');\r\n\t\tfor (let ipNum of splitDots) {\r\n\t\t\tisValid = ipNum <= 255;\r\n\t\t\tif (!isValid) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn isValid;\r\n}\r\n\r\nexport function checkIpV6(value: any) {\r\n\treturn RegexValidator.isValid(value, RegExRule[\"ipV6\"]);\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { IP_CONFIG } from \"../const/config-names.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { IpVersion } from '../enums';\r\nimport { IpConfig } from \"../models/config/ip-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { checkIpV4, checkIpV6 } from '../util/ip-checker';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function ipValidator(configModel?: IpConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control, IP_CONFIG);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      let values: string[] = config.isCidr ? control.value.split('/') : [control.value];\r\n      var isValid = (config.version == IpVersion.V4) ? checkIpV4(values[0]) : (config.version == IpVersion.V6) ? checkIpV6(values[0]) : (checkIpV4(values[0]) || checkIpV6(values[0]));\r\n\r\n      if (config.isCidr && isValid) {\r\n        isValid = (values.length > 1) ? config.version == IpVersion.V4 ? RegexValidator.isValid(values[1], RegExRule[\"cidrV4\"]) : config.version == IpVersion.V6 ?\r\n          RegexValidator.isValid(values[1], RegExRule[\"cidrV6\"]) : (RegexValidator.isValid(values[1], RegExRule[\"cidrV4\"]) || RegexValidator.isValid(values[1], RegExRule[\"cidrV6\"])) :\r\n          false;\r\n      }\r\n\r\n      if (!isValid) {\r\n        return ObjectMaker.toJson(AnnotationTypes[\"ip\"], config, [control.value]);\r\n      }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function cusipValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      var controlValue = control.value.toUpperCase();\r\n      let isValid = RegexValidator.isValid(controlValue, RegExRule[\"cusip\"])\r\n      if (isValid) {\r\n\r\n        let numericValues = controlValue.split(\"\").map((value: any) => {\r\n          var charCode = value.charCodeAt(0);\r\n          return charCode >= \"A\".charCodeAt(0) && charCode <= \"Z\".charCodeAt(0) ? charCode - \"A\".charCodeAt(0) + 10 : value\r\n        });\r\n        let totalCount = 0;\r\n        for (var i = 0; i < numericValues.length - 1; i++) {\r\n          var numericValue = parseInt(numericValues[i], 10);\r\n          if (i % 2 !== 0) {\r\n            numericValue *= 2;\r\n          }\r\n          if (numericValue > 9) {\r\n            numericValue -= 9;\r\n          }\r\n          totalCount += numericValue;\r\n        }\r\n\r\n        totalCount = (10 - (totalCount % 10)) % 10;\r\n        isValid = totalCount == numericValues[numericValues.length - 1];\r\n      }\r\n      if (!isValid)\r\n        return ObjectMaker.toJson(AnnotationTypes[\"cusip\"], config, [control.value]);\r\n    }\r\n    return ObjectMaker.null();\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { RegExRule } from \"../util/regex-rules\";\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function gridValidator(configModel?: BaseConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control);\r\n        if (ValidatorValueChecker.pass(control, config)) {\r\n            let controlValue = control.value.toUpperCase();\r\n            var isValid = RegexValidator.isValid(controlValue, RegExRule[\"grid\"])\r\n            if (isValid) {\r\n                controlValue = controlValue.replace(/\\s/g, '').replace(/-/g, '');\r\n                if ('GRID:' === controlValue.substr(0, 5)) {\r\n                    controlValue = controlValue.substr(5);\r\n                }\r\n                let alphaNums = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n                var alphaNumLength = alphaNums.length,\r\n                    length = controlValue.length,\r\n                    check = Math.floor(alphaNumLength / 2);\r\n                for (var i = 0; i < length; i++) {\r\n                    check = (((check || alphaNumLength) * 2) % (alphaNumLength + 1) + alphaNums.indexOf(controlValue.charAt(i))) % alphaNumLength;\r\n                }\r\n                isValid = (check === 1);\r\n            }\r\n            if (!isValid)\r\n                return ObjectMaker.toJson(AnnotationTypes[\"grid\"], config, [control.value]);\r\n        }\r\n\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { validateDate } from \"../util/date-checker.function\";\r\n\r\nexport function dateValidator(configModel?: BaseConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return validateDate(control, configModel, AnnotationTypes[\"date\"]);\r\n  }\r\n}\r\n","import { AbstractControl } from \"@angular/forms\";\r\nimport { OPERATORS } from \"../const/operators.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ApplicationUtil } from './app-util';\r\nimport { FormProvider } from \"./form-provider\";\r\nimport { ObjectMaker } from \"./object-maker\";\r\nimport { RegExRule } from \"./regex-rules\";\r\nimport { RegexValidator } from \"./regex-validator\";\r\n\r\nfunction runCondition(leftValue: number, rightValue: number, operator: string): boolean {\r\n    let result: boolean = false;\r\n    switch (operator) {\r\n        case OPERATORS[\"lessThan\"]:\r\n        case OPERATORS[\"greaterThan\"]:\r\n            result = leftValue > rightValue;\r\n            break;\r\n        case OPERATORS[\"lessThanEqualTo\"]:\r\n        case OPERATORS[\"greaterThanEqualTo\"]:\r\n            result = leftValue >= rightValue;\r\n            break;\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction isValid(control: AbstractControl, config: any) {\r\n    return config.allowSeconds ? RegexValidator.isValid(control.value, RegExRule[\"timeWithSeconds\"]) : RegexValidator.isValid(control.value, RegExRule[\"time\"]);\r\n}\r\n\r\nfunction getTime(value: any) {\r\n    let splitTime = (value) ? value.split(':') : [];\r\n    return new Date(1970, 0, 1, splitTime[0] ? splitTime[0] : 0, splitTime[1] ? splitTime[1] : 0, splitTime[2] ? splitTime[2] : 0).getTime();\r\n}\r\n\r\nexport function timeChecker(control: AbstractControl, config: any, operationType: string): { [key: string]: any } | null {\r\n    config = getConfigObject(config, control);\r\n    if (FormProvider.processRule(control, config)) {\r\n        if (RegexValidator.isNotBlank(control.value)) {\r\n            if (isValid(control, config)) {\r\n                let crossFormControl = config.fieldName ? ApplicationUtil.getFormControl(config.fieldName, control) : undefined;\r\n                let crossControlValue = crossFormControl ? getTime(crossFormControl.value) : getTime(config.value);\r\n                let currentControlValue = getTime(control.value);\r\n                let isValid = operationType == AnnotationTypes[\"minTime\"] ? runCondition(currentControlValue, crossControlValue, config.operator || OPERATORS[\"greaterThanEqualTo\"]) : runCondition(crossControlValue, currentControlValue, config.operator || OPERATORS[\"lessThanEqualTo\"])\r\n                if (!isValid) {\r\n                    return ObjectMaker.toJson(operationType, config, [control.value])\r\n                }\r\n            } else {\r\n                return ObjectMaker.toJson(operationType, config, [control.value])\r\n            }\r\n        }\r\n    }\r\n\r\n    return ObjectMaker.null();\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinTimeConfig } from \"../models/config/time-config\";\r\nimport { timeChecker } from \"../util/time-checker.function\";\r\n\r\nexport function minTimeValidator(configModel?: MinTimeConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return timeChecker(control, configModel, AnnotationTypes[\"minTime\"]);\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxTimeConfig } from \"../models/config/time-config\";\r\nimport { timeChecker } from \"../util/time-checker.function\";\r\n\r\nexport function maxTimeValidator(configModel?: MaxTimeConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    return timeChecker(control, configModel, AnnotationTypes[\"maxTime\"]);\r\n  }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RequiredConfig } from \"../models/config/required-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { FormProvider } from '../util/form-provider';\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\nexport function requiredTrueValidator(configModel?: RequiredConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config = getConfigObject(configModel, control);\r\n        if (FormProvider.processRule(control, config)) {\r\n            if (control.value !== true) {\r\n                return ObjectMaker.toJson(AnnotationTypes[\"requiredTrue\"], config, [])\r\n            }\r\n        }\r\n\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { VALIDATOR_CONFIG } from \"../const/app.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaskConfig } from \"../models/config/mask-config\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\nimport { getConfigObject } from \"../util/config-provider\";\r\n\r\nexport function maskValidator(configModel?: MaskConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    let config = getConfigObject(configModel, control);\r\n    if (!(control as any)[VALIDATOR_CONFIG] || !(control as any)[VALIDATOR_CONFIG][AnnotationTypes[\"mask\"]]) {\r\n      ApplicationUtil.configureControl(control, config, AnnotationTypes[\"mask\"]);\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","export const IBAN_COUNTRY_CODE_REGEX: any = {\r\n    AD: /^(AD[0-9]{2})\\d{8}[A-Z0-9]{12}$/,\r\n    AE: /^(AE[0-9]{2})\\d{3}\\d{16}$/,\r\n    AL: /^(AL[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\r\n    AT: /^(AT[0-9]{2})\\d{16}$/,\r\n    AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\r\n    BA: /^(BA[0-9]{2})\\d{16}$/,\r\n    BE: /^(BE[0-9]{2})\\d{12}$/,\r\n    BG: /^(BG[0-9]{2})[A-Z]{4}\\d{6}[A-Z0-9]{8}$/,\r\n    BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,\r\n    BR: /^(BR[0-9]{2})\\d{23}[A-Z]{1}[A-Z0-9]{1}$/,\r\n    BY: /^(BY[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\r\n    CH: /^(CH[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\r\n    CR: /^(CR[0-9]{2})\\d{18}$/,\r\n    CY: /^(CY[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\r\n    CZ: /^(CZ[0-9]{2})\\d{20}$/,\r\n    DE: /^(DE[0-9]{2})\\d{18}$/,\r\n    DK: /^(DK[0-9]{2})\\d{14}$/,\r\n    DO: /^(DO[0-9]{2})[A-Z]{4}\\d{20}$/,\r\n    EE: /^(EE[0-9]{2})\\d{16}$/,\r\n    EG: /^(EG[0-9]{2})\\d{25}$/,\r\n    ES: /^(ES[0-9]{2})\\d{20}$/,\r\n    FI: /^(FI[0-9]{2})\\d{14}$/,\r\n    FO: /^(FO[0-9]{2})\\d{14}$/,\r\n    FR: /^(FR[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\r\n    GB: /^(GB[0-9]{2})[A-Z]{4}\\d{14}$/,\r\n    GE: /^(GE[0-9]{2})[A-Z0-9]{2}\\d{16}$/,\r\n    GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,\r\n    GL: /^(GL[0-9]{2})\\d{14}$/,\r\n    GR: /^(GR[0-9]{2})\\d{7}[A-Z0-9]{16}$/,\r\n    GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,\r\n    HR: /^(HR[0-9]{2})\\d{17}$/,\r\n    HU: /^(HU[0-9]{2})\\d{24}$/,\r\n    IE: /^(IE[0-9]{2})[A-Z0-9]{4}\\d{14}$/,\r\n    IL: /^(IL[0-9]{2})\\d{19}$/,\r\n    IQ: /^(IQ[0-9]{2})[A-Z]{4}\\d{15}$/,\r\n    IR: /^(IR[0-9]{2})0\\d{2}0\\d{18}$/,\r\n    IS: /^(IS[0-9]{2})\\d{22}$/,\r\n    IT: /^(IT[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\r\n    JO: /^(JO[0-9]{2})[A-Z]{4}\\d{22}$/,\r\n    KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,\r\n    KZ: /^(KZ[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\r\n    LB: /^(LB[0-9]{2})\\d{4}[A-Z0-9]{20}$/,\r\n    LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,\r\n    LI: /^(LI[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\r\n    LT: /^(LT[0-9]{2})\\d{16}$/,\r\n    LU: /^(LU[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\r\n    LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,\r\n    MC: /^(MC[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\r\n    MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,\r\n    ME: /^(ME[0-9]{2})\\d{18}$/,\r\n    MK: /^(MK[0-9]{2})\\d{3}[A-Z0-9]{10}\\d{2}$/,\r\n    MR: /^(MR[0-9]{2})\\d{23}$/,\r\n    MT: /^(MT[0-9]{2})[A-Z]{4}\\d{5}[A-Z0-9]{18}$/,\r\n    MU: /^(MU[0-9]{2})[A-Z]{4}\\d{19}[A-Z]{3}$/,\r\n    NL: /^(NL[0-9]{2})[A-Z]{4}\\d{10}$/,\r\n    NO: /^(NO[0-9]{2})\\d{11}$/,\r\n    PK: /^(PK[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\r\n    PL: /^(PL[0-9]{2})\\d{24}$/,\r\n    PS: /^(PS[0-9]{2})[A-Z0-9]{4}\\d{21}$/,\r\n    PT: /^(PT[0-9]{2})\\d{21}$/,\r\n    QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\r\n    RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,\r\n    RS: /^(RS[0-9]{2})\\d{18}$/,\r\n    SA: /^(SA[0-9]{2})\\d{2}[A-Z0-9]{18}$/,\r\n    SC: /^(SC[0-9]{2})[A-Z]{4}\\d{20}[A-Z]{3}$/,\r\n    SE: /^(SE[0-9]{2})\\d{20}$/,\r\n    SI: /^(SI[0-9]{2})\\d{15}$/,\r\n    SK: /^(SK[0-9]{2})\\d{20}$/,\r\n    SM: /^(SM[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\r\n    SV: /^(SV[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\r\n    TL: /^(TL[0-9]{2})\\d{19}$/,\r\n    TN: /^(TN[0-9]{2})\\d{20}$/,\r\n    TR: /^(TR[0-9]{2})\\d{5}[A-Z0-9]{17}$/,\r\n    UA: /^(UA[0-9]{2})\\d{6}[A-Z0-9]{19}$/,\r\n    VA: /^(VA[0-9]{2})\\d{18}$/,\r\n    VG: /^(VG[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\r\n    XK: /^(XK[0-9]{2})\\d{16}$/,\r\n};","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { IBAN_COUNTRY_CODE_REGEX } from \"../const/iban-country-wise-regex.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { IBANConfig } from \"../models/config/iban-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nfunction hasValidIbanFormat(value: string, countryCode: string) {\r\n    const strippedStr = value.replace(/[\\s\\-]+/gi, '').toUpperCase();\r\n    const isoCountryCode = countryCode || strippedStr.slice(0, 2).toUpperCase();\r\n\r\n    return (isoCountryCode in IBAN_COUNTRY_CODE_REGEX) && IBAN_COUNTRY_CODE_REGEX[isoCountryCode].test(strippedStr);\r\n}\r\n\r\nfunction hasValidIbanChecksum(str: any) {\r\n    const strippedStr = str.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic\r\n    const rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);\r\n    const alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, (char: any) => char.charCodeAt(0) - 55);\r\n    const remainder = alphaCapsReplacedWithDigits.match(/\\d{1,7}/g).reduce((acc: any, value: any) => Number(acc + value) % 97, '');\r\n    return remainder === 1;\r\n}\r\n\r\nexport function ibanValidator(configModel?: IBANConfig): ValidatorFn {\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let config: IBANConfig = getConfigObject(configModel, control);\r\n        if (ValidatorValueChecker.pass(control, config)) {\r\n            if (!(hasValidIbanFormat(control.value, config.countryCode!) && hasValidIbanChecksum(control.value)))\r\n                return ObjectMaker.toJson(AnnotationTypes[\"iban\"], config, [control.value, config.countryCode]);\r\n        }\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n","import {\r\n\tallOfValidator,\r\n\talphaNumericValidator, alphaValidator,\r\n\tasciiValidator,\r\n\tchoiceValidator,\r\n\tcompareValidator,\r\n\tcomposeValidator,\r\n\tcontainsValidator,\r\n\tcreditCardValidator,\r\n\tcusipValidator,\r\n\tdataUriValidator,\r\n\tdateValidator,\r\n\tdifferentValidator,\r\n\tdigitValidator,\r\n\temailValidator,\r\n\tendsWithValidator,\r\n\tevenValidator,\r\n\textensionValidator,\r\n\tfactorValidator,\r\n\tfileSizeValidator,\r\n\tfileValidator,\r\n\tgreaterThanEqualToValidator,\r\n\tgreaterThanValidator,\r\n\tgridValidator,\r\n\thexColorValidator,\r\n\tibanValidator,\r\n\timageValidator,\r\n\tipValidator,\r\n\tjsonValidator,\r\n\tlatLongValidator,\r\n\tlatitudeValidator,\r\n\tleapYearValidator,\r\n\tlessThanEqualToValidator,\r\n\tlessThanValidator,\r\n\tlongitudeValidator,\r\n\tlowercaseValidator,\r\n\tmacValidator,\r\n\tmaskValidator,\r\n\tmaxDateValidator,\r\n\tmaxLengthValidator,\r\n\tmaxNumberValidator,\r\n\tmaxTimeValidator,\r\n\tminDateValidator,\r\n\tminLengthValidator,\r\n\tminNumberValidator,\r\n\tminTimeValidator,\r\n\tnoneOfValidator,\r\n\tnotEmptyValidator,\r\n\tnumericValidator,\r\n\toddValidator,\r\n\toneOfValidator,\r\n\tpasswordValidator,\r\n\tpatternValidator,\r\n\tportValidator,\r\n\tprimeNumberValidator,\r\n\trangeValidator,\r\n\trequiredTrueValidator,\r\n\trequiredValidator,\r\n\truleValidator,\r\n\tstartsWithValidator,\r\n\ttimeValidator,\r\n\tuniqueValidator,\r\n\tuppercaseValidator,\r\n\turlValidator\r\n} from '../reactive-form-validators/index';\r\n\r\nexport const APP_VALIDATORS: { [key: string]: Function } = {\r\n\t\"alphaNumeric\": alphaNumericValidator,\r\n\t\"alpha\": alphaValidator,\r\n\t\"compare\": compareValidator,\r\n\t\"email\": emailValidator,\r\n\t\"hexColor\": hexColorValidator,\r\n\t\"lowerCase\": lowercaseValidator,\r\n\t\"maxDate\": maxDateValidator,\r\n\t\"maxNumber\": maxNumberValidator,\r\n\t\"minDate\": minDateValidator,\r\n\t\"minNumber\": minNumberValidator,\r\n\t\"contains\": containsValidator,\r\n\t\"upperCase\": uppercaseValidator,\r\n\t\"maxLength\": maxLengthValidator,\r\n\t\"minLength\": minLengthValidator,\r\n\t\"password\": passwordValidator,\r\n\t\"range\": rangeValidator,\r\n\t\"required\": requiredValidator,\r\n\t\"creditCard\": creditCardValidator,\r\n\t\"digit\": digitValidator,\r\n\t\"pattern\": patternValidator,\r\n\t\"time\": timeValidator,\r\n\t\"url\": urlValidator,\r\n\t\"json\": jsonValidator,\r\n\t\"greaterThan\": greaterThanValidator,\r\n\t\"greaterThanEqualTo\": greaterThanEqualToValidator,\r\n\t\"lessThan\": lessThanValidator,\r\n\t\"lessThanEqualTo\": lessThanEqualToValidator,\r\n\t\"choice\": choiceValidator,\r\n\t\"different\": differentValidator,\r\n\t\"numeric\": numericValidator,\r\n\t\"even\": evenValidator,\r\n\t\"odd\": oddValidator,\r\n\t\"factor\": factorValidator,\r\n\t\"leapYear\": leapYearValidator,\r\n\t\"allOf\": allOfValidator,\r\n\t\"oneOf\": oneOfValidator,\r\n\t\"noneOf\": noneOfValidator,\r\n\t\"mac\": macValidator,\r\n\t\"ascii\": asciiValidator,\r\n\t\"dataUri\": dataUriValidator,\r\n\t\"port\": portValidator,\r\n\t\"latLong\": latLongValidator,\r\n\t\"extension\": extensionValidator,\r\n\t\"fileSize\": fileSizeValidator,\r\n\t\"endsWith\": endsWithValidator,\r\n\t\"startsWith\": startsWithValidator,\r\n\t\"primeNumber\": primeNumberValidator,\r\n\t\"latitude\": latitudeValidator,\r\n\t\"longitude\": longitudeValidator,\r\n\t\"compose\": composeValidator,\r\n\t\"rule\": ruleValidator,\r\n\t\"file\": fileValidator,\r\n\t\"unique\": uniqueValidator,\r\n\t\"image\": imageValidator,\r\n\t\"notEmpty\": notEmptyValidator,\r\n\t\"ip\": ipValidator,\r\n\t\"cusip\": cusipValidator,\r\n\t\"grid\": gridValidator,\r\n\t\"date\": dateValidator,\r\n\t\"minTime\": minTimeValidator,\r\n\t\"maxTime\": maxTimeValidator,\r\n\t\"requiredTrue\": requiredTrueValidator,\r\n\t\"mask\": maskValidator,\r\n\t\"iban\": ibanValidator\r\n}\r\n","import { AbstractControl, AsyncValidatorFn } from \"@angular/forms\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { map } from 'rxjs/operators';\r\nimport { APP_VALIDATORS } from '../../const/app-validators.const';\r\nimport { FormProvider } from '../../util/form-provider';\r\n\r\n/**\r\n * Base asynchronous validator factory function.\r\n * @param configModel - Configuration model for the validator.\r\n * @param validatorName - Name of the validator.\r\n * @returns AsyncValidatorFn function.\r\n */\r\nexport function baseAsyncValidator(configModel: any, validatorName: string): AsyncValidatorFn {\r\n    return (control: AbstractControl): Observable<{ [key: string]: any } | null> => {\r\n        /* Ensure configModel is defined */\r\n        configModel = configModel || {};\r\n\r\n        if (configModel.validatorConfig) {\r\n            /* Process rule using FormProvider */\r\n            if (FormProvider.processRule(control, configModel)) {\r\n                /* Use the provided async validator configuration */\r\n                return (<Observable<any>>configModel.validatorConfig).pipe(map(resolveConfig(configModel, validatorName, control)));\r\n            }\r\n\r\n            /* If rule is not applicable, return null */\r\n            return of(null);\r\n        } else {\r\n            /* Use the default configuration and resolve the validator */\r\n            return of(resolveConfig(configModel, validatorName, control)(configModel));\r\n        }\r\n    };\r\n}\r\n\r\n/**\r\n * Resolves the configuration and applies the validator to the control.\r\n * @param configModel - Configuration model for the validator.\r\n * @param validatorName - Name of the validator.\r\n * @param control - Form control to validate.\r\n * @returns Validator function.\r\n */\r\nfunction resolveConfig(configModel: any, validatorName: string, control: AbstractControl) {\r\n    return (config: any) => {\r\n        /* Create a clone of the configuration model with expressionProcessed flag */\r\n        let configClone = { ...configModel, ...config, ...{ expressionProcessed: true } };\r\n\r\n        /* Apply the validator function to the control using the resolved configuration */\r\n        return APP_VALIDATORS[validatorName](configClone)(control);\r\n    };\r\n}\r\n","import { defaultContainer } from '../core/default-container';\r\nexport function baseDecoratorFunction(annotationType: string, config: any, isAsync: boolean = false) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.init(target, parameterIndex, propertyKey, annotationType, config, isAsync)\r\n    }\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function allOf(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"allOf\"], config);\r\n}\r\n\r\nexport function allOfAsync(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"allOf\"], [baseAsyncValidator(config, AnnotationTypes[\"allOf\"])], true);\r\n}","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function alpha(config?: AlphaConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"alpha\"], config);\r\n}\r\n\r\nexport function alphaAsync(config?: AlphaConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"alpha\"], [baseAsyncValidator(config, AnnotationTypes[\"alpha\"])], true);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function alphaNumeric(config?: AlphaConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"alphaNumeric\"], config);\r\n}\r\n\r\nexport function alphaNumericAsync(config?: AlphaConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"alphaNumeric\"], [baseAsyncValidator(config, AnnotationTypes[\"alphaNumeric\"])], true);\r\n}","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function and(config?: LogicalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"and\"], config);\r\n}\r\n\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function ascii(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"ascii\"], config);\r\n}","import { AsyncValidatorFn } from \"@angular/forms\";\r\nimport { AnnotationTypes } from '../core/annotation-types';\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function async(validators: AsyncValidatorFn[]) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"async\"], validators, true);\r\n}\r\n\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ChoiceConfig } from \"../models/config/choice-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function choice(config?: ChoiceConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"choice\"], config);\r\n}\r\n\r\nexport function choiceAsync(config?: ChoiceConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"choice\"], [baseAsyncValidator(config, AnnotationTypes[\"choice\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CompareConfig } from \"../models/config/compare-config\";\r\nimport { baseDecoratorFunction } from './base-decorator.function';\r\n\r\nexport function compare(config: CompareConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"compare\"], config);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ComposeConfig } from \"../models/config/compose-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function compose(config?: ComposeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"compose\"], config);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ContainsConfig } from \"../models/config/contains-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function contains(config: ContainsConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"contains\"], config);\r\n}\r\n\r\nexport function containsAsync(config?: ContainsConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"contains\"], [baseAsyncValidator(config, AnnotationTypes[\"contains\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CreditCardConfig } from \"../models/config/credit-card-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function creditCard(config: CreditCardConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"creditCard\"], config);\r\n}\r\n\r\nexport function creditCardAsync(config?: CreditCardConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"creditCard\"], [baseAsyncValidator(config, AnnotationTypes[\"creditCard\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function cusip(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"cusip\"], config);\r\n}","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { CustomConfig } from \"../models/config/custom-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function custom(config?: CustomConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"custom\"], config);\r\n}\r\n\r\nexport function customAsync(config?: CustomConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"custom\"], [baseAsyncValidator(config, AnnotationTypes[\"custom\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function dataUri(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"dataUri\"], config)\r\n}","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseDateConfig } from \"../models/config/base-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function date(config?: BaseDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"date\"], config);\r\n}\r\n\r\nexport function dateAsync(config?: BaseDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"date\"], [baseAsyncValidator(config, AnnotationTypes[\"date\"])], true);\r\n}","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DifferentConfig } from \"../models/config/compare-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function different(config: DifferentConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"different\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DigitConfig } from \"../models/config/digit-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function digit(config?: DigitConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"digit\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { EmailConfig } from \"../models/config/email-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function email(config?: EmailConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"email\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { StringValueConfig } from \"../models/config/string-value-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function endsWith(config: StringValueConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"endsWith\"], config)\r\n}\r\n\r\nexport function endsWithAsync(config?: StringValueConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"endsWith\"], [baseAsyncValidator(config, AnnotationTypes[\"endsWith\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function even(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"even\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ExtensionConfig } from \"../models/config/extension-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function extension(config: ExtensionConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"extension\"], config)\r\n}\r\n\r\nexport function extensionAsync(config?: ExtensionConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"extension\"], [baseAsyncValidator(config, AnnotationTypes[\"extension\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { FactorConfig } from \"../models/config/factor-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function factor(config?: FactorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"factor\"], config)\r\n}\r\n\r\nexport function factorAsync(config?: FactorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"factor\"], [baseAsyncValidator(config, AnnotationTypes[\"factor\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { FileConfig } from \"../models/config/file-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function file(config?: FileConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"file\"], config)\r\n}\r\n\r\nexport function fileAsync(config?: FileConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"file\"], [baseAsyncValidator(config, AnnotationTypes[\"file\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { SizeConfig } from \"../models/config/size-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function fileSize(config: SizeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"fileSize\"], config)\r\n}\r\n\r\nexport function fileSizeAsync(config?: SizeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"fileSize\"], [baseAsyncValidator(config, AnnotationTypes[\"fileSize\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function greaterThanEqualTo(config: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"greaterThanEqualTo\"], config)\r\n}\r\n\r\nexport function greaterThanEqualToAsync(config?: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"greaterThanEqualTo\"], [baseAsyncValidator(config, AnnotationTypes[\"greaterThanEqualTo\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function greaterThan(config: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"greaterThan\"], config)\r\n}\r\n\r\nexport function greaterThanAsync(config?: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"greaterThan\"], [baseAsyncValidator(config, AnnotationTypes[\"greaterThan\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function grid(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"grid\"], config);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function hexColor(config?: MessageConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"hexColor\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { IBANConfig } from \"../models/config/iban-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function iban(config?: IBANConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"iban\"], config);\r\n}\r\n\r\nexport function ibanAsync(config?: IBANConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"iban\"], [baseAsyncValidator(config, AnnotationTypes[\"iban\"])], true);\r\n}\r\n\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ImageConfig } from \"../models/config/image-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function image(config?: ImageConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"image\"], config)\r\n}\r\n\r\nexport function imageAsync(config?: ImageConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"image\"], [baseAsyncValidator(config, AnnotationTypes[\"image\"])], true);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DefaultConfig } from \"../models/config/default-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function json(config?: DefaultConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"json\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function latitude(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"latitude\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function latLong(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"latLong\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function leapYear(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"leapYear\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function lessThanEqualTo(config: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"lessThanEqualTo\"], config)\r\n}\r\n\r\nexport function lessThanEqualToAsync(config?: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"lessThanEqualTo\"], [baseAsyncValidator(config, AnnotationTypes[\"lessThanEqualTo\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function lessThan(config: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"lessThan\"], config)\r\n}\r\n\r\nexport function lessThanAsync(config?: RelationalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"lessThan\"], [baseAsyncValidator(config, AnnotationTypes[\"lessThan\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function longitude(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"longitude\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function lowerCase(config?: MessageConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"lowerCase\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function mac(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"mac\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { MaskConfig } from \"../models/config/mask-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function mask(config?: MaskConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"mask\"], config);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxDateConfig } from \"../models/config/max-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function maxDate(config: MaxDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxDate\"], config)\r\n}\r\n\r\nexport function maxDateAsync(config?: MaxDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxDate\"], [baseAsyncValidator(config, AnnotationTypes[\"maxDate\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function maxLength(config: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxLength\"], config)\r\n}\r\n\r\nexport function maxLengthAsync(config?: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxLength\"], [baseAsyncValidator(config, AnnotationTypes[\"maxLength\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function maxNumber(config: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxNumber\"], config)\r\n}\r\n\r\nexport function maxNumberAsync(config?: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxNumber\"], [baseAsyncValidator(config, AnnotationTypes[\"maxNumber\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxTimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function maxTime(config: MaxTimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxTime\"], config)\r\n}\r\n\r\nexport function maxTimeAsync(config?: MaxTimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"maxTime\"], [baseAsyncValidator(config, AnnotationTypes[\"maxTime\"])], true);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinDateConfig } from \"../models/config/min-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function minDate(config: MinDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minDate\"], config)\r\n}\r\n\r\nexport function minDateAsync(config?: MinDateConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minDate\"], [baseAsyncValidator(config, AnnotationTypes[\"minDate\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function minLength(config: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minLength\"], config)\r\n}\r\n\r\nexport function minLengthAsync(config?: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minLength\"], [baseAsyncValidator(config, AnnotationTypes[\"minLength\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function minNumber(config: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minNumber\"], config)\r\n}\r\n\r\nexport function minNumberAsync(config?: NumberConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minNumber\"], [baseAsyncValidator(config, AnnotationTypes[\"minNumber\"])], true);\r\n}","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinTimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function minTime(config: MinTimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minTime\"], config)\r\n}\r\n\r\nexport function minTimeAsync(config?: MinTimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"minTime\"], [baseAsyncValidator(config, AnnotationTypes[\"minTime\"])], true);\r\n}\r\n","import { defaultContainer } from '../core/default-container';\r\nimport { PropsConfig } from '../models/config/props-config';\r\n\r\nexport function model(config?: PropsConfig[]) {\r\n    return function (target: Object) {\r\n        defaultContainer.addPropsConfig(target, config)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\nimport { DisableConfig } from \"../../models/config/disable-config\";\r\nexport function disable(config?: DisableConfig) {\r\n    return function (\r\n        target: Object,\r\n        propertyKey: string, parameterIndex?: any\r\n    ) {\r\n        defaultContainer.addDecoratorConfig(target, parameterIndex, propertyKey, config, DECORATORS[\"disabled\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\nimport { ElementClassConfig } from \"../../models/config/element-class-config\";\r\nexport function elementClass(config?: ElementClassConfig) {\r\n    return function (\r\n        target: Object,\r\n        propertyKey: string, parameterIndex?: any\r\n    ) {\r\n        defaultContainer.addDecoratorConfig(target, parameterIndex, propertyKey, config, DECORATORS[\"elementClass\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\nimport { ErrorConfig } from \"../../models/config/error-config\";\r\nexport function error(config?: ErrorConfig) {\r\n    return function (\r\n        target: Object,\r\n        propertyKey: string, parameterIndex?: any\r\n    ) {\r\n        defaultContainer.addDecoratorConfig(target, parameterIndex, propertyKey, config, DECORATORS[\"error\"])\r\n    }\r\n}\r\n\r\n","import { AnnotationTypes } from '../../core/annotation-types';\r\nimport { UpdateOnConfig } from '../../models/config/update-on-config';\r\nimport { baseDecoratorFunction } from '../base-decorator.function';\r\nexport function updateOn(config: UpdateOnConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"updateOn\"], config);\r\n}","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function noneOf(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"noneOf\"], config)\r\n}\r\n\r\nexport function noneOfAsync(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"noneOf\"], [baseAsyncValidator(config, AnnotationTypes[\"noneOf\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function not(config?: LogicalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"not\"], config);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function notEmpty(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"notEmpty\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { NumericConfig } from \"../models/config/numeric-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function numeric(config?: NumericConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"numeric\"], config)\r\n}\r\n\r\nexport function numericAsync(config?: NumericConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"numeric\"], [baseAsyncValidator(config, AnnotationTypes[\"numeric\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function odd(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"odd\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function oneOf(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"oneOf\"], config)\r\n}\r\n\r\nexport function oneOfAsync(config?: ArrayConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"oneOf\"], [baseAsyncValidator(config, AnnotationTypes[\"oneOf\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function or(config?: LogicalOperatorConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"or\"], config);\r\n}\r\n\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { PasswordConfig } from \"../models/config/password-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function password(config: PasswordConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"password\"], config)\r\n}\r\n\r\nexport function passwordAsync(config?: PasswordConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"password\"], [baseAsyncValidator(config, AnnotationTypes[\"password\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { PatternConfig } from \"../models/config/pattern-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function pattern(config: PatternConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"pattern\"], config)\r\n}\r\n\r\nexport function patternAsync(config?: PatternConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"pattern\"], [baseAsyncValidator(config, AnnotationTypes[\"pattern\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function port(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"port\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function primeNumber(config?: BaseConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"primeNumber\"], config)\r\n}\r\n","import { ARRAY_PROPERTY } from \"../const\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { PropArrayConfig } from \"../models/config/prop-config\";\r\nimport { PropertyInfo } from \"../models/property-info\";\r\nimport { Type } from \"../util/index\";\r\n\r\nexport function propArray<T>(entity?: Type<T>, config?: PropArrayConfig) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        var propertyInfo: PropertyInfo = {\r\n            name: propertyKey,\r\n            propertyType: ARRAY_PROPERTY,\r\n            entity: entity,\r\n            dataPropertyName: config ? config.name : undefined,\r\n            entityProvider: config ? config.entityProvider : undefined,\r\n            arrayConfig: config ? {\r\n                allowMaxIndex: config.allowMaxIndex, messageKey: config.messageKey, createBlank: config.createBlank\r\n            } : undefined\r\n        }\r\n\r\n        defaultContainer.addProperty(target.constructor, propertyInfo);\r\n    }\r\n}\r\n","import { OBJECT_PROPERTY } from \"../const\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { PropObjectConfig } from \"../models/config/prop-config\";\r\nimport { Type } from \"../util/type\";\r\n\r\nexport function propObject<T>(entity?: Type<T>, config?: PropObjectConfig) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.initPropertyObject(propertyKey, OBJECT_PROPERTY, entity, target, config);\r\n    }\r\n}\r\n","import { PROPERTY } from \"../const\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { PropConfig } from \"../models/config/prop-config\";\r\nimport { PropertyInfo } from \"../models/property-info\";\r\n\r\nexport function prop(config?: PropConfig) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        var propertyInfo: PropertyInfo = {\r\n            name: propertyKey,\r\n            propertyType: PROPERTY,\r\n            dataPropertyName: config ? config.name : undefined,\r\n            defaultValue: config ? config.defaultValue : undefined,\r\n            valuePath: config ? config.valuePath : undefined,\r\n            value: config ? config.value : undefined,\r\n            ignore: config ? config.ignore : undefined,\r\n            isPrimaryKey: config ? config.isPrimaryKey : undefined\r\n        }\r\n\r\n        defaultContainer.addProperty(target.constructor, propertyInfo);\r\n    }\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RangeConfig } from \"../models/config/range-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function range(config: RangeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"range\"], config)\r\n}\r\n\r\nexport function rangeAsync(config?: RangeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"range\"], [baseAsyncValidator(config, AnnotationTypes[\"range\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RequiredConfig } from \"../models/config/required-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function required(config?: RequiredConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"required\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RequiredConfig } from \"../models/config/required-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function requiredTrue(config?: RequiredConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"requiredTrue\"], config)\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { RuleConfig } from \"../models/config/rule-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function rule(config?: RuleConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"rule\"], config)\r\n}\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function blacklist(chars: string) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"blacklist\"], chars)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function escape() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"escape\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function ltrim() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"ltrim\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function prefix(text: string) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"prefix\"], text);\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function rtrim() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"rtrim\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\nimport { SanitizeConfig } from '../../models/config/sanitize-config';\r\n\r\nexport function sanitize(config: SanitizeConfig) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"sanitize\"], config)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function stripLow(keepNewLines?: boolean) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"stripLow\"], keepNewLines)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function suffix(text: string) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"suffix\"], text);\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function toBoolean(strict?: boolean) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"toBoolean\"], strict)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\nimport { ToDateConfig } from '../../models/config/todate-config';\r\n\r\nexport function toDate(config?: ToDateConfig) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"toDate\"], config)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function toDouble() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"toDouble\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function toFloat() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"toFloat\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function toInt(radix?: number) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"toInt\"], radix)\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function toString() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"string\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function trim() {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"trim\"])\r\n    }\r\n}\r\n\r\n","import { DECORATORS } from \"../../const/decorators.const\";\r\nimport { defaultContainer } from '../../core/default-container';\r\n\r\nexport function whitelist(chars: string) {\r\n    return function (target: Object, propertyKey: string, parameterIndex?: any) {\r\n        defaultContainer.addSanitizer(target, parameterIndex, propertyKey, DECORATORS[\"whitelist\"], chars)\r\n    }\r\n}\r\n\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { StringComparisonConfig } from \"../models/config/string-comparison-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function startsWith(config: StringComparisonConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"startsWith\"], config)\r\n}\r\n\r\nexport function startsWithAsync(config?: StringComparisonConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"startsWith\"], [baseAsyncValidator(config, AnnotationTypes[\"startsWith\"])], true);\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { TimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function time(config?: TimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"time\"], config)\r\n}\r\n\r\nexport function timeAsync(config?: TimeConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"time\"], [baseAsyncValidator(config, AnnotationTypes[\"time\"])], true);\r\n}\r\n","import { AnnotationTypes } from '../core/annotation-types';\r\nimport { UniqueConfig } from \"../models/config/unique-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function unique(config?: UniqueConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"unique\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function upperCase(config?: MessageConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"upperCase\"], config)\r\n}\r\n","import { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { UrlConfig } from \"../models/config/url-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseDecoratorFunction } from \"./base-decorator.function\";\r\n\r\nexport function url(config?: UrlConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"url\"], config)\r\n}\r\n\r\nexport function urlAsync(config?: UrlConfig) {\r\n    return baseDecoratorFunction(AnnotationTypes[\"url\"], [baseAsyncValidator(config, AnnotationTypes[\"url\"])], true);\r\n}\r\n","import { Directive, Input } from \"@angular/core\";\r\nimport { AbstractControl } from \"@angular/forms\";\r\nimport { OBJECT_PROPERTY, PROPERTY } from \"../const\";\r\nimport { TEMPLATE_VALIDATION_CONFIG } from '../const/app.const';\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { PropertyInfo } from \"../models/property-info\";\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\n\r\n/**\r\n * Abstract base directive for applying validations to form controls.\r\n */\r\n@Directive()\r\nexport abstract class BaseDirective {\r\n    /**\r\n     * Input property for the model object.\r\n     */\r\n    @Input()\r\n    public model: any;\r\n\r\n    /**\r\n     * Applies validations to the given controls based on the model configuration.\r\n     * @param controls The controls to which validations are applied.\r\n     * @param model Optional model object. If not provided, the model property of the directive is used.\r\n     */\r\n    public applyValidations(controls: any, model: any = null) {\r\n        /* Check if a model is provided */\r\n        if (this.model) {\r\n            /* Retrieve the model configuration from the default container */\r\n            let modelConfig = defaultContainer.get(model || this.model.constructor);\r\n\r\n            /* If a model configuration exists */\r\n            if (modelConfig) {\r\n                /* Iterate over each property in the model configuration */\r\n                modelConfig.properties?.forEach(property => {\r\n                    /* Check if the property control exists */\r\n                    if (controls[property.name]) {\r\n                        /* Determine the type of property */\r\n                        switch (property.propertyType) {\r\n                            case PROPERTY:\r\n                                /* Apply validator configuration for simple properties */\r\n                                this.setValidatorConfig(controls[property.name], modelConfig, property);\r\n                                break;\r\n\r\n                            case OBJECT_PROPERTY:\r\n                                /* Recursively apply validations for nested object properties */\r\n                                this.applyValidations(controls[property.name].controls, property.entity);\r\n                                break;\r\n                        }\r\n                    }\r\n                })\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the validator configuration for a specific control based on model annotations.\r\n     * @param control The control to which the validator configuration is applied.\r\n     * @param modelConfig The configuration of the model.\r\n     * @param property The property info of the control.\r\n     */\r\n    private setValidatorConfig(control: AbstractControl, modelConfig: InstanceContainer, property: PropertyInfo) {\r\n        /* Filter annotations for the current property */\r\n        let annotations = modelConfig.propertyAnnotations.filter(t => t.propertyName == property.name);\r\n\r\n        /* Iterate over each annotation */\r\n        annotations.forEach(annotation => {\r\n            /* Check if TEMPLATE_VALIDATION_CONFIG exists on the control */\r\n            if (!(control as any)[TEMPLATE_VALIDATION_CONFIG]) {\r\n                /* If not, initialize it */\r\n                (control as any)[TEMPLATE_VALIDATION_CONFIG] = {};\r\n            }\r\n\r\n            /* Configure the control based on the annotation */\r\n            ApplicationUtil.configureControl(control, annotation.config ? annotation.config : \"\", annotation.annotationType)\r\n        });\r\n    }\r\n}","import { Directive, Input, TemplateRef } from \"@angular/core\";\r\n\r\n/**\r\n * Directive for defining custom HTML templates for form controls.\r\n */\r\n@Directive({\r\n    selector: '[htmlControlTemplate]'\r\n})\r\nexport class HtmlControlTemplateDirective {\r\n    /**\r\n     * Reference to the template\r\n     */\r\n    public templateRef: TemplateRef<any>;\r\n\r\n    /**\r\n     * Type of the control\r\n     */\r\n    @Input('htmlControlTemplate')\r\n    public type?: string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param templateRef The template reference\r\n     */\r\n    constructor(templateRef: TemplateRef<any>) {\r\n        /* Assign the template reference */\r\n        this.templateRef = templateRef;\r\n    };\r\n}\r\n","import { AbstractControl, FormArray, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { ApplicationUtil } from \"../util/app-util\";\r\nimport { FormProvider } from \"../util/form-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\n\r\nconst DISABLED_EXPRESSION: string = \"disableExpression\";\r\n\r\nexport function conditionalChangeValidator(conditionalValidationProps: string[]): ValidatorFn {\r\n    var timeOuts: number[] = [];\r\n    var oldValue: string;\r\n\r\n    var setTimeOut = (control: AbstractControl, config: any) => {\r\n        if ((control as any)[DISABLED_EXPRESSION])\r\n            runDisabledExpression(control, config);\r\n        var timeOut = setTimeout((_: any) => {\r\n            clearTimeout(timeOut);\r\n            control.updateValueAndValidity({ emitEvent: false })\r\n        }, 100)\r\n    }\r\n\r\n    return (control: AbstractControl): { [key: string]: any } | null => {\r\n        let value = control.value;\r\n        if (control.parent && oldValue != value) {\r\n            const rootFormGroup = ApplicationUtil.getRootFormGroup(control);\r\n            const parentFormGroup = control.parent;\r\n            oldValue = value;\r\n            timeOuts = [];\r\n            let controlName = ApplicationUtil.getFormControlName(control);\r\n            let disabledConfig = { [controlName]: value };\r\n            conditionalValidationProps.forEach(t => {\r\n                if (t.indexOf(\"[]\") != -1) {\r\n                    var splitText = t.split(\"[]\");\r\n                    var formArray = <FormArray>rootFormGroup.get([splitText[0]]);\r\n                    if (formArray)\r\n                        formArray.controls.forEach(formGroup => {\r\n                            var abstractControl = formGroup.get(splitText[1]);\r\n                            if (abstractControl) {\r\n                                setTimeOut(abstractControl, disabledConfig);\r\n                            }\r\n                        })\r\n                } else {\r\n                    let splitText = t.split('.');\r\n                    if (splitText.length > 1) {\r\n                        t.split('.').forEach((name, index) => { control = (index == 0) ? rootFormGroup?.controls[name] : ((control as any)?.controls as any)[name]; })\r\n                    }\r\n\r\n                    else {\r\n                        control = (parentFormGroup.controls as any)[t];\r\n                    }\r\n\r\n                    if (control) {\r\n                        setTimeOut(control, disabledConfig);\r\n                    }\r\n                }\r\n            })\r\n        }\r\n        return ObjectMaker.null();\r\n    }\r\n}\r\n\r\nfunction runDisabledExpression(control: AbstractControl, config: any) {\r\n    let isDisabled = FormProvider.processRule(control, { conditionalExpression: (control as any)[DISABLED_EXPRESSION], disableConfig: config });\r\n    if (isDisabled && !control.disabled) {\r\n        control.disable();\r\n    }\r\n    else if (control.disabled) {\r\n        control.enable();\r\n    }\r\n}\r\n","import { AfterContentInit, Directive, Input } from \"@angular/core\";\r\nimport { AbstractControl, FormArray, FormGroup, NgForm } from \"@angular/forms\";\r\nimport { CONDITIONAL_VALIDATOR, MODEL } from '../const/app.const';\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { conditionalChangeValidator } from '../reactive-form-validators/conditional-change.validator';\r\nimport { Linq } from \"../util/linq\";\r\nimport { BaseDirective } from \"./base\";\r\n\r\n/**\r\n * This directive provides functionality for integrating RxWebForms with Angular forms.\r\n */\r\n@Directive({\r\n    selector: '[formGroup],[rxwebForm]'\r\n})\r\nexport class RxwebFormDirective extends BaseDirective implements AfterContentInit {\r\n    /**\r\n     * Timeout ID for clearing the timeout\r\n     */\r\n    private clearTimeoutNumber: any = 0;\r\n\r\n    /**\r\n     * Object to store validation rules\r\n     */\r\n    private validationRule: any = {};\r\n\r\n    /**\r\n     * The formGroup input property for binding the form group to the directive.\r\n     */\r\n    @Input()\r\n    public formGroup?: FormGroup;\r\n\r\n    /**\r\n     * The ngForm input property for binding the NgForm to the directive.\r\n     */\r\n    @Input('rxwebForm')\r\n    public ngForm?: NgForm;\r\n\r\n    /**\r\n     * After the content is initialized, this method configures model validations based on the formGroup or ngForm.\r\n     */\r\n    ngAfterContentInit(): void {\r\n        /* If the formGroup exists, doesn't have the MODEL property, and has no parent (i.e., it's a top-level form) */\r\n        if (this.formGroup && !(this.formGroup as any)[MODEL] && this.formGroup.parent == null) {\r\n            /* Process expressions for configuring model validations */\r\n            this.expressionProcessor(this.formGroup.controls);\r\n\r\n            /* Set conditional validators based on the validation rule */\r\n            this.setConditionalValidator(this.formGroup.controls);\r\n        }\r\n\r\n        /* If the formGroup exists, doesn't have the MODEL property, and its parent is an instance of FormArray */\r\n        else if (this.formGroup && !(this.formGroup as any)[MODEL] && this.formGroup.parent instanceof FormArray) {\r\n            /* Process expressions for configuring model validations */\r\n            this.expressionProcessor(this.formGroup.controls);\r\n\r\n            /* Set conditional validators based on the validation rule */\r\n            this.setConditionalValidator(this.formGroup.controls);\r\n        }\r\n\r\n        /* If ngForm is present */\r\n        else if (this.ngForm) {\r\n            /* Configure model validations */\r\n            this.configureModelValidations();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Configures model validations based on the ngForm if present.\r\n     */\r\n    private configureModelValidations() {\r\n        /* If ngForm is present */\r\n        if (this.ngForm) {\r\n            /* Set a timeout to apply validations after a delay */\r\n            this.clearTimeoutNumber = setTimeout(() => {\r\n                /* Clear the timeout to prevent multiple calls */\r\n                clearTimeout(this.clearTimeoutNumber);\r\n\r\n                /* Apply validations to the form controls */\r\n                this.applyValidations(this.ngForm!.form.controls);\r\n\r\n                /* Process expressions for configuring model validations */\r\n                this.expressionProcessor(this.ngForm!.form.controls);\r\n\r\n                /* Set conditional validators based on the validation rule */\r\n                this.setConditionalValidator(this.ngForm!.form.controls);\r\n\r\n                /* Update the value and validity of the form controls */\r\n                this.updateValueAndValidity(this.ngForm!.form.controls);\r\n            }, 500);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the value and validity of the form controls.\r\n     */\r\n    private updateValueAndValidity(controls: any) {\r\n        /* Iterate over the keys of the controls object */\r\n        Object.keys(controls).forEach(key => {\r\n            /* Check if the control is an instance of FormGroup */\r\n            if (controls[key] instanceof FormGroup) {\r\n\r\n                /* Recursively update value and validity for controls within the FormGroup */\r\n                this.updateValueAndValidity(controls[key].controls);\r\n            }\r\n\r\n            /* Check if the control is an instance of FormArray */\r\n            else if (controls[key] instanceof FormArray) {\r\n                /* Recursively update value and validity for controls within the FormArray */\r\n                this.updateValueAndValidity(controls[key].controls);\r\n            }\r\n\r\n            else {\r\n                /* Update value and validity for the control */\r\n                controls[key].updateValueAndValidity();\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     * Processes the expressions for configuring model validations.\r\n     * @param controls - The form controls to process.\r\n     * @param rootFieldName - The root field name for nested controls.\r\n     */\r\n    private expressionProcessor(controls: { [key: string]: any }, rootFieldName: string = \"\") {\r\n        /* Iterate over the keys of the controls object */\r\n        Object.keys(controls).forEach(fieldName => {\r\n            /* Get the control corresponding to the current field name */\r\n            let formControl: any = controls[fieldName];\r\n\r\n            /* Check if the control has validatorConfig */\r\n            if (formControl.validatorConfig) {\r\n                /* Iterate over the keys of AnnotationTypes */\r\n                Object.keys(AnnotationTypes).forEach(validatorName => {\r\n                    /* Check if the current validator exists in the validatorConfig and has disableExpression */\r\n                    if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].disableExpression) {\r\n                        /* Set the disableExpression property for the formControl */\r\n                        formControl[\"disableExpression\"] = formControl.validatorConfig[validatorName].disableExpression;\r\n\r\n                        /* Extract columns from the disableExpression and set conditional value properties */\r\n                        let columns = Linq.expressionColumns(formControl.validatorConfig[validatorName].disableExpression);\r\n                        columns.forEach(t => {\r\n                            defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);\r\n                        });\r\n                    }\r\n\r\n                    /* Check if the current validator exists in the validatorConfig and has conditionalExpression */\r\n                    if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].conditionalExpression) {\r\n                        /* Extract columns from the conditionalExpression and set conditional value properties */\r\n                        let columns = Linq.expressionColumns(formControl.validatorConfig[validatorName].conditionalExpression);\r\n                        columns.forEach(t => {\r\n                            defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);\r\n                        });\r\n                    }\r\n\r\n                    /* Check if the current validator exists in the validatorConfig and has dynamicConfig */\r\n                    if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].dynamicConfig) {\r\n                        /* Parse dynamicConfig, extract columns, and set conditional value properties */\r\n                        let columns = Linq.dynamicConfigParser(formControl.validatorConfig[validatorName].dynamicConfig, fieldName);\r\n                        columns.forEach(t => {\r\n                            defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);\r\n                        });\r\n                    }\r\n\r\n                    /* Check if the current validator exists in the validatorConfig and is a logical validator */\r\n                    if (formControl.validatorConfig[validatorName] && (validatorName == AnnotationTypes[\"and\"] || validatorName == AnnotationTypes[\"or\"] || validatorName == AnnotationTypes[\"not\"])) {\r\n                        /* Iterate over the validation rules, set logical conditionals */\r\n                        Object.keys(formControl.validatorConfig[validatorName].validation).forEach(t => {\r\n                            if (typeof formControl.validatorConfig[validatorName].validation[t] !== \"boolean\") {\r\n                                defaultContainer.setLogicalConditional(this.validationRule, t, formControl.validatorConfig[validatorName].validation[t].fieldName, fieldName);\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    /* Check if the current validator exists in the validatorConfig and is a comparison or range validator */\r\n                    else if (formControl.validatorConfig[validatorName] && ((validatorName == AnnotationTypes[\"compare\"] || validatorName == AnnotationTypes[\"greaterThan\"] || validatorName == AnnotationTypes[\"greaterThanEqualTo\"] || validatorName == AnnotationTypes[\"lessThan\"] || validatorName == AnnotationTypes[\"lessThanEqualTo\"] || validatorName == AnnotationTypes[\"different\"] || validatorName == AnnotationTypes[\"factor\"] || validatorName == AnnotationTypes[\"minTime\"] || validatorName == AnnotationTypes[\"maxTime\"]) || (validatorName == AnnotationTypes[\"creditCard\"] && formControl.validatorConfig[validatorName].fieldName) || ((validatorName == AnnotationTypes[\"minDate\"] || validatorName == AnnotationTypes[\"maxDate\"]) && formControl.validatorConfig[validatorName].fieldName))) {\r\n                        /* Set conditional value properties */\r\n                        defaultContainer.setConditionalValueProp(this.validationRule, formControl.validatorConfig[validatorName].fieldName, fieldName);\r\n                    }\r\n                });\r\n            }\r\n\r\n            /* Check if the control is an instance of FormGroup */\r\n            else if (formControl instanceof FormGroup) {\r\n                /* Recursively process controls within the FormGroup */\r\n                this.expressionProcessor(formControl.controls, `${fieldName}.`);\r\n            }\r\n\r\n            /* Check if the control is an instance of FormArray */\r\n            else if (formControl instanceof FormArray) {\r\n                /* Process each control within the FormArray */\r\n                if (formControl.controls) {\r\n                    formControl.controls.forEach((t: any, i) => {\r\n                        if (t.controls) {\r\n                            this.expressionProcessor(t.controls, `${fieldName}[]`);\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Sets conditional validators based on the validation rule.\r\n     */\r\n    private setConditionalValidator(controls: { [key: string]: AbstractControl; }) {\r\n        /* Iterates through the form controls and sets conditional validators based on validation rules */\r\n        Object.keys(controls).forEach(fieldName => {\r\n            /* If conditional validation properties are defined for the field, set the conditional validator */\r\n            if (this.validationRule.conditionalValidationProps && this.validationRule.conditionalValidationProps[fieldName]) {\r\n                (controls as any)[fieldName][CONDITIONAL_VALIDATOR] = conditionalChangeValidator(this.validationRule.conditionalValidationProps[fieldName]);\r\n            }\r\n\r\n            /* If the field is a FormGroup and conditional object properties are defined, set conditional validators for nested fields */\r\n            else if ((controls as any)[fieldName] instanceof FormGroup && this.validationRule.conditionalObjectProps) {\r\n                /* Filter conditional object properties based on the current field name */\r\n                var fields = this.validationRule.conditionalObjectProps.filter((t: any) => t.objectPropName == fieldName);\r\n\r\n                /* Access the nested FormGroup corresponding to the current field */\r\n                let nestedFormGroup = (controls as any)[fieldName] as FormGroup;\r\n\r\n                /* Initialize an object to store conditional controls grouped by property name */\r\n                let propWiseConditionalControls: { [key: string]: string[] } = {};\r\n\r\n                /* Iterate through the filtered fields and group conditional controls by property name */\r\n                fields.forEach((x: any) => {\r\n                    /* If the property name doesn't exist in the grouping object, initialize it */\r\n                    if (!propWiseConditionalControls[x.propName]) {\r\n                        propWiseConditionalControls[x.propName] = [];\r\n                    }\r\n                    /* Push the reference property name to the array corresponding to the property name */\r\n                    propWiseConditionalControls[x.propName].push(x.referencePropName);\r\n                });\r\n\r\n                /* Set conditional validators for nested form controls */\r\n                Object.keys(propWiseConditionalControls).forEach(key => {\r\n                    (nestedFormGroup.controls as any)[key][CONDITIONAL_VALIDATOR] = conditionalChangeValidator(propWiseConditionalControls[key]);\r\n                });\r\n            }\r\n\r\n            /* If the field is a FormArray, recursively set conditional validators for its controls */\r\n            else if ((controls as any)[fieldName] instanceof FormArray) {\r\n                /* Iterate through the controls of the current FormArray */\r\n                (controls as any)[fieldName].controls.forEach((t: any, i: number) => {\r\n                    /* If the control doesn't have child controls (i.e., it's not a FormGroup or FormArray) */\r\n                    if (t.controls == undefined) {\r\n                        /* Set conditional validator for the individual control */\r\n                        this.setConditionalValidator(<any>{ [i]: t });\r\n                    } else {\r\n                        /* Set conditional validator for the child controls */\r\n                        this.setConditionalValidator(t.controls);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n}","import { Directive, forwardRef, Input } from '@angular/core';\r\nimport { AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors } from '@angular/forms';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Directive({\r\n    selector: '[ngModel],[formControlName],[formControl]',\r\n    providers: [{\r\n        provide: NG_ASYNC_VALIDATORS,\r\n        useExisting: forwardRef(() => AsyncValidationDirective),\r\n        multi: true\r\n    }]\r\n})\r\nexport class AsyncValidationDirective implements AsyncValidator {\r\n    /**\r\n     * The async validation function.\r\n     */\r\n    @Input()\r\n    public async: any;\r\n\r\n    /**\r\n     * Method that performs async validation against the provided control.\r\n     * \r\n     * @param control The control to validate against.\r\n     * @returns A promise or observable that resolves a map of validation errors\r\n     * if validation fails, otherwise null.\r\n     */\r\n    public validate(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\r\n        return this.async ? this.async(control) : of(null);\r\n    }\r\n}","import { Directive, ElementRef, Input, forwardRef } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\r\nimport { APP_VALIDATORS } from \"../../const/app-validators.const\";\r\nimport { ExtensionConfig, FileConfig, SizeConfig } from '../../models/config';\r\n\r\n/* Constant for the validator configuration key */\r\nconst VALIDATOR_CONFIG = \"validatorConfig\";\r\n\r\n/* Array of file validator names */\r\nconst FILE_VALIDATOR_NAMES: string[] = [\"extension\", \"fileSize\", \"file\"];\r\n\r\n/**\r\n * FileControlDirective is an Angular directive for handling file input validation.\r\n * It implements the Validator interface for custom validation.\r\n */\r\n@Directive({\r\n    selector: \"input[type=file]\",\r\n    host: {\r\n        \"(change)\": \"onChangeCall($event.target)\",\r\n        \"(blur)\": \"onTouched()\"\r\n    },\r\n    providers: [\r\n        { provide: NG_VALUE_ACCESSOR, useExisting: FileControlDirective, multi: true },\r\n        { provide: NG_VALIDATORS, useExisting: forwardRef(() => FileControlDirective), multi: true }\r\n    ]\r\n})\r\nexport class FileControlDirective implements Validator {\r\n    /* Properties to store file-related information and validation state */\r\n    files: any;\r\n    element: any;\r\n    isProcessed: boolean = false;\r\n\r\n    /* Array to store validator functions */\r\n    private validators: Function[] = [];\r\n\r\n\r\n    /* Callbacks for value and touch changes */\r\n    onChange = (_: any) => { };\r\n    onTouched = () => { };\r\n\r\n    /* Input properties for the directive */\r\n    @Input() writeFile: boolean = false;\r\n    @Input() set extension(config: ExtensionConfig) { this.pushValidator(FILE_VALIDATOR_NAMES[0], config); }\r\n    @Input() set fileSize(config: SizeConfig) { this.pushValidator(FILE_VALIDATOR_NAMES[1], config); }\r\n    @Input() set file(config: FileConfig) { this.pushValidator(FILE_VALIDATOR_NAMES[2], config); }\r\n\r\n    /**\r\n     * Constructor for FileControlDirective.\r\n     * @param elementRef ElementRef\r\n     */\r\n    constructor(private elementRef: ElementRef) {\r\n        this.element = elementRef.nativeElement as Node;\r\n    }\r\n\r\n    /**\r\n     * Handles the change event of the file input.\r\n     * @param element HTMLInputElement\r\n     */\r\n    onChangeCall(element: HTMLInputElement) {\r\n        let files = element.files;\r\n        if (this.writeFile)\r\n            this.onChange(files);\r\n        else {\r\n            if ((files?.length ?? 0) > 0) {\r\n                this.onChange(element.value);\r\n            }\r\n            else {\r\n                this.onChange(undefined);\r\n            }\r\n        }\r\n    }\r\n\r\n    /* Interface methods for form control value access */\r\n    writeValue(value: any) { }\r\n    registerOnChange(invocation: any) { this.onChange = invocation; }\r\n    registerOnTouched(invocation: any) { this.onTouched = invocation; }\r\n\r\n    /**\r\n     * Sets the configuration for the control based on the provided AbstractControl.\r\n     * @param control AbstractControl\r\n     */\r\n    setConfig(control: AbstractControl) {\r\n        FILE_VALIDATOR_NAMES.forEach(t => {\r\n            if (!(this as any)[t] && (control as any)[VALIDATOR_CONFIG] && (control as any)[VALIDATOR_CONFIG][t])\r\n                (this as any)[t] = (control as any)[VALIDATOR_CONFIG][t];\r\n        })\r\n        this.isProcessed = true;\r\n    }\r\n\r\n    /**\r\n     * Pushes a validator function to the validators array based on the validator name and configuration.\r\n     * @param validatorName string\r\n     * @param config ExtensionConfig | SizeConfig | FileConfig\r\n     */\r\n    pushValidator(validatorName: string, config: ExtensionConfig | SizeConfig | FileConfig) {\r\n        if (config)\r\n            this.validators.push(APP_VALIDATORS[validatorName](config));\r\n    }\r\n\r\n    /**\r\n     * Validates the file input control based on the configured validators.\r\n     * @param control AbstractControl\r\n     * @returns Validation result or null if validation passes.\r\n     */\r\n    validate(control: AbstractControl): { [key: string]: any } {\r\n        if (!this.isProcessed)\r\n            this.setConfig(control);\r\n        var result = null;\r\n        for (var validator of this.validators) {\r\n            result = validator(control, this.element.files);\r\n            if (result)\r\n                break;\r\n        }\r\n        return result;\r\n    }\r\n}","import { Directive, ElementRef, Input, forwardRef } from '@angular/core';\r\nimport { AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors } from '@angular/forms';\r\nimport { Observable, of } from 'rxjs';\r\nimport { APP_VALIDATORS } from \"../../const/app-validators.const\";\r\nimport { ImageConfig } from '../../models/config';\r\n\r\n/* Constant to access validator configuration */\r\nconst VALIDATOR_CONFIG = \"validatorConfig\";\r\n\r\n/**\r\n * Directive for handling file input with asynchronous validation for image files.\r\n */\r\n@Directive({\r\n  selector: \"input[type=file]\",\r\n  providers: [{\r\n    provide: NG_ASYNC_VALIDATORS,\r\n    useExisting: forwardRef(() => ImageFileControlDirective),\r\n    multi: true\r\n  }]\r\n})\r\nexport class ImageFileControlDirective implements AsyncValidator {\r\n  element: any;\r\n  isProcessed: boolean = false;\r\n\r\n  private imageValidation?: Function;\r\n\r\n  /**\r\n   * Setter for image configuration.\r\n   * @param config The configuration for image validation.\r\n   */\r\n  @Input() set image(config: ImageConfig) {\r\n    this.imageValidation = APP_VALIDATORS[\"image\"](config);\r\n  }\r\n\r\n  /**\r\n   * Constructor for ImageFileControlDirective.\r\n   * @param elementRef Reference to the element.\r\n   */\r\n  constructor(private elementRef: ElementRef) {\r\n    this.element = elementRef.nativeElement as Node;\r\n  }\r\n\r\n  /**\r\n   * Set the configuration for the directive.\r\n   * @param control The abstract control associated with the directive.\r\n   */\r\n  setConfig(control: AbstractControl) {\r\n    let image = \"image\";\r\n    if (!(this as any)[image] && (control as any)[VALIDATOR_CONFIG] && (control as any)[VALIDATOR_CONFIG][image])\r\n      (this as any)[image] = (control as any)[VALIDATOR_CONFIG][image];\r\n    this.isProcessed = true;\r\n  }\r\n\r\n  /**\r\n   * Async validation method.\r\n   * @param control The abstract control to be validated.\r\n   * @returns A promise or observable containing validation errors, or null if validation passes.\r\n   */\r\n  validate(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\r\n    if (!this.isProcessed)\r\n      this.setConfig(control);\r\n    if (this.imageValidation) {\r\n      return this.imageValidation(control, this.element.files);\r\n    }\r\n    return of(null);\r\n  }\r\n}","import { DecimalPipe, NumberSymbol, getLocaleNumberSymbol } from \"@angular/common\";\r\nimport { Inject, Injectable, LOCALE_ID } from \"@angular/core\";\r\nimport { BLANK } from \"../../const\";\r\nimport { ReactiveFormConfig } from \"../../util/reactive-form-config\";\r\nimport { RegexValidator } from '../../util/regex-validator';\r\n\r\n@Injectable()\r\nexport class DecimalProvider {\r\n    /**\r\n     * Decimal separator\r\n     */\r\n    private decimalSeperator: string = \".\";\r\n\r\n    /**\r\n     * Group separator\r\n     */\r\n    private groupSeperator: string = \",\";\r\n\r\n    /**\r\n     * Optional variable for custom decimal symbol\r\n     */\r\n    private allowDecimalSymbol?: string;\r\n\r\n    /**\r\n     * Flag indicating whether configuration is set\r\n     */\r\n    private isSetConfig: boolean = false;\r\n\r\n    /**\r\n     * Constructor for DecimalProvider\r\n     * @param decimalPipe DecimalPipe\r\n     * @param localeId LOCALE_ID\r\n     */\r\n    constructor(private decimalPipe: DecimalPipe, @Inject(LOCALE_ID) private localeId: string) {\r\n        /* Initialize decimal and group separators based on locale */\r\n        this.decimalSeperator = getLocaleNumberSymbol(localeId, NumberSymbol.Decimal);\r\n        this.groupSeperator = getLocaleNumberSymbol(localeId, NumberSymbol.Group);\r\n\r\n        /* Set symbols in ReactiveFormConfig */\r\n        this.setSymbolInConfig();\r\n    }\r\n\r\n    /**\r\n     * Replaces the decimal and group separators in the value.\r\n     * @param value The value to replace separators in.\r\n     * @returns The value with replaced separators.\r\n     */\r\n    public replacer(value: any): any {\r\n        value = String(value);\r\n\r\n        /* Bind configuration settings if not already set */\r\n        if (!this.isSetConfig) {\r\n            this.bindConfig();\r\n        }\r\n\r\n        /* Remove group separators */\r\n        value = value.split(this.groupSeperator).join(BLANK);\r\n\r\n        /* Replace decimal separator if allowed */\r\n        if (this.allowDecimalSymbol) {\r\n            value = value.replace(this.decimalSeperator, this.allowDecimalSymbol);\r\n        }\r\n\r\n        /* Check for zero after decimal point and remove if present */\r\n        var splitValue = value.split(this.decimalSeperator);\r\n        value = (splitValue.length > 1 && splitValue[1] && RegexValidator.isZero(splitValue[1])) ? splitValue[0] : value;\r\n\r\n        return value;\r\n    }\r\n\r\n    /**\r\n     * Transforms a value into a formatted decimal string.\r\n     * @param value The value to transform.\r\n     * @param digitsInfo The number of digits after the decimal point.\r\n     * @param persistZero Whether to persist zero after decimal digits.\r\n     * @returns The formatted decimal string.\r\n     */\r\n    public transFormDecimal(value: any, digitsInfo: string, persistZero: boolean): string | null {\r\n        /* Convert value to string */\r\n        value = String(value);\r\n\r\n        /* If value is falsy, return it */\r\n        if (!value) {\r\n            return value;\r\n        }\r\n\r\n        /* Transform the value using DecimalPipe */\r\n        let transformedValue = this.decimalPipe.transform(value.replace(ReactiveFormConfig.number[\"groupSymbol\"], \"\").replace(this.decimalSeperator, \".\"), digitsInfo, this.localeId);\r\n\r\n        /* Add trailing zeros if persistZero is true */\r\n        if (persistZero && value.indexOf(this.decimalSeperator)) {\r\n            /* Split the transformed value by decimal point */\r\n            let splitTransformed = transformedValue?.split(\".\");\r\n\r\n            /* Split the digitsInfo by hyphen or use an empty array if digitsInfo is falsy */\r\n            let splitDigitsInfo = digitsInfo ? digitsInfo.split(\"-\") : [];\r\n\r\n            /* Extract the number of digits from the splitDigitsInfo */\r\n            let digits = splitDigitsInfo.length > 1 ? parseInt(splitDigitsInfo[splitDigitsInfo.length - 1]) : 0;\r\n\r\n            /* Check if there are two parts after splitting the transformed value, digitsInfo is not empty, digits is not 0, and the length of the decimal part is not equal to digits */\r\n            if ((splitTransformed?.length ?? 0) > 1 && splitDigitsInfo.length > 0 && digits !== 0 && splitTransformed![1].length !== digits) {\r\n                /* Calculate the difference in length */\r\n                let diff = digits - splitTransformed![1].length;\r\n\r\n                /* Append trailing zeros to the transformed value */\r\n                for (let i = 0; i < diff; i++) {\r\n                    transformedValue += \"0\";\r\n                }\r\n            }\r\n        }\r\n\r\n        return transformedValue;\r\n    }\r\n\r\n    /**\r\n     * Sets the decimal and group symbols in the ReactiveFormConfig.\r\n     */\r\n    private setSymbolInConfig() {\r\n        ReactiveFormConfig.number = { decimalSymbol: this.decimalSeperator, groupSymbol: this.groupSeperator };\r\n    }\r\n\r\n    /**\r\n     * Binds configuration settings from ReactiveFormConfig.json.\r\n     */\r\n    public bindConfig() {\r\n        /* Check if ReactiveFormConfig.json exists */\r\n        if (ReactiveFormConfig.json) {\r\n            /* Check if localeId is defined in ReactiveFormConfig.json */\r\n            if (ReactiveFormConfig.json[\"localeId\"]) {\r\n                /* Assign the localeId from ReactiveFormConfig.json */\r\n                this.localeId = ReactiveFormConfig.json[\"localeId\"];\r\n            }\r\n\r\n            /* Check if allowDecimalSymbol is defined in ReactiveFormConfig.json */\r\n            if (ReactiveFormConfig.json[\"allowDecimalSymbol\"]) {\r\n                /* Assign the allowDecimalSymbol from ReactiveFormConfig.json */\r\n                this.allowDecimalSymbol = ReactiveFormConfig.json[\"allowDecimalSymbol\"];\r\n            }\r\n        }\r\n\r\n        /* Set isSetConfig to true after configuring */\r\n        this.isSetConfig = true;\r\n    }\r\n}\r\n","import { Renderer2 } from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { BLUR, FOCUS, KEY_DOWN, KEY_PRESS, PASTE } from \"../../const\";\r\nimport { AnnotationTypes } from \"../../core/annotation-types\";\r\nimport { MaskConfig } from \"../../models/config/mask-config\";\r\nimport { getConfigObject } from \"../../util/config-provider\";\r\nimport { FormProvider } from \"../../util/form-provider\";\r\nimport { ObjectMaker } from \"../../util/object-maker\";\r\nimport { RegexValidator } from \"../../util/regex-validator\";\r\n\r\nexport class MaskProvider {\r\n\r\n    private eventListeners: any[] = [];\r\n\r\n    oldValue: string = '';\r\n\r\n    type: string = 'text';\r\n\r\n    slotChar: string = '_';\r\n\r\n    autoClear: boolean = false;\r\n\r\n    value: any;\r\n\r\n    defs: any;\r\n\r\n    tests?: any[];\r\n\r\n    partialPosition: any;\r\n\r\n    firstNonMaskPos?: number;\r\n\r\n    lastRequiredNonMaskPos: any;\r\n\r\n    len?: number;\r\n\r\n    oldVal?: string;\r\n\r\n    buffer: any;\r\n\r\n    defaultBuffer?: string;\r\n\r\n    focusText?: string;\r\n\r\n    caretTimeoutId: any;\r\n\r\n    androidChrome?: boolean;\r\n\r\n    focus?: boolean;\r\n\r\n    filled?: boolean;\r\n\r\n    minLength?: number;\r\n\r\n    constructor(private input: HTMLInputElement, private mask: string, private renderer: Renderer2, private formControl: FormControl, private config: MaskConfig) {\r\n        this.bind();\r\n    }\r\n\r\n    bind() {\r\n        if (RegexValidator.isNotBlank(this.formControl.value)) {\r\n            this.input.value = this.formControl.value;\r\n        }\r\n\r\n        this.tests = [];\r\n        this.partialPosition = this.mask.length;\r\n        this.len = this.mask.length;\r\n        this.firstNonMaskPos = undefined;\r\n        this.defs = {\r\n            '9': '[0-9]',\r\n            'a': '[A-Za-z]',\r\n            '*': '[A-Za-z0-9]'\r\n        };\r\n\r\n\r\n        this.androidChrome = false;\r\n\r\n        let maskTokens = this.mask.split('');\r\n        for (let i = 0; i < maskTokens.length; i++) {\r\n            let c = maskTokens[i];\r\n            if (c == '?') {\r\n                this.len--;\r\n                this.partialPosition = i;\r\n            }\r\n            else if (this.defs[c]) {\r\n                this.tests.push(new RegExp(this.defs[c]));\r\n                if (this.firstNonMaskPos === null) {\r\n                    this.firstNonMaskPos = this.tests.length - 1;\r\n                }\r\n                if (i < this.partialPosition) {\r\n                    this.lastRequiredNonMaskPos = this.tests.length - 1;\r\n                }\r\n            }\r\n            else {\r\n                this.tests.push(null);\r\n            }\r\n        }\r\n        this.minLength = this.config.minLength ? this.lastRequiredNonMaskPos - (this.lastRequiredNonMaskPos - this.config.minLength) : this.lastRequiredNonMaskPos;\r\n        this.buffer = [];\r\n        for (let i = 0; i < maskTokens.length; i++) {\r\n            let c = maskTokens[i];\r\n            if (c != '?') {\r\n                if (this.defs[c])\r\n                    this.buffer.push(this.getPlaceholder(i));\r\n                else\r\n                    this.buffer.push(c);\r\n            }\r\n        }\r\n        this.defaultBuffer = this.buffer.join('');\r\n        this.focusText = this.input.value;\r\n        this.bindEvents();\r\n        this.checkVal();\r\n    }\r\n\r\n    bindEvents() {\r\n        this.eventListeners.push(this.renderer.listen(this.input, FOCUS, this.onFocus.bind(this)));\r\n        this.eventListeners.push(this.renderer.listen(this.input, BLUR, this.onBlur.bind(this)));\r\n        this.eventListeners.push(this.renderer.listen(this.input, KEY_DOWN, this.onKeyDown.bind(this)));\r\n        this.eventListeners.push(this.renderer.listen(this.input, KEY_PRESS, this.onKeyPress.bind(this)));\r\n        this.eventListeners.push(this.renderer.listen(this.input, \"input\", this.onInput.bind(this)));\r\n        this.eventListeners.push(this.renderer.listen(this.input, PASTE, this.handleInputChange.bind(this)));\r\n    }\r\n    isInvalid: boolean = false;\r\n    validate() {\r\n        if ((this.input.value && this.oldValue != this.input.value)) {\r\n            this.checkVal(true);\r\n            this.isCompleted(undefined, true);\r\n            this.oldValue = this.input.value\r\n        }\r\n        let config = getConfigObject(this.config, this.formControl);\r\n        if (RegexValidator.isNotBlank(this.getUnmaskedValue()) && FormProvider.processRule(this.formControl, config)) {\r\n            if (this.isInvalid) {\r\n                return ObjectMaker.toJson(AnnotationTypes[\"mask\"], config, [this.formControl.value]);\r\n            }\r\n\r\n        }\r\n        return ObjectMaker.null();\r\n    }\r\n\r\n    writeValue(value: any): void {\r\n        this.value = value;\r\n\r\n        if (this.input) {\r\n            if (this.value == undefined || this.value == null) {\r\n                this.input.value = '';\r\n            }\r\n            this.checkVal();\r\n        }\r\n\r\n        this.updateFilledState();\r\n    }\r\n\r\n    caret(first?: number, last?: number) {\r\n        let range, begin, end;\r\n\r\n        if (!this.input.offsetParent || this.input !== document.activeElement) {\r\n            return null;\r\n        }\r\n\r\n        if (typeof first == 'number') {\r\n            begin = first;\r\n            end = (typeof last === 'number') ? last : begin;\r\n            if (this.input.setSelectionRange) {\r\n                this.input.setSelectionRange(begin, end);\r\n            }\r\n            else if ((this.input as any)['createTextRange']) {\r\n                range = (this.input as any)['createTextRange']();\r\n                range.collapse(true);\r\n                range.moveEnd('character', end);\r\n                range.moveStart('character', begin);\r\n                range.select();\r\n            }\r\n        }\r\n        else {\r\n            if (this.input.setSelectionRange!) {\r\n                begin = this.input.selectionStart;\r\n                end = this.input.selectionEnd;\r\n            }\r\n            else if ((document as any)['selection'] && (document as any)['selection'].createRange) {\r\n                range = (document as any)['selection'].createRange();\r\n                begin = 0 - range.duplicate().moveStart('character', -100000);\r\n                end = begin + range.text.length;\r\n            }\r\n\r\n            return { begin: begin, end: end };\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    isCompleted(lastRequiredNonMaskPos?: number, isNotRunValidator?: boolean): boolean {\r\n        let completed: boolean;\r\n        lastRequiredNonMaskPos = lastRequiredNonMaskPos || this.lastRequiredNonMaskPos;\r\n        for (let i = (this.firstNonMaskPos ?? 0); i <= lastRequiredNonMaskPos!; i++) {\r\n            if (this.tests![i] && this.buffer[i] === this.getPlaceholder(i!)) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        this.isInvalid = false;\r\n        if (!isNotRunValidator) {\r\n            this.formControl.updateValueAndValidity();\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    getPlaceholder(i: number) {\r\n        if (i < this.slotChar.length) {\r\n            return this.slotChar.charAt(i);\r\n        }\r\n        return this.slotChar.charAt(0);\r\n    }\r\n\r\n    seekNext(pos: number) {\r\n        while (++pos < this.len! && !this.tests![pos]);\r\n        return pos;\r\n    }\r\n\r\n    seekPrev(pos: number) {\r\n        while (--pos >= 0 && !this.tests![pos]);\r\n        return pos;\r\n    }\r\n\r\n    shiftL(begin: number, end: number) {\r\n        let i, j;\r\n\r\n        if (begin < 0) {\r\n            return;\r\n        }\r\n\r\n        for (i = begin, j = this.seekNext(end); i < this.len!; i++) {\r\n            if (this.tests![i]) {\r\n                if (j < this.len! && this.tests![i].test(this.buffer[j])) {\r\n                    this.buffer[i] = this.buffer[j];\r\n                    this.buffer[j] = this.getPlaceholder(j);\r\n                } else {\r\n                    break;\r\n                }\r\n\r\n                j = this.seekNext(j);\r\n            }\r\n        }\r\n\r\n        this.writeBuffer();\r\n        this.caret(Math.max(this.firstNonMaskPos!, begin));\r\n    }\r\n\r\n    shiftR(pos: number) {\r\n        let i, c, j, t;\r\n\r\n        for (i = pos, c = this.getPlaceholder(pos); i < this.len!; i++) {\r\n            if (this.tests![i]) {\r\n                j = this.seekNext(i);\r\n                t = this.buffer[i];\r\n                this.buffer[i] = c;\r\n                if (j < this.len! && this.tests![j].test(t)) {\r\n                    c = t;\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    handleAndroidInput(_: any) {\r\n        var curVal = this.input.value;\r\n        var pos = this.caret();\r\n        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {\r\n            this.checkVal(true);\r\n            while (pos!.begin! > 0 && !this.tests![pos!.begin! - 1])\r\n                pos!.begin!--;\r\n            if (pos!.begin === 0) {\r\n                while (pos!.begin < this.firstNonMaskPos! && !this.tests![pos!.begin])\r\n                    pos!.begin++;\r\n            }\r\n            this.caret(pos!.begin!, pos!.begin!);\r\n        } else {\r\n            var pos2 = this.checkVal(true);\r\n            while (pos!.begin! < this.len! && !this.tests![pos!.begin!])\r\n                pos!.begin!++;\r\n\r\n            this.caret(pos!.begin!, pos!.begin!);\r\n        }\r\n\r\n        if (this.isCompleted()) {\r\n            this.isInvalid = false;\r\n        } else {\r\n            this.isInvalid = true;\r\n            this.formControl.updateValueAndValidity();\r\n        }\r\n    }\r\n\r\n    onBlur(e: any) {\r\n        this.focus = false;\r\n        this.checkVal();\r\n        this.updateModel(e);\r\n        this.updateFilledState();\r\n        if (this.input.value != this.focusText) {\r\n            let event = document.createEvent('HTMLEvents');\r\n            event.initEvent('change', true, false);\r\n            this.input.dispatchEvent(event);\r\n            let maskedValue = this.input.value;\r\n            this.formControl.setValue(this.config.valueWithMask ? maskedValue : this.getUnmaskedValue());\r\n            this.input.value = maskedValue;\r\n        }\r\n    }\r\n\r\n    onKeyDown(e: any) {\r\n        let k = e.which || e.keyCode,\r\n            pos,\r\n            begin,\r\n            end;\r\n        let iPhone = false;\r\n        this.oldVal = this.input.value;\r\n        let controlValid = this.config.minLength ? this.isCompleted(this.minLength! + 1) : false;\r\n        if (k === 8 || k === 46 || (iPhone && k === 127)) {\r\n            pos = this.caret();\r\n            begin = pos!.begin;\r\n            end = pos!.end;\r\n\r\n            if (end - begin! === 0) {\r\n                begin = k !== 46 ? this.seekPrev(begin!) : (end = this.seekNext(begin! - 1));\r\n                end = k === 46 ? this.seekNext(end) : end;\r\n            }\r\n\r\n            this.clearBuffer(begin!, end);\r\n            this.shiftL(begin!, end - 1);\r\n            this.setControlValue(e, false, controlValid);\r\n            this.updateModel(e);\r\n            e.preventDefault();\r\n        } else if (k === 13) {\r\n            this.onBlur(e);\r\n            this.setControlValue(e, false, controlValid);\r\n            this.updateModel(e);\r\n        } else if (k === 27) {\r\n            this.input.value = this.focusText ?? '';\r\n            this.caret(0, this.checkVal());\r\n            this.updateModel(e);\r\n            this.setControlValue(e, false, controlValid);\r\n            e.preventDefault();\r\n\r\n        }\r\n\r\n    }\r\n\r\n    onKeyPress(e: any) {\r\n        var k = e.which || e.keyCode,\r\n            pos = this.caret(),\r\n            p,\r\n            c,\r\n            next,\r\n            completed;\r\n        if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {\r\n            return;\r\n        } else if (k && k !== 13) {\r\n            if (pos!.end - pos!.begin! !== 0) {\r\n                this.clearBuffer(pos!.begin!, pos!.end);\r\n                this.shiftL(pos!.begin!, pos!.end - 1);\r\n            }\r\n\r\n            p = this.seekNext(pos!.begin! - 1);\r\n            if (p < this.len!) {\r\n                c = String.fromCharCode(k);\r\n                if (this.tests![p].test(c)) {\r\n                    this.shiftR(p);\r\n\r\n                    this.buffer[p] = c;\r\n                    this.writeBuffer();\r\n                    next = this.seekNext(p);\r\n\r\n\r\n                    this.caret(next);\r\n                    if (pos!.begin! <= this.lastRequiredNonMaskPos) {\r\n                        completed = this.isCompleted();\r\n                    }\r\n                }\r\n            }\r\n            e.preventDefault();\r\n        }\r\n\r\n        this.updateModel(e);\r\n        if (completed === undefined)\r\n            completed = this.isCompleted()\r\n        this.setControlValue(e, completed, this.config.minLength ? this.isCompleted(this.minLength) : false);\r\n    }\r\n\r\n    internalProcess: boolean = false;\r\n\r\n    clearBuffer(start: number, end: number) {\r\n        let i;\r\n        for (i = start; i < end && i < this.len!; i++) {\r\n            if (this.tests![i]) {\r\n                this.buffer[i] = this.getPlaceholder(i);\r\n            }\r\n        }\r\n    }\r\n\r\n    writeBuffer() {\r\n        this.input.value = this.buffer.join('');\r\n    }\r\n\r\n    checkVal(allow?: boolean) {\r\n        let test = this.input.value,\r\n            lastMatch = -1,\r\n            i,\r\n            c,\r\n            pos;\r\n\r\n        for (i = 0, pos = 0; i < this.len!; i++) {\r\n            if (this.tests![i]) {\r\n                this.buffer[i] = this.getPlaceholder(i);\r\n                while (pos++ < test.length) {\r\n                    c = test.charAt(pos - 1);\r\n                    if (this.tests![i].test(c)) {\r\n                        this.buffer[i] = c;\r\n                        lastMatch = i;\r\n                        break;\r\n                    }\r\n                }\r\n                if (pos > test.length) {\r\n                    this.clearBuffer(i + 1, this.len!);\r\n                    break;\r\n                }\r\n            } else {\r\n                if (this.buffer[i] === test.charAt(pos)) {\r\n                    pos++;\r\n                }\r\n                if (i < this.partialPosition) {\r\n                    lastMatch = i;\r\n                }\r\n            }\r\n        }\r\n        if (allow) {\r\n            this.writeBuffer();\r\n        } else if ((lastMatch + 1 < this.partialPosition) && (!this.config.minLength || !(lastMatch >= this.minLength!))) {\r\n            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\r\n                this.isInvalid = true\r\n            } else {\r\n                this.isInvalid = true\r\n                this.writeBuffer();\r\n            }\r\n        } else {\r\n            this.writeBuffer();\r\n            this.input.value = this.input.value.substring(0, lastMatch + 1);\r\n        }\r\n        return (this.partialPosition ? i : this.firstNonMaskPos);\r\n    }\r\n\r\n    onFocus(event: any) {\r\n\r\n        this.focus = true;\r\n\r\n        clearTimeout(this.caretTimeoutId);\r\n        let pos: number | undefined = 0;\r\n\r\n        this.focusText = this.input.value;\r\n\r\n        pos = this.checkVal();\r\n\r\n        this.caretTimeoutId = setTimeout(() => {\r\n            if (this.input !== document.activeElement) {\r\n                return;\r\n            }\r\n            this.writeBuffer();\r\n            if (pos == this.mask.replace(\"?\", \"\").length) {\r\n                this.caret(0, pos);\r\n            } else {\r\n                this.caret(pos);\r\n            }\r\n            this.updateFilledState();\r\n        }, 10);\r\n    }\r\n\r\n    onInput(event: any) {\r\n        if (this.androidChrome)\r\n            this.handleAndroidInput(event);\r\n        else\r\n            this.handleInputChange(event);\r\n    }\r\n\r\n    setControlValue(e: any, isValid: boolean, isValidControl?: boolean) {\r\n        this.isInvalid = isValidControl ? !isValidControl : !isValid;\r\n        let value = this.input.value;\r\n        let controlValue = '';\r\n        if (!this.isInvalid)\r\n            controlValue = this.config.valueWithMask ? value : this.getUnmaskedValue()\r\n        this.formControl.setValue(controlValue);\r\n        this.oldValue = this.input.value = value;\r\n        if (!isValid)\r\n            this.onFocus(e);\r\n    }\r\n\r\n    handleInputChange(event: any) {\r\n        setTimeout(() => {\r\n            var pos = this.checkVal(true);\r\n            this.caret(pos);\r\n            this.updateModel(event);\r\n            this.setControlValue(event, this.isCompleted());\r\n        }, 0);\r\n    }\r\n\r\n    getUnmaskedValue() {\r\n        let unmaskedBuffer = [];\r\n        for (let i = 0; i < this.buffer.length; i++) {\r\n            let c = this.buffer[i];\r\n            if (this.tests![i] && c != this.getPlaceholder(i)) {\r\n                unmaskedBuffer.push(c);\r\n            }\r\n        }\r\n        return unmaskedBuffer.join('');\r\n    }\r\n\r\n    updateModel(e: any) { }\r\n\r\n    updateFilledState() {\r\n        this.filled = this.input && this.input.value != '';\r\n    }\r\n\r\n    onDestroy() {\r\n        let eventCount = this.eventListeners.length;\r\n        for (var i = 0; i < eventCount; i++) {\r\n            this.eventListeners[0]();\r\n            this.eventListeners.splice(0, 1);\r\n        }\r\n        this.eventListeners = [];\r\n    }\r\n}","export const SIMPLE_EMAIL_VALIDATION: string = \"simple-email-validation\";\r\nexport const ADVANCED_EMAIL_VALIDATION: string = \"advanced-email-validation\";","import { Directive, Input } from \"@angular/core\";\r\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\r\nimport { VALIDATOR_CONFIG } from \"../../const/app.const\";\r\n\r\n/**\r\n * Abstract class providing common functionality for processing control expressions in Angular directives.\r\n */\r\n@Directive()\r\nexport abstract class ControlExpressionProcess {\r\n    /**\r\n     * Validator function for the control.\r\n     */\r\n    protected validator?: ValidatorFn;\r\n\r\n    /**\r\n     * Conditional validator function for the control.\r\n     */\r\n    protected conditionalValidator?: ValidatorFn;\r\n\r\n    /**\r\n     * Configuration for the control.\r\n     */\r\n    protected controlConfig: { [key: string]: any } | undefined = {};\r\n\r\n    /**\r\n     * Optional name for the control.\r\n     */\r\n    @Input()\r\n    public name?: string;\r\n\r\n    /**\r\n     * Optional form control name.\r\n     */\r\n    @Input()\r\n    public formControlName?: string;\r\n\r\n    /*\r\n     * Flag indicating whether control processing has occurred.\r\n     */\r\n    public isProcessed: boolean = false;\r\n\r\n    /**\r\n     * Collection of form controls associated with the directive.\r\n     */\r\n    protected controls?: { [name: string]: FormControl };\r\n\r\n    /**\r\n     * Sets the configuration for the control model.\r\n     * Marks the processing as completed and assigns the validator configuration to the control if present.\r\n     * @param control The abstract control associated with the directive.\r\n     */\r\n    public setModelConfig(control: AbstractControl) {\r\n        this.isProcessed = true;\r\n\r\n        /* If there is a validator configuration, assign it to the control. */\r\n        if (this.controlConfig && this.controlConfig[\"validatorConfig\"]) {\r\n            (control as any)[VALIDATOR_CONFIG] = this.controlConfig[\"validatorConfig\"];\r\n\r\n            /* Clear the control configuration. */\r\n            this.controlConfig = undefined;\r\n        }\r\n    }\r\n}\r\n","import { Directive, Input } from \"@angular/core\";\r\nimport { AbstractControl, FormControl, ValidatorFn } from '@angular/forms';\r\nimport { CHANGE, CHECKBOX, FILE, INPUT, RADIO, SELECT, TEXTAREA } from \"../../const\";\r\n\r\nimport { MaskProvider } from '../../domain/element-processor/mask.provider';\r\nimport { ControlExpressionProcess } from './control-expression-process';\r\n\r\n/**\r\n * BaseValidator is a base class for implementing custom validators in Angular.\r\n * It extends ControlExpressionProcess to handle control expressions.\r\n */\r\n@Directive()\r\nexport class BaseValidator extends ControlExpressionProcess {\r\n    /**\r\n     * Input property for the form control associated with the validator.\r\n     */\r\n    @Input()\r\n    public formControl?: FormControl | AbstractControl;\r\n\r\n    /**\r\n     * Array to store the validator functions.\r\n     */\r\n    protected validators: ValidatorFn[] = [];\r\n\r\n    /**\r\n     * Reference to the HTML element associated with the validator.\r\n     */\r\n    protected element: any;\r\n\r\n    /**\r\n     * Name of the event triggering the validation.\r\n     */\r\n    protected eventName?: string;\r\n\r\n    /**\r\n     * Provider for handling masks in validation.\r\n     */\r\n    protected maskProvider?: MaskProvider;\r\n\r\n    /**\r\n     * Performs validation on the provided control using the defined validators and mask provider.\r\n     * @param control The abstract control to be validated.\r\n     * @returns A validation result, or null if validation passes.\r\n     */\r\n    public validation(control: AbstractControl): { [key: string]: any } {\r\n        let result = null;\r\n\r\n        /* Iterate through validators and break on the first validation failure. */\r\n        for (let validator of this.validators) {\r\n            result = validator(control);\r\n            if (result) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        /* If no validation failure and a mask provider is defined, validate using the mask. */\r\n        if (!result && this.maskProvider) {\r\n            result = this.maskProvider.validate();\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Sets the event name based on the type of HTML element associated with the validator.\r\n     * This is used to determine the event that triggers validation.\r\n     */\r\n    protected setEventName() {\r\n        var eventName: string = '';\r\n\r\n        /* Determine event based on HTML element type */\r\n        switch (this.element.tagName) {\r\n            case INPUT:\r\n            case TEXTAREA:\r\n                eventName = (this.element.type == CHECKBOX || this.element.type == RADIO || this.element.type == FILE) ? CHANGE : INPUT;\r\n                break;\r\n\r\n            case SELECT:\r\n                eventName = CHANGE;\r\n                break;\r\n        }\r\n\r\n        this.eventName = eventName.toLowerCase();\r\n    }\r\n}\r\n","/* ngModel, formControlName, and formControl are the selectors for this directive */\r\nimport { Directive, ElementRef, forwardRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\r\n\r\n/* Required imports for form control handling */\r\nimport { AbstractControl, FormControl, NG_VALIDATORS, Validator, ValidatorFn } from '@angular/forms';\r\n\r\n/* Constants used in the directive */\r\nimport { BLANK, BLUR, ELEMENT_VALUE, FOCUS } from \"../../const\";\r\n\r\n/* Importing validator-related constants and configurations */\r\nimport { APP_VALIDATORS } from '../../const/app-validators.const';\r\nimport { CONDITIONAL_VALIDATOR, TEMPLATE_VALIDATION_CONFIG, VALIDATOR_CONFIG } from '../../const/app.const';\r\n\r\n/* Providers for decimal and mask processing */\r\nimport { DecimalProvider } from \"../../domain/element-processor/decimal.provider\";\r\nimport { MaskProvider } from '../../domain/element-processor/mask.provider';\r\n\r\n/* Configuration models used by the directive */\r\nimport {\r\n    AlphaConfig, BaseConfig, CompareConfig, ComposeConfig, ContainsConfig, CreditCardConfig, DateConfig,\r\n    DefaultConfig, DifferentConfig, DigitConfig, EmailConfig, ExtensionConfig, FactorConfig, MessageConfig,\r\n    NumberConfig, NumericConfig, PasswordConfig, RangeConfig, RelationalOperatorConfig, RequiredConfig, RuleConfig,\r\n    SizeConfig, TimeConfig, UniqueConfig\r\n} from '../../models/config';\r\n\r\n/* Service for form control manipulation */\r\nimport { RxFormControl } from \"../../services/form-control\";\r\n\r\n/* Utility functions and classes */\r\nimport { RegexValidator } from '../../util';\r\nimport { ApplicationUtil } from '../../util/app-util';\r\n\r\n/* Base validator class */\r\nimport { BaseValidator } from './base-validator';\r\n\r\n/* Configuration object for NG_VALIDATORS binding */\r\nconst NGMODEL_BINDING: any = {\r\n    provide: NG_VALIDATORS,\r\n    useExisting: forwardRef(() => RxFormControlDirective),\r\n    multi: true\r\n};\r\n\r\n/* List of validators that can be used without configuration */\r\nconst ALLOW_VALIDATOR_WITHOUT_CONFIG = ['required', 'notEmpty', 'alpha', 'alphaNumeric', 'ascii', 'dataUri', 'digit', 'email', 'even', 'hexColor', 'json', 'latitude', 'latLong', 'leapYear', 'longitude', 'lowerCase', 'mac', 'odd', 'port', 'primeNumber', 'time', 'upperCase', 'url', 'unique', 'cusip', 'gird'];\r\n\r\n/* Constants for numeric validation */\r\nconst NUMERIC: string = \"numeric\";\r\nconst IS_FORMAT: string = \"isFormat\";\r\nconst DIGITS_INFO: string = \"digitsInfo\";\r\n\r\n/* Directive class definition */\r\n@Directive({\r\n    selector: '[ngModel],[formControlName],[formControl]',\r\n    providers: [NGMODEL_BINDING]\r\n})\r\nexport class RxFormControlDirective extends BaseValidator implements OnInit, OnDestroy, Validator {\r\n    private eventListeners: any[] = [];\r\n    private isNumericSubscribed: boolean = false;\r\n    private isFocusCalled: boolean = false;\r\n    private isMasked: boolean = false;\r\n\r\n    set validationControls(value: { [key: string]: FormControl }) { this.controls = value; }\r\n\r\n    get validationControls(): { [key: string]: FormControl } | undefined { return this.controls; }\r\n\r\n    /* Input properties for various validators */\r\n    @Input() rxalpha?: AlphaConfig;\r\n    @Input() rxalphaNumeric?: AlphaConfig;\r\n    @Input() rxascii?: BaseConfig;\r\n    @Input() rxcompare?: CompareConfig;\r\n    @Input() rxcompose?: ComposeConfig;\r\n    @Input() rxcontains?: ContainsConfig;\r\n    @Input() rxcreditCard?: CreditCardConfig;\r\n    @Input() rxdataUri?: BaseConfig;\r\n    @Input() rxdifferent?: DifferentConfig;\r\n    @Input() rxdigit?: DigitConfig;\r\n    @Input() rxemail?: EmailConfig;\r\n    @Input() rxendsWith?: DefaultConfig;\r\n    @Input() rxeven?: BaseConfig;\r\n    @Input() rxextension?: ExtensionConfig;\r\n    @Input() rxfactor?: FactorConfig;\r\n    @Input() rxfileSize?: SizeConfig;\r\n    @Input() rxgreaterThanEqualTo?: RelationalOperatorConfig;\r\n    @Input() rxgreaterThan?: RelationalOperatorConfig;\r\n    @Input() rxhexColor?: MessageConfig;\r\n    @Input() rxjson?: DefaultConfig;\r\n    @Input() rxlatitude?: BaseConfig;\r\n    @Input() rxlatLong?: BaseConfig;\r\n    @Input() rxleapYear?: BaseConfig;\r\n    @Input() rxlessThan?: RelationalOperatorConfig;\r\n    @Input() rxlessThanEqualTo?: RelationalOperatorConfig;\r\n    @Input() rxlongitude?: BaseConfig;\r\n    @Input() rxlowerCase?: MessageConfig;\r\n    @Input() rxmac?: BaseConfig;\r\n    @Input() rxmaxDate?: DateConfig;\r\n    @Input() rxmaxLength?: NumberConfig;\r\n    @Input() rxmaxNumber?: NumberConfig;\r\n    @Input() rxminDate?: DateConfig;\r\n    @Input() rxminLength?: NumberConfig;\r\n    @Input() rxminNumber?: NumberConfig;\r\n    @Input() rxnumeric?: NumericConfig;\r\n    @Input() rxodd?: BaseConfig;\r\n    @Input() rxpassword?: PasswordConfig;\r\n    @Input() rxport?: BaseConfig;\r\n    @Input() rxprimeNumber?: BaseConfig;\r\n    @Input() rxrequired?: RequiredConfig;\r\n    @Input() rxrange?: RangeConfig;\r\n    @Input() rxrule?: RuleConfig;\r\n    @Input() rxstartsWith?: DefaultConfig;\r\n    @Input() rxtime?: TimeConfig;\r\n    @Input() rxupperCase?: MessageConfig;\r\n    @Input() rxurl?: DefaultConfig;\r\n    @Input() rxunique?: UniqueConfig;\r\n    @Input() rxnotEmpty?: BaseConfig;\r\n    @Input() rxcusip?: BaseConfig;\r\n    @Input() rxgrid?: BaseConfig;\r\n    @Input() rxdate?: BaseConfig;\r\n\r\n    /**\r\n     * Constructor with injected dependencies\r\n     * @param elementRef \r\n     * @param renderer \r\n     * @param decimalProvider \r\n     */\r\n    constructor(private elementRef: ElementRef, private renderer: Renderer2, private decimalProvider: DecimalProvider) {\r\n        super();\r\n        this.element = elementRef.nativeElement as Node;\r\n        this.setEventName();\r\n    }\r\n\r\n    ngOnInit() {\r\n        let validators: ValidatorFn[] = [];\r\n\r\n        /* Iterate through available validators and add them to the list if configured */\r\n        Object.keys(APP_VALIDATORS).forEach(validatorName => {\r\n            if (((this as any)[`rx${validatorName}`]) || (ALLOW_VALIDATOR_WITHOUT_CONFIG.indexOf(validatorName) != -1 && (this as any)[`rx${validatorName}`] == BLANK)) {\r\n                validators.push(APP_VALIDATORS[validatorName]((this as any)[`rx${validatorName}`]));\r\n\r\n                /* Configure control if name is available */\r\n                if (this.name && !(this.formControlName && this.formControl)) {\r\n                    ApplicationUtil.configureControl(this.controlConfig, (this as any)[`rx${validatorName}`], validatorName);\r\n                }\r\n            }\r\n        })\r\n\r\n        if (validators.length > 0) {\r\n            this.validators = validators;\r\n        }\r\n\r\n        /* Bind numeric element event if rxnumeric is present */\r\n        if (this.rxnumeric && (this.rxnumeric.isFormat || this.rxnumeric.digitsInfo)) {\r\n            this.bindNumericElementEvent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Method for handling blur event\r\n     */\r\n    blurEvent() {\r\n        if (!(this.formControl && this.formControl.errors && this.formControl.errors[\"numeric\"])) {\r\n            if (this.formControl!.value !== null && this.formControl!.value !== undefined) {\r\n                let value = this.decimalProvider.transFormDecimal(this.formControl!.value, this.rxnumeric!.digitsInfo!, this.rxnumeric!.persistZero!);\r\n                value = (!this.rxnumeric!.isFormat) ? this.decimalProvider.replacer(value) : value;\r\n                this.setValueOnElement(value);\r\n            }\r\n\r\n            this.isFocusCalled = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Bind numeric element events\r\n     * @param config \r\n     */\r\n    bindNumericElementEvent(config?: NumericConfig) {\r\n        if (config)\r\n            this.rxnumeric = config;\r\n\r\n        let listener = this.renderer.listen(this.element, BLUR, this.blurEvent.bind(this));\r\n        this.eventListeners.push(listener);\r\n\r\n        listener = this.renderer.listen(this.element, FOCUS, (event) => {\r\n            this.isFocusCalled = true;\r\n            if (!(this.formControl && this.formControl.errors && this.formControl.errors[\"numeric\"]) && this.formControl!.value != null) {\r\n                let value = this.decimalProvider.replacer(this.element.value);\r\n                this.setValueOnElement(value);\r\n            }\r\n        });\r\n        this.eventListeners.push(listener);\r\n    }\r\n\r\n    /**\r\n     * Bind value change event\r\n     */\r\n    bindValueChangeEvent() {\r\n        if (this.eventName && this.eventName != BLANK) {\r\n            let listener = this.renderer.listen(this.element, this.eventName!, () => {\r\n                if (this.validationControls) {\r\n                    Object.keys(this.validationControls!).forEach(fieldName => {\r\n                        (this.validationControls as any)[fieldName].updateValueAndValidity();\r\n                    });\r\n                }\r\n            });\r\n            this.eventListeners.push(listener);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Subscribe to numeric formatter\r\n     */\r\n    subscribeNumericFormatter() {\r\n        if ((this.formControl as any)[VALIDATOR_CONFIG] && (this.formControl as any)[VALIDATOR_CONFIG][NUMERIC] && ((this.formControl as any)[VALIDATOR_CONFIG][NUMERIC][IS_FORMAT] || (this.formControl as any)[VALIDATOR_CONFIG][NUMERIC][DIGITS_INFO])) {\r\n            if (!this.isNumericSubscribed) {\r\n                this.bindNumericElementEvent((this.formControl as any)[VALIDATOR_CONFIG][NUMERIC]);\r\n                this.isNumericSubscribed = true;\r\n            }\r\n\r\n            if (!this.isFocusCalled && RegexValidator.isNotBlank((this.formControl as any).value)) {\r\n                this.blurEvent();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Subscribe to mask validator\r\n     */\r\n    subscribeMaskValidator() {\r\n        if ((this.formControl as any)[VALIDATOR_CONFIG] && (this.formControl as any)[VALIDATOR_CONFIG][\"mask\"] && !this.isMasked) {\r\n            let config = (this.formControl as any)[VALIDATOR_CONFIG][\"mask\"];\r\n            this.maskProvider = new MaskProvider(this.element, config.mask, this.renderer, this.formControl as FormControl, config);\r\n            this.isMasked = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set value on element\r\n     * @param value \r\n     */\r\n    private setValueOnElement(value: any) {\r\n        this.renderer.setProperty(this.element, ELEMENT_VALUE, value);\r\n    }\r\n\r\n    /**\r\n     * Set template validators\r\n     * @param control \r\n     */\r\n    private setTemplateValidators(control: AbstractControl) {\r\n        for (let validatorName in (control as any)[VALIDATOR_CONFIG]) {\r\n            (this as any)[validatorName] = (control as any)[VALIDATOR_CONFIG][validatorName];\r\n        }\r\n\r\n        delete (control as any)[TEMPLATE_VALIDATION_CONFIG];\r\n        delete (control as any)[VALIDATOR_CONFIG];\r\n        this.ngOnInit();\r\n    }\r\n\r\n    /**\r\n     * Update element class on change\r\n     * @param element \r\n     * @returns \r\n     */\r\n    private updateOnElementClass(element: HTMLElement) {\r\n        var previousClassName: string = '';\r\n        return function (className: string) {\r\n            if (previousClassName)\r\n                element.classList.remove(previousClassName);\r\n\r\n            if (className)\r\n                element.classList.add(className);\r\n\r\n            previousClassName = className;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set validator configuration\r\n     * @param control \r\n     */\r\n    private setValidatorConfig(control: AbstractControl) {\r\n        if (!this.formControl) {\r\n            this.formControl = control;\r\n            let rxFormControl = this.formControl as RxFormControl;\r\n\r\n            if (rxFormControl.updateOnElementClass)\r\n                rxFormControl.updateOnElementClass = this.updateOnElementClass(this.element);\r\n        }\r\n\r\n        this.subscribeMaskValidator();\r\n        this.subscribeNumericFormatter();\r\n\r\n        if ((control as any)[TEMPLATE_VALIDATION_CONFIG])\r\n            this.setTemplateValidators(control);\r\n\r\n        if ((control as any)[CONDITIONAL_VALIDATOR]) {\r\n            this.conditionalValidator = (control as any)[CONDITIONAL_VALIDATOR];\r\n            delete (control as any)[CONDITIONAL_VALIDATOR];\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Validate the control\r\n     * @param control \r\n     * @returns \r\n     */\r\n    validate(control: AbstractControl): { [key: string]: any } | null {\r\n        this.setValidatorConfig(control);\r\n\r\n        if (this.conditionalValidator) {\r\n            this.conditionalValidator(control);\r\n        }\r\n\r\n        if (!this.isProcessed) {\r\n            this.setModelConfig(control);\r\n        }\r\n\r\n        return ((this.validators && this.validators.length > 0) || this.maskProvider) ? this.validation(control) : null;\r\n    }\r\n\r\n    /**\r\n     * Destroy the directive\r\n     */\r\n    ngOnDestroy() {\r\n        this.controls = undefined;\r\n        let eventCount = this.eventListeners.length;\r\n\r\n        for (var i = 0; i < eventCount; i++) {\r\n            this.eventListeners[0]();\r\n            this.eventListeners.splice(0, 1);\r\n        }\r\n\r\n        this.eventListeners = [];\r\n\r\n        if (this.maskProvider)\r\n            this.maskProvider.onDestroy();\r\n    }\r\n}\r\n","export enum UrlValidationType{\r\n    FQDN = 1,\r\n    LocalHost,\r\n    IntranetServer\r\n}\r\n","import { AbstractControlOptions, ValidatorFn } from '@angular/forms';\r\nimport { PropConfig } from \"./config/prop-config\";\r\nimport { AutoInstanceConfig } from './interface/auto-instance-config.interface';\r\nimport { PropValidationConfig } from \"./prop-validation-config\";\r\n\r\n/**\r\n * Configuration class for Angular's FormBuilder. Provides options and settings for FormBuilder.\r\n */\r\nexport class FormBuilderConfiguration {\r\n    constructor(formBuilderConfiguration?: FormBuilderConfiguration) {\r\n        /* If a configuration is provided, copy its properties to this instance */\r\n        if (formBuilderConfiguration) {\r\n            for (var column in formBuilderConfiguration) {\r\n                (this as any)[column] = (formBuilderConfiguration as any)[column];\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Map of generic entities used in the configuration.\r\n     */\r\n    public genericEntities?: { [key: string]: Function };\r\n\r\n    /**\r\n     * Array of generic validation functions to be applied to all form controls.\r\n     */\r\n    public applyAllProps?: ValidatorFn[];\r\n\r\n    /**\r\n     * Array of property names to be excluded from form generation.\r\n     */\r\n    public excludeProps?: string[];\r\n\r\n    /**\r\n     * Array of property names to be included in form generation.\r\n     */\r\n    public includeProps?: string[];\r\n\r\n    /**\r\n     * Array of property names to be ignored if their values are undefined during form generation.\r\n     */\r\n    public ignoreUndefinedProps?: string[];\r\n\r\n    /**\r\n     * Map of property configurations using PropConfig for specific form controls.\r\n     */\r\n    public propsConfig?: { [key: string]: PropConfig };\r\n\r\n    /**\r\n     * Map of dynamic validations for specific properties.\r\n     */\r\n    public dynamicValidation?: { [key: string]: PropValidationConfig };\r\n\r\n    /**\r\n     * Name of the property holding dynamic validation configuration.\r\n     */\r\n    public dynamicValidationConfigurationPropertyName?: string;\r\n\r\n    /**\r\n     * Configuration for auto-instantiating classes when constructing form groups.\r\n     */\r\n    public autoInstanceConfig?: AutoInstanceConfig;\r\n\r\n    /**\r\n     * Map of abstract control options specifying when to update the control (change, blur, submit).\r\n     */\r\n    public abstractControlOptions?: { [key: string]: 'change' | 'blur' | 'submit' };\r\n\r\n    /**\r\n     * Map of base abstract control options for specific form controls.\r\n     */\r\n    public baseAbstractControlOptions?: { [key: string]: AbstractControlOptions };\r\n}","import { AbstractControl, AsyncValidatorFn, ValidatorFn } from \"@angular/forms\";\r\n\r\n/**\r\n * Abstract class `IAbstractControl` extends Angular's `AbstractControl`.\r\n * It defines additional properties and methods specific to application needs.\r\n */\r\nexport abstract class IAbstractControl extends AbstractControl {\r\n    /* Optional: Array of error messages associated with the control. */\r\n    errorMessages?: string[];\r\n\r\n    /* Optional: Single error message associated with the control. */\r\n    errorMessage?: string;\r\n\r\n    /* Optional: Method to bind errors for the control. */\r\n    bindError?: () => void;\r\n\r\n    /* Optional: Method to refresh the control. */\r\n    refresh?: () => void;\r\n\r\n    /**\r\n     * Optional: Method to set backend errors on the control.\r\n     * @param errors Backend errors to be set on the control.\r\n     */\r\n    setBackEndErrors?: (errors: { [key: string]: any }) => void;\r\n\r\n    /**\r\n     * Optional: Method to clear backend errors from the control.\r\n     * @param errors Optional specific errors to clear. If not provided, clear all backend errors.\r\n     */\r\n    clearBackEndErrors?: (errors?: { [key: string]: any }) => void;\r\n\r\n    /** Optional: Method to get an array of synchronous validator functions associated with the control. */\r\n    getValidators?: () => ValidatorFn[];\r\n\r\n    /** Optional: Method to get an array of asynchronous validator functions associated with the control. */\r\n    getAsyncValidators?: () => AsyncValidatorFn[];\r\n}\r\n","import { Directive, EmbeddedViewRef, Input, OnDestroy, ViewContainerRef } from '@angular/core';\r\n\r\n/**\r\n * Directive for hosting dynamic form controls.\r\n */\r\n@Directive({\r\n    selector: '[controlHost]'\r\n})\r\nexport class ControlHostDirective implements OnDestroy {\r\n    /**\r\n     * Reference to the embedded view.\r\n     */\r\n    public view?: EmbeddedViewRef<any>;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param viewContainerRef The view container reference\r\n     */\r\n    constructor(public viewContainerRef: ViewContainerRef) { }\r\n\r\n    /**\r\n     * Setter for the portal input.\r\n     * @param context The context for the control\r\n     */\r\n    @Input('controlHost')\r\n    set portal(context: any) {\r\n        if (context.templateRef) {\r\n            if (this.view) {\r\n                this.view.destroy();\r\n                this.view = undefined;\r\n            }\r\n\r\n            this.view = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called when the directive is destroyed.\r\n     */\r\n    ngOnDestroy() {\r\n        if (this.view) {\r\n            this.view.destroy();\r\n        }\r\n\r\n        if (this.viewContainerRef) {\r\n            this.viewContainerRef.clear();\r\n        }\r\n    }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Directive } from '@angular/core';\r\n\r\n//@dynamic\r\n@Directive()\r\nexport class Utils {\r\n\r\n    /**\r\n     * Month names\r\n     */\r\n    public static germanMonthNames: { name: string, id: number }[] = [\r\n        { name: 'Januar', id: 1 },\r\n        { name: 'Februar', id: 2 },\r\n        { name: 'März', id: 3 },\r\n        { name: 'April', id: 4 },\r\n        { name: 'Mai', id: 5 },\r\n        { name: 'Juni', id: 6 },\r\n        { name: 'Juli', id: 7 },\r\n        { name: 'August', id: 8 },\r\n        { name: 'September', id: 9 },\r\n        { name: 'Oktober', id: 10 },\r\n        { name: 'November', id: 11 },\r\n        { name: 'Dezember', id: 12 }\r\n    ];\r\n\r\n    /**\r\n     * Creates a range\r\n     * @param size \r\n     * @param startAt \r\n     */\r\n    public static range(start: number, stop: number, step: number): ReadonlyArray<number> {\r\n        return Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + (i * step))\r\n    }\r\n\r\n    /**\r\n     * Removes empty values from the specified object\r\n     * @param obj \r\n     */\r\n    public static removeEmptyValues(obj: any): any {\r\n        return Object.entries(obj)\r\n            .filter(([_, v]) => v != null)\r\n            .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {});\r\n    }\r\n\r\n    /**\r\n     * Gets number of days left in the specified month\r\n     * @param date \r\n     * @param monthOffset \r\n     */\r\n    public static daysLeftInMonth(date: Date, monthOffset = 0): number {\r\n        var time = new Date(date.getTime());\r\n        time.setMonth(date.getMonth() + monthOffset);\r\n        time.setDate(0);\r\n        return Math.max(0, time.getDate() > date.getDate() ? time.getDate() - date.getDate() : 0);\r\n    }\r\n\r\n    /**\r\n     * Gets the value of the specifed object and property\r\n     * @param object \r\n     * @param property \r\n     * @returns \r\n     */\r\n    public static getPropertyValue<TType>(object: any, property: string, delimiter: string = '.'): TType | null {\r\n        /* Property not found */\r\n        if (!object || typeof object === 'undefined' || !property) {\r\n            return null;\r\n        }\r\n\r\n        /* Index of next property split */\r\n        var index = property.indexOf(delimiter)\r\n\r\n        /* Property split found; recursive call */\r\n        if (index > -1) {\r\n            return <TType>this.getPropertyValue(object[property.substring(0, index)], property.substr(index + 1));\r\n        }\r\n\r\n        /* No split; get property */\r\n        return <TType>object[property];\r\n    }\r\n\r\n    /**\r\n     * Sorts an array of object by the specified property\r\n     * @param array \r\n     * @param property \r\n     * @returns \r\n     */\r\n    public static sortArray<T>(array: T[], property: string, reverse?: boolean) {\r\n        let sortDir = reverse === true ? -1 : 1;\r\n        return array = (array?.sort((a: T, b: T) => ((a as any)[property] > (b as any)[property]) ? sortDir : (((b as any)[property] > (a as any)[property]) ? (sortDir * -1) : 0)) || []);\r\n    }\r\n\r\n    /**\r\n     * @description\r\n     * Takes an Array<V>, and a grouping function,\r\n     * and returns a Map of the array grouped by the grouping function.\r\n     *\r\n     * @param list An array of type V.\r\n     * @param keyGetter A Function that takes the the Array type V as an input, and returns a value of type K.\r\n     *                  K is generally intended to be a property key of V.\r\n     *\r\n     * @returns Map of the array grouped by the grouping function.\r\n     */\r\n    public static groupArrayBy<K, V>(list: Array<V>, keyGetter: (input: V) => K): Map<K, Array<V>> {\r\n        const map = new Map<K, Array<V>>();\r\n        list?.forEach((item) => {\r\n            const key = keyGetter(item);\r\n            const collection = map.get(key);\r\n            if (!collection) {\r\n                map.set(key, [item]);\r\n            } else {\r\n                collection.push(item);\r\n            }\r\n        });\r\n\r\n        return map;\r\n    }\r\n\r\n    /**\r\n     * Truncates a text\r\n     * @param text \r\n     * @param length \r\n     * @returns \r\n     */\r\n    public static truncateText(text: string, length: number): string {\r\n        /* If text is not a string, return an empty string */\r\n        if (typeof text !== 'string') {\r\n            return '';\r\n        }\r\n\r\n        /* Remove html tags */\r\n        text = text.replace(/<\\/?[^>]+(>|$)/g, \"\");\r\n\r\n        /* Truncate the string */\r\n        let truncatedText: string = text.substr(0, length);\r\n\r\n        /* Add ellipsis to the text */\r\n        if (text.length > length) {\r\n            truncatedText = `${truncatedText.trim()}...`;\r\n        }\r\n\r\n        return truncatedText;\r\n    }\r\n\r\n    /**\r\n     * Joins text array fro table column\r\n     * @param values \r\n     * @returns \r\n     */\r\n    public static joinArray(values: string[], maxLength: number = 2): string | null {\r\n        if (!values || values?.length <= 0) {\r\n            return null;\r\n        }\r\n\r\n        /* Get first 2 names */\r\n        if (values.length > maxLength) {\r\n            values = values.slice(0, maxLength);\r\n            values[1] = `${values[1]}, ...`;\r\n        }\r\n\r\n        return `<small>${(values.join('<br\\>'))}</small>`;\r\n    }\r\n\r\n    /**\r\n     * Convert Object to HttpParams\r\n     * \r\n     * @param body\r\n     */\r\n    public static toHttpParams(body: any): HttpParams {\r\n        if (!body) {\r\n            return new HttpParams();\r\n        }\r\n\r\n        Object.keys(body).forEach((key) => (body[key] == null || body[key] == '' || body[key] == 'undefined') && body[key] != 0 && delete body[key]);\r\n        return new HttpParams({ fromObject: body });\r\n    }\r\n\r\n    /**\r\n     * Converts HttpParams to a JavaScript object.\r\n     * @param httpParams HttpParams object to convert.\r\n     * @returns Converted JavaScript object.\r\n     */\r\n    public static httpParamsToObject(httpParams: HttpParams): any {\r\n        /* Initialize an empty object to store converted parameters */\r\n        const params: any = {};\r\n\r\n        /* Iterate through each key in HttpParams */\r\n        httpParams.keys().forEach(key => {\r\n            /* Check if the key has multiple values */\r\n            if (httpParams.getAll(key)?.length === 1) {\r\n                /* f only one value exists, assign it directly to params[key] */\r\n                params[key] = httpParams.get(key);\r\n            } else {\r\n                /* If multiple values exist, assign an array of values to params[key] */\r\n                params[key] = httpParams.getAll(key);\r\n            }\r\n        });\r\n\r\n        /* Return the converted JavaScript object */\r\n        return params;\r\n    }\r\n\r\n    /**\r\n     * Converts an array of filter objects to an HttpParams object.\r\n     * @param filterArray The array of filter objects.\r\n     * @param paramNamePrefix The prefix for the query parameter names (default is 'Filters').\r\n     * @returns The HttpParams object containing the constructed query parameters.\r\n     */\r\n    public static toArrayHttpParams(filterArray: any[], paramNamePrefix: string = 'Filters'): HttpParams {\r\n        /* Initialize an empty HttpParams object */\r\n        let httpParams = new HttpParams();\r\n\r\n        /* Iterate through each filter in the filter array */\r\n        filterArray.forEach((filter: any) => {\r\n            /* Get the key of the filter (e.g., 'cat') */\r\n            const filterKey = Object.keys(filter)[0];\r\n\r\n            /* Get the values array */\r\n            const filterValues = filter[filterKey];\r\n\r\n            if (filterValues && filterValues.length > 0) {\r\n                /* Join values with commas and add to HttpParams */\r\n                httpParams = httpParams.append(`${paramNamePrefix}[${filterKey}]`, filterValues.join(','));\r\n            }\r\n        });\r\n\r\n        /* Return the constructed HttpParams object */\r\n        return httpParams;\r\n    }\r\n\r\n    /**\r\n     * Cleans the objects\r\n     * Removes empty properties\r\n     * @param obj \r\n     */\r\n    public static cleanObject(obj: any): any {\r\n        try {\r\n            for (var propName in obj) {\r\n                if (obj[propName] === null || obj[propName] === undefined || obj[propName] === \"\") {\r\n                    delete obj[propName];\r\n                }\r\n            }\r\n        } catch (error) { }\r\n\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * Checks if the specified objects are equal\r\n     * @param obj1 \r\n     * @param obj2 \r\n     * @returns \r\n     */\r\n    public static equals(obj1: any, obj2: any) {\r\n        try { return JSON.stringify(obj1) === JSON.stringify(obj2); }\r\n        catch (error) { return false; }\r\n    }\r\n\r\n    /**\r\n     * Gets the query params and the hash from the specified url\r\n     * @param url \r\n     * @returns \r\n     */\r\n    public static getUrlParts(url: string): { url: string, params: any, hash?: string } {\r\n        try {\r\n            /* Get urls parts */\r\n            var urlHashParts = url?.split('#') ?? [];\r\n\r\n            /* Get hash */\r\n            var urlHash = urlHashParts[1] ?? null;\r\n\r\n            /* Get query parts */\r\n            var urlQueryParts = urlHashParts[0]?.split('?');\r\n\r\n            /* Get query params as object */\r\n            var urlParams: Object = urlQueryParts[1]?.split(\"&\").reduce((prev, curr) => {\r\n                var p = curr.split(\"=\");\r\n                (prev as any)[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);\r\n                return prev;\r\n            }, {}) ?? null;\r\n\r\n            return { url: urlQueryParts[0], params: urlParams, hash: urlHash };\r\n        } catch (error) {\r\n            return { url: url, params: null, hash: undefined };\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if the given object is a class.\r\n     * \r\n     * @param obj - The object to check.\r\n     * @returns `true` if the object is a class, otherwise `false`.\r\n     */\r\n    public static isClass(obj: any): boolean {\r\n        return typeof obj === 'function' && typeof obj.prototype === 'object';\r\n    }\r\n}","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { APP_VALIDATORS } from \"../const/app-validators.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\n/**\r\n * Validator function to apply multiple validators using logical AND.\r\n * @param configModel - Configuration model for the AND validator.\r\n * @returns Validator function.\r\n */\r\nexport function andValidator(configModel?: LogicalOperatorConfig): ValidatorFn {\r\n  return (control: AbstractControl): { [key: string]: any } | null => {\r\n    /* Get configuration object */\r\n    let config = getConfigObject(configModel, control);\r\n\r\n    /* Check if validation should be applied */\r\n    if (ValidatorValueChecker.pass(control, config)) {\r\n      /* Get names of validators to apply */\r\n      let validatorNames = Object.keys(config.validation);\r\n\r\n      /* Variable to track if any validation failed */\r\n      let failed: boolean = false;\r\n\r\n      /* Apply each validator using logical AND */\r\n      for (var validatorName of validatorNames) {\r\n        failed = typeof config.validation[validatorName] == \"boolean\"\r\n          ? APP_VALIDATORS[validatorName]()(control)\r\n          : APP_VALIDATORS[validatorName](config.validation[validatorName])(control);\r\n\r\n        /* If any validation fails, break the loop */\r\n        if (failed)\r\n          break;\r\n      }\r\n\r\n      /* If any validation fails, return validation error */\r\n      if (failed)\r\n        return ObjectMaker.toJson(AnnotationTypes[\"and\"], config, [control.value]);\r\n    }\r\n\r\n    /* Return null if validation passes */\r\n    return ObjectMaker.null();\r\n  };\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { APP_VALIDATORS } from \"../const/app-validators.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function notValidator(configModel?: LogicalOperatorConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tlet validatorNames = Object.keys(config.validation);\r\n\t\t\tlet failed: boolean = false;\r\n\t\t\tfor (var validatorName of validatorNames) {\r\n\t\t\t\tfailed = typeof config.validation[validatorName] == \"boolean\" ? APP_VALIDATORS[validatorName]()(control) : APP_VALIDATORS[validatorName](config.validation[validatorName])(control);\r\n\t\t\t\tif (!failed) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!failed) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"not\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { APP_VALIDATORS } from \"../const/app-validators.const\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { getConfigObject } from \"../util/config-provider\";\r\nimport { ObjectMaker } from \"../util/object-maker\";\r\nimport { ValidatorValueChecker } from \"../util/validator-value-checker\";\r\n\r\nexport function orValidator(configModel?: LogicalOperatorConfig): ValidatorFn {\r\n\treturn (control: AbstractControl): { [key: string]: any } | null => {\r\n\t\tlet config = getConfigObject(configModel, control);\r\n\t\tif (ValidatorValueChecker.pass(control, config)) {\r\n\t\t\tlet validatorNames = Object.keys(config.validation);\r\n\t\t\tlet failed: boolean = false;\r\n\t\t\tfor (var validatorName of validatorNames) {\r\n\t\t\t\tfailed = typeof config.validation[validatorName] == \"boolean\" ? APP_VALIDATORS[validatorName]()(control) : APP_VALIDATORS[validatorName](config.validation[validatorName])(control);\r\n\t\t\t\tif (!failed) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (failed) {\r\n\t\t\t\treturn ObjectMaker.toJson(AnnotationTypes[\"or\"], config, [control.value]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ObjectMaker.null();\r\n\t}\r\n}\r\n","import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY } from \"../const\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { FormBuilderConfiguration } from '../models/form-builder-configuration';\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { AutoInstanceConfig } from '../models/interface/auto-instance-config.interface';\r\nimport { PropertyInfo } from \"../models/property-info\";\r\nimport { getInstance, instanceProvider } from \"../util/instance-provider.function\";\r\nimport { RegexValidator } from '../util/regex-validator';\r\nimport { SANITIZERS } from \"../util/sanitizers\";\r\n\r\n/**\r\n * Definition of BaseFormBuilder class\r\n */\r\nexport class BaseFormBuilder {\r\n    /**\r\n     * Creates a new instance.\r\n     * @returns The newly created instance.\r\n     */\r\n    protected createInstance() {\r\n        /* Create a new empty object */\r\n        let instance = {};\r\n\r\n        /* Increment model count in default container */\r\n        defaultContainer.modelIncrementCount = defaultContainer.modelIncrementCount + 1;\r\n\r\n        /* Generate model name */\r\n        let modelName = `RxWebModel${defaultContainer.modelIncrementCount}`;\r\n\r\n        /* Dynamically create constructor function */\r\n        instance.constructor = Function(`\"use strict\";return(function ${modelName}(){ })`)();\r\n\r\n        /* Return the newly created instance */\r\n        return instance;\r\n    }\r\n\r\n    /**\r\n     * Creates and returns an instance of a class object.\r\n     * \r\n     * @param model The model or class for which the instance is created.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @param classInstance An optional existing instance of the class.\r\n     * @returns An instance of the class object.\r\n     */\r\n    protected createClassObject(model: any, formBuilderConfiguration: FormBuilderConfiguration, classInstance?: any): any {\r\n        /* Get the instance container from the default container */\r\n        let instanceContainer = defaultContainer.get(model);\r\n\r\n        /* Retrieve the auto instance configuration from the form builder configuration */\r\n        let autoInstanceConfig: AutoInstanceConfig | undefined = formBuilderConfiguration ? formBuilderConfiguration.autoInstanceConfig : undefined;\r\n\r\n        /* Check if auto instance configuration is not provided */\r\n        if (!autoInstanceConfig) {\r\n            /* Return the existing class instance if it's provided and not a function, otherwise create a new instance */\r\n            return classInstance && typeof classInstance != \"function\" ? classInstance : getInstance(model, []);\r\n        }\r\n\r\n        /* If auto instance configuration is provided */\r\n        else {\r\n            /* Ensure classInstance is a new instance if not already provided */\r\n            classInstance = classInstance && typeof classInstance != \"function\" ? classInstance : getInstance(model, autoInstanceConfig.arguments || []);\r\n\r\n            /* Handle objectPropInstanceConfig */\r\n            if (autoInstanceConfig.objectPropInstanceConfig && autoInstanceConfig.objectPropInstanceConfig.length > 0) {\r\n                autoInstanceConfig.objectPropInstanceConfig.forEach(t => {\r\n                    /* Find the object property in the instance container */\r\n                    let objectProperty = instanceContainer.properties?.filter(property => property.name == t.propertyName && property.propertyType == OBJECT_PROPERTY)[0];\r\n                    if (objectProperty) {\r\n                        let data = classInstance[t.propertyName];\r\n\r\n                        /* Create an instance for the object property */\r\n                        classInstance[t.propertyName] = getInstance(objectProperty.entity, t.arguments || []);\r\n                        if (data) {\r\n                            /* Set the object value */\r\n                            this.setObjectValue(data, classInstance[t.propertyName]);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            /* Handle arrayPropInstanceConfig */\r\n            if (autoInstanceConfig.arrayPropInstanceConfig && autoInstanceConfig.arrayPropInstanceConfig.length > 0) {\r\n                autoInstanceConfig.arrayPropInstanceConfig.forEach(t => {\r\n                    /* Find the array property in the instance container */\r\n                    let property = instanceContainer.properties?.filter(property => property.name == t.propertyName && property.propertyType == ARRAY_PROPERTY)[0];\r\n                    if (property) {\r\n                        let data = classInstance[t.propertyName];\r\n                        classInstance[t.propertyName] = [];\r\n                        for (var i = 0; i < t.rowItems; i++) {\r\n                            /* Create an instance for each item in the array */\r\n                            let instance = getInstance(property.entity, t.arguments || []);\r\n                            if (data && data[i]) {\r\n                                /* Set the object value for each item */\r\n                                this.setObjectValue(data[i], instance);\r\n                            }\r\n\r\n                            classInstance[t.propertyName].push(instance);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            /* Return the updated class instance */\r\n            return classInstance;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the class instance object with values from the entity object based on the instance container properties.\r\n     * \r\n     * @param model The model or class for which the instance container is retrieved.\r\n     * @param entityObject The entity object containing the values to update.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @returns The updated class instance object.\r\n     */\r\n    protected updateObject(model: any, entityObject: any, formBuilderConfiguration: FormBuilderConfiguration): any {\r\n        /* Get the instance container using the provided model */\r\n        let instanceContainer = instanceProvider(model);\r\n\r\n        /* Get a new instance of the model */\r\n        let classInstance = getInstance(model, []);\r\n\r\n        /* Check if instance container exists */\r\n        if (instanceContainer) {\r\n            /* Iterate through the properties in the instance container */\r\n            instanceContainer.properties?.forEach(t => {\r\n                /* Determine the entity type based on property type and configuration */\r\n                let entity = ((t.propertyType == OBJECT_PROPERTY || t.propertyType == ARRAY_PROPERTY) && t.entity) ? t.entity : (formBuilderConfiguration && formBuilderConfiguration.genericEntities) ? formBuilderConfiguration.genericEntities[t.name] : undefined;\r\n                if (!entity && t.entityProvider) {\r\n                    entity = t.entityProvider.call(entityObject);\r\n                }\r\n\r\n                /* Switch based on the property type */\r\n                switch (t.propertyType) {\r\n                    case PROPERTY:\r\n                        /* Set the value for single property */\r\n                        classInstance[t.name] = this.getValue(entityObject, t, formBuilderConfiguration);\r\n                        break;\r\n\r\n                    case OBJECT_PROPERTY:\r\n                        /* Get the value for object property */\r\n                        let objectValue = this.getValue(entityObject, t, formBuilderConfiguration);\r\n                        if (objectValue) {\r\n                            /* Recursively update the object property */\r\n                            classInstance[t.name] = this.updateObject(entity, objectValue, formBuilderConfiguration);\r\n                        }\r\n                        break;\r\n\r\n                    case ARRAY_PROPERTY:\r\n                        /* Get the value for array property */\r\n                        let arrayObjectValue = this.getValue(entityObject, t, formBuilderConfiguration);\r\n                        if (arrayObjectValue && Array.isArray(arrayObjectValue)) {\r\n                            classInstance[t.name] = [];\r\n                            for (let row of arrayObjectValue) {\r\n                                /* Recursively update each item in the array */\r\n                                let instanceObject = this.updateObject(entity, row, formBuilderConfiguration);\r\n                                classInstance[t.name].push(instanceObject);\r\n                            }\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n        }\r\n\r\n        /* Return the updated class instance object */\r\n        return classInstance;\r\n    }\r\n\r\n    /**\r\n     * Provides an instance based on the function and entity object.\r\n     * @param instanceFunc - The function to provide an instance from.\r\n     * @param entityObject - The entity object to use.\r\n     * @returns The provided instance container.\r\n     */\r\n    protected instaceProvider(instanceFunc: any, entityObject: any): InstanceContainer {\r\n        return instanceProvider(instanceFunc, entityObject);\r\n    }\r\n\r\n    /**\r\n     * Gets the default value for the property.\r\n     * @param propertyInfo - Information about the property.\r\n     * @param value - The value to get the default for.\r\n     * @param formBuilderConfiguration - The configuration for the form builder.\r\n     * @returns The default value.\r\n     */\r\n    protected getDefaultValue(propertyInfo: PropertyInfo, value: any, formBuilderConfiguration: FormBuilderConfiguration) {\r\n        let defaultValue = (formBuilderConfiguration &&\r\n            formBuilderConfiguration.propsConfig &&\r\n            formBuilderConfiguration.propsConfig[propertyInfo.name] &&\r\n            formBuilderConfiguration.propsConfig[propertyInfo.name].defaultValue &&\r\n            !RegexValidator.isNotBlank(value)) ? formBuilderConfiguration.propsConfig[propertyInfo.name].defaultValue :\r\n            (propertyInfo.defaultValue != undefined && !RegexValidator.isNotBlank(value)) ? propertyInfo.defaultValue : value\r\n\r\n        return defaultValue;\r\n    }\r\n\r\n    /**\r\n     * Sanitizes the provided value based on the instance container and property name.\r\n     * @param instanceContainer - The container for the instance.\r\n     * @param propertyName - The name of the property.\r\n     * @param value - The value to sanitize.\r\n     * @param entityObject - The entity object.\r\n     * @param baseObject - The base object.\r\n     * @returns The sanitized value.\r\n     */\r\n    protected sanitizeValue(instanceContainer: InstanceContainer, propertyName: string, value: any, entityObject: any, baseObject: any) {\r\n        /* If sanitizers are defined for the property and the property exists in the instanceContainer */\r\n        if (instanceContainer.sanitizers && instanceContainer.sanitizers[propertyName]) {\r\n            /* Iterate over each sanitizer defined for the property */\r\n            for (let sanitizer of instanceContainer.sanitizers[propertyName]) {\r\n                /* Apply the sanitizer to the value */\r\n                value = SANITIZERS[sanitizer.name](value, sanitizer.config);\r\n            }\r\n        }\r\n\r\n        /* If the property exists in the entityObject and its value has changed */\r\n        if (entityObject[propertyName] !== undefined && entityObject[propertyName] !== value) {\r\n            /* Update the property value in the entityObject */\r\n            entityObject[propertyName] = value;\r\n        }\r\n\r\n        /* If the property exists in the baseObject and its value has changed */\r\n        if (baseObject[propertyName] !== undefined && baseObject[propertyName] !== value) {\r\n            /* Update the property value in the baseObject */\r\n            baseObject[propertyName] = value;\r\n        }\r\n\r\n        /* Return the sanitized or unchanged value */\r\n        return value;\r\n    }\r\n\r\n    /**\r\n     * Gets the value for the property.\r\n     * @param entityObject - The entity object.\r\n     * @param propertyInfo - Information about the property.\r\n     * @param formBuilderConfiguration - The configuration for the form builder.\r\n     * @returns The property value.\r\n     */\r\n    private getValue(entityObject: { [key: string]: any }, propertyInfo: PropertyInfo, formBuilderConfiguration: FormBuilderConfiguration) {\r\n        let propValue = (propertyInfo.dataPropertyName) ? entityObject[propertyInfo.dataPropertyName] : entityObject[propertyInfo.name];\r\n        return this.getDefaultValue(propertyInfo, propValue, formBuilderConfiguration);\r\n    }\r\n\r\n    /**\r\n     * Sets the value of the object.\r\n     * @param entityObject - The entity object.\r\n     * @param classInstance - The class instance to set the value on.\r\n     */\r\n    private setObjectValue(entityObject: { [key: string]: any }, classInstance: any) {\r\n        for (var column in entityObject) {\r\n            classInstance[column] = entityObject[column];\r\n        }\r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AbstractControlOptions, AsyncValidatorFn, FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport { Utils } from \"../../common/functions/utils\";\r\nimport { ARRAY_PROPERTY, BOOLEAN, FUNCTION_STRING, MODEL, NUMBER, OBJECT_PROPERTY, OBJECT_STRING, PROPERTY, RX_WEB_VALIDATOR, STRING } from \"../const\";\r\nimport { APP_VALIDATORS } from '../const/app-validators.const';\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { defaultContainer } from '../core/default-container';\r\nimport { FormBuilderConfiguration } from \"../models\";\r\nimport { DecoratorConfiguration } from \"../models/decorator-configuration\";\r\nimport { InstanceContainer } from \"../models/instance-container\";\r\nimport { IAbstractControl } from \"../models/interface/i-abstract-control\";\r\nimport { AppFormGroup } from '../models/interface/i-form-group';\r\nimport { PropValidationConfig } from \"../models/prop-validation-config\";\r\nimport { PropertyInfo } from \"../models/property-info\";\r\nimport { andValidator } from '../reactive-form-validators/and.validator';\r\nimport { conditionalChangeValidator } from \"../reactive-form-validators/conditional-change.validator\";\r\nimport { notValidator } from '../reactive-form-validators/not.validator';\r\nimport { orValidator } from '../reactive-form-validators/or.validator';\r\nimport { Type } from \"../util\";\r\nimport { Linq } from '../util/linq';\r\nimport { ReactiveFormConfig } from '../util/reactive-form-config';\r\nimport { RegexValidator } from \"../util/regex-validator\";\r\nimport { BaseFormBuilder } from './base-form-builder';\r\nimport { RxFormControl } from './form-control';\r\nimport { RxFormArray } from './rx-form-array';\r\nimport { RxFormGroup } from './rx-form-group';\r\n\r\nconst LOGICAL_VALIDATORS: { [key: string]: Function } = { and: andValidator, or: orValidator, not: notValidator }\r\nconst ASYNC: string = \"async\"\r\nconst ENTITY_OBJECT: string = \"entityObject\";\r\n\r\n@Injectable()\r\nexport class RxFormBuilder extends BaseFormBuilder {\r\n    /**\r\n     * Private field: Array to store conditional object properties\r\n     */\r\n    private conditionalObjectProps: any[] = [];\r\n\r\n    /**\r\n     * Private field: Object to store conditional validation instances\r\n     */\r\n    private conditionalValidationInstance: any = {};\r\n\r\n    /**\r\n     * Private field: Array to store builder configuration conditional object properties\r\n     */\r\n    private builderConfigurationConditionalObjectProps: any[] = [];\r\n\r\n    /**\r\n     * Private field: Object to store form group properties other validators\r\n     */\r\n    private formGroupPropOtherValidator: { [key: string]: any } = {};\r\n\r\n    /**\r\n     * Private field: Object to store current form group properties other validators\r\n     */\r\n    private currentFormGroupPropOtherValidator: { [key: string]: any } = {};\r\n\r\n    /**\r\n     * Private field: Flag to indicate if the form is nested\r\n     */\r\n    private isNested: boolean = false;\r\n\r\n    /**\r\n     * Private field: Flag to indicate if the form group is called\r\n     */\r\n    private isGroupCalled: boolean = false;\r\n\r\n    /**\r\n     * Private field: Flag to indicate if the form is nested binding\r\n     */\r\n    private isNestedBinding: boolean = false;\r\n\r\n    /**\r\n     * Private method: Gets the instance container based on the instance function and entity object.\r\n     * \r\n     * @param instanceFunc The function to provide an instance from.\r\n     * @param entityObject The entity object to use.\r\n     * @returns The provided instance container.\r\n     */\r\n    private getInstanceContainer(instanceFunc: any, entityObject: any): InstanceContainer {\r\n        return this.instaceProvider(instanceFunc, entityObject);\r\n    }\r\n\r\n    /**\r\n     * Private method: Extracts expressions from the form builder configuration for dynamic validation.\r\n     * \r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @returns An object containing extracted expressions or null.\r\n     */\r\n    private extractExpressions(formBuilderConfiguration: FormBuilderConfiguration): { [key: string]: string[] } | null {\r\n        /* \r\n         * Extracts expressions from the form builder configuration for dynamic validation.\r\n         * If dynamic validation is configured in the formBuilderConfiguration, iterate through each property and decorator.\r\n         */\r\n        if (formBuilderConfiguration && formBuilderConfiguration.dynamicValidation) {\r\n            for (var property in formBuilderConfiguration.dynamicValidation) {\r\n                for (var decorator in formBuilderConfiguration.dynamicValidation[property]) {\r\n                    /* Checks if a conditional expression exists for the current decorator */\r\n                    if ((formBuilderConfiguration.dynamicValidation as any)[property][decorator].conditionalExpression) {\r\n                        /* Extract columns from the conditional expression */\r\n                        let columns = Linq.expressionColumns((formBuilderConfiguration.dynamicValidation as any)[property][decorator].conditionalExpression);\r\n\r\n                        /* Add change validation based on the extracted column */\r\n                        defaultContainer.addChangeValidation(this.conditionalValidationInstance, property, columns);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /** \r\n     * Adds async validation to the property based on provided validators and configuration.\r\n     * \r\n     * @param property The property information.\r\n     * @param propertyValidators The array of decorator configurations for the property.\r\n     * @param propValidationConfig The configuration for property validation.\r\n     * @returns An array of async validators.\r\n     */\r\n    private addAsyncValidation(property: PropertyInfo, propertyValidators: DecoratorConfiguration[], propValidationConfig: PropValidationConfig) {\r\n        /* Collects async validators from property validators and validation configuration */\r\n        let asyncValidators: any[] = [];\r\n        if (propertyValidators) {\r\n            /* Iterate through property validators */\r\n            for (let propertyValidator of propertyValidators) {\r\n                /* Check if the validator is async */\r\n                if (propertyValidator.isAsync) {\r\n                    /* Push each async validator into the asyncValidators array */\r\n                    propertyValidator.config.forEach((t: any) => { asyncValidators.push(t) });\r\n                }\r\n            }\r\n        }\r\n\r\n        if (propValidationConfig && (propValidationConfig as any)[ASYNC]) {\r\n            /* Add async validators from propValidationConfig */\r\n            (propValidationConfig as any)[ASYNC].forEach((t: any) => { asyncValidators.push(t) })\r\n        }\r\n\r\n        return asyncValidators;\r\n    }\r\n\r\n    /** \r\n     * Adds form control validators based on property validators and validation configuration.\r\n     * \r\n     * @param property The property information.\r\n     * @param propertyValidators The array of decorator configurations for the property.\r\n     * @param propValidationConfig The configuration for property validation.\r\n     * @param instance The instance container.\r\n     * @param entity The entity object.\r\n     * @returns An array of form control validators.\r\n     */\r\n    private addFormControl(property: PropertyInfo, propertyValidators: DecoratorConfiguration[], propValidationConfig: PropValidationConfig, instance: InstanceContainer, entity: any) {\r\n        let validators = [];\r\n        let columns: any[] = [];\r\n        /* Check if conditional validation props are defined either in instance or conditionalValidationInstance */\r\n        if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name]) || (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name])) {\r\n            /* Collects conditional validation properties from instance and conditionalValidationInstance and adds conditional change validator */\r\n            let props: any[] = [];\r\n\r\n            /* Check if conditionalValidationProps are defined in instance for the property */\r\n            if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name])) {\r\n                instance.conditionalValidationProps[property.name].forEach(t => props.push(t));\r\n            }\r\n\r\n            /* Check if conditionalValidationProps are defined in conditionalValidationInstance for the property */\r\n            if (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name]) {\r\n                this.conditionalValidationInstance.conditionalValidationProps[property.name].forEach((t: any) => props.push(t));\r\n            }\r\n\r\n            /* Add conditional change validator */\r\n            validators.push(conditionalChangeValidator(props));\r\n        }\r\n\r\n        /* Check if conditionalObjectProps or builderConfigurationConditionalObjectProps are defined */\r\n        if (this.conditionalObjectProps.length > 0 || this.builderConfigurationConditionalObjectProps.length > 0) {\r\n            let propConditions = [];\r\n\r\n            /* Check if conditionalObjectProps is defined */\r\n            if (this.conditionalObjectProps) {\r\n                /* Filter conditionalObjectProps for properties matching the current property name */\r\n                propConditions = this.conditionalObjectProps.filter(t => t.propName == property.name);\r\n            }\r\n\r\n            /* Check if builderConfigurationConditionalObjectProps is defined */\r\n            if (this.builderConfigurationConditionalObjectProps) {\r\n                /* Filter builderConfigurationConditionalObjectProps for properties matching the current property name */\r\n                this.builderConfigurationConditionalObjectProps.filter(t => t.propName == property.name).forEach(t => propConditions.push(t));\r\n            }\r\n\r\n            propConditions.forEach(t => {\r\n                /* Add reference property name to columns array */\r\n                if (t.referencePropName && columns.indexOf(t.referencePropName) == -1) {\r\n                    columns.push(t.referencePropName);\r\n                }\r\n            });\r\n\r\n            /* Add conditional change validator */\r\n            if (columns.length > 0) {\r\n                validators.push(conditionalChangeValidator(columns));\r\n            }\r\n        }\r\n\r\n        /* Iterate through property validators */\r\n        for (let propertyValidator of propertyValidators) {\r\n            if (!propertyValidator.isAsync) {\r\n                switch (propertyValidator.annotationType) {\r\n                    /* Add rule validator */\r\n                    case AnnotationTypes[\"rule\"]:\r\n                        validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config, entity));\r\n                        break;\r\n\r\n                    /* Add logical validator */\r\n                    case AnnotationTypes[\"and\"]:\r\n                    case AnnotationTypes[\"or\"]:\r\n                    case AnnotationTypes[\"not\"]:\r\n                        validators.push(LOGICAL_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));\r\n                        break;\r\n\r\n                    /* Add custom validator */\r\n                    default:\r\n                        validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        /* Additional validation from propValidationConfig */\r\n        if (propValidationConfig) {\r\n            this.additionalValidation(validators, propValidationConfig);\r\n        }\r\n\r\n        /* Additional validation from currentFormGroupPropOtherValidator */\r\n        if (this.currentFormGroupPropOtherValidator[property.name]) {\r\n            this.currentFormGroupPropOtherValidator[property.name].forEach((t: any) => { validators.push(t); });\r\n        }\r\n\r\n        return validators;\r\n    }\r\n\r\n    /** \r\n     * Adds additional validation to the validations array based on propValidationConfig.\r\n     * \r\n     * @param validations An array of existing validations.\r\n     * @param propValidationConfig The configuration for property validation.\r\n     */\r\n    private additionalValidation(validations: any[], propValidationConfig: PropValidationConfig | any) {\r\n        for (var col in AnnotationTypes) {\r\n            /* Check if the validation configuration for the current annotation type exists and it's not a custom validator */\r\n            if (propValidationConfig[AnnotationTypes[col]] && col != \"custom\") {\r\n                /* Add validator from APP_VALIDATORS */\r\n                validations.push(APP_VALIDATORS[AnnotationTypes[col]](propValidationConfig[AnnotationTypes[col]]));\r\n            }\r\n\r\n            /* Check if the current annotation type is custom and the custom validator exists in the validation configuration */\r\n            else if (col == AnnotationTypes[\"custom\"] && propValidationConfig[AnnotationTypes[col]]) {\r\n                /* Add custom validator */\r\n                validations.push(propValidationConfig[col]);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the entity type based on the provided object and property information.\r\n     * \r\n     * @param object The object for which the entity type is retrieved.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @param propertyName The name of the property.\r\n     * @param isSameObjectConstructor Indicates if the entity type is the same as the object's constructor.\r\n     * @returns The entity type.\r\n     */\r\n    private getEntity<T>(object: T, formBuilderConfiguration: FormBuilderConfiguration, propertyName: string, isSameObjectConstructor: boolean = false) {\r\n        /* Check if the entity type is defined in the form builder configuration */\r\n        if (formBuilderConfiguration && formBuilderConfiguration.genericEntities && formBuilderConfiguration.genericEntities[propertyName]) {\r\n            /* Return the entity type from formBuilderConfiguration if available */\r\n            return formBuilderConfiguration.genericEntities[propertyName];\r\n        }\r\n\r\n        /* Return the object's constructor if isSameObjectConstructor is true */\r\n        return isSameObjectConstructor ? object!.constructor : undefined;\r\n    }\r\n\r\n    /**\r\n     * Retrieves the constructor of the object property instance based on the provided object and property information.\r\n     * \r\n     * @param object The object containing the property.\r\n     * @param propertyInfo Information about the property.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @returns The constructor of the object property instance.\r\n     */\r\n    private getObjectPropertyInstance(object: { [key: string]: any }, propertyInfo: PropertyInfo, formBuilderConfiguration: FormBuilderConfiguration) {\r\n        /* Check if the property type is OBJECT_PROPERTY and the property exists in the object */\r\n        if (propertyInfo.propertyType == OBJECT_PROPERTY && object[propertyInfo.name]) {\r\n            /* Return the constructor of the object property if it exists */\r\n            return object[propertyInfo.name].constructor;\r\n        }\r\n\r\n        /* Check if the property type is ARRAY_PROPERTY and the property exists and contains items in the object */\r\n        else if (propertyInfo.propertyType == ARRAY_PROPERTY && object[propertyInfo.name] && object[propertyInfo.name].length > 0) {\r\n            /* Return the constructor of the first item in the array property if it exists */\r\n            return object[propertyInfo.name][0].constructor;\r\n        }\r\n\r\n        /* Return the entity type based on the object and property information */\r\n        return this.getEntity(object, formBuilderConfiguration, propertyInfo.name);\r\n    }\r\n\r\n    /**\r\n     * Checks for additional validation configurations for object properties in the instance container.\r\n     * \r\n     * @param instanceContainer The container for the instance.\r\n     * @param object The object to check for additional validation configurations.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     */\r\n    private checkObjectPropAdditionalValidation<T>(instanceContainer: InstanceContainer, object: T, formBuilderConfiguration: FormBuilderConfiguration) {\r\n        /* Filter properties of type OBJECT_PROPERTY or ARRAY_PROPERTY */\r\n        var props = instanceContainer.properties?.filter(t => t.propertyType == OBJECT_PROPERTY || t.propertyType == ARRAY_PROPERTY);\r\n\r\n        /* Iterate through the filtered properties */\r\n        props?.forEach(t => {\r\n            let entity = t.entity;\r\n\r\n            /* If entity type is not defined in the property, retrieve it from the object */\r\n            if (!t.entity)\r\n                entity = this.getObjectPropertyInstance(object!, t, formBuilderConfiguration);\r\n\r\n            if (entity) {\r\n                let instance = this.getInstanceContainer(entity, null);\r\n\r\n                /* Check if instance exists and has conditional validation properties */\r\n                if (instance && instance.conditionalValidationProps) {\r\n                    for (var key in instance.conditionalValidationProps) {\r\n                        var prop = instanceContainer.properties?.filter(t => t.name == key)[0];\r\n\r\n                        if (prop) {\r\n                            /* Initialize conditional validation properties in instance container if not already initialized */\r\n                            if (!instanceContainer.conditionalValidationProps)\r\n                                instanceContainer.conditionalValidationProps = {};\r\n\r\n                            if (!instanceContainer.conditionalValidationProps[key])\r\n                                instanceContainer.conditionalValidationProps[key] = [];\r\n\r\n                            /* Add conditional validation properties */\r\n                            instance.conditionalValidationProps[key].forEach(x => {\r\n                                if (t.propertyType != ARRAY_PROPERTY) {\r\n                                    (instanceContainer.conditionalValidationProps as any)[key].push([t.name, x].join('.'));\r\n                                } else {\r\n                                    (instanceContainer.conditionalValidationProps as any)[key].push([t.name, x].join('[]'));\r\n                                }\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Constructs an object containing model, entityObject, and formBuilderConfiguration based on the provided parameters.\r\n     * \r\n     * @param model The model to be used for object construction.\r\n     * @param entityObject The entity object to be used.\r\n     * @param formBuilderConfiguration The configuration for the form builder.\r\n     * @returns An object containing model, entityObject, and formBuilderConfiguration.\r\n     */\r\n    private getObject(model: any | { [key: string]: any }, entityObject?: { [key: string]: any } | FormBuilderConfiguration, formBuilderConfiguration?: FormBuilderConfiguration): { [key: string]: any } {\r\n        /* Initializes an empty object to store the JSON representation */\r\n        let json: { [key: string]: any } = {};\r\n\r\n        /* Checks if the model is a function */\r\n        if (typeof model == FUNCTION_STRING) {\r\n            json[\"model\"] = model;\r\n        }\r\n\r\n        /* Checks if the model is a function and entityObject is an instance of FormBuilderConfiguration */\r\n        if (typeof model == FUNCTION_STRING && (entityObject instanceof FormBuilderConfiguration)) {\r\n            /* Creates the entity object using createClassObject method */\r\n            json[\"entityObject\"] = this.createClassObject(json[\"model\"], entityObject);\r\n        }\r\n\r\n        /* Checks if entityObject exists and is not an instance of FormBuilderConfiguration */\r\n        if (entityObject && !(entityObject instanceof FormBuilderConfiguration)) {\r\n            json[\"entityObject\"] = entityObject;\r\n        }\r\n\r\n        /* Checks if entityObject is an instance of FormBuilderConfiguration and formBuilderConfiguration is not provided */\r\n        if (entityObject instanceof FormBuilderConfiguration && !formBuilderConfiguration) {\r\n            json[\"formBuilderConfiguration\"] = entityObject;\r\n        }\r\n        /* Checks if entityObject is not an instance of FormBuilderConfiguration and formBuilderConfiguration is provided */\r\n        else if (!(entityObject instanceof FormBuilderConfiguration) && formBuilderConfiguration) {\r\n            /* Sets the formBuilderConfiguration in the JSON */\r\n            json[\"formBuilderConfiguration\"] = formBuilderConfiguration;\r\n            /* Creates the entity object using createClassObject method */\r\n            json[\"entityObject\"] = this.createClassObject(json[\"model\"], json[\"formBuilderConfiguration\"], json[\"entityObject\"]);\r\n        }\r\n\r\n        /* If entityObject does not exist */\r\n        if (!entityObject) {\r\n            /* Checks if the model is an object */\r\n            if (typeof model == OBJECT_STRING) {\r\n                /* Stores the constructor of the model */\r\n                json[\"model\"] = model.constructor;\r\n            }\r\n\r\n            /* Creates the entity object using createClassObject method */\r\n            json[\"entityObject\"] = this.createClassObject(json[\"model\"], json[\"formBuilderConfiguration\"], model);\r\n        }\r\n        /* If entityObject exists and is an instance of FormBuilderConfiguration and model is an object */\r\n        else if (model && (entityObject instanceof FormBuilderConfiguration) && (typeof model == OBJECT_STRING)) {\r\n            /* Stores the constructor of the model */\r\n            json[MODEL] = model.constructor;\r\n            /* Creates the entity object using createClassObject method */\r\n            json[ENTITY_OBJECT] = this.createClassObject(json[\"model\"], json[\"formBuilderConfiguration\"], model);\r\n        }\r\n\r\n        /* Returns the constructed JSON object */\r\n        return json;\r\n    }\r\n\r\n    /**\r\n     * Creates a form control with the specified value and validators.\r\n     * \r\n     * @param value The value for the form control.\r\n     * @param validators An array of synchronous validators.\r\n     * @param asyncValidators An array of asynchronous validators.\r\n     * @returns An instance of IAbstractControl.\r\n     */\r\n    public control(value?: any, validators?: ValidatorFn[], asyncValidators?: AsyncValidatorFn[]): IAbstractControl {\r\n        return new RxFormControl(value, { validators: validators, asyncValidators: asyncValidators }, {}, {}, '', []);\r\n    }\r\n\r\n    /**\r\n     * Creates a form array with the specified values and validator configuration.\r\n     * \r\n     * @param values An array of objects to initialize the form array.\r\n     * @param validatorConfig The configuration for validators.\r\n     * @returns An instance of FormArray.\r\n     */\r\n    public array(values: [{ [key: string]: any }], validatorConfig?: FormBuilderConfiguration) {\r\n        /* Creates a FormGroup instance with a single control named \"temp\" and assigns it to formArray */\r\n        let formArray = this.group({ temp: values }, validatorConfig).get(\"temp\") as FormArray;\r\n\r\n        /* Instantiates a new instance of the FormBuilder */\r\n        var formBuilder = new FormBuilder();\r\n\r\n        /* Creates a FormArray instance using the controls of the FormGroup */\r\n        return formBuilder.array(formArray.controls);\r\n    }\r\n\r\n    /**\r\n     * Creates a form group with the specified group object and validator configuration.\r\n     * \r\n     * @param groupObject An object representing the group.\r\n     * @param validatorConfig The configuration for validators.\r\n     * @returns An instance of FormGroup.\r\n     */\r\n    public group(groupObject: { [key: string]: any }, validatorConfig?: FormBuilderConfiguration): FormGroup {\r\n        /* Create a new instance of the model */\r\n        let modelInstance = super.createInstance();\r\n\r\n        /* Initialize an empty object for the entity */\r\n        let entityObject = {};\r\n\r\n        /* Initialize an empty object for formGroupPropOtherValidator */\r\n        this.formGroupPropOtherValidator = {};\r\n\r\n        /* Set currentFormGroupPropOtherValidator to formGroupPropOtherValidator */\r\n        this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;\r\n\r\n        /* Create the validator form group */\r\n        this.createValidatorFormGroup(groupObject, entityObject, modelInstance, validatorConfig!);\r\n\r\n        /* Set currentFormGroupPropOtherValidator back to formGroupPropOtherValidator */\r\n        this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;\r\n\r\n        /* Flag that a group is being called */\r\n        this.isGroupCalled = true;\r\n\r\n        /* Create the form group */\r\n        let formGroup = this.formGroup(modelInstance.constructor, entityObject, validatorConfig);\r\n\r\n        /* Reset isGroupCalled flag */\r\n        this.isGroupCalled = false;\r\n\r\n        /* Reset formGroupPropOtherValidator */\r\n        this.formGroupPropOtherValidator = {};\r\n\r\n        /* Reset currentFormGroupPropOtherValidator */\r\n        this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;\r\n\r\n        /* Reset formGroupPropOtherValidator */\r\n        this.formGroupPropOtherValidator = {};\r\n\r\n        /* Return the created form group */\r\n        return formGroup;\r\n    }\r\n\r\n    /**\r\n     * Apply all property validators specified in the validator configuration to a given property.\r\n     * \r\n     * @param propName The name of the property to which validators are applied.\r\n     * @param validatorConfig The configuration for property validation.\r\n     * @param modelInstance The instance of the model.\r\n     */\r\n    private applyAllPropValidator(propName: string, validatorConfig: FormBuilderConfiguration, modelInstance: any) {\r\n        /* Check if the validator configuration and applyAllProps array exist */\r\n        if (validatorConfig && validatorConfig.applyAllProps) {\r\n            /* Check if the excludeProps array exists and if the propName is not in the excludeProps array */\r\n            if (!(validatorConfig.excludeProps && validatorConfig.excludeProps.length > 0 && validatorConfig.excludeProps.indexOf(propName) == -1)) {\r\n                /* Iterate through each item in the applyAllProps array */\r\n                validatorConfig.applyAllProps.forEach((t: any) => {\r\n                    /* Check if the validator function is an RxWeb validator */\r\n                    if (t.name == RX_WEB_VALIDATOR) {\r\n                        /* Apply RxWeb validator to the propName with the modelInstance */\r\n                        t(propName, modelInstance);\r\n                    } else {\r\n                        /* Check if the currentFormGroupPropOtherValidator has an entry for the propName */\r\n                        if (!this.currentFormGroupPropOtherValidator[propName]) {\r\n                            /* If not, create an empty array for the propName */\r\n                            this.currentFormGroupPropOtherValidator[propName] = [];\r\n                        }\r\n\r\n                        /* Push the custom validator to the currentFormGroupPropOtherValidator array */\r\n                        this.currentFormGroupPropOtherValidator[propName].push(t);\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n      * Checks if dynamic validation should be applied to a property.\r\n      * \r\n      * @param propName The name of the property to check.\r\n      * @param validatorConfig The configuration for property validation.\r\n      * @returns A boolean indicating whether dynamic validation should be applied to the property.\r\n      */\r\n    private dynamicValidationPropCheck(propName: string, validatorConfig: FormBuilderConfiguration) {\r\n        return (validatorConfig == undefined) ? true : (!validatorConfig.dynamicValidationConfigurationPropertyName) ? true : validatorConfig.dynamicValidationConfigurationPropertyName == propName ? false : true;\r\n    }\r\n\r\n    /**\r\n     * Checks if the given value is not an object.\r\n     * \r\n     * @param value The value to check.\r\n     * @returns A boolean indicating whether the value is not an object.\r\n     */\r\n    private isNotObject(value: any) {\r\n        return value instanceof Date || value === null || typeof value != OBJECT_STRING;\r\n    }\r\n\r\n    /**\r\n     * Creates a validator form group based on the groupObject and applies validation rules.\r\n     * \r\n     * @param groupObject The object containing the properties to create the form group.\r\n     * @param entityObject The entity object to store the form group.\r\n     * @param modelInstance The model instance used for initialization.\r\n     * @param validatorConfig The configuration for property validation.\r\n     */\r\n    private createValidatorFormGroup(groupObject: { [key: string]: any }, entityObject: { [key: string]: any }, modelInstance: any, validatorConfig: FormBuilderConfiguration) {\r\n        /* Iterates over each property in the groupObject to create form controls and apply validators. */\r\n        for (var propName in groupObject) {\r\n            var prop = groupObject[propName];\r\n\r\n            /* Check if the property is an array and needs validation */\r\n            if (prop instanceof Array && prop.length > 0 && this.isNotObject(prop[0])) {\r\n                let propValidators = (prop.length > 1 && prop[1] instanceof Array) ? prop[1] : (prop.length == 2) ? [prop[1]] : [];\r\n                let propertyAdded: boolean = false;\r\n\r\n                /* Iterate over each validator for the current property */\r\n                for (var i = 0; i < propValidators.length; i++) {\r\n                    if (propValidators[i].name == RX_WEB_VALIDATOR) {\r\n                        propValidators[i](propName, modelInstance);\r\n                        propertyAdded = true;\r\n                    } else {\r\n                        /* Add other validators to the currentFormGroupPropOtherValidator */\r\n                        if (!this.currentFormGroupPropOtherValidator[propName]) {\r\n                            this.currentFormGroupPropOtherValidator[propName] = [];\r\n                        }\r\n\r\n                        this.currentFormGroupPropOtherValidator[propName].push(propValidators[i])\r\n                    }\r\n                }\r\n\r\n                /* If no property validator added, initialize the property object */\r\n                if (!propertyAdded) {\r\n                    defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });\r\n                }\r\n\r\n                /* Apply all property validators */\r\n                this.applyAllPropValidator(propName, validatorConfig, modelInstance)\r\n            } else if (prop === null || prop === undefined || typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {\r\n                /* Initialize the property object if it's a simple type */\r\n                defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });\r\n                /* Apply all property validators */\r\n                this.applyAllPropValidator(propName, validatorConfig, modelInstance)\r\n            } else if (prop instanceof Array) {\r\n                if (prop instanceof FormArray) {\r\n                    /* If the property is a FormArray, assign it directly */\r\n                    entityObject[propName] = prop;\r\n                } else {\r\n                    /* If it's an array of objects, create form controls recursively */\r\n                    let propModelInstance = super.createInstance();\r\n                    if (typeof modelInstance == \"function\") {\r\n                        modelInstance.constructor = modelInstance;\r\n                    }\r\n\r\n                    /* Initialize the property as an array */\r\n                    defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, propModelInstance.constructor, modelInstance);\r\n\r\n                    /* Initialize an empty array for the property */\r\n                    entityObject[propName] = [];\r\n\r\n                    /* Iterate through each element of the array */\r\n                    for (let row of prop) {\r\n                        /* Create a new object for each element */\r\n                        let jObject = {};\r\n                        /* Push the new object into the array */\r\n                        entityObject[propName].push(jObject)\r\n                        /* Recursively create validator form groups for each object */\r\n                        this.createValidatorFormGroup(row, jObject, propModelInstance.constructor, validatorConfig);\r\n                    }\r\n                }\r\n            } else if (typeof prop == OBJECT_STRING && !(prop instanceof FormControl || prop instanceof RxFormControl)) {\r\n                /* Determine the formGroup based on the type of 'prop' */\r\n                let formGroup: any = (prop instanceof FormArray) ? prop.controls[0] : prop;\r\n\r\n                /* If 'prop' is a FormGroup or RxFormGroup and does not have a model, create a form group */\r\n                if (!formGroup.model && (prop instanceof FormGroup || prop instanceof RxFormGroup)) {\r\n                    formGroup = this.group(formGroup.controls);\r\n                }\r\n\r\n                /* If 'prop' is a FormGroup or RxFormGroup, initialize the property as an object */\r\n                if (prop instanceof FormGroup || prop instanceof RxFormGroup) {\r\n                    entityObject[propName] = prop;\r\n                    defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, formGroup.model, modelInstance);\r\n                }\r\n                /* If 'prop' is a FormArray, initialize the property as an array */\r\n                else if (prop instanceof FormArray) {\r\n                    entityObject[propName] = prop;\r\n                    defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, formGroup.model, modelInstance);\r\n                }\r\n                /* If 'prop' is neither a FormGroup/RxFormGroup nor a FormArray */\r\n                else {\r\n                    /* Check if dynamic validation is required for the property */\r\n                    if (this.dynamicValidationPropCheck(propName, validatorConfig)) {\r\n                        /* Initialize property for dynamic validation */\r\n                        this.formGroupPropOtherValidator[propName] = {};\r\n                        /* Set the currentFormGroupPropOtherValidator to the current property */\r\n                        this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[propName];\r\n\r\n                        /* Create a new instance for the property model */\r\n                        let propModelInstance = super.createInstance();\r\n\r\n                        /* Initialize the property object */\r\n                        entityObject[propName] = {};\r\n                        entityObject[propName].constructor = propModelInstance.constructor;\r\n                        defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, entityObject[propName].constructor, modelInstance.constructor == Function ? { constructor: modelInstance } : modelInstance);\r\n\r\n                        /* Get the validation configuration for the property */\r\n                        let objectValidationConfig = this.getValidatorConfig(validatorConfig, groupObject, propName + \".\");\r\n\r\n                        /* Recursively create the validator form group for the property */\r\n                        this.createValidatorFormGroup(groupObject[propName], entityObject[propName], entityObject[propName].constructor, objectValidationConfig);\r\n                    } else {\r\n                        /* Initialize property without dynamic validation */\r\n                        entityObject[propName] = groupObject[propName];\r\n                    }\r\n                }\r\n            }\r\n\r\n            /* Assign property value if it's of simple type */\r\n            if (typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {\r\n                entityObject[propName] = prop\r\n            }\r\n\r\n            /* Assign property value if it's an array or object */\r\n            else if ((prop && prop.length > 0 && this.isNotObject(prop[0]) && !(prop instanceof FormControl || prop instanceof RxFormControl) && !(prop instanceof FormArray))) {\r\n                entityObject[propName] = prop[0]\r\n            }\r\n\r\n            /* Assign property value if it's a FormArray */\r\n            else if (prop instanceof FormArray) {\r\n                entityObject[propName] = prop\r\n            }\r\n\r\n            /* Assign property value if it's a FormControl */\r\n            else if (prop instanceof FormControl || prop instanceof RxFormControl) {\r\n                entityObject[propName] = prop\r\n                defaultContainer.initPropertyObject(propName, PROPERTY, undefined, modelInstance.constructor ? modelInstance : { constructor: modelInstance });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the validator configuration for a given entity object and root property name.\r\n     * \r\n     * @param validatorConfig The validator configuration to process.\r\n     * @param entityObject The entity object for which the validator configuration is applied.\r\n     * @param rootPropertyName The root property name to consider.\r\n     * @param arrayPropertyName Optional. The array property name to consider.\r\n     * @returns An object containing the processed validator configuration.\r\n     */\r\n    private getValidatorConfig(validatorConfig: FormBuilderConfiguration, entityObject: any, rootPropertyName: string, arrayPropertyName?: string): any {\r\n        let excludeProps: any[] = [];\r\n        let includeProps: any[] = [];\r\n        let ignoreUndefinedProps: any[] = [];\r\n\r\n        /* Check if the validatorConfig exists */\r\n        if (!validatorConfig) return {};\r\n\r\n        /* Retrieve validation properties and abstract control options */\r\n        const validationProps = this.getObjectForProperty(validatorConfig.dynamicValidation!, rootPropertyName, arrayPropertyName);\r\n        const abstractControlOptions = this.getObjectForProperty(validatorConfig.abstractControlOptions!, rootPropertyName, arrayPropertyName);\r\n\r\n        /* Populate excludeProps, includeProps, and ignoreUndefinedProps arrays */\r\n        if (validatorConfig.excludeProps) {\r\n            excludeProps = this.getProps(validatorConfig.excludeProps, rootPropertyName);\r\n        }\r\n\r\n        if (validatorConfig.includeProps) {\r\n            includeProps = this.getProps(validatorConfig.includeProps, rootPropertyName);\r\n        }\r\n\r\n        if (validatorConfig.ignoreUndefinedProps) {\r\n            ignoreUndefinedProps = this.getProps(validatorConfig.ignoreUndefinedProps, rootPropertyName, true);\r\n        }\r\n\r\n        /* Append global abstract control options if not found */\r\n        if (!Object.keys(abstractControlOptions).length && rootPropertyName.endsWith('.') && validatorConfig.abstractControlOptions && validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)]) {\r\n            abstractControlOptions['global'] = validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)];\r\n        }\r\n\r\n        /* Retrieve dynamic validation configuration */\r\n        const dynamicValidation = (validatorConfig.dynamicValidationConfigurationPropertyName && entityObject[validatorConfig.dynamicValidationConfigurationPropertyName]) ? entityObject[validatorConfig.dynamicValidationConfigurationPropertyName] : validationProps;\r\n\r\n        /* Return processed validator configuration */\r\n        return {\r\n            ignoreUndefinedProps: ignoreUndefinedProps,\r\n            includeProps: includeProps,\r\n            dynamicValidation: dynamicValidation,\r\n            excludeProps: excludeProps,\r\n            abstractControlOptions: abstractControlOptions\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the object properties matching the specified root property name and array property name (if provided).\r\n     * \r\n     * @param rootObject The root object to search for properties.\r\n     * @param rootPropertyName The root property name to match against.\r\n     * @param arrayPropertyName Optional. The array property name to match against.\r\n     * @returns An object containing the properties matching the root property name and array property name (if provided).\r\n     */\r\n    private getObjectForProperty<T>(rootObject: { [key: string]: T }, rootPropertyName: string, arrayPropertyName?: string): { [key: string]: T } {\r\n        const result: { [key: string]: T } = {};\r\n\r\n        /* Iterate through the properties of the root object */\r\n        for (let propName in rootObject) {\r\n            /* Skip properties that do not match the rootPropertyName or arrayPropertyName */\r\n            if (!propName.startsWith(rootPropertyName) && (!arrayPropertyName || !propName.startsWith(arrayPropertyName))) {\r\n                continue;\r\n            }\r\n\r\n            /* Extract the split property name */\r\n            let splitProp = propName.split(\".\", 2)[1];\r\n\r\n            /* If splitProp is undefined, continue to the next property */\r\n            if (!splitProp) {\r\n                continue;\r\n            }\r\n\r\n            /* Add the property to the result object */\r\n            result[splitProp] = rootObject[propName];\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n\r\n    /**\r\n     * Retrieves the properties matching the specified root property name from the given array of properties.\r\n     * \r\n     * @param properties The array of properties to search.\r\n     * @param rootPropertyName The root property name to match against.\r\n     * @param isIgnoreProp Optional. Indicates whether to include the root property itself as a property.\r\n     * @returns An array containing the properties matching the root property name.\r\n     */\r\n    private getProps(properties: string[], rootPropertyName: string, isIgnoreProp: boolean = false) {\r\n        let props: string[] = [];\r\n\r\n        /* Iterate through the properties */\r\n        for (let prop of properties) {\r\n            /* Check if the property contains the rootPropertyName */\r\n            if (prop.indexOf(rootPropertyName) != -1) {\r\n                let splitProps = prop.split(\".\");\r\n\r\n                /* If the property has two parts, add the second part to the props array */\r\n                if (splitProps.length == 2) {\r\n                    props.push(splitProps[1]);\r\n                }\r\n\r\n                /* If the property has more than two parts, join the parts after the first one and add to the props array */\r\n                else if (splitProps.length > 2) {\r\n                    splitProps.splice(0, 1);\r\n                    props.push(splitProps.join(\".\"))\r\n                }\r\n            }\r\n        }\r\n\r\n        /* If isIgnoreProp is true and the root property itself is present in the properties array, add ':self:' to the props array */\r\n        if (isIgnoreProp && properties.filter(x => x == rootPropertyName.replace('.', '')).length == 1) {\r\n            props.push(':self:');\r\n        }\r\n\r\n        return props;\r\n    }\r\n\r\n    /**\r\n     * Creates a form group based on the provided model, entity object, and form builder configuration.\r\n     * \r\n     * @param model The model or type definition to create the form group from.\r\n     * @param entityObject Optional. The entity object for which the form group is created.\r\n     * @param formBuilderConfiguration Optional. The form builder configuration to customize the form group creation.\r\n     * @returns An instance of RxFormGroup, FormGroup, or AppFormGroup<T>.\r\n     */\r\n    public formGroup<T>(model: Type<T> | { [key: string]: any }, entityObject?: { [key: string]: any } | FormBuilderConfiguration, formBuilderConfiguration?: FormBuilderConfiguration): RxFormGroup | FormGroup | AppFormGroup<T> {\r\n        /* Retrieves necessary data from the provided model, entity object, and form builder configuration to create a form group */\r\n        let json = this.getObject(model, entityObject, formBuilderConfiguration);\r\n        model = json[\"model\"];\r\n        entityObject = json[\"entityObject\"];\r\n\r\n        /* \r\n         * If the entity object's constructor differs from the model's constructor and formGroup is not previously called,\r\n         * update the entity object to match the model.\r\n         */\r\n        if (entityObject!.constructor != model && !this.isGroupCalled) {\r\n            entityObject = json[\"entityObject\"] = this.updateObject(model, json[\"entityObject\"], formBuilderConfiguration!);\r\n        }\r\n\r\n        formBuilderConfiguration = json[\"formBuilderConfiguration\"];\r\n\r\n        /* Extract expressions from the form builder configuration if provided. */\r\n        if (formBuilderConfiguration) {\r\n            this.extractExpressions(formBuilderConfiguration);\r\n        }\r\n\r\n        /* Get the container for instances based on the model and entity object. */\r\n        let instanceContainer: InstanceContainer = this.getInstanceContainer(model, entityObject);\r\n\r\n        /* Check and apply additional validation for object properties. */\r\n        this.checkObjectPropAdditionalValidation(instanceContainer, entityObject, formBuilderConfiguration!);\r\n\r\n        /* Initialize variables for form group creation. */\r\n        let formGroupObject = {};\r\n        let extendedProperties = {};\r\n        var additionalValidations: { [key: string]: PropValidationConfig } = {};\r\n\r\n        /* Iterate through properties defined in the instance container. */\r\n        instanceContainer.properties?.forEach(property => {\r\n            let isIncludeProp = true;\r\n\r\n            /* Check if the property should be included based on form builder configuration. */\r\n            if (formBuilderConfiguration) {\r\n                /* Check if the property should be excluded based on form builder configuration. */\r\n                if (formBuilderConfiguration.excludeProps && formBuilderConfiguration.excludeProps.length > 0) {\r\n                    isIncludeProp = formBuilderConfiguration.excludeProps.indexOf(property.name) == -1;\r\n                }\r\n\r\n                /* Check if dynamic validation is provided in the form builder configuration. */\r\n                if (formBuilderConfiguration.dynamicValidation) {\r\n                    additionalValidations = formBuilderConfiguration.dynamicValidation;\r\n                }\r\n\r\n                /* Check if the property should be included based on form builder configuration. */\r\n                if (formBuilderConfiguration.includeProps && formBuilderConfiguration.includeProps.length > 0) {\r\n                    isIncludeProp = formBuilderConfiguration.includeProps.indexOf(property.name) != -1;\r\n                }\r\n\r\n                /* Check if undefined properties should be ignored based on form builder configuration. */\r\n                if (formBuilderConfiguration.ignoreUndefinedProps && formBuilderConfiguration.ignoreUndefinedProps.length > 0) {\r\n                    isIncludeProp = !(\r\n                        property.propertyType == PROPERTY &&\r\n                        !RegexValidator.isNotBlank(json[\"entityObject\"][property.name]) &&\r\n                        (\r\n                            formBuilderConfiguration.ignoreUndefinedProps.indexOf(property.name) !== -1 ||\r\n                            formBuilderConfiguration.ignoreUndefinedProps.indexOf(\":self:\") !== -1\r\n                        )\r\n                    );\r\n                }\r\n            }\r\n\r\n            if (property.ignore) {\r\n                isIncludeProp = !property.ignore.call(json[\"entityObject\"], json[\"entityObject\"]);\r\n            }\r\n\r\n            /* If the property should be included, create form controls, form groups, or form arrays based on its type. */\r\n            if (isIncludeProp) {\r\n                switch (property.propertyType) {\r\n                    case PROPERTY:\r\n                        /* If the property is not already a form control, create one with appropriate validators and options */\r\n                        if (!((entityObject as any)[property.name] instanceof FormControl || (entityObject as any)[property.name] instanceof RxFormControl)) {\r\n                            /* Extract property validators based on annotations. */\r\n                            let propertyValidators = instanceContainer.propertyAnnotations.filter(t => t.propertyName == property.name && t.isValidator);\r\n\r\n                            /* Extract updateOn configuration based on annotations. */\r\n                            let updateOn = instanceContainer.propertyAnnotations.filter(t => t.propertyName == property.name && !t.isValidator && t.annotationType === \"updateOn\")[0];\r\n\r\n                            /* Retrieve the value from entityObject based on valuePath or property name, or use the custom value function if provided */\r\n                            let value = property.value\r\n                                ? property.value(entityObject)\r\n                                : (property.valuePath\r\n                                    ? Utils.getPropertyValue(entityObject, property.valuePath)\r\n                                    : (entityObject as any)[property.name]);\r\n\r\n                            /* Sanitize the property value. */\r\n                            let sanitizeValue = super.sanitizeValue(instanceContainer, property.name, super.getDefaultValue(property, value, formBuilderConfiguration!), json[\"entityObject\"], Object.assign({}, json[\"entityObject\"]));\r\n\r\n                            /* If the property value is undefined and there is a sanitized value, assign it. */\r\n                            if ((entityObject as any)[property.name] === undefined && sanitizeValue) {\r\n                                (entityObject as any)[property.name] = sanitizeValue;\r\n                            }\r\n\r\n                            /* Add form control validators. */\r\n                            let validators = this.addFormControl(property, propertyValidators, additionalValidations[property.name], instanceContainer, entityObject);\r\n\r\n                            /* Define abstract control options including validators and async validators. */\r\n                            let abstractControlOptions: AbstractControlOptions = { validators: validators, asyncValidators: this.addAsyncValidation(property, propertyValidators, additionalValidations[property.name]) };\r\n\r\n                            /* Retrieve additional abstract control options based on property name. */\r\n                            abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration!, abstractControlOptions);\r\n\r\n                            /* Assign updateOn configuration if available. */\r\n                            if (updateOn && !abstractControlOptions.updateOn) {\r\n                                abstractControlOptions.updateOn = updateOn.config.runOn;\r\n                            }\r\n\r\n                            /* Create a new form control instance. */\r\n                            (formGroupObject as any)[property.name] = new RxFormControl(sanitizeValue, abstractControlOptions, json[\"entityObject\"], Object.assign({}, json[\"entityObject\"]), property.name, instanceContainer.sanitizers![property.name]);\r\n\r\n                            this.isNested = false;\r\n                        } else {\r\n                            /* If the property is already a form control, use its default value. */\r\n                            (formGroupObject as any)[property.name] = super.getDefaultValue(property, (entityObject as any)[property.name], formBuilderConfiguration!);\r\n                        }\r\n\r\n                        /* Mark the property as extended */\r\n                        (extendedProperties as any)[property.name] = true;\r\n\r\n                        break;\r\n\r\n                    case OBJECT_PROPERTY:\r\n                        let objectValue = (entityObject as any)[property.name];\r\n\r\n                        /* If the property is an object and not a form group, recursively create a form group for it */\r\n                        if (objectValue && objectValue instanceof Object && !(objectValue instanceof FormGroup || objectValue instanceof RxFormGroup)) {\r\n                            /* Set flags to indicate nested binding. */\r\n                            this.isNestedBinding = this.isNested = true;\r\n\r\n                            /* Filter conditional object properties based on the current property name. */\r\n                            if (instanceContainer && instanceContainer.conditionalObjectProps) {\r\n                                this.conditionalObjectProps = instanceContainer.conditionalObjectProps[\"filter\"]((t: any) => t.objectPropName == property.name);\r\n                            }\r\n\r\n                            /* Filter conditional object properties for builder configuration based on the current property name. */\r\n                            if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps) {\r\n                                this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter((t: any) => t.objectPropName == property.name);\r\n                            }\r\n\r\n                            /* Set the current form group other validator if available. */\r\n                            if (this.formGroupPropOtherValidator[property.name]) {\r\n                                this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];\r\n                            }\r\n\r\n                            /* Obtain validation configuration for the nested object. */\r\n                            let objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration!, objectValue, `${property.name}.`);\r\n\r\n                            /* Obtain the entity to use for the nested object. */\r\n                            let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;\r\n\r\n                            /* Create a form group for the nested object. */\r\n                            (formGroupObject as any)[property.name] = this.formGroup(entity || property.entity || this.getEntity(objectValue, formBuilderConfiguration!, property.name, true), objectValue, objectValidationConfig);\r\n\r\n                            /* Reset flags to indicate the end of nested binding. */\r\n                            this.conditionalObjectProps = [];\r\n                            this.builderConfigurationConditionalObjectProps = [];\r\n                            this.isNestedBinding = this.isNested = false;\r\n                        }\r\n\r\n                        /* If the property is already a form group, use it as is */\r\n                        else if (objectValue instanceof FormGroup || objectValue instanceof RxFormGroup) {\r\n                            (formGroupObject as any)[property.name] = objectValue;\r\n                        }\r\n\r\n                        break;\r\n                    case ARRAY_PROPERTY:\r\n                        let arrayObjectValue = (entityObject as any)[property.name];\r\n\r\n                        /* If the property is an array and not a form array, recursively create a form array for it */\r\n                        if (arrayObjectValue && arrayObjectValue instanceof Array && !(arrayObjectValue instanceof FormArray)) {\r\n                            /* Set flags to indicate nested binding. */\r\n                            this.isNestedBinding = this.isNested = true;\r\n\r\n                            /* Initialize an array to hold form groups for each sub-object in the array. */\r\n                            var formArrayGroup = [];\r\n                            let index = 0;\r\n                            let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;\r\n                            let objectValidationConfig = null;\r\n\r\n                            /* Iterate over each sub-object in the array. */\r\n                            for (let subObject of arrayObjectValue) {\r\n                                /* Filter conditional object properties based on the current property name and array index. */\r\n                                if (instanceContainer && instanceContainer.conditionalObjectProps) {\r\n                                    this.conditionalObjectProps = instanceContainer.conditionalObjectProps[\"filter\"]((t: any) => t.objectPropName == property.name && t.arrayIndex == index);\r\n                                }\r\n                                if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps) {\r\n                                    this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter((t: any) => t.objectPropName == property.name && t.arrayIndex == index);\r\n                                }\r\n\r\n                                /* Set the current form group other validator if available. */\r\n                                if (this.formGroupPropOtherValidator[property.name]) {\r\n                                    this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];\r\n                                }\r\n\r\n                                /* Obtain validation configuration for the sub-object. */\r\n                                objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration!, subObject, `${property.name}.`, `${property.name}[${index}].`);\r\n\r\n                                /* Create a form group for the sub-object and add it to the formArrayGroup array. */\r\n                                formArrayGroup.push(this.formGroup(entity || property.entity || this.getEntity(subObject, formBuilderConfiguration!, property.name, true), subObject, objectValidationConfig));\r\n\r\n                                /* Increment the index. */\r\n                                index++;\r\n\r\n                                /* Reset conditional object properties and builder configuration conditional object properties. */\r\n                                this.conditionalObjectProps = [];\r\n                                this.builderConfigurationConditionalObjectProps = [];\r\n                            }\r\n\r\n                            /* Obtain abstract control options for the property. */\r\n                            let abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration!, {});\r\n\r\n                            /* Create a new RxFormArray using the arrayObjectValue and the formArrayGroup, along with the abstract control options. */\r\n                            (formGroupObject as any)[property.name] = new RxFormArray(arrayObjectValue, formArrayGroup, abstractControlOptions, null, property.arrayConfig);\r\n\r\n                            /* If autoInstancePush is enabled, override the push and splice methods of the arrayObjectValue to manage form groups dynamically. */\r\n                            if (ReactiveFormConfig.autoInstancePush) {\r\n                                arrayObjectValue.push = (instance: any[]): number => {\r\n                                    let formGroup = this.formGroup(instance.constructor, instance, objectValidationConfig!);\r\n                                    (formGroupObject as any)[property.name].push(formGroup, { isAddedInstance: true });\r\n                                    return 0;\r\n                                };\r\n\r\n                                arrayObjectValue.splice = (start, deleteCount): any[] => {\r\n                                    let end = (start + deleteCount!) - 1;\r\n                                    for (var i = start; i <= end; i++) {\r\n                                        (formGroupObject as any)[property.name].removeAt(i, { isRemovedInstance: true })\r\n                                    }\r\n\r\n                                    return [];\r\n                                };\r\n                            }\r\n\r\n                            /* Reset flags to indicate the end of nested binding. */\r\n                            this.isNestedBinding = this.isNested = false;\r\n                        }\r\n\r\n                        /* If the property is already a form array, use it as is */\r\n                        else if (arrayObjectValue instanceof FormArray) {\r\n                            (formGroupObject as any)[property.name] = arrayObjectValue;\r\n                        }\r\n\r\n                        /* If the property configuration specifies creating a blank form array, create one */\r\n                        else if (property.arrayConfig && property.arrayConfig.createBlank) {\r\n                            (formGroupObject as any)[property.name] = new RxFormArray([], [], null, null, property.arrayConfig);\r\n                        }\r\n\r\n                        break;\r\n                }\r\n            }\r\n        });\r\n\r\n        /* If no nested form groups or arrays are created, reset conditional validation instance and related properties. */\r\n        if (!this.isNested) {\r\n            this.conditionalValidationInstance = {};\r\n            this.builderConfigurationConditionalObjectProps = [];\r\n        }\r\n\r\n        /* Set abstract control options for the form group based on form builder configuration. */\r\n        let abstractControlOptions: AbstractControlOptions = {\r\n            validators: [],\r\n            asyncValidators: [],\r\n            updateOn: formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions['global']\r\n                ? formBuilderConfiguration.abstractControlOptions['global']\r\n                : undefined\r\n        };\r\n\r\n        /* Obtain abstract control options for the global property. */\r\n        abstractControlOptions = this.getAbstractControlOptions(\"global\", formBuilderConfiguration!, abstractControlOptions);\r\n\r\n        /* Create a new RxFormGroup using the model, entity object, formGroupObject, and abstract control options. */\r\n        var formGroup: RxFormGroup = new RxFormGroup(json[\"model\"], json[\"entityObject\"], formGroupObject, abstractControlOptions);\r\n\r\n        /* If experimental mode is enabled, assign the form group to the entity object and override properties if needed. */\r\n        if (defaultContainer.isExperimental) {\r\n            json[\"entityObject\"][\"formGroup\"] = formGroup;\r\n            this.overrideProperties(formGroup, json[\"entityObject\"], extendedProperties);\r\n        }\r\n\r\n        /* If not in nested binding mode and formGroup is not previously called, refresh disable status of the form group. */\r\n        if (!this.isNestedBinding && !this.isGroupCalled) {\r\n            formGroup.refreshDisable();\r\n        }\r\n\r\n        return formGroup;\r\n    }\r\n\r\n    /**\r\n     * Overrides properties in the form group based on the provided entity object and properties.\r\n     * @param formGroup The RxFormGroup instance to override properties.\r\n     * @param entityObject The entity object containing the properties to override.\r\n     * @param properties An object containing the properties to override as keys.\r\n     */\r\n    private overrideProperties(formGroup: RxFormGroup, entityObject: any, properties: { [key: string]: boolean }) {\r\n        Object.keys(properties).forEach(t => this.overrideProp(entityObject, t, formGroup));\r\n    }\r\n\r\n    /**\r\n     * Retrieves the abstract control options for a given control name.\r\n     * \r\n     * @param name The name of the control.\r\n     * @param formBuilderConfiguration The FormBuilderConfiguration containing the abstract control options.\r\n     * @param abstractControlOptions The existing AbstractControlOptions.\r\n     * @returns The updated AbstractControlOptions based on the provided configuration.\r\n     */\r\n    private getAbstractControlOptions(name: string, formBuilderConfiguration: FormBuilderConfiguration, abstractControlOptions: AbstractControlOptions) {\r\n        /* Update updateOn option if defined in formBuilderConfiguration */\r\n        if (formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions[name]) {\r\n            abstractControlOptions.updateOn = formBuilderConfiguration.abstractControlOptions[name];\r\n        }\r\n\r\n        /* Check if controlOptions are defined in formBuilderConfiguration */\r\n        const controlOptions = formBuilderConfiguration ? formBuilderConfiguration.baseAbstractControlOptions : null;\r\n        if (controlOptions && controlOptions[name]) {\r\n            /* Update updateOn option from controlOptions if defined */\r\n            if (controlOptions[name].updateOn) {\r\n                abstractControlOptions.updateOn = controlOptions[name].updateOn;\r\n            }\r\n\r\n            /* Add validators from controlOptions if defined */\r\n            if (controlOptions[name].validators) {\r\n                if (Array.isArray(controlOptions[name].validators)) {\r\n                    (<ValidatorFn[]>controlOptions[name].validators)\r\n                        .forEach(validator => (<ValidatorFn[]>abstractControlOptions.validators).push(validator))\r\n                } else {\r\n                    (<ValidatorFn[]>abstractControlOptions.validators)\r\n                        .push(<ValidatorFn>controlOptions[name].validators);\r\n                }\r\n            }\r\n\r\n            /* Add async validators from controlOptions if defined */\r\n            if (controlOptions[name].asyncValidators) {\r\n                if (Array.isArray(controlOptions[name].asyncValidators)) {\r\n                    (<ValidatorFn[]>controlOptions[name].asyncValidators)\r\n                        .forEach(validator => (<ValidatorFn[]>abstractControlOptions.asyncValidators).push(validator))\r\n                } else {\r\n                    (<ValidatorFn[]>abstractControlOptions.asyncValidators)\r\n                        .push(<ValidatorFn>controlOptions[name].validators);\r\n                }\r\n            }\r\n        }\r\n\r\n        return abstractControlOptions;\r\n    }\r\n\r\n    /**\r\n     * Overrides a property on the entity object with custom getters and setters.\r\n     * \r\n     * @param entityObject The entity object whose property needs to be overridden.\r\n     * @param propName The name of the property to be overridden.\r\n     * @param formGroup The RxFormGroup associated with the entity object.\r\n     */\r\n    private overrideProp(entityObject: any, propName: string, formGroup: RxFormGroup) {\r\n        /* Get the property descriptor and current value */\r\n        let descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(entityObject), propName);\r\n        let value = entityObject[propName];\r\n        let oldValue: any = null;\r\n\r\n        /* Define the property with custom getters and setters */\r\n        Object.defineProperty(entityObject, propName, {\r\n            /* Custom getter */\r\n            get: () => { return descriptor ? descriptor.get!.call(entityObject) : value },\r\n            /* Custom setter */\r\n            set: (v) => {\r\n                value = v;\r\n                /* Check if value has changed */\r\n                if (oldValue != v) {\r\n                    /* Call the original setter if defined */\r\n                    if (descriptor) {\r\n                        descriptor.set!.call(entityObject, v);\r\n                    }\r\n                    /* Update the corresponding control in the form group */\r\n                    if (!formGroup.changing && formGroup.controls[propName]) {\r\n                        formGroup.controls[propName].setValue(v);\r\n                    }\r\n                }\r\n                /* Update the old value */\r\n                oldValue = v;\r\n            }\r\n        });\r\n    }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AbstractControlOptions, FormBuilder, FormGroup } from \"@angular/forms\";\r\n\r\nimport { FUNCTION_STRING } from \"../const/app.const\";\r\nimport { IFormGroup } from \"../models/interface/i-form-group\";\r\nimport { Options } from \"../models/interface/options\";\r\nimport { RxFormBuilder } from \"./rx-form-builder\";\r\nimport { RxFormGroup } from \"./rx-form-group\";\r\n\r\n@Injectable()\r\nexport class TypedFormBuilder {\r\n    private formBuilder: FormBuilder;\r\n    private rxFormBuilder: RxFormBuilder;\r\n    constructor() {\r\n        this.formBuilder = new FormBuilder();\r\n        this.rxFormBuilder = new RxFormBuilder();\r\n    }\r\n\r\n    group<T>(controlsConfig: {\r\n        [key: string]: any;\r\n    }, options?: AbstractControlOptions | {\r\n        [key: string]: any;\r\n    } | null): FormGroup | T {\r\n        let paramOptions = <Options>options || <any>{};\r\n        if (typeof controlsConfig == FUNCTION_STRING)\r\n            return !(paramOptions && paramOptions.isInstance) ? this.rxFormBuilder.formGroup(controlsConfig, paramOptions.data, paramOptions.config) as IFormGroup<T> : (<RxFormGroup>this.rxFormBuilder.formGroup(controlsConfig, paramOptions.data, paramOptions.config)).modelInstance as T;\r\n        return this.formBuilder.group(controlsConfig, options);\r\n    }\r\n}","import { CommonModule, DecimalPipe } from \"@angular/common\";\r\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\r\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\n\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { ControlHostDirective } from '../directives/control-host';\r\nimport { HtmlControlTemplateDirective } from '../directives/html-control-template';\r\nimport { RxwebFormDirective } from \"../directives/rx-form\";\r\nimport { AsyncValidationDirective } from \"../directives/template-validations/async-validation\";\r\nimport { FileControlDirective } from \"../directives/template-validations/file-control\";\r\nimport { ImageFileControlDirective } from \"../directives/template-validations/image-file-control\";\r\nimport { RxFormControlDirective } from \"../directives/template-validations/rxformcontrol\";\r\nimport { DecimalProvider } from \"../domain/element-processor/decimal.provider\";\r\nimport { ReactiveFormConfig } from \"../util/reactive-form-config\";\r\nimport { RxFormBuilder } from \"./rx-form-builder\";\r\nimport { TypedFormBuilder } from \"./typed-form-builder\";\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        ReactiveFormsModule,\r\n        RxwebFormDirective,\r\n        HtmlControlTemplateDirective,\r\n        ControlHostDirective,\r\n        RxFormControlDirective,\r\n        FileControlDirective,\r\n        ImageFileControlDirective,\r\n        AsyncValidationDirective\r\n    ],\r\n    providers: [RxFormBuilder, DecimalProvider, DecimalPipe],\r\n    exports: [\r\n        AsyncValidationDirective,\r\n        RxwebFormDirective,\r\n        HtmlControlTemplateDirective,\r\n        RxFormControlDirective,\r\n        FileControlDirective,\r\n        ImageFileControlDirective\r\n    ]\r\n})\r\nexport class RxReactiveFormsModule {\r\n    static forRoot(): ModuleWithProviders<RxReactiveFormsModule> { return { ngModule: RxReactiveFormsModule, providers: [] }; }\r\n}\r\n\r\n// Experimental\r\n@NgModule({\r\n    declarations: [],\r\n    imports: [CommonModule, FormsModule, ReactiveFormsModule, RxReactiveFormsModule.forRoot()],\r\n    providers: [{ provide: FormBuilder, useClass: TypedFormBuilder }, TypedFormBuilder],\r\n    exports: [ReactiveFormsModule, FormsModule, ReactiveFormsModule]\r\n})\r\nexport class ReactiveTypedFormsModule {\r\n    constructor() {\r\n        defaultContainer.isExperimental = true;\r\n        ReactiveFormConfig.autoInstancePush = true;\r\n    }\r\n\r\n    static forRoot(): ModuleWithProviders<ReactiveTypedFormsModule> { return { ngModule: ReactiveTypedFormsModule, providers: [] }; }\r\n}\r\n","import {\r\n    AsyncValidatorFn,\r\n    ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { RX_WEB_VALIDATOR } from \"../const\";\r\nimport { STRING } from '../const/validator.const';\r\nimport { defaultContainer } from \"../core/default-container\";\r\nimport { ApplicationUtil } from '../util/app-util';\r\n\r\nexport function baseValidator(config: any, type: any, validator: Function): ValidatorFn {\r\n    var rxwebValidator = (control: any, target?: object): { [key: string]: any } | null => {\r\n        if (typeof control == STRING)\r\n            defaultContainer.init(target, 0, control, type, config, false);\r\n        else {\r\n            if (config && (!control.validatorConfig || !control.validatorConfig[type]))\r\n                ApplicationUtil.configureControl(control, config, type);\r\n            return validator(control);\r\n        }\r\n\r\n        return null\r\n    }\r\n\r\n    Object.defineProperty(rxwebValidator, \"name\", { value: RX_WEB_VALIDATOR });\r\n    return rxwebValidator;\r\n}\r\n\r\nexport function baseAsyncValidatorExtension(config: any, type: any, validator: Function): AsyncValidatorFn {\r\n    var rxwebValidator = (control: any, target?: object): Observable<{ [key: string]: any }> => {\r\n        if (typeof control == STRING)\r\n            defaultContainer.init(target, 0, control, type, config, true);\r\n        else {\r\n            if (config && (!control.validatorConfig || !control.validatorConfig[type]))\r\n                ApplicationUtil.configureControl(control, config, type);\r\n            return validator(control);\r\n        }\r\n\r\n        return of([]);\r\n    }\r\n\r\n    Object.defineProperty(rxwebValidator, \"name\", { value: RX_WEB_VALIDATOR });\r\n    return rxwebValidator;\r\n}\r\n","import {\r\n  AsyncValidatorFn,\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { AlphaConfig } from \"../models/config/alpha-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { alphaValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\nexport function alphaValidatorExtension(config?: AlphaConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"alpha\"], alphaValidator(config))\r\n}\r\n\r\nexport function alphaAsyncValidatorExtension(config?: AlphaConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"alpha\"], baseAsyncValidator(config, AnnotationTypes[\"alpha\"]));\r\n}\r\n","import {\r\n  AsyncValidatorFn,\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { allOfValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function allOfValidatorExtension(config?: ArrayConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"allOf\"], allOfValidator(config))\r\n}\r\nexport function allOfAsyncValidatorExtension(config?: ArrayConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"allOf\"], baseAsyncValidator(config, AnnotationTypes[\"allOf\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { AlphaConfig } from '../models/config/alpha-config';\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { alphaNumericValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function alphaNumericValidatorExtension(config?: AlphaConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"alphaNumeric\"], alphaNumericValidator(config))\r\n}\r\nexport function alphaNumericAsyncValidatorExtension(config?: AlphaConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"alphaNumeric\"], baseAsyncValidator(config, AnnotationTypes[\"alphaNumeric\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ChoiceConfig } from \"../models/config/choice-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { choiceValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function choiceValidatorExtension(config?: ChoiceConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"choice\"], choiceValidator(config))\r\n}\r\nexport function choiceAsyncValidatorExtension(config?: ChoiceConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"choice\"], baseAsyncValidator(config, AnnotationTypes[\"choice\"]));\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CompareConfig } from \"../models/config/compare-config\";\r\nimport { compareValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function compareValidatorExtension(config?: CompareConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"compare\"], compareValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ContainsConfig } from \"../models/config/contains-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { containsValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function containsValidatorExtension(config?: ContainsConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"contains\"], containsValidator(config))\r\n}\r\nexport function containsAsyncValidatorExtension(config?: ContainsConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"contains\"], baseAsyncValidator(config, AnnotationTypes[\"contains\"]));\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CreditCardConfig } from \"../models/config/credit-card-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { creditCardValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function creditCardValidatorExtension(config?: CreditCardConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"creditCard\"], creditCardValidator(config))\r\n}\r\nexport function creditCardAsyncValidatorExtension(config?: CreditCardConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"creditCard\"], baseAsyncValidator(config, AnnotationTypes[\"creditCard\"]));\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DifferentConfig } from \"../models/config/compare-config\";\r\nimport { differentValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function differentValidatorExtension(config?: DifferentConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"different\"], differentValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DigitConfig } from \"../models/config/digit-config\";\r\nimport { digitValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function digitValidatorExtension(config?: DigitConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"digit\"], digitValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { EmailConfig } from \"../models/config/email-config\";\r\nimport { emailValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function emailValidatorExtension(config?: EmailConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"email\"], emailValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { evenValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function evenValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"even\"], evenValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { FactorConfig } from \"../models/config/factor-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { factorValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function factorValidatorExtension(config?: FactorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"factor\"], factorValidator(config))\r\n}\r\nexport function factorAsyncValidatorExtension(config?: FactorConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"factor\"], baseAsyncValidator(config, AnnotationTypes[\"factor\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { greaterThanEqualToValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function greaterThanEqualToValidatorExtension(config?: RelationalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"greaterThanEqualTo\"], greaterThanEqualToValidator(config))\r\n}\r\nexport function greaterThanEqualToAsyncValidatorExtension(config?: RelationalOperatorConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"greaterThanEqualTo\"], baseAsyncValidator(config, AnnotationTypes[\"greaterThanEqualTo\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { greaterThanValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function greaterThanValidatorExtension(config?: RelationalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"greaterThan\"], greaterThanValidator(config))\r\n}\r\nexport function greaterThanAsyncValidatorExtension(config?: RelationalOperatorConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"greaterThan\"], baseAsyncValidator(config, AnnotationTypes[\"greaterThan\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { HexColorConfig } from \"../models/config/hex-color-config\";\r\nimport { hexColorValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function hexColorValidatorExtension(config?: HexColorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"hexColor\"], hexColorValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { DefaultConfig } from \"../models/config/default-config\";\r\nimport { jsonValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function jsonValidatorExtension(config?: DefaultConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"json\"], jsonValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { leapYearValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function leapYearValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"leapYear\"], leapYearValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { lessThanEqualToValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function lessThanEqualToValidatorExtension(config?: RelationalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"lessThanEqualTo\"], lessThanEqualToValidator(config))\r\n}\r\nexport function lessThanEqualToAsyncValidatorExtension(config?: RelationalOperatorConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"lessThanEqualTo\"], baseAsyncValidator(config, AnnotationTypes[\"lessThanEqualTo\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RelationalOperatorConfig } from \"../models/config/relational-operator-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { lessThanValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function lessThanValidatorExtension(config?: RelationalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"lessThan\"], lessThanValidator(config))\r\n}\r\nexport function lessThanAsyncValidatorExtension(config?: RelationalOperatorConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"lessThan\"], baseAsyncValidator(config, AnnotationTypes[\"lessThan\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { lowercaseValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function lowerCaseValidatorExtension(config?: MessageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"lowerCase\"], lowercaseValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { macValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function macValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"mac\"], macValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxDateConfig } from \"../models/config/max-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { maxDateValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function maxDateValidatorExtension(config?: MaxDateConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"maxDate\"], maxDateValidator(config))\r\n}\r\nexport function maxDateAsyncValidatorExtension(config?: MaxDateConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"maxDate\"], baseAsyncValidator(config, AnnotationTypes[\"maxDate\"]));\r\n}","import {\r\n  AsyncValidatorFn,\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { maxLengthValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function maxLengthValidatorExtension(config?: NumberConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"maxLength\"], maxLengthValidator(config))\r\n}\r\nexport function maxLengthAsyncValidatorExtension(config?: NumberConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"maxLength\"], baseAsyncValidator(config, AnnotationTypes[\"maxLength\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { maxNumberValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function maxNumberValidatorExtension(config?: NumberConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"maxNumber\"], maxNumberValidator(config))\r\n}\r\nexport function maxNumberAsyncValidatorExtension(config?: NumberConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"maxNumber\"], baseAsyncValidator(config, AnnotationTypes[\"maxNumber\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinDateConfig } from \"../models/config/min-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { minDateValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function minDateValidatorExtension(config?: MinDateConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"minDate\"], minDateValidator(config))\r\n}\r\nexport function minDateAsyncValidatorExtension(config?: MinDateConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"minDate\"], baseAsyncValidator(config, AnnotationTypes[\"minDate\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { minLengthValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function minLengthValidatorExtension(config?: NumberConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"minLength\"], minLengthValidator(config))\r\n}\r\nexport function minLengthAsyncValidatorExtension(config?: NumberConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"minLength\"], baseAsyncValidator(config, AnnotationTypes[\"minLength\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumberConfig } from \"../models/config/number-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { minNumberValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function minNumberValidatorExtension(config?: NumberConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"minNumber\"], minNumberValidator(config))\r\n}\r\nexport function minNumberAsyncValidatorExtension(config?: NumberConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"minNumber\"], baseAsyncValidator(config, AnnotationTypes[\"minNumber\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { noneOfValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function noneOfValidatorExtension(config?: ArrayConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"noneOf\"], noneOfValidator(config))\r\n}\r\nexport function noneOfAsyncValidatorExtension(config?: ArrayConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"noneOf\"], baseAsyncValidator(config, AnnotationTypes[\"noneOf\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { NumericConfig } from \"../models/config/numeric-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { numericValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function numericValidatorExtension(config?: NumericConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"numeric\"], numericValidator(config))\r\n}\r\nexport function numericAsyncValidatorExtension(config?: NumericConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"numeric\"], baseAsyncValidator(config, AnnotationTypes[\"numeric\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { oddValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function oddValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"odd\"], oddValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ArrayConfig } from \"../models/config/array-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { oneOfValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function oneOfValidatorExtension(config?: ArrayConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"oneOf\"], oneOfValidator(config))\r\n}\r\nexport function oneOfAsyncValidatorExtension(config?: ArrayConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"oneOf\"], baseAsyncValidator(config, AnnotationTypes[\"oneOf\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { PasswordConfig } from \"../models/config/password-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { passwordValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function passwordcValidatorExtension(config: PasswordConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"password\"], passwordValidator(config))\r\n}\r\nexport function passwordAsyncValidatorExtension(config?: PasswordConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"password\"], baseAsyncValidator(config, AnnotationTypes[\"password\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { PatternConfig } from \"../models/config/pattern-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { patternValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function patternValidatorExtension(config?: PatternConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"pattern\"], patternValidator(config))\r\n}\r\nexport function patternAsyncValidatorExtension(config?: PatternConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"pattern\"], baseAsyncValidator(config, AnnotationTypes[\"pattern\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { RangeConfig } from \"../models/config/range-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { rangeValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function rangeValidatorExtension(config?: RangeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"range\"], rangeValidator(config))\r\n}\r\nexport function rangeAsyncValidatorExtension(config?: RangeConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"range\"], baseAsyncValidator(config, AnnotationTypes[\"range\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { requiredValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function requiredValidatorExtension(config?: MessageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"required\"], requiredValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { TimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { timeValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function timeValidatorExtension(config?: TimeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"time\"], timeValidator(config))\r\n}\r\nexport function timeAsyncValidatorExtension(config?: TimeConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"time\"], baseAsyncValidator(config, AnnotationTypes[\"time\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { uppercaseValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function upperCaseValidatorExtension(config?: MessageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"upperCase\"], uppercaseValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { UrlConfig } from \"../models/config/url-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { urlValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function urlValidatorExtension(config?: UrlConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"url\"], urlValidator(config))\r\n}\r\nexport function urlAsyncValidatorExtension(config?: UrlConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"url\"], baseAsyncValidator(config, AnnotationTypes[\"url\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { asciiValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function asciiValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"ascii\"], asciiValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { dataUriValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function dataUriValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"dataUri\"], dataUriValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { portValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function portValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"port\"], portValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { latLongValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function latLongValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"latLong\"], latLongValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ExtensionConfig } from \"../models/config/extension-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function extensionValidatorExtension(config?: ExtensionConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"extension\"], (_: any) => { return null })\r\n}\r\nexport function extensionAsyncValidatorExtension(config?: ExtensionConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"extension\"], baseAsyncValidator(config, AnnotationTypes[\"extension\"]));\r\n}","import {\r\n  AbstractControl,\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { SizeConfig } from \"../models/config/size-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function fileSizeValidatorExtension(config: SizeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"fileSize\"], (_: AbstractControl) => { return null })\r\n}\r\nexport function fileSizeAsyncValidatorExtension(config?: SizeConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"fileSize\"], baseAsyncValidator(config, AnnotationTypes[\"fileSize\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { StringValueConfig } from \"../models/config/string-value-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { endsWithValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function endsWithValidatorExtension(config: StringValueConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"endsWith\"], endsWithValidator(config))\r\n}\r\nexport function endsWithAsyncValidatorExtension(config?: StringValueConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"endsWith\"], baseAsyncValidator(config, AnnotationTypes[\"endsWith\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { StringComparisonConfig } from \"../models/config/string-comparison-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { startsWithValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function startsWithValidatorExtension(config: StringComparisonConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"startsWithWith\"], startsWithValidator(config))\r\n}\r\nexport function startsWithAsyncValidatorExtension(config?: StringComparisonConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"startsWithWith\"], baseAsyncValidator(config, AnnotationTypes[\"startsWith\"]));\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { primeNumberValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function primeNumberValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"primeNumber\"], primeNumberValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { latitudeValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function latitudeValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"latitude\"], latitudeValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { longitudeValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function longitudeValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"longitude\"], longitudeValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ComposeConfig } from \"../models/config/compose-config\";\r\nimport { composeValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function composeValidatorExtension(config?: ComposeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"compose\"], composeValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { FileConfig } from \"../models/config/file-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function fileValidatorExtension(config: FileConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"file\"], (_: any) => { return null })\r\n}\r\nexport function fileAsyncValidatorExtension(config?: FileConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"file\"], baseAsyncValidator(config, AnnotationTypes[\"file\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { CustomConfig } from \"../models/config/custom-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { customValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function customValidatorExtension(config?: CustomConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"custom\"], customValidator(config))\r\n}\r\nexport function customAsyncValidatorExtension(config?: CustomConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"custom\"], baseAsyncValidator(config, AnnotationTypes[\"custom\"]));\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { UniqueConfig } from \"../models/config/unique-config\";\r\nimport { uniqueValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function uniqueValidatorExtension(config?: UniqueConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"unique\"], uniqueValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { ImageConfig } from \"../models/config/image-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function imageValidatorExtension(config?: ImageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"image\"], (_: any) => { return null })\r\n}\r\nexport function imageAsyncValidatorExtension(config?: ImageConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"image\"], baseAsyncValidator(config, AnnotationTypes[\"image\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { notEmptyValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function notEmptyValidatorExtension(config?: MessageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"notEmpty\"], notEmptyValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { IpConfig } from \"../models/config/ip-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { ipValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\nexport function ipValidatorExtension(config?: IpConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"ip\"], ipValidator(config))\r\n}\r\nexport function ipAsyncValidatorExtension(config?: IpConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"ip\"], baseAsyncValidator(config, AnnotationTypes[\"ip\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { cusipValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function cusipValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"cusip\"], cusipValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseConfig } from \"../models/config/base-config\";\r\nimport { gridValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function gridValidatorExtension(config?: BaseConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"grid\"], gridValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { BaseDateConfig } from \"../models/config/base-date-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { dateValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function dateValidatorExtension(config?: BaseDateConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"date\"], dateValidator(config))\r\n}\r\nexport function dateAsyncValidatorExtension(config?: BaseDateConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"date\"], baseAsyncValidator(config, AnnotationTypes[\"date\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { andValidator } from '../reactive-form-validators/and.validator';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function andValidatorExtension(config?: LogicalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"and\"], andValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { orValidator } from '../reactive-form-validators/or.validator';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function orValidatorExtension(config?: LogicalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"or\"], orValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { LogicalOperatorConfig } from \"../models/config/logical-operator-config\";\r\nimport { notValidator } from '../reactive-form-validators/not.validator';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function notValidatorExtension(config?: LogicalOperatorConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"not\"], notValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MinTimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { minTimeValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function minTimeValidatorExtension(config?: MinTimeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"minTime\"], minTimeValidator(config))\r\n}\r\nexport function minTimeAsyncValidatorExtension(config?: MinTimeConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"minTime\"], baseAsyncValidator(config, AnnotationTypes[\"minTime\"]));\r\n}","import {\r\n  AsyncValidatorFn, ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaxTimeConfig } from \"../models/config/time-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { maxTimeValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\n\r\nexport function maxTimeValidatorExtension(config?: MaxTimeConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"maxTime\"], maxTimeValidator(config))\r\n}\r\nexport function maxTimeAsyncValidatorExtension(config?: MaxTimeConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"maxTime\"], baseAsyncValidator(config, AnnotationTypes[\"maxTime\"]));\r\n}","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MessageConfig } from \"../models/config/message-config\";\r\nimport { requiredTrueValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\n\r\nexport function requiredTrueValidatorExtension(config?: MessageConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"requiredTrue\"], requiredTrueValidator(config))\r\n}\r\n","import {\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { MaskConfig } from \"../models/config/mask-config\";\r\nimport { maskValidator } from '../reactive-form-validators/index';\r\nimport { baseValidator } from \"./base-validator.function\";\r\nexport function maskValidatorExtension(config?: MaskConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"mask\"], maskValidator(config))\r\n}\r\n","import {\r\n  AsyncValidatorFn,\r\n  ValidatorFn\r\n} from \"@angular/forms\";\r\nimport { AnnotationTypes } from \"../core/annotation-types\";\r\nimport { IBANConfig } from \"../models/config/iban-config\";\r\nimport { baseAsyncValidator } from \"../reactive-form-validators/async/base.async.validator\";\r\nimport { ibanValidator } from '../reactive-form-validators/index';\r\nimport { baseAsyncValidatorExtension, baseValidator } from \"./base-validator.function\";\r\nexport function ibanValidatorExtension(config?: IBANConfig): ValidatorFn {\r\n  return baseValidator(config, AnnotationTypes[\"iban\"], ibanValidator(config))\r\n}\r\n\r\nexport function ibanAsyncValidatorExtension(config?: IBANConfig): AsyncValidatorFn {\r\n  return baseAsyncValidatorExtension(config, AnnotationTypes[\"iban\"], baseAsyncValidator(config, AnnotationTypes[\"iban\"]));\r\n}\r\n","import {\r\n    allOfAsyncValidatorExtension,\r\n    allOfValidatorExtension,\r\n    alphaAsyncValidatorExtension,\r\n    alphaNumericAsyncValidatorExtension,\r\n    alphaNumericValidatorExtension,\r\n    alphaValidatorExtension,\r\n    andValidatorExtension,\r\n    asciiValidatorExtension,\r\n    choiceAsyncValidatorExtension,\r\n    choiceValidatorExtension, compareValidatorExtension,\r\n    composeValidatorExtension,\r\n    containsAsyncValidatorExtension,\r\n    containsValidatorExtension,\r\n    creditCardAsyncValidatorExtension,\r\n    creditCardValidatorExtension,\r\n    cusipValidatorExtension,\r\n    customAsyncValidatorExtension,\r\n    customValidatorExtension,\r\n    dataUriValidatorExtension,\r\n    dateAsyncValidatorExtension,\r\n    dateValidatorExtension,\r\n    differentValidatorExtension, digitValidatorExtension, emailValidatorExtension,\r\n    endsWithAsyncValidatorExtension,\r\n    endsWithValidatorExtension,\r\n    evenValidatorExtension,\r\n    extensionAsyncValidatorExtension,\r\n    extensionValidatorExtension,\r\n    factorAsyncValidatorExtension,\r\n    factorValidatorExtension,\r\n    fileAsyncValidatorExtension, fileSizeAsyncValidatorExtension,\r\n    fileSizeValidatorExtension,\r\n    fileValidatorExtension,\r\n    greaterThanAsyncValidatorExtension,\r\n    greaterThanEqualToAsyncValidatorExtension,\r\n    greaterThanEqualToValidatorExtension, greaterThanValidatorExtension,\r\n    gridValidatorExtension,\r\n    hexColorValidatorExtension,\r\n    ibanAsyncValidatorExtension,\r\n    ibanValidatorExtension,\r\n    imageAsyncValidatorExtension,\r\n    imageValidatorExtension,\r\n    ipAsyncValidatorExtension,\r\n    ipValidatorExtension,\r\n    jsonValidatorExtension,\r\n    latLongValidatorExtension,\r\n    latitudeValidatorExtension,\r\n    leapYearValidatorExtension,\r\n    lessThanAsyncValidatorExtension,\r\n    lessThanEqualToAsyncValidatorExtension,\r\n    lessThanEqualToValidatorExtension,\r\n    lessThanValidatorExtension,\r\n    longitudeValidatorExtension,\r\n    lowerCaseValidatorExtension, macValidatorExtension,\r\n    maskValidatorExtension,\r\n    maxDateAsyncValidatorExtension,\r\n    maxDateValidatorExtension,\r\n    maxLengthAsyncValidatorExtension,\r\n    maxLengthValidatorExtension,\r\n    maxNumberAsyncValidatorExtension,\r\n    maxNumberValidatorExtension,\r\n    maxTimeAsyncValidatorExtension,\r\n    maxTimeValidatorExtension,\r\n    minDateAsyncValidatorExtension,\r\n    minDateValidatorExtension,\r\n    minLengthAsyncValidatorExtension,\r\n    minLengthValidatorExtension,\r\n    minNumberAsyncValidatorExtension,\r\n    minNumberValidatorExtension,\r\n    minTimeAsyncValidatorExtension,\r\n    minTimeValidatorExtension,\r\n    noneOfAsyncValidatorExtension,\r\n    noneOfValidatorExtension,\r\n    notEmptyValidatorExtension,\r\n    notValidatorExtension,\r\n    numericAsyncValidatorExtension,\r\n    numericValidatorExtension, oddValidatorExtension,\r\n    oneOfAsyncValidatorExtension,\r\n    oneOfValidatorExtension,\r\n    orValidatorExtension,\r\n    passwordAsyncValidatorExtension,\r\n    passwordcValidatorExtension,\r\n    patternAsyncValidatorExtension,\r\n    patternValidatorExtension,\r\n    portValidatorExtension,\r\n    primeNumberValidatorExtension,\r\n    rangeAsyncValidatorExtension,\r\n    rangeValidatorExtension,\r\n    requiredTrueValidatorExtension,\r\n    requiredValidatorExtension,\r\n    startsWithAsyncValidatorExtension,\r\n    startsWithValidatorExtension,\r\n    timeAsyncValidatorExtension,\r\n    timeValidatorExtension,\r\n    uniqueValidatorExtension,\r\n    upperCaseValidatorExtension,\r\n    urlAsyncValidatorExtension,\r\n    urlValidatorExtension\r\n} from './index';\r\n\r\nexport class RxwebValidators {\r\n\r\n    static readonly alpha = alphaValidatorExtension;\r\n    static readonly allOf = allOfValidatorExtension;\r\n    static readonly alphaNumeric = alphaNumericValidatorExtension;\r\n    static readonly choice = choiceValidatorExtension;\r\n    static readonly compare = compareValidatorExtension;\r\n    static readonly contains = containsValidatorExtension;\r\n    static readonly creditCard = creditCardValidatorExtension;\r\n    static readonly different = differentValidatorExtension;\r\n    static readonly digit = digitValidatorExtension\r\n    static readonly email = emailValidatorExtension;\r\n    static readonly even = evenValidatorExtension;\r\n    static readonly factor = factorValidatorExtension;\r\n    static readonly greaterThanEqualTo = greaterThanEqualToValidatorExtension;\r\n    static readonly greaterThan = greaterThanValidatorExtension;\r\n    static readonly hexColor = hexColorValidatorExtension;\r\n    static readonly json = jsonValidatorExtension;\r\n    static readonly leapYear = leapYearValidatorExtension;\r\n    static readonly lessThanEqualTo = lessThanEqualToValidatorExtension;\r\n    static readonly lessThan = lessThanValidatorExtension;\r\n    static readonly lowerCase = lowerCaseValidatorExtension;\r\n    static readonly mac = macValidatorExtension;\r\n    static readonly maxDate = maxDateValidatorExtension;\r\n    static readonly maxLength = maxLengthValidatorExtension;\r\n    static readonly maxNumber = maxNumberValidatorExtension;\r\n    static readonly minDate = minDateValidatorExtension;\r\n    static readonly minLength = minLengthValidatorExtension;\r\n    static readonly minNumber = minNumberValidatorExtension;\r\n    static readonly noneOf = noneOfValidatorExtension;\r\n    static readonly numeric = numericValidatorExtension;\r\n    static readonly odd = oddValidatorExtension;\r\n    static readonly oneOf = oneOfValidatorExtension;\r\n    static readonly password = passwordcValidatorExtension;\r\n    static readonly pattern = patternValidatorExtension;\r\n    static readonly range = rangeValidatorExtension;\r\n    static readonly required = requiredValidatorExtension;\r\n    static readonly time = timeValidatorExtension;\r\n    static readonly upperCase = upperCaseValidatorExtension;\r\n    static readonly url = urlValidatorExtension;\r\n    static readonly ascii = asciiValidatorExtension;\r\n    static readonly dataUri = dataUriValidatorExtension;\r\n    static readonly port = portValidatorExtension;\r\n    static readonly latLong = latLongValidatorExtension;\r\n    static readonly extension = extensionValidatorExtension;\r\n    static readonly fileSize = fileSizeValidatorExtension;\r\n    static readonly endsWith = endsWithValidatorExtension;\r\n    static readonly startsWith = startsWithValidatorExtension;\r\n    static readonly primeNumber = primeNumberValidatorExtension;\r\n    static readonly latitude = latitudeValidatorExtension;\r\n    static readonly longitude = longitudeValidatorExtension;\r\n    static readonly compose = composeValidatorExtension;\r\n    static readonly file = fileValidatorExtension;\r\n    static readonly custom = customValidatorExtension;\r\n    static readonly unique = uniqueValidatorExtension;\r\n    static readonly image = imageValidatorExtension;\r\n    static readonly notEmpty = notEmptyValidatorExtension;\r\n    static readonly ip = ipValidatorExtension;\r\n    static readonly cusip = cusipValidatorExtension;\r\n    static readonly grid = gridValidatorExtension;\r\n    static readonly date = dateValidatorExtension;\r\n    static readonly and = andValidatorExtension;\r\n    static readonly or = orValidatorExtension;\r\n    static readonly not = notValidatorExtension;\r\n    static readonly minTime = minTimeValidatorExtension;\r\n    static readonly maxTime = maxTimeValidatorExtension;\r\n    static readonly requiredTrue = requiredTrueValidatorExtension;\r\n    static readonly mask = maskValidatorExtension;\r\n    static readonly iban = ibanValidatorExtension;\r\n    static readonly alphaAsync = alphaAsyncValidatorExtension;\r\n    static readonly alphaNumericAsync = alphaNumericAsyncValidatorExtension;\r\n    static readonly allOfAsync = allOfAsyncValidatorExtension;\r\n    static readonly choiceAsync = choiceAsyncValidatorExtension;\r\n    static readonly containsAsync = containsAsyncValidatorExtension;\r\n    static readonly creditCardAsync = creditCardAsyncValidatorExtension;\r\n    static readonly customAsync = customAsyncValidatorExtension;\r\n    static readonly dateAsync = dateAsyncValidatorExtension;\r\n    static readonly endsWithAsync = endsWithAsyncValidatorExtension;\r\n    static readonly extensionAsync = extensionAsyncValidatorExtension;\r\n    static readonly factorAsync = factorAsyncValidatorExtension;\r\n    static readonly fileSizeAsync = fileSizeAsyncValidatorExtension;\r\n    static readonly fileAsync = fileAsyncValidatorExtension;\r\n    static readonly greaterThanEqualToAsync = greaterThanEqualToAsyncValidatorExtension;\r\n    static readonly greaterThanAsync = greaterThanAsyncValidatorExtension;\r\n    static readonly imageAsync = imageAsyncValidatorExtension;\r\n    static readonly ipAsync = ipAsyncValidatorExtension;\r\n    static readonly lessThanEqualToAsync = lessThanEqualToAsyncValidatorExtension;\r\n    static readonly lessThanAsync = lessThanAsyncValidatorExtension;\r\n    static readonly maxDateAsync = maxDateAsyncValidatorExtension;\r\n    static readonly maxLengthAsync = maxLengthAsyncValidatorExtension;\r\n    static readonly maxNumberAsync = maxNumberAsyncValidatorExtension;\r\n    static readonly maxTimeAsync = maxTimeAsyncValidatorExtension;\r\n    static readonly minDateAsync = minDateAsyncValidatorExtension;\r\n    static readonly minLengthAsync = minLengthAsyncValidatorExtension;\r\n    static readonly minNumberAsync = minNumberAsyncValidatorExtension;\r\n    static readonly minTimeAsync = minTimeAsyncValidatorExtension;\r\n    static readonly noneOfAsync = noneOfAsyncValidatorExtension;\r\n    static readonly numericAsync = numericAsyncValidatorExtension;\r\n    static readonly oneOfAsync = oneOfAsyncValidatorExtension;\r\n    static readonly passwordAsync = passwordAsyncValidatorExtension;\r\n    static readonly patternAsync = patternAsyncValidatorExtension;\r\n    static readonly rangeAsync = rangeAsyncValidatorExtension;\r\n    static readonly startsWithAsync = startsWithAsyncValidatorExtension;\r\n    static readonly timeAsync = timeAsyncValidatorExtension;\r\n    static readonly urlAsync = urlAsyncValidatorExtension;\r\n    static readonly ibanAsync = ibanAsyncValidatorExtension;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Compiler, Component, ComponentRef, Injectable, NgModule, ViewContainerRef } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DynamicBuilder {\r\n\r\n    /**\r\n     * Constructor\r\n     * @param componentFactoryResolver \r\n     */\r\n    constructor(private compiler: Compiler) { }\r\n\r\n    /**\r\n     * Compiles the specified html\r\n     * @param viewContainerRef \r\n     * @param template \r\n     * @param data \r\n     */\r\n    public compileHtml(viewContainerRef: ViewContainerRef, template: string, data?: any): ComponentRef<any> | null {\r\n\r\n        /* Create a dynamic component */\r\n        var component = Component({ template: template })(class { });\r\n\r\n        /* Destroys all views in this container */\r\n        viewContainerRef.clear();\r\n\r\n        /* Compile the given NgModule and all of its components */\r\n        const module = this.compiler.compileModuleAndAllComponentsSync(NgModule({\r\n            declarations: [component],\r\n            exports: [component],\r\n            imports: [CommonModule]\r\n        })(class { }));\r\n\r\n        /* Retrieve the factory object that creates a component of the given type */\r\n        const componentFactory = module.componentFactories.find((comp) => comp.componentType === component);\r\n\r\n        /* Instantiate a single component and inserts its host view into this container */\r\n        const componentRef = viewContainerRef.createComponent(componentFactory!);\r\n        if (componentFactory) {\r\n            /* Add properties to the component */\r\n            Object.assign(componentRef.instance, data);\r\n\r\n            /* Check this view and its children */\r\n            componentRef.changeDetectorRef.detectChanges();\r\n\r\n            return componentRef;\r\n        }\r\n\r\n        return null;\r\n    }\r\n}","/**\r\n * Represents a user-defined action that can be performed on an entity.\r\n * @template TEntity The type of the entity the action operates on.\r\n * @template TContext The type of the context in which the action is executed.\r\n */\r\nexport class ActionItem<TEntity = any, TContext = any> {\r\n    /**\r\n     * Unique identifier for the action item.\r\n     * @type {string}\r\n     */\r\n    public id: string = '';\r\n\r\n    /**\r\n     * The display title of the action item.\r\n     * Can be a static string or a function returning a string,\r\n     * which can optionally use the entity and context to generate the title.\r\n     * @type {string | ((x: TEntity, ctx: TContext) => string)}\r\n     */\r\n    public title?: ((x: TEntity, ctx: TContext) => string) | string;\r\n\r\n    /**\r\n     * Tooltip text for the action item, displayed on hover.\r\n     * @type {string}\r\n     */\r\n    public tooltip?: string;\r\n\r\n    /**\r\n     * The icon for the action item, which can be a string or a function\r\n     * that returns an icon based on the entity and context.\r\n     * @type {((x?: TEntity, ctx?: TContext) => any) | string}\r\n     */\r\n    public icon?: ((x?: TEntity, ctx?: TContext) => any) | string = 'radio_button_unchecked';\r\n\r\n    /**\r\n     * The font set to use for the icon, defaulting to 'material-symbols-outlined'.\r\n     * @type {string}\r\n     */\r\n    public iconFontSet?: string = 'material-symbols-outlined';\r\n\r\n    /**\r\n     * Additional CSS class for the icon, which can be a function that returns \r\n     * a class based on the entity and context.\r\n     * @type {((x?: TEntity, ctx?: TContext) => any) | string}\r\n     */\r\n    public iconClass?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * The color for the icon, which can be set as a string (e.g., hex, rgb).\r\n     * @type {string}\r\n     */\r\n    public iconColor?: string;\r\n\r\n    /**\r\n     * Event handler to execute when the action item is triggered.\r\n     * @param {x} The entity associated with the action item.\r\n     * @param {ctx} The context in which the action item is executed.\r\n     * @param {index} The index of the action item in the list.\r\n     * @type {((x?: TEntity, ctx?: TContext, index?: number) => any)}\r\n     */\r\n    public event?: (x?: TEntity, ctx?: TContext, index?: number) => any;\r\n\r\n    /**\r\n     * Function that determines whether to hide the action item based on the entity, \r\n     * context, and index.\r\n     * @type {((x?: TEntity, ctx?: TContext, index?: number) => any)}\r\n     */\r\n    public hide?: (x?: TEntity, ctx?: TContext, index?: number) => any;\r\n\r\n    /**\r\n     * Function that determines whether to disable the action item based on the entity, \r\n     * context, and index.\r\n     * @type {((x?: TEntity, ctx?: TContext, index?: number) => any)}\r\n     */\r\n    public disable?: (x?: TEntity, ctx?: TContext, index?: number) => any;\r\n\r\n    /**\r\n     * Nested action items, allowing for submenus.\r\n     * @type {ActionItem<TEntity>[]}\r\n     */\r\n    public items?: ActionItem<TEntity>[];\r\n\r\n    /**\r\n     * The index of the action item in a list, used for ordering or identification.\r\n     * @type {number}\r\n     */\r\n    public index?: number;\r\n\r\n    /**\r\n     * The text color for the action item, specified as a hex string or a color name.\r\n     * @type {string}\r\n     */\r\n    public textColor?: string;\r\n\r\n    /**\r\n     * Constructor to initialize an ActionItem instance with optional properties.\r\n     * @param init - Partial properties to initialize the action item.\r\n     */\r\n    public constructor(init?: Partial<ActionItem<TEntity, TContext>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/* \r\n * Pipe to join array elements into a string with a specified separator.\r\n */\r\n@Pipe({\r\n    name: 'join'\r\n})\r\nexport class JoinPipe implements PipeTransform {\r\n    /*\r\n     * Transforms the input array into a string joined by the specified separator.\r\n     * @param value - The array to be joined.\r\n     * @param separator - The separator to be used for joining the array elements. Default is ', '.\r\n     * @returns A string with the array elements joined by the separator.\r\n     */\r\n    transform(value: any[], separator: string = ', '): string {\r\n        if (!Array.isArray(value)) {\r\n            return value;\r\n        }\r\n\r\n        return value.join(separator);\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Common pipe to map values based on a given map object, function, or string key.\r\n * It transforms each item of the array according to the provided map or function.\r\n */\r\n@Pipe({\r\n    name: 'map'\r\n})\r\nexport class MapPipe implements PipeTransform {\r\n\r\n    /**\r\n     * Transforms an array of values by mapping each value using the provided map object, function, or string key.\r\n     *\r\n     * @param value - The array of values to be transformed.\r\n     * @param mapFn - A map object, function, or string key to use for transforming the values.\r\n     * @returns An array of transformed values or the original array if no valid map, function, or key is provided.\r\n     */\r\n    transform(value: any[], mapFn: { [key: string]: any } | ((val: any, index?: number, array?: any[]) => any) | string): any[] {\r\n        /* Check if the input is an array */\r\n        if (!Array.isArray(value)) {\r\n            /* Return the original value if it's not an array */\r\n            return value;\r\n        }\r\n\r\n        /* Check if mapFn is a function */\r\n        if (typeof mapFn === 'function') {\r\n            /* Use the map function with proper signature: (value, index, array) */\r\n            return value.map((item, index, array) => mapFn(item, index, array));\r\n        }\r\n\r\n        /* Check if mapFn is an object */\r\n        if (typeof mapFn === 'object' && mapFn !== null) {\r\n            /* If mapFn is an object, map each value to the corresponding object property */\r\n            return value.map(item => mapFn[item] || item);\r\n        }\r\n\r\n        /* Check if mapFn is a string (e.g., 'display') */\r\n        if (typeof mapFn === 'string') {\r\n            /* Assume each item is an object and map using the string key */\r\n            return value.map(item => (item && item[mapFn]) ? item[mapFn] : item);\r\n        }\r\n\r\n        /* Return the original value if no valid mapFn is provided */\r\n        return value;\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Pipe to dynamically access nested properties of an object.\r\n */\r\n@Pipe({\r\n    name: 'property'\r\n})\r\nexport class PropertyPipe implements PipeTransform {\r\n    /**\r\n     * Transforms the input object by accessing nested properties.\r\n     * @param obj The input object.\r\n     * @param path The path to the nested property.\r\n     * @returns The value of the nested property.\r\n     */\r\n    transform(obj: any, path: string): any {\r\n        /* Check if input object or path is null or undefined */\r\n        if (!obj || !path) return undefined;\r\n\r\n        /* Split the path string into an array of keys */\r\n        return path.split('.').reduce((acc, key) => acc ? acc[key] : undefined, obj);\r\n    }\r\n}\r\n","import { animate, animateChild, AnimationTriggerMetadata, AUTO_STYLE, group, query, state, style, transition, trigger } from '@angular/animations';\r\nimport { IAnimationOptions } from '../common/interfaces';\r\n\r\nexport interface ICollapseAnimation extends IAnimationOptions {\r\n\teaseOnClose?: string;\r\n\teaseOnOpen?: string;\r\n}\r\n\r\n/**\r\n * const vdCollapseAnimation\r\n *\r\n * Parameter Options:\r\n * * duration: Duration the animation will run in milliseconds. Defaults to 150 ms.\r\n * * delay: Delay before the animation will run in milliseconds. Defaults to 0 ms.\r\n * * easeOnClose: Animation accelerates and decelerates when closing. Defaults to ease-in.\r\n * * easeOnOpen: Animation accelerates and decelerates when opening. Defaults to ease-out.\r\n *\r\n * Returns an [AnimationTriggerMetadata] object with boolean states for a collapse/expand animation.\r\n *\r\n * usage: [@vdCollapse]=\"{ value: true | false, params: { duration: 500 }}\"\r\n */\r\nexport const vdCollapseAnimation: AnimationTriggerMetadata = trigger('vdCollapse', [\r\n\tstate('1', style({ height: '0', overflow: 'hidden' })),\r\n\r\n\tstate('0', style({ height: AUTO_STYLE, overflow: AUTO_STYLE })),\r\n\r\n\ttransition('0 => 1', [\r\n\t\tstyle({ overflow: 'hidden', height: AUTO_STYLE }),\r\n\t\tgroup([\r\n\t\t\tquery('@*', animateChild(), { optional: true }),\r\n\t\t\tanimate('{{ duration }}ms {{ delay }}ms {{ ease }}', style({ height: '0', overflow: 'hidden' })),\r\n\t\t]),\r\n\t], { params: { duration: 150, delay: '0', ease: 'ease-in' } }),\r\n\r\n\ttransition('1 => 0', [\r\n\t\tstyle({ height: '0', overflow: 'hidden' }),\r\n\t\tgroup([\r\n\t\t\tquery('@*', animateChild(), { optional: true }),\r\n\t\t\tanimate('{{ duration }}ms {{ delay }}ms {{ ease }}', style({ overflow: 'hidden', height: AUTO_STYLE })),\r\n\t\t]),\r\n\t], { params: { duration: 150, delay: '0', ease: 'ease-out' } }),\r\n]);","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\ntype Constructor<T> = new (...args: any[]) => T;\r\n\r\n/** Interface to implement when applying the disabled mixin */\r\nexport interface ICanDisableRipple {\r\n  disableRipple: boolean;\r\n  onDisableRippleChange(v: boolean): void;\r\n}\r\n\r\n/** Mixin to augment a component or directive with a `disabled` property. */\r\nexport function mixinDisableRipple<T extends Constructor<{}>>(base: T): Constructor<ICanDisableRipple> & T {\r\n  return class extends base {\r\n    private _disableRipple: boolean = false;\r\n\r\n    constructor(...args: any[]) {\r\n      super(...args);\r\n    }\r\n\r\n    get disableRipple(): boolean {\r\n      return this._disableRipple;\r\n    }\r\n    set disableRipple(value: boolean) {\r\n      let newValue: boolean = coerceBooleanProperty(value);\r\n      if (this._disableRipple !== newValue) {\r\n        this._disableRipple = newValue;\r\n        this.onDisableRippleChange(this._disableRipple);\r\n      }\r\n    }\r\n\r\n    onDisableRippleChange(v: boolean): void {\r\n      /** NOT IMPLEMENTED, this needs to be overriden by subclasses if needed */\r\n    }\r\n  };\r\n}\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Constructor } from './constructor';\r\n\r\n/** Interface to implement when applying the disabled mixin */\r\nexport interface ICanDisable {\r\n\tdisabled: boolean;\r\n\tonDisabledChange(v: boolean): void;\r\n}\r\n\r\n/** Mixin to augment a component or directive with a `disabled` property. */\r\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): Constructor<ICanDisable> & T {\r\n\treturn class extends base {\r\n\t\tprivate _disabled: boolean = false;\r\n\r\n\t\tconstructor(...args: any[]) {\r\n\t\t\tsuper(...args);\r\n\t\t}\r\n\r\n\t\tget disabled(): boolean {\r\n\t\t\treturn this._disabled;\r\n\t\t}\r\n\t\tset disabled(value: boolean) {\r\n\t\t\tlet newValue: boolean = coerceBooleanProperty(value);\r\n\t\t\tif (this._disabled !== newValue) {\r\n\t\t\t\tthis._disabled = newValue;\r\n\t\t\t\tthis.onDisabledChange(this._disabled);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tonDisabledChange(v: boolean): void {\r\n\t\t\t/** NOT IMPLEMENTED, this needs to be overriden by subclasses if needed */\r\n\t\t}\r\n\t};\r\n}","import { NgClass } from '@angular/common';\r\nimport { Component, computed, input } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { EnumMetadata } from '../../models/enum-metadata';\r\nimport { Icon } from '../../models/icon';\r\n\r\n@Component({\r\n    selector: 'msa-enum-display',\r\n    standalone: true,\r\n    imports: [MatIcon, NgClass],\r\n    template: `\r\n        @if (resolvedIcon(); as iconConfig) {\r\n            <mat-icon\r\n                [svgIcon]=\"iconConfig.svgIcon\"\r\n                [fontIcon]=\"iconConfig.fontIcon\"\r\n                [fontSet]=\"iconConfig.fontSet\"\r\n                [style.color]=\"iconConfig.color\"\r\n                [ngClass]=\"iconConfig.cssClass\"\r\n                class=\"enum-icon\">\r\n                @if (iconConfig.matIcon) { {{ iconConfig.matIcon }} }\r\n            </mat-icon>\r\n        }\r\n        @let text = resolvedText();    \r\n        <span class=\"enum-text\" i18n=\"@@selection\">{ text, select, type {type} other { {{text}}} }</span>`,\r\n    styles: `\r\n        .enum-icon {\r\n            margin-right: 0.2rem;\r\n            vertical-align: middle;\r\n        }        \r\n        .enum-text {\r\n            vertical-align: middle;\r\n        }`\r\n})\r\nexport class MsaEnumDisplayComponent {\r\n    /**\r\n     * The numeric value of the enum to convert.\r\n     */\r\n    public readonly value = input<number | null | undefined>();\r\n\r\n    /**\r\n     * The enum type (as an object) that defines the mapping of values to their string representations.\r\n     * @type {any}\r\n     */\r\n    public readonly enumType: any = input<any>();\r\n\r\n    /**\r\n     * Optional metadata for the enum values, which can be used to provide additional display information.\r\n     * This can be either a string prefix or an object containing EnumMetadata for each enum value.\r\n     */\r\n    public readonly metadata = input<string | { [key: number]: EnumMetadata }>();\r\n\r\n    /**\r\n     * Determines whether to display the icon alongside the text.\r\n     * Defaults to false (hidden).\r\n     */\r\n    public readonly showIcon = input<boolean>(false);\r\n\r\n    /**\r\n     * Optional entity context passed down to evaluate dynamic icon functions.\r\n     */\r\n    public readonly entity = input<any>();\r\n\r\n    /**\r\n     * Optional execution context passed down to evaluate dynamic icon functions.\r\n     */\r\n    public readonly context = input<any>();\r\n\r\n    /**\r\n     * Extracts the current metadata object if it exists for the given value.\r\n     */\r\n    private readonly currentMetadata = computed(() => {\r\n        /* Get the current value and metadata */\r\n        const val = this.value();\r\n        const meta = this.metadata();\r\n\r\n        /* Check if the metadata is an object and contains the current value */\r\n        if (val !== null && val !== undefined && meta && typeof meta === 'object' && val in meta) {\r\n            return meta[val] as EnumMetadata;\r\n        }\r\n\r\n        return null;\r\n    });\r\n\r\n    /**\r\n     * Dynamically evaluates the Icon configuration properties based on whether they are static values or context functions.\r\n     */\r\n    public readonly resolvedIcon = computed(() => {\r\n        /* Early exit if icons are explicitly configured to be hidden */\r\n        if (!this.showIcon()) {\r\n            return null;\r\n        }\r\n\r\n        /* Retrieve the current metadata and extract the icon configuration */\r\n        const meta = this.currentMetadata();\r\n        const iconConfig = (meta as any)?.icon as Icon | undefined;\r\n        if (!iconConfig) {\r\n            return null;\r\n        }\r\n\r\n        /* Retrieve the entity and context for dynamic evaluation */\r\n        const x = this.entity();\r\n        const ctx = this.context();\r\n\r\n        /* Evaluate visibility rule from layout configurations */\r\n        const shouldHide = typeof iconConfig.hide === 'function' ? iconConfig.hide(x, ctx) : iconConfig.hide;\r\n        if (shouldHide) {\r\n            return null;\r\n        }\r\n\r\n        /* Helper to resolve string values or callback functions dynamically */\r\n        const resolve = (prop: any) => typeof prop === 'function' ? prop(x, ctx) : prop;\r\n\r\n        /* Return the resolved icon configuration with evaluated properties */\r\n        return {\r\n            matIcon: resolve(iconConfig.matIcon),\r\n            svgIcon: resolve(iconConfig.svgIcon),\r\n            fontIcon: resolve(iconConfig.fontIcon),\r\n            fontSet: iconConfig.fontSet ?? 'material-symbols-outlined',\r\n            color: resolve(iconConfig.iconColor),\r\n            cssClass: resolve(iconConfig.cssClass)\r\n        };\r\n    });\r\n\r\n    /**\r\n     * Resolves the text to display based on metadata or enum lookup.\r\n     */\r\n    public readonly resolvedText = computed(() => {\r\n        /* Get the current value */\r\n        const val = this.value();\r\n        if (val === null || val === undefined) {\r\n            return '';\r\n        }\r\n\r\n        /* Attempt to retrieve the display string from the metadata if available */\r\n        const metaObj = this.currentMetadata();\r\n        if (metaObj) {\r\n            return metaObj.display ?? '';\r\n        }\r\n\r\n        /* Fallback to enum type lookup if metadata is not available */\r\n        const type = this.enumType();\r\n        const metaStr = this.metadata();\r\n\r\n        /* If the enum type is an object and contains the value, return the corresponding string representation with optional prefix */\r\n        if (type && typeof type === 'object' && val in type) {\r\n            const prefix = typeof metaStr === 'string' ? metaStr : '';\r\n            return `${prefix}${type[val]}`;\r\n        }\r\n\r\n        return '';\r\n    });\r\n}","export const headerMetadataKey = 'customer:vdHeader';\r\nexport const endpointMetadataKey = 'customer:vdEndpoint';","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { AfterContentInit, Directive, ElementRef, Input } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: \"[autoFocus]\" // The selector allows you to use the directive on any element with the autoFocus attribute    \r\n})\r\nexport class AutofocusDirective implements AfterContentInit {\r\n    /**\r\n     * Optional input to customize the delay before focusing the element.\r\n     */\r\n    @Input()\r\n    public focusDelay: number = 300;\r\n\r\n    /**\r\n     * Determines whether the text should be selected on focus.\r\n     */\r\n    @Input()\r\n    public selectText: boolean = false;\r\n\r\n    /**\r\n     * Input that controls whether to focus the element. \r\n     * This will be true if the autoFocus attribute is present.\r\n     */\r\n    @Input(\"autoFocus\")\r\n    public set autoFocus(value: boolean | \"\") { this._autoFocus = coerceBooleanProperty(value); }\r\n    public get autoFocus(): boolean { return this._autoFocus; }\r\n    private _autoFocus: boolean = true;\r\n\r\n    /**\r\n     * Constructor that injects the ElementRef, giving direct access\r\n     * to the host DOM element where the directive is applied.\r\n     * @param elementRef - The reference to the element on which the directive is set.\r\n     */\r\n    public constructor(private elementRef: ElementRef) { }\r\n\r\n    /**\r\n     * Set focus on the element after content initialization if autoFocus is true.\r\n     */\r\n    public ngAfterContentInit(): void {\r\n        /* Focus if autoFocus is true */\r\n        if (this.autoFocus) {\r\n            setTimeout(() => {\r\n                if (this.elementRef.nativeElement) {\r\n                    this.elementRef.nativeElement.focus();\r\n\r\n                    /* Select the text if selectText is true */\r\n                    if (this.selectText) {\r\n                        this.elementRef.nativeElement.select();\r\n                    }\r\n                }\r\n            }, this.focusDelay);\r\n        }\r\n    }\r\n}","import { Directive, ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Renderer2 } from \"@angular/core\";\r\n\r\n@Directive({\r\n    selector: \"[delayedHover]\",\r\n    inputs: [\"duration\"],\r\n    outputs: [\"delayedhoverEvents: delayedHover\"],\r\n    exportAs: \"hesitation\"\r\n})\r\nexport class VdDelayedHoverDirective implements OnInit, OnDestroy {\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public duration: number = 500;\r\n\r\n    /**\r\n    * @property\r\n    */\r\n    public delayedhoverEvents: EventEmitter<void> = new EventEmitter();\r\n\r\n    /**\r\n    * @field\r\n    */\r\n    private elementRef: ElementRef;\r\n\r\n    /**\r\n     * @field\r\n     */\r\n    private renderer: Renderer2;\r\n\r\n    /**\r\n     * @field\r\n     */\r\n    private unlisteners: Function[] | null = null;\r\n\r\n    /**\r\n     * @field\r\n     */\r\n    private timer: any = 0;\r\n\r\n    /**\r\n     * @field\r\n     */\r\n    private zone: NgZone;\r\n\r\n    /**\r\n     * Initialize the delayedhover directive.\r\n     * @param elementRef \r\n     * @param renderer \r\n     * @param zone \r\n     */\r\n    constructor(elementRef: ElementRef, renderer: Renderer2, zone: NgZone) {\r\n        this.elementRef = elementRef;\r\n        this.renderer = renderer;\r\n        this.zone = zone;\r\n    }\r\n\r\n    /**\r\n     * I Cancels any pending hesitation timer.\r\n     */\r\n    public cancel(): void {\r\n        clearTimeout(this.timer);\r\n    }\r\n\r\n    /**\r\n     * Gets called once when the host element is being unmounted.\r\n     */\r\n    public ngOnDestroy(): void {\r\n        this.cancel();\r\n\r\n        /* If we have event-handler bindings, unbind them all */\r\n        if (this.unlisteners) {\r\n            for (var unlistener of this.unlisteners) {\r\n                unlistener();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets called once after the host element has been mounted and the inputs \r\n     * have been bound for the first time.\r\n     */\r\n    public ngOnInit(): void {\r\n        /*\r\n        Instead of using host bindings, which would trigger change-detection digests\r\n        when the events are triggered, we want to drop-down out of the core NgZone so\r\n        that we can setup our event-handlers without adding processing overhead.\r\n        */\r\n        this.zone.runOutsideAngular(\r\n            () => {\r\n                this.unlisteners = [\r\n                    this.renderer.listen(this.elementRef.nativeElement, \"mouseenter\", this.handleMouseenter),\r\n                    this.renderer.listen(this.elementRef.nativeElement, \"mousedown\", this.handleMousedown),\r\n                    this.renderer.listen(this.elementRef.nativeElement, \"mouseleave\", this.handleMouseleave)\r\n                ];\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n    /**\r\n     * Handles the mousedown event inside the host element.\r\n     * @param event \r\n     */\r\n    private handleMousedown = (event: MouseEvent): void => {\r\n        /*\r\n        If the user shows any mouse-activity (other than enter/leave) inside the host\r\n        element, we want to cancel the hesitation timer. Such mouse activity indicates\r\n        non-hesitation intent on behalf of the user.\r\n        */\r\n        this.cancel();\r\n    }\r\n\r\n    /**\r\n     * Handles the mouseevent event inside the host element.\r\n     * @param event \r\n     */\r\n    private handleMouseenter = (event: MouseEvent): void => {\r\n        /*\r\n        When the user enters the host, start the hesitation timer. This timer will be\r\n        fulfilled if the user remains inside of the host without performing any other\r\n        meaningful actions.\r\n        */\r\n        this.timer = setTimeout(this.handleTimerThreshold, this.duration);\r\n    }\r\n\r\n    /**\r\n     * Handles the mouseleave event inside the host element.\r\n     * @param event \r\n     */\r\n    private handleMouseleave = (event: MouseEvent): void => {\r\n        this.cancel();\r\n    }\r\n\r\n    /**\r\n     * Handles the timer threshold event.\r\n     */\r\n    private handleTimerThreshold = (): void => {\r\n        /*\r\n        Once the hesitation timer threshold has been surpassed, we want to trigger an\r\n        output event. This time, however, we want to trigger Angular change-detection.\r\n        As such, we have set up into the Angular zone for the emission.\r\n        */\r\n        this.zone.runGuarded(() => { this.delayedhoverEvents.emit(); });\r\n    }\r\n}","import { Directive, Input } from '@angular/core';\r\nimport { FormControlDirective, FormControlName, NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n    selector: '[disableControl]'\r\n})\r\nexport class DisableControlDirective {\r\n\r\n    /**\r\n     * disableControl: boolean\r\n     */\r\n    @Input()\r\n    set disableControl(condition: boolean) {\r\n        const action = condition ? 'disable' : 'enable';\r\n        if (this.ngControl instanceof FormControlName) {\r\n            (this.ngControl as FormControlName).formDirective?.control?.controls[this.ngControl.name ?? ''][action]();\r\n        } else if (this.ngControl instanceof FormControlDirective) {\r\n            this.ngControl?.control[action]();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Constructor\r\n     * @param ngControl \r\n     */\r\n    constructor(private ngControl: NgControl) { }\r\n}","export enum AppEventType {\r\n    ClickedOnNotification = 'CLICKED_ON_NOTIFICATION',\r\n    SocketEvent = 'SOCKET_EVENT',\r\n}","/**\r\n * Enum representing the different types of glue operators \r\n * that can be used to combine filters.\r\n */\r\nexport enum FilterGlue {\r\n    /**\r\n     * Indicates that the filters should be combined using a logical AND.\r\n     */\r\n    AND = '+',\r\n\r\n    /**\r\n     * Indicates that the filters should be combined using a logical OR.\r\n     */\r\n    OR = '|',\r\n}","export enum FilterOperator {\r\n    None = '',\r\n    NotEqual = '!=',\r\n    Not = '!',\r\n    NotEqualAlt = '<>',\r\n    GreaterThanOrEqual = '>=',\r\n    GreaterThan = '>',\r\n    LessThanOrEqual = '<=',\r\n    LessThan = '<',\r\n    StartsWith = '^',\r\n    EndsWith = '$',\r\n    Contains = '~'\r\n}","export enum Salutation {\r\n\tUnknown,\r\n\tFemale,\r\n\tMale,\r\n\tCompany,\r\n\tOthers\r\n}","import { endpointMetadataKey, headerMetadataKey } from \"../constants/constants\";\r\n\r\n/**\r\n * Property decorator to add display name to a property\r\n * @param name \r\n * @returns \r\n */\r\nexport function Display(name: string): Function {\r\n    return function (target: any, propertyKey: string) {\r\n        Reflect.defineMetadata(headerMetadataKey, name, target, propertyKey);\r\n    };\r\n}\r\n\r\n/**\r\n * Class decorator to add endpoint to an entity\r\n * @param endpoint \r\n * @returns \r\n */\r\nexport function Api(endpoint: string): Function {\r\n    return function (target: Function) {\r\n        Reflect.defineMetadata(endpointMetadataKey, endpoint, target);\r\n    };\r\n}","import { endpointMetadataKey, headerMetadataKey } from \"../constants/constants\";\r\n\r\n/**\r\n * Gets the endpoint metadata from a class decorated with @Api.\r\n * \r\n * @param origin - The class from which to retrieve the endpoint metadata.\r\n * @returns The endpoint as a string.\r\n */\r\nexport function getEndpoint(origin: object): string {\r\n    /* Retrieve and return the endpoint metadata associated with the given class */\r\n    return Reflect.getMetadata(endpointMetadataKey, origin);\r\n}\r\n\r\n/**\r\n * Gets the display header metadata from a class.\r\n * \r\n * @param origin - The class from which to retrieve the header metadata.\r\n * @returns The display header as a string.\r\n */\r\nexport function getDisplay(origin: object): string {\r\n    /* Retrieve and return the display header metadata associated with the given class */\r\n    return Reflect.getMetadata(headerMetadataKey, origin);\r\n}\r\n","import { Directive } from \"@angular/core\";\r\n\r\n//@dynamic\r\n@Directive()\r\nexport abstract class AppStorage {\r\n\r\n    /**\r\n     * Gets storage key\r\n     * @param key \r\n     */\r\n    public static getKey = (key: string) => `${key}`;\r\n\r\n    /**\r\n     * Sets a string from localStorage\r\n     * @param key The key of the item to store\r\n     * @param value The value to store\r\n     */\r\n    public static setString = (key: string, value: string) => localStorage.setItem(AppStorage.getKey(key), value);\r\n\r\n    /**\r\n     * Gets a string from localStorage\r\n     * @param key The key of the item\r\n     */\r\n    public static getString = (key: string): string | null => localStorage.getItem(AppStorage.getKey(key));\r\n\r\n    /**\r\n     * Sets an object from localStorage\r\n     * @param key The key of the item to store\r\n     * @param value The value to store\r\n     */\r\n    public static setObject = (key: string, value: any) => {\r\n        try {\r\n            AppStorage.setString(key, JSON.stringify(value));\r\n        } catch (error) {\r\n            console.warn(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets an object from localStorage\r\n     * @param key The key of the item to store\r\n     * @param value The value to store\r\n     */\r\n    public static setObjectEncoded = (key: string, value: any) => {\r\n        try {\r\n            AppStorage.setString(key, btoa(JSON.stringify(value)));\r\n        } catch (error) {\r\n            console.warn(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets an object from localStorage\r\n     * @param key The key of the item\r\n     */\r\n    public static getObject = (key: string, defaultValue?: any): any => {\r\n        try {\r\n            return JSON.parse(AppStorage.getString(key) ?? '{}') || defaultValue;\r\n        } catch (error) {\r\n            return defaultValue;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets an object from localStorage\r\n     * @param key The key of the item\r\n     */\r\n    public static getObjectEncoded = (key: string, defaultValue?: any): any => {\r\n        try {\r\n            return JSON.parse(atob(AppStorage.getString(key) ?? '{}')) || defaultValue;\r\n        } catch (error) {\r\n            return defaultValue;\r\n        }\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class DynamicComponentCompiler {\r\n    // /**\r\n    //  * Compiles and interpolate the specified html\r\n    //  * @param html \r\n    //  * @returns \r\n    //  */\r\n    // //@dynamic\r\n    // public static compileHtml(viewContainerRef: ViewContainerRef, html: string, data: any): any {\r\n    //     /* Instantiate a single component and inserts its host view into this container */\r\n    //     const componentRef = viewContainerRef.createComponent(this.createDummyComponent(html));\r\n\r\n    //     /* Add properties to the component */\r\n    //     // componentRef.instance.data = data;\r\n    //     Object.assign(componentRef.instance, data);\r\n\r\n    //     /* Check this view and its children */\r\n    //     componentRef.changeDetectorRef.detectChanges();\r\n\r\n    //     return componentRef.hostView;\r\n\r\n    // }\r\n\r\n    // /**\r\n    //  * Creates a dynamic dummy component\r\n    //  * @param template \r\n    //  * @returns \r\n    //  */\r\n    // //@dynamic\r\n    // private static createDummyComponent(template: string): Type<any> {\r\n    //     @Component({ selector: 'vd-dummy-component', template: template })\r\n    //     class FakeComponent { };\r\n    //     return FakeComponent;\r\n    // }\r\n}","import { AppEventType } from \"../enums/app-event-type\";\r\n\r\n/**\r\n * Represents an application event with a specified type and associated payload.\r\n * Used for event-driven communication within the application.\r\n * \r\n * @template T The type of the payload associated with the event.\r\n */\r\nexport class AppEvent<T> {\r\n    /**\r\n     * Constructor to initialize the event type and payload.\r\n     * \r\n     * @param type The type of the event, represented by the `AppEventType` enum.\r\n     * @param payload The data or payload associated with the event.\r\n     */\r\n    constructor(public type: AppEventType, public payload: T,) { }\r\n}","export enum Grid {\r\n    All,\r\n    Xs,\r\n    Sm,\r\n    Md,\r\n    Lg,\r\n    Xl,\r\n    Xxl,\r\n    None\r\n}","export const tableDefinitionMetadataKey = 'custom:vdTableDefinition';\r\nexport const tableColumnsMetadataKey = 'custom:vdTableColumns';","export enum TableColumnType {\r\n    None,\r\n    Checkbox,\r\n    Text,\r\n    TextInput,\r\n    Number,\r\n    Select,\r\n    Enum,\r\n    Toggle,\r\n    Date,\r\n    Action,\r\n    Menu,\r\n    Icon,\r\n    IconButton\r\n}","import { FormGroup } from \"@angular/forms\";\r\nimport { IGenericListComponent } from \"../../base/interfaces/igeneric-list-component\";\r\nimport { FilterOperator } from \"../../common/enums/filter-operator\";\r\nimport { ActionItem } from \"../../common/models/action-item\";\r\nimport { EnumMetadata } from \"../../common/models/enum-metadata\";\r\nimport { Icon } from \"../../common/models/icon\";\r\nimport { Grid } from \"../enums/grid\";\r\nimport { TableColumnType } from \"../enums/table-column-type\";\r\n\r\nexport class TableColumn<TEntity = any> {\r\n    /**\r\n     * Indicates whether the arrow should be displayed before the column name.\r\n     * @property\r\n     */\r\n    public arrowBefore?: boolean;\r\n\r\n    /**\r\n     * Function to determine cell classes dynamically.\r\n     * @property\r\n     */\r\n    public cellNgClass?: Function;\r\n\r\n    /**\r\n     * Callback function invoked on change.\r\n     * @property\r\n     */\r\n    public change?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Indicates if the column is configurable.\r\n     * @property\r\n     */\r\n    public configurable?: boolean = true;\r\n\r\n    /**\r\n     * Function to determine cell content dynamically.\r\n     * @property\r\n     */\r\n    public content?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Maximum length of the cell content.\r\n     * @property\r\n     */\r\n    public contentLength?: number;\r\n\r\n    /**\r\n     * Function to disable the column dynamically.\r\n     * @property\r\n     */\r\n    public disable?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Indicates whether the column is disabled.\r\n     * @property\r\n     */\r\n    public disabled?: boolean;\r\n\r\n    /**\r\n     * The display grid for the column.\r\n     * @property\r\n     */\r\n    public display?: Grid;\r\n\r\n    /**\r\n     * Endpoint for additional data retrieval.\r\n     * @property\r\n     */\r\n    public endpoint?: string;\r\n\r\n    /**\r\n     * Function to filter enums dynamically.\r\n     * @property\r\n     */\r\n    public enumFilter?: (x: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Prefix for enum types.\r\n     * @property\r\n     */\r\n    public enumPrefix?: string;\r\n\r\n    /**\r\n     * The type of enum.\r\n     * @property\r\n     */\r\n    public enumType?: any;\r\n\r\n    /**\r\n     * Metadata for enum types.\r\n     * @property\r\n     */\r\n    public enumMetadata?: { [key in any]: EnumMetadata };\r\n\r\n    /**\r\n     * Event triggered by the column.\r\n     * @property\r\n     */\r\n    public event?: ((x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any) | string;\r\n\r\n    /**\r\n     * Arguments for the event.\r\n     * @property\r\n     */\r\n    public eventArgs?: any;\r\n\r\n    /**\r\n     * Filter value for the column.\r\n     * @property\r\n     */\r\n    public filter?: string | string[];\r\n\r\n    /**\r\n     * Indicates whether the filter input accepts only numbers.\r\n     * @property\r\n     */\r\n    public filterInputNumber?: boolean;\r\n\r\n    /**\r\n     * Operator for filtering.\r\n     * @property\r\n     */\r\n    public filterOperator?: FilterOperator = FilterOperator.None;\r\n\r\n    /**\r\n     * Text to display for filter options.\r\n     * @property\r\n     */\r\n    public filterOptionText?: string;\r\n\r\n    /**\r\n     * @property filterTooltip\r\n     * @description Tooltip for the filter input.\r\n     * @type {(ctx?: IGenericListComponent<TEntity>) => any}\r\n     */\r\n    public filterTooltip?: (ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * @property filterTooltipClass\r\n     * @description CSS class for the filter tooltip.\r\n     * @type {string}\r\n     */\r\n    public filterTooltipClass?: string;\r\n\r\n    /**\r\n     * The header text for the column.\r\n     * @property\r\n     */\r\n    public header?: ((ctx?: IGenericListComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Indicates whether the column is hidden.\r\n     * @property\r\n     */\r\n    public hidden?: boolean;\r\n\r\n    /**\r\n     * Function to hide the column dynamically.\r\n     * @property\r\n     */\r\n    public hide?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Icon button configuration for the column.\r\n     * @property\r\n     */\r\n    public iconButton?: ActionItem<TEntity, IGenericListComponent<TEntity>>;\r\n\r\n    /**\r\n     * Icon configuration for the column.\r\n     * @property\r\n     */\r\n    public icon?: Icon<TEntity, IGenericListComponent<TEntity>>;\r\n\r\n    /**\r\n     * The index of the column.\r\n     * @property\r\n     */\r\n    public index?: number;\r\n\r\n    /**\r\n     * Used to display specific columns in the table.\r\n     * This array defines sets of columns that can be shown\r\n     * based on the active configuration, allowing for dynamic table\r\n     * column customization.\r\n     * @property\r\n     */\r\n    public columnSets?: string[];\r\n\r\n    /**\r\n     * Function to determine the maximum input value.\r\n     * @property\r\n     */\r\n    public inputMax?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Function to determine the minimum input value.\r\n     * @property\r\n     */\r\n    public inputMin?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * The type of input for the column.\r\n     * @property\r\n     */\r\n    public inputType?: string;\r\n\r\n    /**\r\n     * The maximum width of the column.\r\n     * @property\r\n     */\r\n    public maxWidth?: number;\r\n\r\n    /**\r\n     * The unit of the maximum width (e.g., 'px', '%').\r\n     * @property\r\n     */\r\n    public maxWidthUnit?: string;\r\n\r\n    /**\r\n     * Menu configuration for the column.\r\n     * @property\r\n     */\r\n    public menu?: ActionItem<TEntity, IGenericListComponent<TEntity>>;\r\n\r\n    /**\r\n     * The minimum width of the column.\r\n     * @property\r\n     */\r\n    public minWidth?: number;\r\n\r\n    /**\r\n     * The unit of the minimum width (e.g., 'px', '%').\r\n     * @property\r\n     */\r\n    public minWidthUnit?: string;\r\n\r\n    /**\r\n     * Indicates whether multiple selections are allowed.\r\n     * @property\r\n     */\r\n    public multiple?: boolean = false;\r\n\r\n    /**\r\n     * The name of the column.\r\n     * @property\r\n     */\r\n    public name: string = '';\r\n\r\n    /**\r\n     * Indicates whether only numbers are allowed for input.\r\n     * @property\r\n     */\r\n    public onlyNumber?: boolean;\r\n\r\n    /**\r\n     * Options for the column.\r\n     * @property\r\n     */\r\n    public options?: { id: any, name: string }[];\r\n\r\n    /**\r\n     * Flag to indicate whether a default option should be included.\r\n     * @property\r\n     */\r\n    public defaultOption?: boolean = true;\r\n\r\n    /**\r\n     * Properties (navigations) to include in the PATCH operation.\r\n     * @property\r\n     */\r\n    public patchIncludes?: string[];\r\n\r\n    /**\r\n     * Items for the row menu of the column.\r\n     * @property\r\n     */\r\n    public rowMenuItems?: ActionItem<TEntity, IGenericListComponent<TEntity>>[];\r\n\r\n    /**\r\n     * Indicates whether to display dates in short format.\r\n     * @property\r\n     */\r\n    public shortDate?: boolean;\r\n\r\n    /**\r\n     * The property to sort the column by.\r\n     * @property\r\n     */\r\n    public sortBy?: string;\r\n\r\n    /**\r\n     * Indicates whether the column should be sticky.\r\n     * @property\r\n     */\r\n    public sticky?: boolean;\r\n\r\n    /**\r\n     * Indicates whether the column should be sticky at the end.\r\n     * @property\r\n     */\r\n    public stickyEnd?: boolean;\r\n\r\n    /**\r\n     * Function to determine the tooltip content dynamically.\r\n     * @property\r\n     */\r\n    public tooltip?: (x?: TEntity, f?: FormGroup, ctx?: IGenericListComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * The CSS class for the tooltip.\r\n     * @property\r\n     */\r\n    public tooltipClass?: string;\r\n\r\n    /**\r\n     * The type of the table column.\r\n     * @property\r\n     */\r\n    public type?: TableColumnType;\r\n\r\n    /**\r\n     * The width of the column.\r\n     * @property\r\n     */\r\n    public width?: number;\r\n\r\n    /**\r\n     * The unit of the column width (e.g., 'px', '%').\r\n     * @property\r\n     */\r\n    public widthUnit?: string;\r\n\r\n    /**\r\n     * Constructor for the TableColumn class.\r\n     * @constructor\r\n     * @param init - Partial initialization data for the TableColumn.\r\n     */\r\n    public constructor(init?: Partial<TableColumn<TEntity>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}\r\n","import { IGenericListComponent } from \"../../base/interfaces/igeneric-list-component\";\r\nimport { ActionItem } from \"../../common/models/action-item\";\r\nimport { TableColumn } from \"./table-column\";\r\n\r\n/**\r\n * Class representing the structure and behavior of a table definition.\r\n * It defines various configurations such as column settings, actions, \r\n * and callbacks for rows and data handling.\r\n *\r\n * @template T - The type of data represented in the table rows.\r\n */\r\nexport class TableDefinition<T = any> {\r\n    /**\r\n     * @property endpoint\r\n     * @description API endpoint from which table data will be fetched.\r\n     * @type {string}\r\n     */\r\n    public endpoint: string = '';\r\n\r\n    /**\r\n     * @property projection\r\n     * @description Optional projection for specifying which fields should be included \r\n     * in the fetched data. Can be a single string or an array of field names.\r\n     * @type {string | string[]}\r\n     */\r\n    public projection?: string | string[];\r\n\r\n    /**\r\n     * @property includes\r\n     * @description Optional array of related data entities (includes) to be retrieved along \r\n     * with the main data set.\r\n     * @type {string[]}\r\n     */\r\n    public includes?: string[];\r\n\r\n    /**\r\n     * @property showAction\r\n     * @description Flag to indicate if action columns (e.g., edit, delete buttons) \r\n     * should be displayed in the table. Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public showAction?: boolean = true;\r\n\r\n    /**\r\n     * @property selectable\r\n     * @description Flag to indicate if rows can be selected (e.g., with checkboxes).\r\n     * Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public selectable?: boolean = true;\r\n\r\n    /**\r\n     * @property addable\r\n     * @description Flag to indicate if new items can be added to the table.\r\n     * Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public addable?: boolean = true;\r\n\r\n    /**\r\n     * @property editable\r\n     * @description Flag to indicate if rows can be edited. Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public editable?: boolean = true;\r\n\r\n    /**\r\n     * @property deletable\r\n     * @description Flag to indicate if rows can be deleted. Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public deletable?: boolean = true;\r\n\r\n    /**\r\n     * @property downloadable\r\n     * @description Flag to indicate if table data can be downloaded (e.g., as CSV or Excel).\r\n     * @type {boolean}\r\n     */\r\n    public downloadable?: boolean;\r\n\r\n    /**\r\n     * @property duplicable\r\n     * @description Flag to indicate if rows can be duplicated.\r\n     * @type {boolean}\r\n     */\r\n    public duplicable?: boolean;\r\n\r\n    /**\r\n     * @property exportable\r\n     * @description Determines if the table is exportable.\r\n     * @type {boolean}\r\n     */\r\n    public exportable: boolean = true;\r\n\r\n    /**\r\n     * @property exportFileName\r\n     * @description The name of the file to export.\r\n     * @type {string}\r\n     */\r\n    public exportFileName?: string;\r\n\r\n    /**\r\n     * @property sticky\r\n     * @description Flag to indicate whether the table headers or columns should stick \r\n     * to the viewport during scrolling. Defaults to `false`.\r\n     * @type {boolean}\r\n     */\r\n    public sticky: boolean = false;\r\n\r\n    /**\r\n     * @property columns\r\n     * @description Array of table columns that define the structure and data types \r\n     * of each column in the table.\r\n     * @type {TableColumn<T>[]}\r\n     */\r\n    public columns?: TableColumn<T>[] = [];\r\n\r\n    /**\r\n     * @property hideColumns\r\n     * @description Optional array of column keys that should be hidden from view.\r\n     * @type {string[]}\r\n     */\r\n    public hideColumns?: string[];\r\n\r\n    /**\r\n     * @property rowNgClass\r\n     * @description Function to dynamically assign CSS classes to rows based on the row data \r\n     * and context. Can be used for conditional row styling.\r\n     * @type {(x?: T, ctx?: IGenericListComponent<T>) => any}\r\n     */\r\n    public rowNgClass?: (x?: T, ctx?: IGenericListComponent<T>) => any;\r\n\r\n    /**\r\n     * @property rowClick\r\n     * @description Callback function for handling row click events. \r\n     * Invoked when a row is clicked.\r\n     * @type {(x?: T, ctx?: IGenericListComponent<T>) => any}\r\n     */\r\n    public rowClick?: (x?: T, ctx?: IGenericListComponent<T>) => any;\r\n\r\n    /**\r\n     * @property onEdit\r\n     * @description Callback function for handling edit actions. \r\n     * Invoked when the edit button is clicked for a row.\r\n     * @type {(x?: T, ctx?: IGenericListComponent<T>) => any}\r\n     */\r\n    public onEdit?: (x?: T, ctx?: IGenericListComponent<T>) => any;\r\n\r\n    /**\r\n     * @property detailsTemplate\r\n     * @description Name of the template to use for displaying additional row details.\r\n     * @type {string}\r\n     */\r\n    public detailsTemplate?: string;\r\n\r\n    /**\r\n     * @property actions\r\n     * @description Array of action items (e.g., custom buttons) available for each row in the table.\r\n     * Actions can be context-sensitive based on the row data and table context.\r\n     * @type {ActionItem<T, IGenericListComponent<T>>[]}\r\n     */\r\n    public actions?: ActionItem<T, IGenericListComponent<T>>[] = [];\r\n\r\n    /**\r\n     * @property columnSets\r\n     * @description Used to display specific columns in the table.\r\n     * This array defines sets of columns that can be shown\r\n     * based on the active configuration, allowing for dynamic table\r\n     * column customization.\r\n     * @type {string[]}\r\n     */\r\n    public columnSets?: string[] = [];\r\n\r\n    /**\r\n     * Constructor for initializing the table definition with optional values.\r\n     * Merges the provided initialization object with default properties.\r\n     *\r\n     * @param init - Optional partial table definition to initialize values.\r\n     */\r\n    public constructor(init?: Partial<TableDefinition<T>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import \"reflect-metadata\";\r\nimport { endpointMetadataKey } from \"../../common/constants/constants\";\r\nimport { Utils } from \"../../common/functions/utils\";\r\nimport { tableColumnsMetadataKey, tableDefinitionMetadataKey } from \"../constants/constants\";\r\nimport { TableColumn } from \"../models/table-column\";\r\nimport { TableDefinition } from \"../models/table-definition\";\r\n\r\n/**\r\n * Gets classes decoarated with @Table\r\n * @param origin \r\n * @returns \r\n */\r\nexport function getTableDefinition(origin: object): TableDefinition {\r\n    /* Save the table defintion in the metadata */\r\n    var tableDefinition: TableDefinition = Reflect.getMetadata(tableDefinitionMetadataKey, origin) ?? new TableDefinition({});\r\n    if (tableDefinition) {\r\n        /* Set column in the table definition */\r\n        tableDefinition.columns = Reflect.getMetadata(tableColumnsMetadataKey, Reflect.construct(origin as any, []))\r\n            ?.filter((x: TableColumn) => !x.hidden && !tableDefinition.hideColumns?.some(y => y.trim() == x.name.trim()));\r\n\r\n        /* Sort the columns by index */\r\n        Utils.sortArray(tableDefinition.columns || [], 'index');\r\n\r\n        /* Set endpoint from the decorator @Api, if any */\r\n        var endpoint = Reflect.getMetadata(endpointMetadataKey, origin);\r\n        if (endpoint) {\r\n            tableDefinition.endpoint = endpoint;\r\n        }\r\n    }\r\n\r\n    return tableDefinition;\r\n}","import \"reflect-metadata\";\r\nimport { headerMetadataKey } from \"../../common/constants/constants\";\r\nimport { FilterOperator } from \"../../common/enums/filter-operator\";\r\nimport { Utils } from \"../../common/functions/utils\";\r\nimport { tableColumnsMetadataKey, tableDefinitionMetadataKey } from \"../constants/constants\";\r\nimport { Grid } from \"../enums/grid\";\r\nimport { TableColumnType } from \"../enums/table-column-type\";\r\nimport { TableColumn } from \"../models/table-column\";\r\nimport { TableDefinition } from \"../models/table-definition\";\r\nimport { getTableDefinition } from \"./functions\";\r\n\r\n/**\r\n * Class decorator to create a mat-table\r\n * @param tableDefinition \r\n * @returns \r\n */\r\nexport function Table<T = any>(tableDefinition?: Partial<TableDefinition<T>>): Function {\r\n    return function (target: Function) {\r\n        if (tableDefinition?.columns) {\r\n            /* Add action menus from table definition, if any */\r\n            var actionColmun = tableDefinition.columns?.find(x => x.name == 'action');\r\n            if (!actionColmun) {\r\n                actionColmun = new TableColumn({\r\n                    index: 2000,\r\n                    name: 'action',\r\n                    columnSets: ['action', 'common'],\r\n                    type: TableColumnType.Action,\r\n                    disabled: true,\r\n                    rowMenuItems: actions,\r\n                    configurable: false,\r\n                    stickyEnd: true\r\n                });\r\n\r\n                /* Add the action column into the table columns */\r\n                tableDefinition.columns.push(actionColmun);\r\n            }\r\n\r\n            /* Get custom action, if any */\r\n            var actions = tableDefinition?.actions;\r\n            if (actions != null && actionColmun != null) {\r\n                actionColmun.rowMenuItems ??= [];\r\n                actions.forEach(y => actionColmun!.rowMenuItems!.push(y));\r\n            }\r\n        }\r\n\r\n        /* Save the table defintion in the metadata */\r\n        Reflect.defineMetadata(tableDefinitionMetadataKey, tableDefinition, target);\r\n    };\r\n}\r\n\r\n/**\r\n * Property decorator to create table columns\r\n * @param args \r\n * @returns \r\n */\r\nexport function Column<T = any>(args?: Partial<TableColumn<T>>): Function {\r\n    return function (target: any, propertyKey: string) {\r\n        let tableColumn = new TableColumn(args);\r\n\r\n        tableColumn.name ||= propertyKey;\r\n        tableColumn.header ||= Reflect.getMetadata(headerMetadataKey, target, propertyKey) || tableColumn.name;\r\n        tableColumn.filter ||= tableColumn.name;\r\n        tableColumn.sortBy ||= tableColumn.name;\r\n        tableColumn.content ||= (row: any) => {\r\n            /* Get content using property name */\r\n            var content = Utils.getPropertyValue<any>(row, tableColumn.name);\r\n\r\n            /* Truncate the text if content length is specified */\r\n            if ((tableColumn?.contentLength ?? 0) > 0) {\r\n                return Utils.truncateText(content, tableColumn!.contentLength!);\r\n            }\r\n\r\n            return content;\r\n        };\r\n        tableColumn.configurable = args?.configurable === undefined ? true : args.configurable;\r\n        tableColumn.display ||= Grid.All;\r\n\r\n        /* Set type to 'Menu' if menu is specified */\r\n        if (tableColumn.menu) {\r\n            tableColumn.type ||= TableColumnType.Menu;\r\n        }\r\n\r\n        /* Set type to 'Icon' if icon is specified */\r\n        else if (tableColumn.icon) {\r\n            tableColumn.type ||= TableColumnType.Icon;\r\n        }\r\n\r\n        /* Set type to 'IconButton' if iconButton is specified */\r\n        else if (tableColumn.iconButton) {\r\n            tableColumn.type ||= TableColumnType.IconButton;\r\n        }\r\n\r\n        /* Set type to enum, if enum type is specified */\r\n        else if (tableColumn.enumType) {\r\n            tableColumn.type ||= TableColumnType.Enum;\r\n            tableColumn.multiple = Reflect.getMetadata(\"design:type\", target, propertyKey)?.name?.trim()?.toLowerCase() == 'array';\r\n        }\r\n\r\n        /* Otherwiese, set type depending on property type */\r\n        else {\r\n            /* Get property type */\r\n            var propertyType: string = Reflect.getMetadata(\"design:type\", target, propertyKey)?.name;\r\n            switch (propertyType?.toLowerCase()) {\r\n                case 'number':\r\n                    tableColumn.inputType ||= 'number';\r\n                    tableColumn.type ||= TableColumnType.Number;\r\n                    tableColumn.filterOperator = tableColumn.filterOperator != undefined ? tableColumn.filterOperator : FilterOperator.Contains;\r\n                    break;\r\n\r\n                case 'date':\r\n                    tableColumn.inputType ||= 'date';\r\n                    tableColumn.type ||= TableColumnType.Date;\r\n                    tableColumn.maxWidth ||= 115;\r\n                    tableColumn.arrowBefore = tableColumn.arrowBefore !== undefined ? tableColumn.arrowBefore : true;\r\n                    break;\r\n\r\n                case 'boolean':\r\n                    tableColumn.type ||= TableColumnType.Toggle;\r\n                    tableColumn.options ||= [{ id: false, name: $localize`:@@no:No` }, { id: true, name: $localize`:@@yes:Yes` }];\r\n                    tableColumn.maxWidth ||= 70;\r\n\r\n                    if (tableColumn.type == TableColumnType.Text) {\r\n                        tableColumn.content = (row: any) => {\r\n                            /* Get content using property name */\r\n                            var content = Utils.getPropertyValue<boolean>(row, tableColumn.name);\r\n                            if (content != null) {\r\n                                return content ? $localize`:@@yes:Yes` : $localize`:@@no:No`;\r\n                            }\r\n\r\n                            return null;\r\n                        };\r\n                    }\r\n\r\n                    break;\r\n\r\n                default:\r\n                    tableColumn.type ||= TableColumnType.Text;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        if (tableColumn.maxWidth) {\r\n            tableColumn.width ||= tableColumn.maxWidth;\r\n        }\r\n\r\n        /* Get old table columns */\r\n        let previousTableColumns: TableColumn<T>[] = Reflect.getMetadata(tableColumnsMetadataKey, target);\r\n\r\n        /* Override the field, if exists */\r\n        previousTableColumns = previousTableColumns?.filter(x => x.name != tableColumn.name);\r\n\r\n        /* Create a copy of the result */\r\n        let tableColumns = previousTableColumns ? previousTableColumns.concat([tableColumn]) : [tableColumn];\r\n\r\n        /* Set column index */\r\n        tableColumns.forEach((x, i) => x.index ??= i);\r\n\r\n        /* Sort the columns by index */\r\n        Utils.sortArray(tableColumns, 'index');\r\n\r\n        /* Override the result in the metadata */\r\n        Reflect.defineMetadata(tableColumnsMetadataKey, tableColumns, target);\r\n    };\r\n}\r\n\r\n/**\r\n * Decorator function to define columns for a table object.\r\n * @param type The constructor function of the table object.\r\n * @returns A decorator function.\r\n */\r\nexport function ColumnObject<T = any>(type: { new(): T }): Function {\r\n    return function (target: any, propertyKey: string) {\r\n        /* Retrieve table definition */\r\n        var tableDef = getTableDefinition(type);\r\n\r\n        /* Retrieve columns from the table definition */\r\n        var columns = tableDef.columns;\r\n\r\n        /* Update column names with property key prefix */\r\n        columns?.forEach(x => x.name = `${propertyKey}.${x.name}`);\r\n\r\n        /* Get existing table columns from metadata */\r\n        let previousTableColumns: TableColumn<T>[] = Reflect.getMetadata(tableColumnsMetadataKey, target);\r\n\r\n        /* Create a copy of the existing columns array and append new columns */\r\n        let tableColumns = previousTableColumns ? previousTableColumns.concat(columns ?? []) : [];\r\n\r\n        /* Set column index if not already set */\r\n        tableColumns.forEach((x, i) => x.index ??= i);\r\n\r\n        /* Sort the columns by index */\r\n        Utils.sortArray(tableColumns, 'index');\r\n\r\n        /* Override the table columns in the metadata */\r\n        Reflect.defineMetadata(tableColumnsMetadataKey, tableColumns, target);\r\n    }\r\n}","import { prop } from \"../../form-validators/decorators/prop.decorator\";\r\nimport { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { IEntity } from \"./entity\";\r\n\r\n/**\r\n * Abstract class representing a base entity with common properties and functionality.\r\n */\r\nexport abstract class BaseEntity implements IEntity {\r\n    /**\r\n     * @property ID\r\n     * @description Represents the unique identifier of the entity.\r\n     * @type {number}\r\n     */\r\n    @Column({\r\n        filterOperator: FilterOperator.Contains,\r\n        index: 1100,\r\n        columnSets: ['base', 'common'],\r\n        header: $localize`:@@id:ID`,\r\n        arrowBefore: true\r\n    })\r\n    @prop()\r\n    public id?: number;\r\n\r\n    /**\r\n     * @property Version\r\n     * @description Represents the version number of the entity for concurrency control.\r\n     * @type {number}\r\n     */\r\n    public version?: number;\r\n\r\n    /**\r\n     * Constructor to initialize properties of the base entity.\r\n     * @param init Partial object containing initial property values.\r\n     */\r\n    public constructor(init?: Partial<BaseEntity>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { Grid } from \"../../table/enums/grid\";\r\nimport { Column } from \"../../table/functions/decorators\";\r\nimport { BaseEntity } from \"./base-entity\";\r\n\r\n/**\r\n * Abstract class extending the base entity with audit-related properties.\r\n * Includes information about entity creation and updates.\r\n */\r\nexport abstract class AuditEntity extends BaseEntity {\r\n    /**\r\n     * @property Created By\r\n     * @description Specifies the username or identifier of the user who created the entity.\r\n     * @type {string}\r\n     */\r\n    public createdBy?: string;\r\n\r\n    /**\r\n     * @property Created Date\r\n     * @description Specifies the date and time when the entity was created.\r\n     * @type {Date}\r\n     */\r\n    @Column({\r\n        index: 1000,\r\n        columnSets: ['audit', 'common'],\r\n        header: $localize`:@@createdDate:Created date`,\r\n        arrowBefore: true,\r\n        display: Grid.Sm\r\n    })\r\n    public createdDate?: Date;\r\n\r\n    /**\r\n     * @property Updated By\r\n     * @description Specifies the username or identifier of the user who last updated the entity.\r\n     * @type {string}\r\n     */\r\n    public updatedBy?: string;\r\n\r\n    /**\r\n     * @property Updated Date\r\n     * @description Specifies the date and time when the entity was last updated.\r\n     * @type {Date}\r\n     */\r\n    public updatedDate?: Date;\r\n\r\n    /**\r\n     * Constructor to initialize properties of the audit entity.\r\n     * @param init Partial object containing initial property values.\r\n     */\r\n    public constructor(init?: Partial<AuditEntity>) {\r\n        super(init);\r\n        Object.assign(this, init);\r\n    }\r\n}","/**\r\n * Represents a user entity with audit-related information such as display name, email, and letter.\r\n */\r\nexport class AuditUser {\r\n\t/**\r\n\t * @property Display Name\r\n\t * @description The full name or preferred display name of the user.\r\n\t * @type {string}\r\n\t */\r\n\tpublic displayName?: string;\r\n\r\n\t/**\r\n\t * @property Email\r\n\t * @description The email address of the user.\r\n\t * @type {string}\r\n\t */\r\n\tpublic email?: string;\r\n\r\n\t/**\r\n\t * @property Letter\r\n\t * @description The first letter or an abbreviation associated with the user.\r\n\t * @type {string}\r\n\t */\r\n\tpublic letter?: string;\r\n}","/**\r\n * Represents a common error with a code and description.\r\n * Typically used to encapsulate error details for consistent error handling.\r\n */\r\nexport class CommonError {\r\n    /**\r\n     * @property Code\r\n     * @description The unique code identifying the type of error.\r\n     * @type {string}\r\n     */\r\n    public code: string;\r\n\r\n    /**\r\n     * @property Description\r\n     * @description A human-readable message providing details about the error.\r\n     * @type {string}\r\n     */\r\n    public description: string;\r\n\r\n    /**\r\n     * Constructs a new instance of the `CommonError` class.\r\n     * \r\n     * @param code The unique error code.\r\n     * @param description A descriptive message explaining the error.\r\n     */\r\n    constructor(code: string, description: string) {\r\n        this.code = code;\r\n        this.description = description;\r\n    }\r\n}","import { CommonError } from \"./common-error\";\r\nimport { ICommonHandlerContext } from \"./icommon-handler-context\";\r\n\r\n/**\r\n * Represents the context of a handler operation, including the operation result, success status, and associated errors.\r\n * \r\n * @typeparam TResult The type of the result encapsulated by the context.\r\n */\r\nexport class CommonHandlerContext<TResult> implements ICommonHandlerContext<TResult> {\r\n    /**\r\n     * @property Errors\r\n     * @description A collection of errors that occurred during the operation. Empty if the operation succeeded.\r\n     * @type {CommonError[]}\r\n     */\r\n    public errors: CommonError[] = [];\r\n\r\n    /**\r\n     * @property Result\r\n     * @description The result of the operation. Its value depends on the success or failure of the operation.\r\n     * @type {TResult}\r\n     */\r\n    public result: TResult;\r\n\r\n    /**\r\n     * @property Has Succeeded\r\n     * @description Indicates whether the operation was successful. Defaults to `true`.\r\n     * @type {boolean}\r\n     */\r\n    public hasSucceeded: boolean = true;\r\n\r\n    /**\r\n     * Constructs a new instance of the `CommonHandlerContext` class.\r\n     * \r\n     * @param result The initial result of the operation.\r\n     */\r\n    constructor(result: TResult) {\r\n        this.result = result;\r\n    }\r\n\r\n    /**\r\n     * Marks the operation as failed and appends the provided errors to the `errors` property.\r\n     * \r\n     * @param errors An optional array of `CommonError` instances that provide details about why the operation failed.\r\n     * @returns The current instance of `CommonHandlerContext` with the failure status and errors updated.\r\n     */\r\n    public fail(...errors: CommonError[]): this {\r\n        this.errors.push(...errors);\r\n        this.hasSucceeded = false;\r\n        return this;\r\n    }\r\n}","import { Grid } from \"../../table/enums/grid\";\r\nimport { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { Display } from \"../functions/decorators\";\r\n\r\n/**\r\n * Represents a projection of an entity with display name, number, and ID properties.\r\n * This class is typically used to define how these properties are displayed and filtered in a table/grid.\r\n */\r\nexport class DisplayNameNumberProjection {\r\n    /**\r\n     * @property Display Name\r\n     * @description The name to display in the grid or UI. It is optional and localized using `@Display`.\r\n     * @type {string}\r\n     */\r\n    @Column({})\r\n    @Display($localize`:@@name:Name`)\r\n    public displayName?: string;\r\n\r\n    /**\r\n     * @property Number\r\n     * @description A numeric value associated with the entity, displayed in the grid.\r\n     * Includes filtering options and a medium grid display configuration.\r\n     * @type {number}\r\n     */\r\n    @Column({\r\n        index: 10,\r\n        filterOperator: FilterOperator.Contains,\r\n        maxWidth: 90,\r\n        display: Grid.Md\r\n    })\r\n    @Display($localize`:@@number:Number`)\r\n    public number?: number;\r\n\r\n    /**\r\n     * @property ID\r\n     * @description The unique identifier for the entity. Configured for filtering and sorting.\r\n     * The arrowBefore property ensures proper column sorting behavior in grids.\r\n     * @type {number}\r\n     */\r\n    @Column({\r\n        filterOperator: FilterOperator.Contains,\r\n        index: 1100,\r\n        arrowBefore: true\r\n    })\r\n    @Display($localize`:@@id:ID`)\r\n    public id?: number;\r\n}","import { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { Display } from \"../functions/decorators\";\r\n\r\n/**\r\n * Represents a projection for displaying an entity's name and ID properties.\r\n * This class is typically used in grid or table views to manage how these properties are displayed and filtered.\r\n */\r\nexport class DisplayNameProjection {\r\n    /**\r\n     * @property Display Name\r\n     * @description The name to display in the grid or UI. This property is localized using `@Display`.\r\n     * @type {string}\r\n     */\r\n    @Column({})\r\n    @Display($localize`:@@name:Name`)\r\n    public displayName?: string;\r\n\r\n    /**\r\n     * @property ID\r\n     * @description The unique identifier for the entity. Configured for filtering and sorting.\r\n     * The `arrowBefore` property ensures proper sorting behavior in grids.\r\n     * @type {number}\r\n     */\r\n    @Column({\r\n        filterOperator: FilterOperator.Contains,\r\n        index: 1100,\r\n        arrowBefore: true\r\n    })\r\n    @Display($localize`:@@id:ID`)\r\n    public id?: number;\r\n}","import { Icon } from \"./icon\";\r\n\r\n/**\r\n * Metadata class for enum values, containing display information, ordering, and other optional properties.\r\n * This class provides additional metadata for enum items, useful for customizing their presentation and behavior in the UI.\r\n */\r\nexport class EnumMetadata {\r\n    /**\r\n     * @property Display\r\n     * @description An optional display string associated with the enum value. This string can be used for user-friendly display in the UI.\r\n     * @type {string}\r\n     */\r\n    public display?: string;\r\n\r\n    /**\r\n     * @property Hint\r\n     * @description An optional hint string associated with the enum value. This string can be used to provide additional information or guidance in the UI.\r\n     * @type {string}\r\n     */\r\n    public hint?: string;\r\n\r\n    /**\r\n     * @property Icon\r\n     * @description An optional icon associated with the enum value. This can be used to visually represent the enum value in the UI.\r\n     * @type {Icon<any, any>}\r\n     */\r\n    public icon?: Icon<any, any>;\r\n\r\n    /**\r\n     * @property Text Color\r\n     * @description An optional text color associated with the enum value. This allows customization of the appearance of the value in the UI.\r\n     * @type {string}\r\n     */\r\n    public textColor?: string;\r\n\r\n    /**\r\n     * @property Order\r\n     * @description An optional order number used for sorting enum values. This helps in controlling the order in which enum items are displayed.\r\n     * @type {number}\r\n     */\r\n    public order?: number;\r\n\r\n    /**\r\n     * @property Disabled\r\n     * @description A flag indicating whether the enum value should be disabled in the UI. This can be useful for conditionally disabling enum items.\r\n     * @type {boolean}\r\n     */\r\n    public disabled?: boolean;\r\n\r\n    /**\r\n     * @property Disable\r\n     * @description An optional function that returns a boolean to conditionally disable the enum value based on runtime parameters.\r\n     *             For example, you can disable certain enum values depending on another enum's value or other context.\r\n     * @type {(context: any) =&gt; boolean}\r\n     */\r\n    public disable?: (context?: any) => boolean;\r\n\r\n    /**\r\n     * @property Hidden\r\n     * @description A flag indicating whether the enum value should be hidden from the UI. This can be useful for conditionally hiding enum items.\r\n     * @type {boolean}\r\n     */\r\n    public hidden?: boolean;\r\n\r\n    /**\r\n     * @property Hide\r\n     * @description An optional function that returns a boolean to conditionally hide the enum value based on runtime parameters.\r\n     *              For example, you can hide certain enum values depending on another enum's value.\r\n     * @type {(context: any) =&gt; boolean}\r\n     */\r\n    public hide?: (context?: any) => boolean;\r\n\r\n    /**\r\n     * Constructor to initialize the EnumMetadata class with optional values.\r\n     * @param init An optional partial object to initialize the properties of EnumMetadata.\r\n     */\r\n    public constructor(init?: Partial<EnumMetadata>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","/**\r\n * Represents an icon configuration for a table column.\r\n */\r\nexport class Icon<TEntity = any, TContext = any> {\r\n    /**\r\n     * Material icon name or function returning the icon dynamically.\r\n     */\r\n    public matIcon?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * SVG icon name or function returning the icon dynamically.\r\n     */\r\n    public svgIcon?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * Font icon name or function returning the icon dynamically.\r\n     */\r\n    public fontIcon?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * Icon color or a function that returns the color dynamically.\r\n     * If a function is provided, it takes optional parameters x and ctx.\r\n     */\r\n    public iconColor?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * Font set name for font icon.\r\n     */\r\n    public fontSet?: string = 'material-symbols-outlined';\r\n\r\n    /**\r\n     * CSS class name or function returning the class dynamically.\r\n     */\r\n    public cssClass?: ((x?: TEntity, ctx?: TContext) => any) | string;\r\n\r\n    /**\r\n     * Function to dynamically hide the icon.\r\n     */\r\n    public hide?: (x?: TEntity, ctx?: TContext, index?: number) => any;\r\n\r\n    /**\r\n     * Constructs a new instance of Icon.\r\n     * @param init Optional configuration object to initialize properties.\r\n     */\r\n    public constructor(init?: Partial<Icon<TEntity, TContext>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","export class KeyValue {\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tkey?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tvalue: any;\r\n}","import { AuditEntity } from \"./audit-entity\";\r\n\r\n/**\r\n * Represents an entity that can be modified, extending from the AuditEntity class.\r\n * This class adds additional properties to manage whether the entity is deletable or editable.\r\n */\r\nexport class ModifiableEntity extends AuditEntity {\r\n    /**\r\n     * @property isDeletable\r\n     * @description A flag indicating whether the entity can be deleted. \r\n     * This property helps determine if the entity is deletable in the UI or business logic.\r\n     * @type {boolean}\r\n     */\r\n    public isDeletable?: boolean;\r\n\r\n    /**\r\n     * @property isEditable\r\n     * @description A flag indicating whether the entity can be edited.\r\n     * This property helps determine if the entity is editable in the UI or business logic.\r\n     * @type {boolean}\r\n     */\r\n    public isEditable?: boolean;\r\n}","import { Grid } from \"../../table/enums/grid\";\r\nimport { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { Display } from \"../functions/decorators\";\r\n\r\nexport class NameNumberProjection {\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({})\r\n    @Display($localize`:@@name:Name`)\r\n    name?: string;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({ index: 10, maxWidth: 90, display: Grid.Md })\r\n    @Display($localize`:@@number:Number`)\r\n    number?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({ filterOperator: FilterOperator.Contains, index: 1100, arrowBefore: true })\r\n    @Display($localize`:@@id:ID`)\r\n    id?: number;\r\n}","import { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { Display } from \"../functions/decorators\";\r\n\r\nexport class NameProjection {\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({})\r\n    @Display($localize`:@@name:Name`)\r\n    name?: string;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({ filterOperator: FilterOperator.Contains, index: 1100, arrowBefore: true })\r\n    @Display($localize`:@@id:ID`)\r\n    id?: number;\r\n}","/**\r\n * Represents the permissions associated with an entity.\r\n */\r\nexport class Permission {\r\n    /**\r\n     * Indicates whether the entity can be created (optional, based on use case).\r\n     */\r\n    public canCreate: boolean = false;\r\n\r\n    /**\r\n     * Indicates whether the entity can be viewed.\r\n     */\r\n    public canRead: boolean = false;\r\n\r\n    /**\r\n     * Indicates whether the entity can be edited.\r\n     */\r\n    public canUpdate: boolean = false;\r\n\r\n    /**\r\n     * Indicates whether the entity can be deleted.\r\n     */\r\n    public canDelete: boolean = false;\r\n\r\n    /**\r\n     * Constructs a new instance of Permission.\r\n     * @param init Optional configuration object to initialize properties.\r\n     */\r\n    public constructor(init?: Partial<Permission>) {\r\n        Object.assign(this, init);\r\n    }\r\n}\r\n","export enum SaveAction {\r\n\tSaveAndClose,\r\n\tSaveAndNew,\r\n\tSaveAndEdit\r\n}","\r\nexport class SuffixButton<TEntity = any, TContext = any> {\r\n    /**\r\n     * @property\r\n     */\r\n    icon?: string;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    event?: (x?: TEntity, ctx?: TContext) => any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    hide?: (x?: TEntity, ctx?: TContext) => any;\r\n}","import { Column } from \"../../table/functions/decorators\";\r\nimport { FilterOperator } from \"../enums/filter-operator\";\r\nimport { Display } from \"../functions/decorators\";\r\n\r\nexport class TitleProjection {\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({})\r\n    @Display($localize`:@@title:Title`)\r\n    title?: string;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({ filterOperator: FilterOperator.Contains, index: 1100, arrowBefore: true })\r\n    @Display($localize`:@@id:ID`)\r\n    id?: number;\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * A custom Angular pipe to bind a function with a given context and arguments.\r\n */\r\n@Pipe({\r\n    name: 'bind'\r\n})\r\nexport class BindPipe implements PipeTransform {\r\n    /**\r\n     * Transforms the function to be bound with the specified context and arguments.\r\n     * \r\n     * @param fn The function to be bound. If it's not a function, the pipe returns undefined.\r\n     * @param context The context (`this`) to bind to the function.\r\n     * @param args Additional arguments to be pre-applied to the function.\r\n     * @returns A new function bound to the specified context with the provided arguments, or undefined if `fn` is not a function.\r\n     */\r\n    transform(fn: Function | undefined, context: any, ...args: any[]): any {\r\n        /* Check if the provided value is a function */\r\n        if (typeof fn === 'function') {\r\n            /* Return a new function bound to the provided context with the specified arguments */\r\n            return fn.bind(context, ...args);\r\n        }\r\n\r\n        /* Return undefined if the provided value is not a function */\r\n        return undefined;\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\n\r\n@Pipe({\r\n\tname: 'dataSource'\r\n})\r\nexport class DataSourcePipe implements PipeTransform {\r\n\ttransform(data: any[]): any {\r\n\t\treturn data ? new MatTableDataSource(data) : null;\r\n\t}\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { EnumMetadata } from \"../models/enum-metadata\";\r\n\r\n@Pipe({\r\n    name: 'enum',\r\n    /* Required to update the value when the promise is resolved */\r\n    pure: false\r\n})\r\nexport class EnumPipe implements PipeTransform {\r\n    /**\r\n     * Converts an enum value to its corresponding string representation.\r\n     * \r\n     * @param value - The numeric value of the enum to convert.\r\n     * @param enumType - The enum type (as an object) that defines the mapping of values to their string representations.\r\n     * @param prefixOrMetadata - Either a prefix string to prepend to the resulting string, \r\n     *                           or an object containing EnumMetadata for additional display information.\r\n     * @param suffix - An optional string to append to the resulting string (default is an empty string).\r\n     * @returns The formatted string representation of the enum value, including any specified prefixes or suffixes, \r\n     *          or undefined if the value is not recognized in the provided enum type.\r\n     */\r\n    transform(value: number | null | undefined, enumType: any, prefixOrMetadata?: string | { [key: number]: EnumMetadata }, suffix: string = ''): any {\r\n        /* Return undefined if the value is null or undefined */\r\n        if (value === null || value === undefined) {\r\n            return undefined;\r\n        }\r\n\r\n        /* Determine if prefixOrMetadata is an object containing EnumMetadata for the given value */\r\n        if (prefixOrMetadata && typeof prefixOrMetadata === 'object' && value in prefixOrMetadata) {\r\n            const metadata: EnumMetadata = prefixOrMetadata[value];\r\n            /* Return the display string from the metadata along with the suffix */\r\n            return `${metadata.display}${suffix}`;\r\n        }\r\n\r\n        /* Check if enumType is an object and contains the specified value */\r\n        if (enumType && typeof enumType === 'object' && value in enumType) {\r\n            /* Return the corresponding string value from the enum, prepending the prefix if provided */\r\n            return `${prefixOrMetadata ?? ''}${enumType[value]}${suffix}`;\r\n        }\r\n\r\n        /* If the value is not recognized in the enumType, return undefined as a fallback */\r\n        return undefined;\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\ntype unit = 'bytes' | 'KB' | 'MB' | 'GB' | 'TB' | 'PB';\r\ntype unitPrecisionMap = { [u in unit]: number; };\r\n\r\nconst defaultPrecisionMap: unitPrecisionMap = {\r\n    bytes: 0,\r\n    KB: 0,\r\n    MB: 1,\r\n    GB: 1,\r\n    TB: 2,\r\n    PB: 2\r\n};\r\n\r\n@Pipe({\r\n    name: 'fileSize'\r\n})\r\nexport class FileSizePipe implements PipeTransform {\r\n    private readonly units: unit[] = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\r\n\r\n    transform(bytes: number = 0, precision: number | unitPrecisionMap = defaultPrecisionMap): string {\r\n        if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) {\r\n            return '?';\r\n        }\r\n\r\n        let unitIndex = 0;\r\n        while (bytes >= 1024) {\r\n            bytes /= 1024;\r\n            unitIndex++;\r\n        }\r\n\r\n        const unit = this.units[unitIndex];\r\n\r\n        if (typeof precision === 'number') {\r\n            return `${bytes.toFixed(+precision)} ${unit}`;\r\n        }\r\n\r\n        return `${bytes.toFixed(precision[unit])} ${unit}`;\r\n    }\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n    name: 'filter',\r\n    pure: false\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n\r\n    /**\r\n     * Filters the specified array by a specific property.\r\n     * @param items The array to filter.\r\n     * @param propName The name of the property to filter by.\r\n     * @param filterBy The term to filter by, which can be a string, number, boolean, or object.\r\n     * @returns The filtered array.\r\n     */\r\n    transform(items: any[], propName: string, filterBy: any): any[] {\r\n        if (!items || filterBy === undefined || !propName) {\r\n            return items;\r\n        }\r\n\r\n        return items.filter(item => {\r\n            const value = this.getPropertyValue(item, propName);\r\n            return this.isMatch(value, filterBy);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Retrieves the value of a nested property.\r\n     * @param item The item to retrieve the property value from.\r\n     * @param propName The name of the property, can be nested (e.g., 'address.city').\r\n     * @returns The value of the specified property.\r\n     */\r\n    private getPropertyValue(item: any, propName: string): any {\r\n        return propName.split('.').reduce((acc, part) => acc && acc[part], item);\r\n    }\r\n\r\n    /**\r\n     * Checks if the value matches the filter criteria.\r\n     * @param value The value of the property.\r\n     * @param filterBy The filter criteria.\r\n     * @returns True if the value matches the filter criteria, false otherwise.\r\n     */\r\n    private isMatch(value: any, filterBy: any): boolean {\r\n        if (typeof filterBy === 'boolean') {\r\n            return value === filterBy;\r\n        }\r\n\r\n        if (typeof filterBy === 'object') {\r\n            return Object.keys(filterBy).every(key =>\r\n                this.isMatch(this.getPropertyValue(value, key), filterBy[key])\r\n            );\r\n        }\r\n\r\n        return value?.toString().toLowerCase().includes(filterBy.toString().toLowerCase());\r\n    }\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n\tname: 'firstLetter',\r\n\t/* Required to update the value when the promise is resolved */\r\n\tpure: false\r\n})\r\nexport class FirstLetterPipe implements PipeTransform {\r\n\r\n\t/**\r\n\t * Converts enum value to string\r\n\t * @param value \r\n\t * @param uppercase \r\n\t */\r\n\ttransform(value: string, uppercase?: boolean): string {\r\n\t\tlet val = value && value.length > 1 ? value.substr(0, 1) : value;\r\n\t\treturn uppercase ? val.toUpperCase() : val;\r\n\t}\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { AbstractControl, FormArray } from \"@angular/forms\";\r\n\r\n@Pipe({\r\n    name: 'formArray'\r\n})\r\nexport class FormArrayPipe implements PipeTransform {\r\n    transform(value: AbstractControl): FormArray<typeof value['value']> {\r\n        return value as FormArray<typeof value['value']>;\r\n    }\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { AbstractControl, FormControl } from \"@angular/forms\";\r\n\r\n@Pipe({\r\n    name: 'formControl'\r\n})\r\nexport class FormControlPipe implements PipeTransform {\r\n    transform(value: AbstractControl): FormControl<typeof value['value']> {\r\n        return value as FormControl<typeof value['value']>;\r\n    }\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\r\n\r\n@Pipe({\r\n    name: 'formGroup'\r\n})\r\nexport class FormGroupPipe implements PipeTransform {\r\n    transform(value: AbstractControl): FormGroup<typeof value['value']> {\r\n        return value as FormGroup<typeof value['value']>;\r\n    }\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n    name: 'func',\r\n    pure: false\r\n})\r\nexport class FuncPipe implements PipeTransform {\r\n    transform(value: string | Function | {} | undefined, ...args: any[]): any {\r\n        return value && typeof value === 'function' ? value(...args) : value;\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'keys'\r\n})\r\nexport class KeysPipe implements PipeTransform {\r\n\ttransform(value: any, _: string[]): any {\r\n\t\tlet keys = [];\r\n\t\tfor (let key in value) {\r\n\t\t\tkeys.push({ key: key, value: value[key] });\r\n\t\t}\r\n\t\treturn keys;\r\n\t}\r\n}","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({\r\n    name: 'monthName',\r\n    pure: false\r\n})\r\nexport class MonthNamePipe implements PipeTransform {\r\n    /**\r\n     * Month names\r\n     */\r\n    private readonly monthNames: string[] = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];\r\n\r\n    /**\r\n     * Gets month name\r\n     * @param month \r\n     */\r\n    transform(month: number): string {\r\n        return (month < 1 || month > 12) ? 'N/A' : this.monthNames[month - 1];\r\n    }\r\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[onlyNumber]'\r\n})\r\nexport class OnlyNumberDirective {\r\n\r\n    /**\r\n     * Enables or disables numeric-only input.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public onlyNumber: boolean = false;\r\n\r\n    /**\r\n     * @property Optional prefix that is excluded from numeric validation.\r\n     * Example: 'DE'\r\n     * @type {string | undefined}\r\n     */\r\n    @Input()\r\n    public excludePrefix?: string;\r\n\r\n    /**\r\n     * constructor\r\n     * @param element Reference to the host input element\r\n     */\r\n    constructor(private el: ElementRef<HTMLInputElement>) { }\r\n\r\n    /**\r\n     * Handles keydown events and allows only numeric input\r\n     * after the excluded prefix.\r\n     *\r\n     * @param event Keyboard event\r\n     */\r\n    @HostListener('keydown', ['$event'])\r\n    onKeyDown(event: KeyboardEvent): void {\r\n        /* Skip processing if numeric restriction is disabled */\r\n        if (!this.onlyNumber) {\r\n            return;\r\n        }\r\n\r\n        const input = this.el.nativeElement;\r\n        const cursorPos = input.selectionStart ?? 0;\r\n        const prefixLength = this.excludePrefix?.length ?? 0;\r\n\r\n        /* Allow editing inside the prefix */\r\n        if (cursorPos <= prefixLength) {\r\n            return;\r\n        }\r\n\r\n        const allowedKeys = [\r\n            'Backspace',\r\n            'Delete',\r\n            'Tab',\r\n            'Escape',\r\n            'Enter',\r\n            'ArrowLeft',\r\n            'ArrowRight',\r\n            'Home',\r\n            'End'\r\n        ];\r\n\r\n        /* Allow navigation keys */\r\n        if (allowedKeys.includes(event.key)) {\r\n            return;\r\n        }\r\n\r\n        /* Allow clipboard shortcuts */\r\n        if (\r\n            (event.ctrlKey || event.metaKey) &&\r\n            ['a', 'c', 'v', 'x'].includes(event.key.toLowerCase())\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        /* Allow digits only */\r\n        if (!/^[0-9]$/.test(event.key)) {\r\n            event.preventDefault();\r\n        }\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EnumMetadata } from '../models/enum-metadata';\r\n\r\n//@dynamic\r\n@Pipe({\r\n\tname: 'orderBy',\r\n\tpure: false\r\n})\r\nexport class OrderPipe implements PipeTransform {\r\n\r\n\t/**\r\n\t * Checks if a value is a string.\r\n\t *\r\n\t * @param value - The value to check.\r\n\t * @returns True if the value is a string; otherwise, false.\r\n\t */\r\n\tstatic isString(value: any): boolean {\r\n\t\treturn typeof value === 'string' || value instanceof String;\r\n\t}\r\n\r\n\t/**\r\n\t * Sorts two values in a case-insensitive manner.\r\n\t *\r\n\t * @param a - The first value to compare.\r\n\t * @param b - The second value to compare.\r\n\t * @returns A negative number if a < b, a positive number if a > b, and 0 if they are equal.\r\n\t */\r\n\tstatic caseInsensitiveSort(a: any, b: any): number {\r\n\t\t/* If both values are strings, compare them using localeCompare for case-insensitive sorting. */\r\n\t\tif (OrderPipe.isString(a) && OrderPipe.isString(b)) {\r\n\t\t\treturn a.localeCompare(b);\r\n\t\t}\r\n\t\t/* Otherwise, fall back to the default comparison. */\r\n\t\treturn OrderPipe.defaultCompare(a, b);\r\n\t}\r\n\r\n\t/**\r\n\t * Default comparison method for sorting values.\r\n\t *\r\n\t * @param a - The first value to compare.\r\n\t * @param b - The second value to compare.\r\n\t * @returns A negative number if a < b, a positive number if a > b, and 0 if they are equal.\r\n\t */\r\n\tstatic defaultCompare(a: any, b: any): number {\r\n\t\t/* If both values are equal, return 0. */\r\n\t\tif (a === b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t/* If 'a' is null, it is considered greater than 'b'. */\r\n\t\tif (a == null) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\t/* If 'b' is null, it is considered greater than 'a'. */\r\n\t\tif (b == null) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\t/* Compare the two values. */\r\n\t\treturn a > b ? 1 : -1;\r\n\t}\r\n\r\n\t/**\r\n\t * Parses a dot-separated expression string into an array of strings.\r\n\t *\r\n\t * @param expression - The expression string to parse.\r\n\t * @returns An array of strings representing the parsed expression.\r\n\t */\r\n\tstatic parseExpression(expression: string): string[] {\r\n\t\t/* Replace bracket notation with dot notation and remove leading dot. */\r\n\t\texpression = expression.replace(/\\[(\\w+)\\]/g, '.$1');\r\n\t\texpression = expression.replace(/^\\./, '');\r\n\t\treturn expression.split('.');\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a value from an object based on a parsed expression.\r\n\t *\r\n\t * @param object - The object to retrieve the value from.\r\n\t * @param expression - The parsed expression as an array of strings.\r\n\t * @returns The retrieved value or undefined if not found.\r\n\t */\r\n\tstatic getValue(object: any, expression: string[]): any {\r\n\t\tfor (let i = 0, n = expression.length; i < n; ++i) {\r\n\t\t\tconst k = expression[i];\r\n\t\t\t/* If the key does not exist in the object, return undefined. */\r\n\t\t\tif (!(k in object)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t/* Move to the next level in the object. */\r\n\t\t\tobject = object[k];\r\n\t\t}\r\n\t\t/* Return the final value. */\r\n\t\treturn object;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a value in an object based on a parsed expression.\r\n\t *\r\n\t * @param object - The object to modify.\r\n\t * @param value - The value to set.\r\n\t * @param expression - The parsed expression as an array of strings.\r\n\t */\r\n\tstatic setValue(object: any, value: any, expression: string[]): void {\r\n\t\tlet i;\r\n\t\tfor (i = 0; i < expression.length - 1; i++) {\r\n\t\t\t/* Traverse the object to the second-to-last property. */\r\n\t\t\tobject = object[expression[i]];\r\n\t\t}\r\n\t\t/* Set the value at the last property. */\r\n\t\tobject[expression[i]] = value;\r\n\t}\r\n\r\n\t/**\r\n\t * Transforms the input value by sorting it based on the provided expression and metadata.\r\n\t *\r\n\t * @param value - The value to transform, which can be an array or a single object.\r\n\t * @param expression - The expression to sort by, can be a string or an array of strings.\r\n\t * @param metadata - An optional metadata object for sorting.\r\n\t * @param reverse - Indicates if the sorting should be in reverse order.\r\n\t * @param isCaseInsensitive - Indicates if the sorting should be case insensitive.\r\n\t * @param comparator - An optional custom comparator function.\r\n\t * @returns The transformed (sorted) value.\r\n\t */\r\n\ttransform(value: any | any[], expression?: any, metadata?: { [key: number]: EnumMetadata }, reverse?: boolean, isCaseInsensitive: boolean = false, comparator?: Function): any {\r\n\t\t/* If the value is null or undefined, return it as is. */\r\n\t\tif (!value) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\t/* Check if we should sort by metadata. */\r\n\t\tif (metadata) {\r\n\t\t\treturn this.sortByMetadata(value, expression, reverse ?? false, metadata);\r\n\t\t}\r\n\r\n\t\t/* If expression is an array, handle multiple expressions. */\r\n\t\tif (Array.isArray(expression)) {\r\n\t\t\treturn this.multiExpressionTransform(value, expression, reverse ?? false, isCaseInsensitive, comparator);\r\n\t\t}\r\n\r\n\t\t/* If value is an array, sort it using the provided expression. */\r\n\t\tif (Array.isArray(value)) {\r\n\t\t\treturn this.sortArray(value.slice(), expression, reverse, isCaseInsensitive, comparator);\r\n\t\t}\r\n\r\n\t\t/* If value is an object, transform it accordingly. */\r\n\t\tif (typeof value === 'object') {\r\n\t\t\treturn this.transformObject(Object.assign({}, value), expression, reverse, isCaseInsensitive, comparator);\r\n\t\t}\r\n\r\n\t\t/* If value is not an array or object, return it unchanged. */\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Sorts an array based on metadata for enum values.\r\n\t *\r\n\t * @param value - The array to sort.\r\n\t * @param expression - The expression to sort by.\r\n\t * @param reverse - Indicates if the sorting should be in reverse order.\r\n\t * @param metadata - The metadata for enum sorting.\r\n\t * @returns The sorted array.\r\n\t */\r\n\tprivate sortByMetadata(value: any[], expression: string | undefined, reverse: boolean, metadata: { [key: number]: EnumMetadata }): any[] {\r\n\t\t/* Comparison function for sorting by metadata order. */\r\n\t\tconst compareFn = (a: any, b: any): number => {\r\n\t\t\tconst valueA = expression ? OrderPipe.getValue(a, OrderPipe.parseExpression(expression)) : a;\r\n\t\t\tconst valueB = expression ? OrderPipe.getValue(b, OrderPipe.parseExpression(expression)) : b;\r\n\r\n\t\t\t/* Retrieve the order values from metadata, defaulting to Infinity if not found. */\r\n\t\t\tconst orderA = metadata[valueA]?.order ?? Infinity;\r\n\t\t\tconst orderB = metadata[valueB]?.order ?? Infinity;\r\n\r\n\t\t\treturn orderA - orderB;\r\n\t\t};\r\n\r\n\t\t/* Sort the array and handle reverse order. */\r\n\t\tconst sortedArray = value.slice().sort(compareFn);\r\n\t\treturn reverse ? sortedArray.reverse() : sortedArray;\r\n\t}\r\n\r\n\t/**\r\n\t * Sorts an array based on the given expression.\r\n\t *\r\n\t * @param value - The array to sort.\r\n\t * @param expression - The expression to sort by.\r\n\t * @param reverse - Indicates if the sorting should be in reverse order.\r\n\t * @param isCaseInsensitive - Indicates if the sorting should be case insensitive.\r\n\t * @param comparator - An optional custom comparator function.\r\n\t * @returns The sorted array.\r\n\t */\r\n\tprivate sortArray(value: any[], expression?: any, reverse?: boolean, isCaseInsensitive?: boolean, comparator?: Function): any[] {\r\n\t\t/* Determine if the expression is a deep link. */\r\n\t\tconst isDeepLink = expression && expression.indexOf('.') !== -1;\r\n\r\n\t\t/* Parse the expression if it's a deep link. */\r\n\t\tif (isDeepLink) {\r\n\t\t\texpression = OrderPipe.parseExpression(expression);\r\n\t\t}\r\n\r\n\t\t/* Determine the comparison function. */\r\n\t\tlet compareFn: Function;\r\n\r\n\t\tif (comparator && typeof comparator === 'function') {\r\n\t\t\tcompareFn = comparator;\r\n\t\t} else {\r\n\t\t\tcompareFn = isCaseInsensitive ? OrderPipe.caseInsensitiveSort : OrderPipe.defaultCompare;\r\n\t\t}\r\n\r\n\t\t/* Sort the array using the determined comparison function. */\r\n\t\tlet array: any[] = value.sort((a: any, b: any): number => {\r\n\t\t\tif (!expression) {\r\n\t\t\t\treturn compareFn(a, b);\r\n\t\t\t}\r\n\r\n\t\t\tif (!isDeepLink) {\r\n\t\t\t\t/* If not a deep link, compare the specified properties directly. */\r\n\t\t\t\tif (a && b) {\r\n\t\t\t\t\treturn compareFn(a[expression], b[expression]);\r\n\t\t\t\t}\r\n\t\t\t\t/* Fall back to direct comparison. */\r\n\t\t\t\treturn compareFn(a, b);\r\n\t\t\t}\r\n\r\n\t\t\t/* For deep links, get the values from the parsed expression. */\r\n\t\t\treturn compareFn(OrderPipe.getValue(a, expression), OrderPipe.getValue(b, expression));\r\n\t\t});\r\n\r\n\t\t/* Handle reverse sorting if specified. */\r\n\t\tif (reverse) {\r\n\t\t\treturn array.reverse();\r\n\t\t}\r\n\r\n\t\treturn array;\r\n\t}\r\n\r\n\t/**\r\n\t * Transforms an object based on a specified expression.\r\n\t *\r\n\t * This method retrieves a value from the given object according to the parsed expression,\r\n\t * applies the transformation to that value, and then sets the transformed value back into the object.\r\n\t *\r\n\t * @param value The object to transform.\r\n\t * @param expression The expression used to identify the property to transform.\r\n\t * @param reverse Optional. Indicates whether the transformation should be applied in reverse order.\r\n\t * @param isCaseInsensitive Optional. Indicates whether the transformation should ignore case.\r\n\t * @param comparator Optional. A custom comparator function to be used for sorting.\r\n\t * @returns The transformed object with the updated value.\r\n\t */\r\n\tprivate transformObject(value: any | any[], expression?: any, reverse?: boolean, isCaseInsensitive?: boolean, comparator?: Function): any {\r\n\t\t/* Parse the expression into an array of keys */\r\n\t\tlet parsedExpression = OrderPipe.parseExpression(expression);\r\n\r\n\t\t/* Retrieve the last predicate from the parsed expression for further processing */\r\n\t\tlet lastPredicate = parsedExpression.pop();\r\n\r\n\t\t/* Get the current value from the object using the parsed expression */\r\n\t\tlet oldValue = OrderPipe.getValue(value, parsedExpression);\r\n\r\n\t\t/* If there's a last predicate and the old value is not an array, \r\n\t\t   push the predicate back into the parsed expression for future use */\r\n\t\tif (lastPredicate && !Array.isArray(oldValue)) {\r\n\t\t\tparsedExpression.push(lastPredicate);\r\n\t\t\tlastPredicate = undefined;\r\n\t\t\toldValue = OrderPipe.getValue(value, parsedExpression);\r\n\t\t}\r\n\r\n\t\t/* If no old value is found, return the original object */\r\n\t\tif (!oldValue) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\t/* Set the transformed value back into the original object */\r\n\t\tOrderPipe.setValue(value, this.transform(oldValue, lastPredicate, undefined, reverse, isCaseInsensitive), parsedExpression);\r\n\t\treturn value; /* Return the updated object */\r\n\t}\r\n\r\n\t/**\r\n\t * Applies multiple expressions in sequence to transform a value.\r\n\t *\r\n\t * This method iterates over an array of expressions, applying each one in reverse order\r\n\t * to the given value. The result of each transformation is passed as input to the next expression.\r\n\t *\r\n\t * @param value The initial value to transform.\r\n\t * @param expressions An array of expressions to apply in reverse order.\r\n\t * @param reverse Optional. Indicates whether the transformations should be applied in reverse order.\r\n\t * @param isCaseInsensitive Optional. Indicates whether the transformations should ignore case.\r\n\t * @param comparator Optional. A custom comparator function to be used for sorting.\r\n\t * @returns The final transformed value after applying all expressions.\r\n\t */\r\n\tprivate multiExpressionTransform(value: any, expressions: any[], reverse: boolean, isCaseInsensitive: boolean = false, comparator?: Function): any {\r\n\t\t/* Apply each expression in reverse order, passing the result to the next transformation */\r\n\t\treturn expressions.reverse().reduce((result: any, expression: any) => {\r\n\t\t\treturn this.transform(result, expression, undefined, reverse, isCaseInsensitive, comparator);\r\n\t\t}, value); /* Return the final transformed value */\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { NgModel } from \"@angular/forms\";\r\n\r\n@Pipe({\r\n    name: 'placeholder',\r\n    /* Required to update the value when the promise is resolved */\r\n    pure: false\r\n})\r\nexport class PlaceholderPipe implements PipeTransform {\r\n\r\n    /**\r\n     * Gets placeholder of an input\r\n     * @param value \r\n     * @param placeholderType \r\n     */\r\n    transform(model: NgModel): string {\r\n        if (model && model.valueAccessor && (<any>model.valueAccessor)._elementRef && (<any>model.valueAccessor)._elementRef.nativeElement) {\r\n            return (<any>model.valueAccessor)._elementRef.nativeElement.placeholder;\r\n        }\r\n\r\n        return '';\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/* \r\n * Pipe to join the values of a specific property of an array of objects into a string with a specified separator.\r\n */\r\n@Pipe({\r\n    name: 'propertyJoin'\r\n})\r\nexport class PropertyJoinPipe implements PipeTransform {\r\n    /*\r\n     * Transforms the input array of objects into a string joined by the specified separator, based on a specified property.\r\n     * @param value - The array of objects to be joined.\r\n     * @param property - The property of the objects to extract values from.\r\n     * @param separator - The separator to be used for joining the property values. Default is ', '.\r\n     * @returns A string with the property values joined by the separator.\r\n     */\r\n    transform(value: any[], property: string, separator: string = ', '): string {\r\n        if (!Array.isArray(value)) {\r\n            return value;\r\n        }\r\n\r\n        return value.map(item => item[property]).join(separator);\r\n    }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\n\r\n/**\r\n * Generated class for the SafeHtmlPipe pipe.\r\n */\r\n@Pipe({\r\n    name: 'safeHtml'\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n    /**\r\n     * Constructor\r\n     * @param sanitizer \r\n     */\r\n    constructor(private sanitizer: DomSanitizer) { }\r\n\r\n    /**\r\n     * Bypass security and trust the given value to be safe HTML.\r\n     * @param html \r\n     * @returns \r\n     */\r\n    transform(html: string) {\r\n        return this.sanitizer.bypassSecurityTrustHtml(html);\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Pipe to split a string into an array using a delimiter.\r\n */\r\n@Pipe({\r\n    name: 'split'\r\n})\r\nexport class SplitPipe implements PipeTransform {\r\n    /**\r\n     * Transform the input string into an array by splitting it using the provided delimiter.\r\n     * @param value The input string to split.\r\n     * @param delimiter The delimiter used to split the string.\r\n     * @returns An array containing the parts of the input string split by the delimiter.\r\n     */\r\n    transform(value: string, delimiter: string): string[] {\r\n        if (!value || !delimiter) return [];\r\n        return value.split(delimiter);\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n    name: 'time'\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n    transform(time: any): string | null {\r\n        if (typeof time !== 'string') {\r\n            return '';\r\n        }\r\n\r\n        if (new RegExp('^\\\\d{2}:\\\\d{2}').test(time)) {\r\n            let match = time.match(/^(\\d{2}):(\\d{2})/ig);\r\n            return match ? match[0] : null;\r\n        }\r\n\r\n        return time;\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'titlecase', pure: false\r\n})\r\nexport class TitleCase implements PipeTransform {\r\n\ttransform(input: string, length: number): string {\r\n\t\treturn input.length > 0 ? input.replace(/\\w\\S*/g, (txt => txt[0].toUpperCase() + txt.substr(1).toLowerCase())) : '';\r\n\t}\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Utils } from '../functions/utils';\r\n\r\n@Pipe({\r\n    name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n    transform(text: any, length: number): string {\r\n        return Utils.truncateText(text, length);\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'values', pure: false\r\n})\r\nexport class ValuesPipe implements PipeTransform {\r\n\ttransform(value: any, _?: any[]): any {\r\n\t\treturn Object.keys(value).map(key => value[key]);\r\n\t}\r\n}","import { HttpClient, HttpEvent, HttpEventType, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { BehaviorSubject, firstValueFrom, Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Utils } from '../../common/functions/utils';\r\n\r\nexport class GenericService<T extends any> {\r\n\r\n    /**\r\n     * Injected Angular HttpClient instance\r\n     */\r\n    public http: HttpClient = inject(HttpClient);\r\n\r\n    /**\r\n     * BehaviorSubject holding the current list of entities\r\n     */\r\n    public list: BehaviorSubject<any[]> = new BehaviorSubject(<any>[]);\r\n\r\n    /**\r\n     * Constructor\r\n     * @param endpoint Optional API endpoint for the service\r\n     */\r\n    constructor(public endpoint?: string) { }\r\n\r\n    /**\r\n     * Retrieves a single entity by ID or relative path\r\n     * @param id The entity ID or relative path\r\n     * @param params Optional query parameters\r\n     * @param headers Optional HTTP headers\r\n     * @param handleError Whether to handle errors (default: true)\r\n     * @param observeResponse Whether to observe the full response (default: false)\r\n     */\r\n    public get<T>(id: string | number, params?: Object | null, headers?: Object, handleError: boolean = true, observeResponse: boolean = false): Observable<any> {\r\n        let request = this.http\r\n            .get<T>(`${this.endpoint}/${id}`, { observe: <any>(observeResponse ? 'response' : 'body'), params: Utils.toHttpParams(params), headers: this.toHttpHeaders(headers) });\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('get')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously retrieves a single entity by ID or relative path\r\n     * @param id The entity ID or relative path\r\n     * @param params Optional query parameters\r\n     * @returns Promise resolving to the entity\r\n     */\r\n    public async getAsync<T>(id: string | number, params?: Object | null): Promise<T> {\r\n        return await firstValueFrom(this.get<T>(id, params));\r\n    }\r\n\r\n    /**\r\n     * Counts entities on the server\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the count action\r\n     * @param headers Optional HTTP headers\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public count(params?: Object, path?: string | null, headers?: Object, handleError: boolean = true): Observable<number> {\r\n        let request = this.http\r\n            .get<any>(`${this.endpoint}${path ? path : '/count'}`, { params: Utils.toHttpParams(params), headers: this.toHttpHeaders(headers) });\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('count')));\r\n        }\r\n\r\n        return request.pipe(map(x => { return <number>x.value }));\r\n    }\r\n\r\n    /**\r\n     * Asynchronously counts entities on the server\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the count action\r\n     * @returns Promise resolving to the count\r\n     */\r\n    public async countAsync(params?: Object, path?: string | null): Promise<number> {\r\n        return await firstValueFrom(this.count(params, path));\r\n    }\r\n\r\n    /**\r\n     * Retrieves a list of entities\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the action\r\n     * @param headers Optional HTTP headers\r\n     * @returns Observable with the response data\r\n     */\r\n    public getList(params?: HttpParams | Object | null, path?: string | null, headers?: Object | null): Observable<any> {\r\n        return this.http\r\n            .get(`${this.endpoint}${path ? path : ''}`, { params: params instanceof HttpParams ? params : Utils.toHttpParams(params), headers: this.toHttpHeaders(headers) })\r\n            .pipe(catchError(this.handleError('getList')));\r\n    }\r\n\r\n    /**\r\n     * Asynchronously retrieves a list of entities\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the action\r\n     * @param headers Optional HTTP headers\r\n     * @returns Promise resolving to the response data\r\n     */\r\n    public async getListAsync(params?: HttpParams | Object | null, path?: string | null, headers?: Object | null): Promise<any> {\r\n        /* Calling the observable-based method and converting to promise */\r\n        const request$ = this.getList(params, path, headers);\r\n\r\n        /* Using firstValueFrom to handle the single response value */\r\n        return await firstValueFrom(request$);\r\n    }\r\n\r\n    /**\r\n     * Loads data into the BehaviorSubject list\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the action\r\n     * @param headers Optional HTTP headers\r\n     */\r\n    public loadList(params?: Object | null, path?: string | null, headers?: Object): void {\r\n        this.getList(params, path, headers)\r\n            .subscribe(x => this.list.next(x));\r\n    }\r\n\r\n    /**\r\n     * Loads data into the BehaviorSubject list asynchronously\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the action\r\n     * @param headers Optional HTTP headers\r\n     */\r\n    /**\r\n     * Asynchronously loads data into the BehaviorSubject list\r\n     * @param params Optional query parameters\r\n     * @param path Optional relative path to the action\r\n     * @param headers Optional HTTP headers\r\n     */\r\n    public async loadListAsync(params?: Object | null, path?: string | null, headers?: Object): Promise<void> {\r\n        const data = await this.getListAsync(params, path, headers);\r\n        this.list.next(data);\r\n    }\r\n\r\n    /**\r\n     * Returns the list BehaviorSubject as an Observable\r\n     */\r\n    public getListAsObservable(): Observable<any> {\r\n        return this.list.asObservable();\r\n    }\r\n\r\n    /**\r\n     * Creates a new entity\r\n     * @param entity The entity to create\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public create<T>(entity: any, path?: string | null, httpOptions?: Object, handleError: boolean = true): Observable<T> {\r\n        let request = this.http\r\n            .post<T>(`${this.endpoint}${path ? path : ''}`, entity, httpOptions);\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('create')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously creates a new entity\r\n     * @param entity The entity to create\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the created entity\r\n     */\r\n    public async createAsync<T>(entity: any, path?: string | null, httpOptions?: Object): Promise<T> {\r\n        return await firstValueFrom(this.create<T>(entity, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Updates an existing entity asynchronously\r\n     * @param id The ID of the entity to update\r\n     * @param entity The updated entity data\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public update(id: string | number, entity: any, path?: string | null, httpOptions?: Object, handleError: boolean = true): Observable<any> {\r\n        let request = this.http\r\n            .put<T>(`${this.endpoint}${path ? path : ''}/${id}`, entity, httpOptions);\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('update')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously updates an existing entity\r\n     * @param id The ID of the entity to update\r\n     * @param entity The updated entity data\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the updated entity\r\n     */\r\n    public async updateAsync(id: string | number, entity: any, path?: string | null, httpOptions?: Object): Promise<any> {\r\n        return await firstValueFrom(this.update(id, entity, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Applies a JSON Patch to an entity\r\n     * @param id The ID of the item to patch\r\n     * @param body The patch body\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public patch(id: string | number, body: any, path?: string | null, httpOptions?: any, handleError: boolean = true): Observable<any> {\r\n        /* Ensure correct content-type for patch */\r\n        const headers = new HttpHeaders({\r\n            'Content-Type': 'application/json-patch+json'\r\n        });\r\n\r\n        /* Merge headers */\r\n        const options = {\r\n            ...httpOptions,\r\n            headers: httpOptions?.headers\r\n                ? httpOptions.headers.append('Content-Type', 'application/json-patch+json')\r\n                : headers\r\n        };\r\n\r\n        /* Create request */\r\n        let request = this.http.patch<T>(`${this.endpoint}${path ? path : ''}/${id}`, body, options);\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('patch')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously applies a JSON Patch to an entity\r\n     * @param id The ID of the item to patch\r\n     * @param body The patch body\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the patched entity\r\n     */\r\n    public async patchAsync(id: string | number, body: any, path?: string | null, httpOptions?: any): Promise<any> {\r\n        return await firstValueFrom(this.patch(id, body, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Applies a JSON Patch to multiple entities\r\n     * @param ids The IDs of the items to patch\r\n     * @param body The patch body\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public patchList(ids: string[] | number[], body: any, path?: string | null, httpOptions?: Object, handleError: boolean = true): Observable<any> {\r\n        let request = this.http\r\n            .patch<T>(`${this.endpoint}${path ? path : ''}`, body, Object.assign(httpOptions || {}, { params: Utils.toHttpParams({ ids: ids }) }));\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('patch')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously applies a JSON Patch to multiple entities\r\n     * @param ids The IDs of the items to patch\r\n     * @param body The patch body\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the patched entities\r\n     */\r\n    public async patchListAsync(ids: string[] | number[], body: any, path?: string | null, httpOptions?: Object): Promise<any> {\r\n        return await firstValueFrom(this.patchList(ids, body, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Deletes an entity by ID\r\n     * @param id The ID of the item to delete\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public delete(id: string | number, path?: string | null, httpOptions?: Object, handleError: boolean = true): Observable<any> {\r\n        let request = this.http\r\n            .delete(`${this.endpoint}${path ? path : ''}/${id}`, httpOptions);\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('delete')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously deletes an entity by ID\r\n     * @param id The ID of the item to delete\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the delete result\r\n     */\r\n    public async deleteAsync(id: string | number, path?: string | null, httpOptions?: Object): Promise<any> {\r\n        return await firstValueFrom(this.delete(id, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Deletes multiple entities by IDs\r\n     * @param ids The IDs of the items to delete\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public deleteList(ids: string[] | number[], path?: string | null, httpOptions?: Object, handleError: boolean = true): Observable<any> {\r\n        let request = this.http.delete(`${this.endpoint}${path ? path : ''}`, Object.assign(httpOptions || {}, { params: Utils.toHttpParams({ ids: ids }) }));\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe(catchError(this.handleError('deleteList')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously deletes multiple entities by IDs\r\n     * @param ids The IDs of the items to delete\r\n     * @param path Optional relative path to the action\r\n     * @param httpOptions Optional HTTP options (headers, etc.)\r\n     * @returns Promise resolving to the delete result\r\n     */\r\n    public async deleteListAsync(ids: string[] | number[], path?: string | null, httpOptions?: Object): Promise<any> {\r\n        return await firstValueFrom(this.deleteList(ids, path, httpOptions));\r\n    }\r\n\r\n    /**\r\n     * Downloads a file from the server\r\n     * @param path Relative path to the download action\r\n     * @param params Optional query parameters\r\n     * @param handleError Whether to handle errors (default: true)\r\n     */\r\n    public download(path: string, params?: Object, handleError: boolean = true): Observable<any> {\r\n        let request = this.http\r\n            .get(`${this.endpoint}/${path ? path : 'download'}`, { params: Utils.toHttpParams(params), responseType: 'arraybuffer', observe: 'response' })\r\n            .pipe(map(x => { return { data: x.body, filename: this.getFileNameFromHeaders(x.headers) } }));\r\n\r\n        /* Handle error */\r\n        if (handleError) {\r\n            request = request.pipe<any>(catchError(this.handleError('download')));\r\n        }\r\n\r\n        return request;\r\n    }\r\n\r\n    /**\r\n     * Asynchronously downloads a file from the server\r\n     * @param path Relative path to the download action\r\n     * @param params Optional query parameters\r\n     * @returns Promise resolving to the download result\r\n     */\r\n    public async downloadAsync(path: string, params?: Object): Promise<any> {\r\n        return await firstValueFrom(this.download(path, params));\r\n    }\r\n\r\n    /**\r\n     * Duplicates a record by ID\r\n     * @param id The ID of the record to duplicate\r\n     */\r\n    public duplicate(id: number): Observable<any> {\r\n        return this.create(null, `/duplicate/${id}`);\r\n    }\r\n\r\n    /**\r\n     * Asynchronously duplicates a record by ID\r\n     * @param id The ID of the record to duplicate\r\n     * @returns Promise resolving to the duplicated record\r\n     */\r\n    public async duplicateAsync(id: number): Promise<any> {\r\n        return await firstValueFrom(this.duplicate(id));\r\n    }\r\n\r\n    /**\r\n     * Uploads a file to the server\r\n     * @param file The file to upload\r\n     * @param path Optional relative path to the upload action (default: 'upload')\r\n     * @param extraData Optional extra form data to include\r\n     * @returns Observable of HttpEvent for upload progress tracking\r\n     */\r\n    public upload(file: File, path: string = 'upload', extraData?: any): Observable<any> {\r\n        /* Creates form data object */\r\n        const formData: FormData = new FormData();\r\n\r\n        /* Add the file to the form data */\r\n        formData.append('file', file, file.name);\r\n\r\n        /* Iterate and set other form data */\r\n        if (extraData) {\r\n            for (let key in extraData) {\r\n                formData.append(key, extraData[key])\r\n            }\r\n        }\r\n\r\n        /* Set true to reportProgress to enable tracking of progress events */\r\n        const req = new HttpRequest('POST', `${this.endpoint}/${path ? path : 'upload'}`, formData, {\r\n            reportProgress: true\r\n        });\r\n\r\n        /*\r\n        The `HttpClient.request` API produces a raw event stream\r\n        which includes start (sent), progress, and response events.\r\n        */\r\n        return this.http.request(req);\r\n    };\r\n\r\n    /**\r\n     * Asynchronously uploads a file to the server\r\n     * @param file The file to upload\r\n     * @param path Optional relative path to the upload action (default: 'upload')\r\n     * @param extraData Optional extra form data to include\r\n     * @returns Promise resolving to the upload result\r\n     */\r\n    public async uploadAsync(file: File, path: string = 'upload', extraData?: any): Promise<any> {\r\n        return await firstValueFrom(this.upload(file, path, extraData));\r\n    }\r\n\r\n    ///#region Helpers\r\n\r\n    /**\r\n     * Converts an object to FormData\r\n     * @param body The object to convert\r\n     * @returns FormData instance\r\n     */\r\n    protected toFormData(body: any): FormData {\r\n        if (!body) {\r\n            return new FormData();\r\n        }\r\n\r\n        return Object.getOwnPropertyNames(body)\r\n            .filter(key => body[key] != null && body[key] != '')\r\n            .reduce((p, key) => { p.append(key, body[key]); return p }, new FormData());\r\n    }\r\n\r\n    /**\r\n     * Converts an object to HttpHeaders\r\n     * @param body The object to convert\r\n     * @returns HttpHeaders instance\r\n     */\r\n    protected toHttpHeaders(body?: Object | null): HttpHeaders {\r\n        if (!body) {\r\n            return new HttpHeaders();\r\n        }\r\n\r\n        return Object.getOwnPropertyNames(body)\r\n            .filter(key => (body as any)[key] != null && (body as any)[key] != '')\r\n            .reduce((p, key) => p.set(key, (body as any)[key]), new HttpHeaders());\r\n    }\r\n\r\n    /**\r\n     * Extracts file name from Content-Disposition header\r\n     * @param headers HttpHeaders containing Content-Disposition\r\n     * @returns The extracted file name or empty string\r\n     */\r\n    protected getFileNameFromHeaders(headers: HttpHeaders): string {\r\n        /* Extract the Content-Disposition header from the HTTP headers */\r\n        var disposition = headers.get('content-disposition');\r\n        if (disposition && disposition.indexOf('attachment') !== -1) {\r\n\r\n            /* Use a regular expression to extract the UTF-8 file name from the Content-Disposition header */\r\n            var utf8Matches = /filename\\*=[^;=\\n]*'[^']*'([^;\\n]*)/.exec(disposition);\r\n            if (utf8Matches != null && utf8Matches[1]) {\r\n                return decodeURIComponent(utf8Matches[1].replace(/['\"]/g, ''));\r\n            }\r\n\r\n            /* Use a regular expression to extract the file name from the Content-Disposition header */\r\n            var matches = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/.exec(disposition);\r\n            if (matches != null && matches[1]) {\r\n                return matches[1].replace(/['\"]/g, '');\r\n            }\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     * Handles an HTTP operation that failed.\r\n     * Throws a parsed error for the application to handle.\r\n     * @param operation The name of the operation that failed (for logging)\r\n     * @returns A function that processes the error and returns an observable\r\n     */\r\n    protected handleError(operation = 'operation') {\r\n        return (error: any): Observable<any> => throwError(() => {\r\n            if (error.error instanceof ArrayBuffer) {\r\n                return JSON.parse(new TextDecoder().decode(new Uint8Array(error.error)));\r\n            }\r\n\r\n            const message = (error.error instanceof ErrorEvent) ? error.error.message : `server returned code ${error.status} with body \"${error.error}\"`;\r\n            return `${operation} failed: ${message}`;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Returns a distinct message for upload events\r\n     * @param event The HttpEvent from the upload\r\n     * @param file The file being uploaded\r\n     * @returns A user-friendly status message\r\n     */\r\n    protected getEventMessage(event: HttpEvent<any>, file: File) {\r\n        switch (event.type) {\r\n            /* Upload started */\r\n            case HttpEventType.Sent:\r\n                return `Uploading file \"${file.name}\" of size ${file.size}.`;\r\n\r\n            /* Compute and show the % done: */\r\n            case HttpEventType.UploadProgress:\r\n                const percentDone = Math.round(100 * event.loaded / (event?.total ?? 1));\r\n                return `File \"${file.name}\" is ${percentDone}% uploaded.`;\r\n\r\n            /* Upload completed */\r\n            case HttpEventType.Response:\r\n                return `File \"${file.name}\" was completely uploaded!`;\r\n\r\n            default:\r\n                return `File \"${file.name}\" surprising upload event: ${event.type}.`;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Logs upload progress messages to the console\r\n     * @param message The message to log\r\n     */\r\n    protected showProgress(message: string) {\r\n        console.debug(message);\r\n    }\r\n\r\n    //#endregion\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { GenericService } from \"../../http/services/generic\";\r\n\r\n//@dynamic\r\n@Injectable()\r\nexport class BaseService extends GenericService<any> {\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor() {\r\n        super('')\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { EnumItem } from '../models/enum-item';\r\nimport { EnumMetadata } from '../models/enum-metadata';\r\nimport { KeyValue } from '../models/key-value';\r\n\r\n//@dynamic\r\n@Injectable()\r\nexport class EnumService {\r\n\r\n    /**\r\n     * Parses a string to an enum value\r\n     * @param enumType The type of the enum\r\n     * @param value The value to parse\r\n     */\r\n    public static parse<TEnum>(enumType: TEnum, value: string): any {\r\n        let keyValue = this.toKeyValue(enumType).filter(x => x.key?.toLowerCase() == (value || '').toLowerCase())[0];\r\n        if (keyValue) {\r\n            return keyValue.value;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parses an enum to a list of key-value objects\r\n     * @param enumType The type of the enum\r\n     */\r\n    public static toKeyValue<TEnum>(enumType: TEnum): Array<KeyValue> {\r\n        return Object.keys(enumType as any)\r\n            .map(k => (enumType as any)[k])\r\n            .filter(v => typeof v === \"string\")\r\n            .map(x => {\r\n                return { key: x, value: (enumType as any)[x] } as KeyValue\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Converts enum type to Array<EnumItem>\r\n     * @param enumType \r\n     */\r\n    public static toArray<TEnum>(enumType: TEnum, prefix: string = ''): EnumItem<TEnum>[] {\r\n        return Object.keys(enumType as any)\r\n            .map(k => (enumType as any)[k])\r\n            .filter(v => typeof v === \"string\")\r\n            .map(key => ({ id: (enumType as any)[key], name: `${prefix}${key}` } as EnumItem<TEnum>));\r\n    }\r\n\r\n    /**\r\n     * Function to get ordered enum values based on metadata\r\n     * @param enumObj \r\n     * @param metadataObj \r\n     * @returns \r\n     */\r\n    public static getOrderedValues2<T extends number>(enumObj: { [key in T]: any }, metadataObj: { [key in T]?: EnumMetadata }): Array<{ key: T, value: any }> {\r\n        const orderedValues = Object.keys(enumObj)\r\n            .map(key => parseInt(key, 10) as T)\r\n            .filter(key => !isNaN(key as any))\r\n            .sort((a, b) => (metadataObj[a]?.order ?? 0) - (metadataObj[b]?.order ?? 0))\r\n            .map(key => ({ key, value: enumObj[key] }));\r\n\r\n        return orderedValues;\r\n    }\r\n\r\n    /**\r\n     * Function to get ordered enum values based on metadata\r\n     * @param enumObj The enum object\r\n     * @param metadataObj Metadata object containing enum metadata\r\n     * @param context Optional context to be passed to hide function\r\n     * @returns An array of EnumItem objects representing ordered enum values\r\n     */\r\n    public static applyMetadata<T extends number>(enumObj: { [key in T]: any }, metadataObj: { [key in T]?: EnumMetadata }, context?: any): EnumItem<T>[] {\r\n        const orderedValues: EnumItem<T>[] = Object.keys(enumObj)\r\n            .map(key => parseInt(key, 10) as T)\r\n            .filter(key => !isNaN(key as any))\r\n            .filter(key => !(metadataObj[key]?.hidden))\r\n            .filter(key => !(metadataObj[key]?.hide?.(context)))\r\n            .sort((a, b) => (metadataObj[a]?.order ?? 0) - (metadataObj[b]?.order ?? 0))\r\n            .map(key => {\r\n                var metadata = metadataObj[key];\r\n                return {\r\n                    id: key,\r\n                    name: metadata?.display ?? enumObj[key] as any,\r\n                    hint: metadata?.hint,\r\n                    icon: metadata?.icon,\r\n                    textColor: metadata?.textColor,\r\n                    disabled: metadata?.disabled || metadata?.disable?.(context) || false,\r\n                    context: context\r\n                } as EnumItem<T>\r\n            });\r\n\r\n        return orderedValues;\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { filter, Observable, Subject } from \"rxjs\";\r\nimport { AppEventType } from \"../enums/app-event-type\";\r\nimport { AppEvent } from \"../models/app-event\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EventQueueService {\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    private eventBrocker = new Subject<AppEvent<any>>();\r\n\r\n    /**\r\n     * Event listener\r\n     * @param eventType \r\n     * @returns \r\n     */\r\n    public on(eventType: AppEventType): Observable<AppEvent<any>> {\r\n        return this.eventBrocker.pipe(filter(event => event.type === eventType));\r\n    }\r\n\r\n    /**\r\n     * Triggers an event\r\n     * @param event \r\n     */\r\n    public emit<T>(event: AppEvent<T>): void {\r\n        this.eventBrocker.next(event);\r\n    }\r\n}","export const Templates = {\r\n\t/**\r\n\t * Projection template for ID and number\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tidNumberTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@id:ID`}:</small>\r\n\t\t\t<small class=\"na\">${x?.id || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>Nr.:</small>\r\n\t\t\t<small class=\"na\">${x?.number || ''}</small>\r\n\t\t</div>`,\r\n\r\n\t/**\r\n\t * Projection template for ID and name\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tidNameTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@id:ID`}:</small>\r\n\t\t\t<small class=\"na\">${x?.id || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>Name:</small>\r\n\t\t\t<small class=\"na\">${x?.name || ''}</small>\r\n\t\t</div>`,\r\n\r\n\t/**\r\n\t * Projection template for ID and display name\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tidDisplayNameTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@id:ID`}:</small>\r\n\t\t\t<small class=\"na\">${x?.id || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@name:Name`}:</small>\r\n\t\t\t<small class=\"na\">${x?.displayName || ''}</small>\r\n\t\t</div>`,\r\n\r\n\t/**\r\n\t * Projection template for number and display name\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tnumberDisplayNameTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>Nr.:</small>\r\n\t\t\t<small class=\"na\">${x?.number || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@name:Name`}:</small>\r\n\t\t\t<small class=\"na\">${x?.displayName || ''}</small>\r\n\t\t</div>`,\r\n\r\n\t/**\r\n\t * Projection template for number and name\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tnumberNameTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>Nr.:</small>\r\n\t\t\t<small class=\"na\">${x?.number || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@name:Name`}:</small>\r\n\t\t\t<small class=\"na\">${x?.name || ''}</small>\r\n\t\t</div>`,\r\n\r\n\t/**\r\n\t * Projection template for ID and title\r\n\t * @param x \r\n\t * @returns \r\n\t */\r\n\tidTitleTemplate: (x: any) => `\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@id:ID`}:</small>\r\n\t\t\t<small class=\"na\">${x?.id || ''}</small>\r\n\t\t</div>\r\n\t\t<div class=\"labeled\">\r\n\t\t\t<small>${$localize`:@@title:Title`}.:</small>\r\n\t\t\t<small class=\"na\">${x?.title || ''}</small>\r\n\t\t</div>`,\r\n}","/// <reference types=\"@angular/localize\" />\r\n\r\nexport * from './animations/collapse/collapse.animation';\r\nexport * from './behaviors/constructor';\r\nexport * from './behaviors/disable-ripple.mixin';\r\nexport * from './behaviors/disabled.mixin';\r\nexport * from './components/enum-display/enum-display';\r\nexport * from './constants/constants';\r\nexport * from './directives/autofocus';\r\nexport * from './directives/delayed-hover';\r\nexport * from './directives/disable-control';\r\nexport * from './enums/app-event-type';\r\nexport * from './enums/filter-glue';\r\nexport * from './enums/filter-operator';\r\nexport * from './enums/salutation';\r\nexport * from './functions/decorators';\r\nexport * from './functions/functions';\r\nexport * from './functions/utils';\r\nexport * from './helpers/app-storage';\r\nexport * from './helpers/delegate';\r\nexport * from './helpers/dynamic-builder';\r\nexport * from './helpers/dynamic-component-compiler';\r\nexport * from './models/action-item';\r\nexport * from './models/app-event';\r\nexport * from './models/app-setting';\r\nexport * from './models/audit-entity';\r\nexport * from './models/audit-user';\r\nexport * from './models/base-entity';\r\nexport * from './models/common-error';\r\nexport * from './models/common-handler-context';\r\nexport * from './models/displayname-number-projection';\r\nexport * from './models/displayname-projection';\r\nexport * from './models/entity';\r\nexport * from './models/enum-item';\r\nexport * from './models/enum-metadata';\r\nexport * from './models/filter';\r\nexport * from './models/filter-field';\r\nexport * from './models/icommon-handler-context';\r\nexport * from './models/icon';\r\nexport * from './models/key-value';\r\nexport * from './models/modifiable-entity';\r\nexport * from './models/name-number-projection';\r\nexport * from './models/name-projection';\r\nexport * from './models/permission';\r\nexport * from './models/save-action';\r\nexport * from './models/suffix-button';\r\nexport * from './models/title-projection';\r\nexport * from './pipes/bind';\r\nexport * from './pipes/data-source';\r\nexport * from './pipes/enum';\r\nexport * from './pipes/file-size';\r\nexport * from './pipes/filter';\r\nexport * from './pipes/first-letter';\r\nexport * from './pipes/form-array';\r\nexport * from './pipes/form-control';\r\nexport * from './pipes/form-group';\r\nexport * from './pipes/func';\r\nexport * from './pipes/keys';\r\nexport * from './pipes/month-name';\r\nexport * from './pipes/only-number';\r\nexport * from './pipes/order';\r\nexport * from './pipes/placeholder';\r\nexport * from './pipes/property-join';\r\nexport * from './pipes/safe-html';\r\nexport * from './pipes/split';\r\nexport * from './pipes/time';\r\nexport * from './pipes/titlecase';\r\nexport * from './pipes/truncate';\r\nexport * from './pipes/values';\r\nexport * from './services/base';\r\nexport * from './services/context-helper';\r\nexport * from './services/enum';\r\nexport * from './services/event-queue';\r\nexport * from './templates/templates';\r\n\r\n","\r\nimport { ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { FuncPipe } from '../../common/public_api';\r\n\r\n@Component({\r\n    selector: 'vd-dynamic-menu',\r\n    templateUrl: './dynamic-menu.html',\r\n    imports: [\r\n    MatMenuTrigger,\r\n    MatIcon,\r\n    MatMenuModule,\r\n    MatButtonModule,\r\n    MatTooltipModule,\r\n    FuncPipe\r\n],\r\n})\r\nexport class VdDynamicMenuComponent {\r\n\r\n    /**\r\n     * matMenu: MatMenu\r\n     */\r\n    @ViewChild(MatMenu)\r\n    public matMenu?: MatMenu;\r\n\r\n    /**\r\n     * The context menu trigger\r\n     */\r\n    @ViewChild(MatMenuTrigger)\r\n    public contextMenuTrigger?: MatMenuTrigger;\r\n\r\n    /**\r\n     * items: ActionItem[]\r\n     */\r\n    @Input()\r\n    public items?: ActionItem[];\r\n\r\n    /**\r\n     * _data: any\r\n     */\r\n    private _data: any;\r\n\r\n    /**\r\n     * data: any\r\n     */\r\n    @Input()\r\n    public get data(): any { return this._data }\r\n    public set data(data: any) {\r\n        this._data = data;\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * index: number\r\n     */\r\n    @Input()\r\n    public index?: number;\r\n\r\n    /**\r\n     * context: any\r\n     */\r\n    @Input()\r\n    public context: any;\r\n\r\n    /**\r\n     * context: any\r\n     */\r\n    @Input()\r\n    public contextMenu?: boolean;\r\n\r\n    /**\r\n     * The current position of the context menu\r\n     */\r\n    public contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(private changeDetectorRef: ChangeDetectorRef) { }\r\n\r\n    /**\r\n     * Open the menu\r\n     */\r\n    public open(event: MouseEvent, data: any): void {\r\n        /* Avoids to show the visualization of the right-click menu of the browser */\r\n        event?.preventDefault();\r\n\r\n        /* Set the data for the events */\r\n        this.data = data;\r\n\r\n        /* Set the X and Y postion of the context menu */\r\n        this.contextMenuPosition.x = `${event.clientX}px`;\r\n        this.contextMenuPosition.y = `${event.clientY}px`;\r\n        this.matMenu?.focusFirstItem('mouse');\r\n\r\n        /* Open the menu and update its postion */\r\n        this.contextMenuTrigger?.openMenu();\r\n        this.contextMenuTrigger?.updatePosition();\r\n\r\n        /* Handle clicks on the menu overlay */\r\n        document.getElementsByClassName('cdk-overlay-container')[0]?.addEventListener('contextmenu', (offEvent: any) => {\r\n            offEvent.preventDefault();\r\n            this.contextMenuTrigger?.closeMenu();\r\n            setTimeout(() => this.open(offEvent, data), 100);\r\n        }, { once: true });\r\n    }\r\n}","<!-- Container row layout for displaying action items horizontally, aligned center vertically -->\r\n@if (items) {\r\n    <div layout=\"row\" layout-align=\"start center\" flex>\r\n        @for (menu of items; track menu) {\r\n            <!-- #region Button trigger for actions that open a submenu -->\r\n            @if (!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))) {\r\n                <a mat-icon-button\r\n                   [mat-menu-trigger-for]=\"matMenu\"\r\n                   [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n                   [matTooltip]=\"menu.tooltip\"\r\n                   (click)=\"$event.stopPropagation();\">\r\n                    <!-- Display menu icon -->\r\n                    <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n                              [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n                              [style.color]=\"menu.iconColor\">\r\n                        {{ (menu.icon ?? 'more_vert' | func:data:context) || 'more_vert' }}\r\n                    </mat-icon>\r\n                    <!-- Optional title next to icon -->\r\n                    <span [style.color]=\"menu.textColor\">{{menu.title | func:data:context}}</span>\r\n                </a>\r\n            }\r\n            <!-- #endregion -->\r\n            <!-- #region Invisible context menu trigger used for right-click context positioning -->\r\n            @if (contextMenu) {\r\n                <div style=\"visibility: hidden; position: fixed\"\r\n                     [style.left]=\"contextMenuPosition.x\"\r\n                     [style.top]=\"contextMenuPosition.y\"\r\n                     [matMenuTriggerFor]=\"matMenu\"></div>\r\n            }\r\n            <!-- #endregion -->\r\n            <!-- #region Direct action button (no submenu) -->\r\n            @if (!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))) {\r\n                <a mat-icon-button\r\n                   [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n                   [matTooltip]=\"menu.tooltip\"\r\n                   (click)=\"$event.stopPropagation(); menu.event ? menu.event(data, context, index) : null\">\r\n                    <!-- Icon for the action -->\r\n                    <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n                              [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n                              [style.color]=\"menu.iconColor\">\r\n                        {{ (menu.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n                    </mat-icon>\r\n                </a>\r\n            }\r\n            <!-- #endregion -->\r\n            <!-- #region MatMenu with nested submenus -->\r\n            <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n                @for (menuItem of menu?.items; track menuItem) {\r\n                    <!-- Simple menu item without sub-items -->\r\n                    @if (!menuItem.items) {\r\n                        @if (!menuItem.hide || !menuItem.hide(data, context, index)) {\r\n                            <a mat-menu-item\r\n                               (click)=\"menuItem.event ? menuItem.event(data, context, index) : null\"\r\n                               [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n                               [matTooltip]=\"menuItem.tooltip\">\r\n                                <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n                                          [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n                                          [style.color]=\"menuItem.iconColor\">\r\n                                    {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n                                </mat-icon>\r\n                                <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n                            </a>\r\n                        }\r\n                    }\r\n                    <!-- Menu item with nested submenu -->\r\n                    @if (menuItem.items) {\r\n                        <!-- Define the submenu -->\r\n                        <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n                            @for (menuSubItem of menuItem.items; track menuSubItem) {\r\n                                @if (!menuSubItem.hide || !menuSubItem.hide(data, context, index)) {\r\n                                    <a mat-menu-item\r\n                                       (click)=\"menuSubItem.event ? menuSubItem.event(data, context, index) : null\"\r\n                                       [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\"\r\n                                       [matTooltip]=\"menuItem.tooltip\">\r\n                                        <mat-icon fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n                                                  [class]=\"menuSubItem.iconClass ?? '' | func:data:context\"\r\n                                                  [style.color]=\"menuSubItem.iconColor\">\r\n                                            {{ (menuSubItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n                                        </mat-icon>\r\n                                        <span [style.color]=\"menuSubItem.textColor\">{{menuSubItem.title | func:data:context}}</span>\r\n                                    </a>\r\n                                }\r\n                            }\r\n                        </mat-menu>\r\n                        <!-- Trigger for submenu -->\r\n                        @if (!menuItem.hide || !menuItem.hide(data, context, index)) {\r\n                            <a mat-menu-item\r\n                               [matMenuTriggerFor]=\"subMenu\"\r\n                               [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n                               [matTooltip]=\"menuItem.tooltip\">\r\n                                <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n                                          [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n                                          [style.color]=\"menuItem.iconColor\">\r\n                                    {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n                                </mat-icon>\r\n                                <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n                            </a>\r\n                        }\r\n                    }\r\n                }\r\n            </mat-menu>\r\n            <!-- #endregion -->\r\n        }\r\n    </div>\r\n}","import { FocusMonitor } from \"@angular/cdk/a11y\";\r\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\r\nimport { ChangeDetectorRef, Directive, DoCheck, ElementRef, HostAttributeToken, HostBinding, HostListener, inject, Input, OnDestroy } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from \"@angular/forms\";\r\nimport { _ErrorStateTracker, ErrorStateMatcher } from \"@angular/material/core\";\r\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n/**\r\n * Abstract class for custom form field controls.\r\n */\r\n@Directive()\r\nexport abstract class AbstractMatFormField<T> implements DoCheck, OnDestroy, ControlValueAccessor, MatFormFieldControl<T> {\r\n\r\n    /**\r\n     * @property ngControl\r\n     * @description Gets the Angular control directive for this control.\r\n     * @type {NgControl}\r\n     */\r\n    public ngControl: NgControl = inject(NgControl, { self: true, optional: true })!;\r\n\r\n    /**\r\n     * @property changeDetectorRef\r\n     * @description Change detector reference.\r\n     * @type {ChangeDetectorRef}\r\n     */\r\n    protected changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n    /**\r\n     * @property elementRef\r\n     * @description Element reference.\r\n     * @type {ElementRef}\r\n     */\r\n    public readonly elementRef = inject(ElementRef);\r\n\r\n    /**\r\n     * @property focusMonitor\r\n     * @description Focus monitor.\r\n     * @type {FocusMonitor}\r\n     */\r\n    public readonly focusMonitor = inject(FocusMonitor);\r\n\r\n    /**\r\n     * @property errorStateTracker\r\n     * @description Error state tracker.\r\n     * @type {_ErrorStateTracker}\r\n     */\r\n    protected errorStateTracker?: _ErrorStateTracker;\r\n\r\n    /**\r\n     * @property errorStateMatcher\r\n     * @description Error state matcher.\r\n     * @type {ErrorStateMatcher}\r\n     */\r\n    @Input()\r\n    public get errorStateMatcher() { return this.errorStateTracker!.matcher; }\r\n    public set errorStateMatcher(value: ErrorStateMatcher) { this.errorStateTracker!.matcher = value; }\r\n\r\n    /**\r\n     * @property errorState\r\n     * @description Error state.\r\n     * @type {boolean}\r\n     */\r\n    get errorState() { return this.errorStateTracker!.errorState; }\r\n    set errorState(value: boolean) { this.errorStateTracker!.errorState = value; }\r\n\r\n    /**\r\n     * @property stateChanges\r\n     * @description Emits when the component state changes.\r\n     * @type {Subject<void>}\r\n     */\r\n    public readonly stateChanges = new Subject<void>();\r\n\r\n    /**\r\n     * @property _value\r\n     * @description Control value.\r\n     * @type {T | null}\r\n     */\r\n    protected _value: T | null = null;\r\n\r\n    /**\r\n     * @property value\r\n     * @description Sets the control value.\r\n     * @type {T}\r\n     */\r\n    public set value(value: T) {\r\n        let valueChanged = this._value != value;\r\n        this._value = value;\r\n        if (valueChanged && this.onChange) {\r\n            this.onChange(value);\r\n        }\r\n\r\n        setTimeout(() => this.stateChanges.next(), 50);\r\n    }\r\n\r\n    /**\r\n     * @property value\r\n     * @description Gets the control value.\r\n     * @type {T | null}\r\n     */\r\n    public get value(): T | null {\r\n        return this._value;\r\n    }\r\n\r\n    /**\r\n     * @property _placeholder\r\n     * @description Placeholder text.\r\n     * @type {string}\r\n     */\r\n    public _placeholder: string = \"\";\r\n\r\n    /**\r\n     * @property placeholder\r\n     * @description Sets the placeholder text.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public set placeholder(placeholder: string) {\r\n        this._placeholder = placeholder;\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * @property placeholder\r\n     * @description Gets the placeholder text.\r\n     * @type {string}\r\n     */\r\n    public get placeholder() {\r\n        return this._placeholder;\r\n    }\r\n\r\n    /**\r\n     * @property _required\r\n     * @description Required state.\r\n     * @type {boolean}\r\n     */\r\n    public _required: boolean = false;\r\n\r\n    /**\r\n     * @property required\r\n     * @description Sets the required state.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public set required(required: any) {\r\n        this._required = coerceBooleanProperty(required);\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * @property required\r\n     * @description Gets the required state.\r\n     * @type {boolean}\r\n     */\r\n    public get required() {\r\n        return this._required;\r\n    }\r\n\r\n    /**\r\n     * @property _readonly\r\n     * @description Readonly state.\r\n     * @type {boolean}\r\n     */\r\n    public _readonly?: boolean;\r\n\r\n    /**\r\n     * @property readonly\r\n     * @description Sets the readonly state.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    get readonly() { return this._readonly; }\r\n    set readonly(readonly) {\r\n        this._readonly = coerceBooleanProperty(readonly);\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * @property _disabled\r\n     * @description Disabled state.\r\n     * @type {boolean}\r\n     */\r\n    public _disabled: boolean = false;\r\n\r\n    /**\r\n     * @property disabled\r\n     * @description Sets the disabled state.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public set disabled(disabled: any) {\r\n        this._disabled = coerceBooleanProperty(disabled);\r\n        if (this.focused) {\r\n            this.focused = false;\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @property disabled\r\n     * @description Gets the disabled state.\r\n     * @type {boolean}\r\n     */\r\n    public get disabled() {\r\n        if (this.ngControl?.disabled !== null) {\r\n            return this.ngControl?.disabled;\r\n        }\r\n\r\n        return this._disabled;\r\n    }\r\n\r\n    /**\r\n     * @property empty\r\n     * @description Checks if the control is empty.\r\n     * @type {boolean}\r\n     */\r\n    public get empty(): boolean {\r\n        return !this._value;\r\n    }\r\n\r\n    /**\r\n     * @property shouldLabelFloat\r\n     * @description Checks if the label should float.\r\n     * @type {boolean}\r\n     */\r\n    public get shouldLabelFloat(): boolean {\r\n        return this.focused || !this.empty;\r\n    }\r\n\r\n    /**\r\n     * @property focused\r\n     * @description Focused state.\r\n     * @type {boolean}\r\n     */\r\n    public focused: boolean = false;\r\n\r\n    /**\r\n     * @property touched\r\n     * @description Touched state.\r\n     * @type {boolean}\r\n     */\r\n    public touched: boolean = false;\r\n\r\n    /**\r\n     * @property nextId\r\n     * @description Element ID.\r\n     * @type {number}\r\n     */\r\n    private static nextId: number = 0;\r\n\r\n    /**\r\n     * @property id\r\n     * @description Element ID.\r\n     * @type {string}\r\n     */\r\n    @HostBinding()\r\n    public id: string;\r\n\r\n    /**\r\n     * @property describedBy\r\n     * @description ARIA described by attribute.\r\n     * @type {string}\r\n     */\r\n    @HostBinding(\"attr.aria-describedBy\")\r\n    public describedBy: string = \"\";\r\n\r\n    /**\r\n     * @description Constructor.\r\n     */\r\n    constructor(public controlType: string) {\r\n        const defaultErrorStateMatcher = inject(ErrorStateMatcher);\r\n        const parentForm = inject(NgForm, { optional: true });\r\n        const parentFormGroup = inject(FormGroupDirective, { optional: true });\r\n        const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\r\n\r\n        /* Generate a unique ID for the control */\r\n        this.id = `${this.controlType}-${AbstractMatFormField.nextId++}`;\r\n\r\n        /* Set the value accessor for the control */\r\n        if (this.ngControl) {\r\n            this.ngControl.valueAccessor = this;\r\n        }\r\n\r\n        /* Initialize the error state tracker */\r\n        this.errorStateTracker = new _ErrorStateTracker(\r\n            defaultErrorStateMatcher,\r\n            this.ngControl,\r\n            parentFormGroup,\r\n            parentForm,\r\n            this.stateChanges,\r\n        );\r\n\r\n        /* Monitor focus changes */\r\n        this.focusMonitor.monitor(this.elementRef.nativeElement, true).subscribe(origin => {\r\n            this.focused = !!origin;\r\n            this.stateChanges.next();\r\n            this.changeDetectorRef.markForCheck();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * @description Registers a function called when the control value changes.\r\n     * @param {function} fn - Change callback function.\r\n     */\r\n    public registerOnChange(fn: (_: T) => void): void {\r\n        this.onChange = fn;\r\n    }\r\n\r\n    /**\r\n     * @description Registers a function called when the control is touched.\r\n     * @param {function} fn - Touched callback function.\r\n     */\r\n    public registerOnTouched(fn: () => void): void {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    /**\r\n     * @description Writes a new value to the control.\r\n     * @param {T} value - New value.\r\n     */\r\n    public writeValue(value: T): void {\r\n        this.value = value;\r\n    }\r\n\r\n    /**\r\n     * @description Sets the described by IDs.\r\n     * @param {string[]} ids - Array of IDs.\r\n     */\r\n    public setDescribedByIds(ids: string[]): void {\r\n        this.describedBy = ids.join(\" \");\r\n    }\r\n\r\n    /**\r\n     * @description Updates the error state.\r\n     */\r\n    public updateErrorState() {\r\n        this.errorStateTracker!.updateErrorState();\r\n    }\r\n\r\n    /**\r\n     * @description Handles blur event.\r\n     */\r\n    @HostListener(\"focusout\")\r\n    public onBlur() {\r\n        this.focused = false;\r\n        if (this.onTouched) {\r\n            this.onTouched();\r\n        }\r\n\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * @description Focuses the control.\r\n     */\r\n    public abstract focus(): void;\r\n\r\n    /**\r\n     * @description Handles container click.\r\n     */\r\n    public onContainerClick(): void {\r\n        if (!this.focused) {\r\n            this.focus();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @property onChange\r\n     * @description Change callback.\r\n     * @type {function}\r\n     */\r\n    protected onChange?: (value: T) => void;\r\n\r\n    /**\r\n     * @property onTouched\r\n     * @description Touched callback.\r\n     * @type {function}\r\n     */\r\n    protected onTouched?: () => void;\r\n\r\n    /**\r\n     * @description Lifecycle hook for change detection.\r\n     */\r\n    public ngDoCheck(): void {\r\n        if (this.ngControl) {\r\n            this.updateErrorState();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @description Lifecycle hook for cleanup.\r\n     */\r\n    public ngOnDestroy(): void {\r\n        this.stateChanges.complete();\r\n        this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\r\n    }\r\n}","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Directive, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, debounceTime, distinctUntilChanged, map } from 'rxjs';\r\nimport { EnumMetadata } from '../../common/models/enum-metadata';\r\nimport { Icon } from '../../common/models/icon';\r\nimport { EnumService } from '../../common/services/enum';\r\nimport { AbstractMatFormField } from '../../forms/helpers/abstract-mat-form-field';\r\n\r\n@Directive()\r\nexport abstract class AbstractSelectFormField<T> extends AbstractMatFormField<T> implements OnInit {\r\n\r\n    /**\r\n     * @property _endpointChange\r\n     * @description A BehaviorSubject that tracks changes to the endpoint data.\r\n     * @type {BehaviorSubject<any[]>}\r\n     */\r\n    private _endpointChange: BehaviorSubject<any[]> = new BehaviorSubject(<any>[]);\r\n\r\n    /**\r\n     * @property _enumChange\r\n     * @description A BehaviorSubject that tracks changes to the enum data.\r\n     * @type {BehaviorSubject<any[]>}\r\n     */\r\n    private _enumChange: BehaviorSubject<any[]> = new BehaviorSubject(<any>[]);\r\n\r\n    /**\r\n     * @property _http\r\n     * @description The HTTP client service used to fetch data from an API.\r\n     * @type {HttpClient | undefined}\r\n     */\r\n    protected _http?: HttpClient;\r\n\r\n    /**\r\n     * @property _defaultOption\r\n     * @description Whether the default option should be selected by default.\r\n     * @type {boolean}\r\n     */\r\n    protected _defaultOption: boolean = true;\r\n\r\n    /**\r\n     * @property _multiple\r\n     * @description Whether multiple selection is enabled.\r\n     * @type {boolean}\r\n     */\r\n    protected _multiple: boolean = false;\r\n\r\n    /**\r\n     * @property _sorted\r\n     * @description Whether the options should be sorted.\r\n     * @type {boolean}\r\n     */\r\n    protected _sorted: boolean = true;\r\n\r\n    /**\r\n     * @property _endpoint\r\n     * @description The API endpoint or a function returning the endpoint URL.\r\n     * @type {string | Function | undefined}\r\n     */\r\n    protected _endpoint?: string | Function;\r\n\r\n    /**\r\n     * @property _params\r\n     * @description Parameters to be sent with the API request.\r\n     * @type {any}\r\n     */\r\n    protected _params: any = {};\r\n\r\n    /**\r\n     * @property _projection\r\n     * @description Projection fields to be included in the API request.\r\n     * @type {string | string[] | undefined}\r\n     */\r\n    protected _projection?: string | string[];\r\n\r\n    /**\r\n     * @property _loadData\r\n     * @description Whether to load data automatically.\r\n     * @type {boolean}\r\n     */\r\n    protected _loadData: boolean = true;\r\n\r\n    /**\r\n     * @property _enumFilter\r\n     * @description A filter function to apply to the enum data.\r\n     * @type {Function | undefined}\r\n     */\r\n    protected _enumFilter?: Function;\r\n\r\n    /**\r\n     * @property _compareWith\r\n     * @description A function to compare option values with the selected values.\r\n     * @type {(o1: any, o2: any) => boolean | undefined}\r\n     */\r\n    private _compareWith?: (o1: any, o2: any) => boolean;\r\n\r\n    /**\r\n     * @property defaultCompareWith\r\n     * @description A function to compare option values with the selected values.\r\n     * @type {(o1: any, o2: any) => boolean}\r\n     */\r\n    public defaultCompareWith = (o1: any, o2: any) => o1 === o2;\r\n\r\n    /**\r\n     * @property enum\r\n     * @description The enumeration data or endpoint for the options.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public enum: any;\r\n\r\n    /**\r\n     * @property enumMetadata\r\n     * @description Metadata for enum types.\r\n     * @type {{ [key in any]: EnumMetadata } | undefined}\r\n     */\r\n    @Input()\r\n    public enumMetadata?: { [key in any]: EnumMetadata };\r\n\r\n    /**\r\n     * @property textPrefix\r\n     * @description Optional prefix text to display.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public textPrefix: string = '';\r\n\r\n    /**\r\n     * @property optionTextProperty\r\n     * @description The property name in the option object for the text to display.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public optionTextProperty: string = 'name';\r\n\r\n    /**\r\n     * @property optionValueProperty\r\n     * @description The property name in the option object for the value of the options.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public optionValueProperty: string = 'id';\r\n\r\n    /**\r\n     * @property matIconKey\r\n     * @description The key for the Material icon to display.\r\n     * @type {string | undefined}\r\n     */\r\n    @Input()\r\n    public matIconKey?: string;\r\n\r\n    /**\r\n     * @property svgIconKey\r\n     * @description The key for the SVG icon to display.\r\n     * @type {string | undefined}\r\n     */\r\n    @Input()\r\n    public svgIconKey?: string;\r\n\r\n    /**\r\n     * @property fontSet\r\n     * @description Font set name for font icon.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public fontSet?: string = 'material-symbols-outlined';\r\n\r\n    /**\r\n     * @property prefix\r\n     * @description Optional prefix to display before the options.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public prefix: any = '';\r\n\r\n    /**\r\n     * @property options\r\n     * @description The list of available options.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public options: any;\r\n\r\n    /**\r\n     * @property filteredOptions\r\n     * @description The list of filtered options.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public filteredOptions: any;\r\n\r\n    /**\r\n     * @property filterable\r\n     * @description Whether the options can be filtered.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public filterable: boolean = true;\r\n\r\n    /**\r\n     * @property cache\r\n     * @description Whether to cache the options.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public cache: boolean = true;\r\n\r\n    /**\r\n     * @property selectFirst\r\n     * @description Whether to select the first option by default.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public selectFirst: boolean = false;\r\n\r\n    /**\r\n     * @property sortBy\r\n     * @description The field by which to sort the options.\r\n     * @type {string | undefined}\r\n     */\r\n    @Input()\r\n    public sortBy?: string;\r\n\r\n    /**\r\n     * @property mapper\r\n     * @description A function to map the options before displaying.\r\n     * @type {(x: any[]) => any | undefined}\r\n     */\r\n    @Input()\r\n    public mapper?: (x: any[]) => any;\r\n\r\n    /**\r\n     * @property optionIcon\r\n     * @description A function to return the icon for a given option.\r\n     * @type {(x: any) => Icon<T, any> | undefined}\r\n     */\r\n    @Input()\r\n    public optionIcon?: (x: any) => Icon<T, any>;\r\n\r\n    /**\r\n     * @property defaultOption\r\n     * @description Whether the default option should be selected.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get defaultOption() { return this._defaultOption; }\r\n    public set defaultOption(defaultOption) { this._defaultOption = coerceBooleanProperty(defaultOption); this.stateChanges.next(); }\r\n\r\n    /**\r\n     * @property multiple\r\n     * @description Whether multiple selection is enabled.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get multiple() { return this._multiple; }\r\n    public set multiple(multi) {\r\n        /* Update the control type based on the multiple value */\r\n        if (multi) {\r\n            this.controlType = `${this.controlType}${multi ? '-multiple' : ''}`;\r\n        }\r\n\r\n        /* Update the multiple value and trigger state change */\r\n        this._multiple = coerceBooleanProperty(multi); this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * @property sorted\r\n     * @description Whether the options should be sorted.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get sorted() { return this._sorted; }\r\n    public set sorted(sorted) { this._sorted = coerceBooleanProperty(sorted); this.stateChanges.next(); }\r\n\r\n    /**\r\n     * @property endpoint\r\n     * @description The API endpoint or a function returning the endpoint URL.\r\n     * @type {string | Function | undefined}\r\n     */\r\n    @Input()\r\n    public get endpoint(): string | Function | undefined { return this._endpoint; }\r\n    public set endpoint(endpoint: string | Function) { this._endpoint = endpoint; this.endpointChanged(); }\r\n\r\n    /**\r\n     * @property params\r\n     * @description Parameters to be sent with the API request.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public get params() { return this._params; }\r\n    public set params(params: any) {\r\n        if (params) {\r\n            // Remove empty parameters\r\n            Object.keys(params).forEach((key) => {\r\n                if (params[key] == null || params[key] == '' || params[key] == 'undefined') {\r\n                    delete params[key];\r\n                }\r\n            });\r\n\r\n            // Update parameters if they have changed\r\n            if (JSON.stringify(this._params) !== JSON.stringify(params)) {\r\n                this._params = params;\r\n                this.endpointChanged();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @property projection\r\n     * @description Projection fields to be included in the API request.\r\n     * @type {string | string[]}\r\n     */\r\n    @Input()\r\n    public get projection(): string | string[] { return this._projection ?? ''; }\r\n    public set projection(projection: string | string[] | undefined) { this._projection = projection; this.endpointChanged(); }\r\n\r\n    /**\r\n     * @property loadData\r\n     * @description Whether to load data automatically.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get loadData() { return this._loadData; }\r\n    public set loadData(loadData) { this._loadData = coerceBooleanProperty(loadData); this.endpointChanged(); }\r\n\r\n    /**\r\n     * @property enumFilter\r\n     * @description A filter function to apply to the enum data.\r\n     * @type {Function | undefined}\r\n     */\r\n    @Input()\r\n    public get enumFilter(): Function | undefined { return this._enumFilter; }\r\n    public set enumFilter(enumFilter: Function) { this._enumFilter = enumFilter; this.enumChanged(); }\r\n\r\n    /**\r\n     * @property disabled\r\n     * @description Whether the control is disabled.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public override get disabled() { return this._readonly || super.disabled; }\r\n    public override set disabled(disabled: any) {\r\n        this._disabled = coerceBooleanProperty(disabled);\r\n        if (this.focused) {\r\n            this.focused = false;\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @property currentValue\r\n     * @description Gets the currently selected value(s).\r\n     * @type {any}\r\n     */\r\n    public get currentValue(): any {\r\n        if (this.multiple) {\r\n            return this.filterValue(this._value);\r\n        }\r\n\r\n        return this.options?.filter((x: any) => x[this.optionValueProperty] == this._value)[0];\r\n    }\r\n\r\n    /**\r\n     * @property context\r\n     * @description An optional context object that can be used to provide additional information for the component's behavior, such as dynamic hiding of options based on the context.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public context: any;\r\n\r\n    /**\r\n     * @property compareWith\r\n     * @description A function to compare the option values with the selected values.\r\n     * @type {((o1: any, o2: any) => boolean) | undefined}\r\n     */\r\n    @Input()\r\n    public get compareWith(): ((o1: any, o2: any) => boolean) | undefined { return this._compareWith; }\r\n    public set compareWith(fn: ((o1: any, o2: any) => boolean) | undefined) { this._compareWith = fn; }\r\n\r\n    /**\r\n     * @property onValueChange\r\n     * @description change?: function\r\n     * @type {EventEmitter<any>}\r\n     */\r\n    @Output('change')\r\n    public onValueChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * @property onItemChange\r\n     * @description itemChange?: function\r\n     * @type {EventEmitter<any>}\r\n     */\r\n    @Output('itemChange')\r\n    public onItemChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * @property onSelected\r\n     * @description selected?: function\r\n     * @type {EventEmitter<any>}\r\n     */\r\n    @Output('selected')\r\n    public onSelected: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * @property onItemSelected\r\n     * @description itemSelected?: function\r\n     * @type {EventEmitter<any>}\r\n     */\r\n    @Output('itemSelected')\r\n    public onItemSelected: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * @property onLaunch\r\n     * @description launch?: function\r\n     * @type {EventEmitter<any>}\r\n     */\r\n    @Output('launch')\r\n    public onLaunch: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * @property searchField\r\n     * @description searchField?: function\r\n     * @type {(x: any) => string | undefined}\r\n     */\r\n    @Input() searchField?: (x: any) => string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param controlType\r\n     */\r\n    constructor(controlType: string) {\r\n        super(controlType);\r\n        if (!this.enum) {\r\n            this._http = inject(HttpClient);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after a component's \r\n     * view has been fully initialized.\r\n     */\r\n    ngOnInit(): void {\r\n        this.filteredOptions = this.options;\r\n\r\n        if (this.enum) {\r\n            this.filterable = this.enumMetadata != null;\r\n            this.filteredOptions = this.options = this.enumMetadata ? EnumService.applyMetadata(this.enum, this.enumMetadata, this.context) : EnumService.toArray(this.enum, this.prefix);\r\n\r\n            /* Apply enum filters */\r\n            if (this._enumFilter && this.options) {\r\n                this.filteredOptions = this.options = this.options.filter(this._enumFilter);\r\n            }\r\n\r\n            if (Array.isArray(this.options)) {\r\n                this.handleItemSelected(this.value);\r\n            }\r\n        } else if (!this.options) {\r\n            this._endpointChange.pipe(distinctUntilChanged()).pipe(debounceTime(1)).subscribe(_ => {\r\n                let headers = new HttpHeaders();\r\n                if (this.cache) {\r\n                    headers.set('Client-Cache', 'Yes');\r\n                }\r\n\r\n                /* Init params, if null */\r\n                let params = Object.assign({}, this._params || {});\r\n\r\n                /* Add projection, if any */\r\n                if (this.projection) {\r\n                    params.projection = Array.isArray(this.projection) ? this.projection.join(',') : this.projection;\r\n                }\r\n\r\n                /* Add sorting */\r\n                if (!this.params.sortBy && (this.sortBy || this.sorted)) {\r\n                    params.sortBy = this.sortBy || this.optionTextProperty;\r\n                }\r\n\r\n                /* Get endpoint */\r\n                let endpoint = typeof this.endpoint === 'function' ? this.endpoint(this) : (<string>this.endpoint);\r\n                if (this._http && endpoint && this.loadData) {\r\n                    this._http.get(endpoint, { params: params, headers: headers })\r\n                        .pipe(map((x: any) => this.mapper ? this.mapper(x) : x))\r\n                        .subscribe(x => {\r\n                            this.filteredOptions = this.options = x;\r\n\r\n                            if (this.selectFirst && !this.value && this.options?.length > 0) {\r\n                                this.value = this.multiple ? [this.options[0]] : this.options[0][this.optionValueProperty];\r\n                            }\r\n\r\n                            if (Array.isArray(this.options)) {\r\n                                this.handleItemSelected(this.value);\r\n                            }\r\n\r\n                            super.writeValue(this.value!);\r\n                            this.changeDetectorRef.detectChanges();\r\n                        });\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * From ControlValueAccessor interface\r\n     * @param value \r\n     */\r\n    override writeValue(value: any) {\r\n        /* Write the value and trigger some events */\r\n        super.writeValue(value);\r\n        this.onSelected.emit(value);\r\n\r\n        if (Array.isArray(this.options)) {\r\n            this.handleItemSelected(this.value);\r\n        }\r\n\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Method executed when an option changes\r\n     */\r\n    public handleChange($event: any): void {\r\n        this.onValueChange.emit($event);\r\n        this.handleItemChange($event.value);\r\n    }\r\n\r\n    /**\r\n     * Handles item changes\r\n     * @param value \r\n     */\r\n    public handleItemSelected(value: any): void {\r\n        if (this.multiple) {\r\n            this.onItemSelected.emit(this.options.filter((x: any) => (value || []).includes(x[this.optionValueProperty])));\r\n        } else {\r\n            this.onItemSelected.emit(this.options.filter((x: any) => x[this.optionValueProperty] == value)[0]);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles item changes\r\n     * @param value \r\n     */\r\n    public handleItemChange(value: any): void {\r\n        if (this.multiple) {\r\n            this.onItemChange.emit(this.options.filter((x: any) => (value || []).includes(x[this.optionValueProperty])));\r\n        } else {\r\n            this.onItemChange.emit(this.options.filter((x: any) => x[this.optionValueProperty] == value)[0]);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handels filter event\r\n     * @param $event \r\n     */\r\n    public handleFilter($event: Event): void {\r\n        let searchText: string = ($event?.target as HTMLInputElement)?.value ?? '';\r\n        if (this.searchField) {\r\n            this.filteredOptions = this.options.filter((x: any) => this.searchField!(x)?.toLowerCase().search(searchText.toLowerCase()) > -1);\r\n        } else {\r\n            this.filteredOptions = this.options.filter((x: any) => x[this.optionTextProperty]?.toLowerCase().search(searchText.toLowerCase()) > -1);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Filters the options based on the provided value and comparison logic.\r\n     * @param value The value(s) to compare against the options.\r\n     * @returns An array of filtered options that match the given value.\r\n     */\r\n    protected filterValue(value: any): any[] | undefined {\r\n        /* Check if a comparison function is defined */\r\n        if (this.compareWith) {\r\n            /* Return options that match any of the provided values using the compareWith function */\r\n            return this.options?.filter((option: any) =>\r\n                (<any[]>(value || [])).some(val => this.compareWith!(option, val))\r\n            );\r\n        }\r\n\r\n        /* If no comparison function is defined, return options that are included in the provided values */\r\n        return this.options?.filter((option: any) =>\r\n            (<any[]>(value || [])).includes(option[this.optionValueProperty])\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Trigger endpoint changed\r\n     */\r\n    protected endpointChanged(): void {\r\n        this._endpointChange.next([this.endpoint, this._params, this.projection, this._loadData]);\r\n    }\r\n\r\n    /**\r\n     * Trigger enum changed\r\n     */\r\n    protected enumChanged(): void {\r\n        this._enumChange.next([this._enumFilter]);\r\n    }\r\n\r\n    /**\r\n     * Log to console\r\n     * @param message \r\n     * @param optionalParams \r\n     */\r\n    public log(message: any, ...optionalParams: any[]) {\r\n        console.log(message, optionalParams);\r\n    }\r\n}","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdSelectOptionDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-select-option]ng-template'\r\n})\r\nexport class VdSelectOptionDirective extends CdkPortal {\r\n    /**\r\n     * Constructor\r\n     * @param templateRef \r\n     * @param viewContainerRef \r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdSelectTriggerDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-select-trigger]ng-template'\r\n})\r\nexport class VdSelectTriggerDirective extends CdkPortal {\r\n    /**\r\n     * Constructor\r\n     * @param templateRef \r\n     * @param viewContainerRef \r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MAT_SELECT_CONFIG, MatSelect, MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AbstractSelectFormField } from '../../forms/helpers/abstract-select-form-field';\r\nimport { VdSelectOptionDirective } from '../directives/vd-select-option';\r\nimport { VdSelectTriggerDirective } from '../directives/vd-select-trigger';\r\n\r\n@Component({\r\n    selector: 'vd-select',\r\n    templateUrl: 'select.html',\r\n    styleUrls: ['select.scss'],\r\n    imports: [\r\n        CommonModule,\r\n        MatSelectModule,\r\n        MatInputModule,\r\n        MatIconModule,\r\n        MatChipsModule,\r\n        MatTooltip,\r\n        FormsModule\r\n    ],\r\n    providers: [\r\n        { provide: MatFormFieldControl, useExisting: VdSelectComponent },\r\n        {\r\n            provide: MAT_SELECT_CONFIG,\r\n            useValue: { overlayPanelClass: 'vd-select-filter-overlay' }\r\n        }\r\n    ]\r\n})\r\nexport class VdSelectComponent extends AbstractSelectFormField<any> implements AfterViewInit {\r\n\r\n    /**\r\n     * CSS class applied to the trigger element.\r\n     */\r\n    protected _triggerCssClass?: string;\r\n\r\n    /**\r\n     * Mode of the trigger, default is 'chip'.\r\n     */\r\n    protected _triggerMode?: 'chip';\r\n\r\n    /**\r\n     * Template for rendering options.\r\n     */\r\n    @ContentChild(VdSelectOptionDirective)\r\n    public optionTemplate?: VdSelectOptionDirective;\r\n\r\n    /**\r\n     * Template for rendering the trigger.\r\n     */\r\n    @ContentChild(VdSelectTriggerDirective)\r\n    public triggerTemplate?: VdSelectTriggerDirective;\r\n\r\n    /** \r\n     * Reference to the MatSelect element.\r\n     */\r\n    @ViewChild(MatSelect, { static: false })\r\n    public selectEl?: MatSelect;\r\n\r\n    /** \r\n     * Reference to the filter input element.\r\n     */\r\n    @ViewChild('filterInput', { static: false })\r\n    public filterInput?: ElementRef;\r\n\r\n    /**\r\n     * CSS class applied to the trigger element.\r\n     */\r\n    @Input()\r\n    public get triggerCssClass() { return this._triggerCssClass; }\r\n    public set triggerCssClass(triggerCssClass) {\r\n        this._triggerCssClass = triggerCssClass;\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * Gets the display values of the selected options for the trigger.\r\n     * \r\n     * @returns The display values of the selected options\r\n     */\r\n    public get triggerValues(): any[] { return this.selectedOptions?.map(option => option[this.optionValueProperty]); }\r\n\r\n    /**\r\n     * Retrieves the currently selected options from the filtered options.\r\n     * If multiple options are selected, returns them as an array.\r\n     * If a single option is selected, returns it as an array with one element.\r\n     * \r\n     * @returns An array of selected items from the filtered options.\r\n     */\r\n    public get selectedOptions(): any[] {\r\n        const selected = this.selectEl?.selected;\r\n        const selectedValues = Array.isArray(selected) ? selected.map(option => option.value) : selected ? [selected.value] : [];\r\n\r\n        return this.filteredOptions?.filter((filteredOption: any) => {\r\n            if (this.compareWith) {\r\n                return selectedValues.some(selectedValue => this.compareWith!(selectedValue, filteredOption));\r\n            } else {\r\n                return selectedValues.includes(filteredOption[this.optionValueProperty]);\r\n            }\r\n        }) ?? [];\r\n    }\r\n\r\n    /** \r\n     * Checks if the select element is empty.\r\n     * \r\n     * @returns true if the select element is empty, false otherwise.\r\n     */\r\n    public override get empty(): boolean {\r\n        return this._readonly ? !this.currentValue : !this.selectEl?._selectionModel || this.selectEl?._selectionModel?.isEmpty();\r\n    }\r\n\r\n    /**\r\n     * Constructor to initialize the VdSelectComponent.\r\n     */\r\n    constructor() {\r\n        super('vd-select');\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after Angular has initialized the component's view.\r\n     * Sets up an event listener to focus the filter input when the select element is opened.\r\n     */\r\n    ngAfterViewInit(): void {\r\n        this.selectEl?.openedChange?.subscribe(x => {\r\n            if (x && this.filterable) {\r\n                this.filterInput?.nativeElement?.focus();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Writes the value to the component. Part of the ControlValueAccessor interface.\r\n     * \r\n     * @param value The value to be written\r\n     */\r\n    override writeValue(value: any) {\r\n        super.writeValue(value);\r\n\r\n        if (!this.value) {\r\n            this.selectEl?.writeValue(null);\r\n        }\r\n\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Sets focus on the select element and opens the dropdown.\r\n     */\r\n    public focus(): void {\r\n        this.selectEl?.focus();\r\n        this.selectEl?.open();\r\n    }\r\n\r\n    /**\r\n     * Handles the launch button click event.\r\n     * Emits the selected options through the onLaunch event emitter.\r\n     * \r\n     * @param value The value to be emitted\r\n     */\r\n    public handleLaunchClicked(value: any): void {\r\n        if (this.multiple) {\r\n            this.onLaunch.emit(this.options.filter((x: any) => (value || []).includes(x[this.optionValueProperty])));\r\n        } else {\r\n            this.onLaunch.emit(this.options.find((x: any) => x[this.optionValueProperty] == value));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the filter event to filter the options based on the input.\r\n     * \r\n     * @param $event The filter event\r\n     */\r\n    public override  handleFilter($event?: Event): void {\r\n        const searchText: string = ($event?.target as HTMLInputElement)?.value ?? '';\r\n        this.filteredOptions = this.options.filter((x: any) => {\r\n            const fieldValue = this.searchField ? this.searchField(x) : x[this.optionTextProperty];\r\n            return fieldValue?.toLowerCase().includes(searchText.toLowerCase());\r\n        });\r\n    }\r\n}","<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled\" flex>\n    <!-- #region Filter input -->\n    <div class=\"mat-mdc-form-field mat-form-field-appearance-fill flex\">\n        <div class=\"mat-mdc-text-field-wrapper mdc-text-field mdc-text-field--filled mdc-text-field--no-label\">\n            <div class=\"mat-mdc-form-field-focus-overlay\"></div>\n            <div class=\"mat-mdc-form-field-flex\">\n                <div class=\"mat-mdc-form-field-infix\" layout=\"row\" flex>\n                    <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"mat-mdc-input-element vd-select-filter mat-mdc-form-field-input-control mdc-text-field__input\" (keyup)=\"handleFilter($event)\" flex>\n                    @if (filterInput?.value) {\n                        <mat-icon (click)=\"filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\n                    }\n                </div>\n            </div>\n            <div class=\"mdc-line-ripple\"></div>\n        </div>\n    </div>\n    <!-- #endregion -->\n\n    <!-- #region Selection template -->\n    <ng-template #selectionTemplate let-label=\"label\">\n        <span i18n=\"@@selection\">{ label, select, option {option} other { {{ label }} } }</span>\n    </ng-template>\n    <!-- #endregion -->\n\n    <!-- #region Option template -->\n    <ng-template #optionTextTemplate let-option=\"option\">\n        <span layout=\"column\" class=\"option-text\" [ngClass]=\"{'option-has-hint': option.hint?.length > 0}\">\n            <ng-template [ngTemplateOutlet]=\"selectionTemplate\" [ngTemplateOutletContext]=\"{ label: option[optionTextProperty] }\"></ng-template>\n            <span class=\"mat-caption text-secondary option-hint\" [matTooltip]=\"option.hint\">{{option.hint}}</span>\n        </span>\n    </ng-template>\n    <!-- #endregion -->\n\n    <!-- #region Option icon template -->\n    <ng-template #optionIconTemplate let-option=\"option\" let-isAvatar=\"isAvatar\">\n        <!-- #region Property icon -->\n        @if (matIconKey && !svgIconKey) {\n            <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\n        }\n        @if (svgIconKey && !matIconKey) {\n            <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\n        }\n        <!-- #endregion -->\n\n        <!-- #region Option icon -->\n        @if (option.icon?.matIcon) {\n            <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\n        }\n        @if (option.icon?.svgIcon) {\n            <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\n        }\n        <!-- #endregion -->\n\n        <!-- #region Dynamic icon -->\n        @if (optionIcon; as optionIcon) {\n            <ng-template #optionIconTemplate [ngTemplateOutlet]=\"optionIconTemplate\" let-optionIcon=\"optionIcon\" [ngTemplateOutletContext]=\"{ optionIcon: optionIcon(option) }\">\n                @if (optionIcon.svgIcon) {\n                    <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\"></mat-icon>\n                }\n                @if (optionIcon.matIcon) {\n                    <mat-icon [class.mat-mdc-chip-avatar]=\"isAvatar\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\">{{optionIcon.matIcon}}</mat-icon>\n                }\n            </ng-template>\n        }\n        <!-- #endregion -->\n    </ng-template>\n    <!-- #endregion -->\n\n    <!-- #region Option icon template -->\n    <ng-template #optionIconChipAvatarTemplate let-option=\"option\">\n        <!-- #region Property icon -->\n        <span class=\"option-icon\" matChipAvatar>\n            <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n        </span>\n        <!-- #endregion -->\n    </ng-template>\n    <!-- #endregion -->\n\n    <!-- #region Trigger for launch button -->\n    @if (onLaunch.observed) {\n        <mat-select-trigger [class]=\"triggerCssClass\">\n            <span layout=\"row\" layout-align=\"start center\">\n                @for (option of selectedOptions; track option; let i = $index; let last = $last) {\n                    <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                    <ng-template [ngTemplateOutlet]=\"selectionTemplate\" [ngTemplateOutletContext]=\"{ label: option[optionTextProperty] }\"></ng-template>\n\n                    @if (!last) {\n                        <span>&nbsp;&nbsp;</span>\n                    }\n                }\n            </span>\n            <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\n        </mat-select-trigger>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Custom trigger template -->\n    @if (!onLaunch.observed && triggerTemplate && triggerTemplate.templateRef) {\n        <mat-select-trigger [class]=\"triggerCssClass\">\n            <ng-template [ngTemplateOutlet]=\"triggerTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\n        </mat-select-trigger>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Option template as trigger -->\n    @if (!onLaunch.observed && !triggerTemplate?.templateRef && optionTemplate?.templateRef) {\n        <mat-select-trigger [class]=\"triggerCssClass\">\n            <span layout=\"row\" layout-align=\"start center\">\n                @for (option of selectedOptions; track option; let i = $index; let last = $last) {\n                    <span layout=\"row\" layout-align=\"start center\">\n                        <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                        @if (optionTemplate && optionTemplate.templateRef) {\n                            <ng-template [ngTemplateOutlet]=\"optionTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\n                        }\n                    </span>\n                    @if (!last) {\n                        <span>&nbsp;&nbsp;</span>\n                    }\n                }\n            </span>\n        </mat-select-trigger>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Trigger for icons -->\n    @if (!triggerTemplate?.templateRef && !optionTemplate?.templateRef) {\n        <mat-select-trigger>\n            <span layout=\"row\" layout-align=\"start center\" class=\"option-trigger\">\n                @for (option of selectedOptions; track option; let i = $index; let last = $last) {\n                    @if (multiple) {\n                        <mat-chip>\n                            @if(optionIcon || matIconKey || svgIconKey || option.icon) {\n                                <span matChipAvatar>\n                                    <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                                </span>\n                            }\n                            <ng-template [ngTemplateOutlet]=\"optionTextTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                        </mat-chip>\n                    } @else {\n                        <ng-template [ngTemplateOutlet]=\"optionIconChipAvatarTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                        <ng-template [ngTemplateOutlet]=\"optionTextTemplate\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\n                    }\n\n                    @if (!last) {\n                        <span>&nbsp;&nbsp;</span>\n                    }\n                }\n            </span>\n        </mat-select-trigger>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Default option -->\n    @if (!multiple && defaultOption) {\n        <mat-option class=\"tc-grey-500\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Options -->\n    @for (option of filteredOptions; track option; let first = $first) {\n        <mat-option [value]=\"mapper ? option : option[optionValueProperty]\" [disabled]=\"option?.disabled\">\n            <!-- #region Property icon -->\n            @if (matIconKey && !svgIconKey) {\n                <mat-icon [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\n            }\n            @if (svgIconKey && !matIconKey) {\n                <mat-icon [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\n            }\n            <!-- #endregion -->\n\n            <!-- #region Option icon -->\n            @if (option.icon?.matIcon) {\n                <mat-icon [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\n            }\n            @if (option.icon?.svgIcon) {\n                <mat-icon [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\n            }\n            <!-- #endregion -->\n\n            <!-- #region Text -->\n            <span layout=\"column\" layout-align=\"start center\" class=\"option-text\" [ngClass]=\"{'option-has-hint':option.hint?.length>0}\">\n                @if (!optionTemplate?.templateRef) {\n                    <ng-template [ngTemplateOutlet]=\"selectionTemplate\" [ngTemplateOutletContext]=\"{ label: option[optionTextProperty] }\"></ng-template>\n                }\n                @if (optionTemplate && optionTemplate.templateRef) {\n                    <ng-template [ngTemplateOutlet]=\"optionTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\n                }\n                <!-- #endregion -->\n                <span class=\"mat-caption text-secondary option-hint\" [matTooltip]=\"option.hint\">{{option.hint}}</span>\n            </span>\n        </mat-option>\n    }\n    <!-- #endregion -->\n</mat-select>\n\n<!-- #region Read only value -->\n@if (readonly) {\n    <div>\n        @if (currentValue) {\n            <div>\n                <div class=\"readonly-value\">\n                    @if (!optionTemplate?.templateRef && !triggerTemplate?.templateRef) {\n                        <span>\n                            <span layout=\"row\" layout-align=\"start center\">\n                                @for (option of selectedOptions; track option; let i = $index; let last = $last) {\n                                    <span layout=\"row\" layout-align=\"start center\">\n                                        @if(!this.multiple) {\n                                            @if(optionIcon || matIconKey || svgIconKey || option.icon) {\n                                                <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\n                                                <span>&nbsp;&nbsp;</span>\n                                            }\n                                            <ng-template [ngTemplateOutlet]=\"selectionTemplate\" [ngTemplateOutletContext]=\"{ label: currentValue[optionTextProperty] }\"></ng-template>\n                                        }\n\n                                        @else if(currentValue[i]){\n                                            <mat-chip>\n                                                @if(optionIcon || matIconKey || svgIconKey || option.icon) {\n                                                    <span matChipAvatar>\n                                                        <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: currentValue[i] }\"></ng-template>\n                                                    </span>\n                                                }\n                                                <ng-template [ngTemplateOutlet]=\"selectionTemplate\" [ngTemplateOutletContext]=\"{ label: currentValue[i][optionTextProperty] }\"></ng-template>\n                                            </mat-chip>\n                                        }\n                                    </span>\n                                    @if (!last) {\n                                        <span>&nbsp;&nbsp;</span>\n                                    }\n                                }\n                            </span>\n                        </span>\n                    }\n                    @if (triggerTemplate && triggerTemplate.templateRef) {\n                        <span layout=\"row\" layout-align=\"start center\" class=\"option-trigger\">\n                            <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\n                            <span>&nbsp;&nbsp;</span>\n                            <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\n                            <ng-template [ngTemplateOutlet]=\"triggerTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\n                        </span>\n                    }\n                    @if (optionTemplate && optionTemplate.templateRef && !triggerTemplate?.templateRef) {\n                        <span layout=\"row\" layout-align=\"start center\" class=\"option-trigger\">\n                            <ng-template [ngTemplateOutlet]=\"optionIconTemplate\" [ngTemplateOutletContext]=\"{ option: currentValue }\"></ng-template>\n                            <span>&nbsp;&nbsp;</span>\n                            <ng-template [ngTemplateOutlet]=\"optionTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue, text: currentValue[optionTextProperty] }\"></ng-template>\n                        </span>\n                    }\n                </div>\n                @if (onLaunch.observed) {\n                    <mat-icon class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\n                }\n            </div>\n        }\n        @if (!currentValue) {\n            <div>&nbsp;</div>\n        }\n    </div>\n}\n<!-- #endregion -->","import { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\r\nimport { DataSource } from '@angular/cdk/table';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { BehaviorSubject, Observable, merge, of as observableOf } from 'rxjs';\r\nimport { catchError, map, skip, switchMap } from 'rxjs/operators';\r\nimport { Utils } from '../common/functions/utils';\r\nimport { GenericService } from '../http/services/generic';\r\nimport { Facet } from './models/facet';\r\nimport { Pagination } from './models/pagination';\r\n\r\n/**\r\n * A generic datasource for data-table\r\n */\r\nexport class TableDataSource<TEntity, TService extends GenericService<TEntity>> extends DataSource<TEntity> {\r\n    /**\r\n     * @property _filterChange\r\n     * @description Represents a value that changes over time. \r\n     * Observers can subscribe to this BehaviorSubject to receive filter changes.\r\n     * @type {BehaviorSubject<string>}\r\n     */\r\n    private _filterChange: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n    /**\r\n     * @property _reloadChange\r\n     * @description Represents a value that triggers reload actions. \r\n     * It is used to notify when a reload should occur by emitting a new value.\r\n     * @type {BehaviorSubject<number>}\r\n     */\r\n    public _reloadChange: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n\r\n    /**\r\n     * @property onDataLoaded\r\n     * @description Event emitted after the data is loaded. \r\n     * It is a BehaviorSubject that holds pagination data or a null value if no data is loaded.\r\n     * @type {BehaviorSubject<Pagination<TEntity> | any>}\r\n     */\r\n    public onDataLoaded: BehaviorSubject<Pagination<TEntity> | any> = new BehaviorSubject<Pagination<TEntity> | any>(null);\r\n\r\n    /**\r\n     * @property selectionModel\r\n     * @description Used to power selecting one or more options from a list.\r\n     * @type {SelectionModel<TEntity>}\r\n     */\r\n    public selectionModel: SelectionModel<TEntity> = new SelectionModel<TEntity>(true, []);\r\n\r\n    /**\r\n     * @property filter\r\n     * @description Gets the current filter applied to the data.\r\n     * @type {string}\r\n     */\r\n    public get filter(): string { return this._filterChange.value; }\r\n\r\n    /**\r\n     * @property filter\r\n     * @description Sets the filter and resets the page index if the paginator exists.\r\n     * @param {string} filter - The filter value to be applied.\r\n     */\r\n    public set filter(filter: string) {\r\n        /* If paginator exists, reset the page index */\r\n        if (this.paginator) {\r\n            this.paginator.pageIndex = 0;\r\n            this.pageIndex = 0;\r\n        }\r\n\r\n        /* Trigger filter change */\r\n        this._filterChange.next(filter);\r\n    }\r\n\r\n    /**\r\n     * @property onSortChange\r\n     * @description Sort change event emitter used to notify changes in sorting.\r\n     * @type {EventEmitter<Sort>}\r\n     */\r\n    private onSortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\r\n\r\n    /**\r\n     * @property _sort\r\n     * @description Private instance of MatSort used to control the sorting of the table.\r\n     * @type {MatSort | null}\r\n     */\r\n    private _sort?: MatSort = new MatSort();\r\n\r\n    /**\r\n     * @property sort\r\n     * @description Gets or sets the MatSort instance used to control the sorting of the table.\r\n     * Changes in sorting will trigger an update to the table’s rendered data.\r\n     * @type {MatSort | undefined}\r\n     */\r\n    get sort(): MatSort | undefined { return this._sort; }\r\n    set sort(sort: MatSort | undefined) {\r\n        /* Set the sort and subscribe to sort changes */\r\n        this._sort = sort;\r\n        this._sort?.sortChange.subscribe(x => this.onSortChange.emit(x));\r\n    }\r\n\r\n    /**\r\n     * @property reloadToken\r\n     * @description Gets the current reload token, used to trigger reload events.\r\n     * @type {number}\r\n     */\r\n    get reloadToken(): number { return this._reloadChange.value; }\r\n\r\n    /**\r\n     * @property isConnected\r\n     * @description Flag indicating whether the data source is connected.\r\n     * @type {boolean}\r\n     */\r\n    public isConnected: boolean = false;\r\n\r\n    /**\r\n     * @property includes\r\n     * @description The list of navigations to be included in the data query.\r\n     * @type {Array<string>}\r\n     */\r\n    public includes: Array<string> = [];\r\n\r\n    /**\r\n     * @property path\r\n     * @description The endpoint path for the data source.\r\n     * @type {string | undefined}\r\n     */\r\n    public path?: string;\r\n\r\n    /**\r\n     * @property projection\r\n     * @description Defines the fields to be included in the data query projection.\r\n     * @type {string | string[]}\r\n     */\r\n    public projection: string | string[] = '';\r\n\r\n    /**\r\n     * @property items\r\n     * @description The list of items to be displayed in the data table.\r\n     * @type {TEntity[]}\r\n     */\r\n    public items: TEntity[] = [];\r\n\r\n    /**\r\n     * @property parameters\r\n     * @description The parameters for pagination and sorting.\r\n     * @type {any}\r\n     */\r\n    public parameters?: any;\r\n\r\n    /**\r\n     * @property facets\r\n     * @description The list of facets for filtering items.\r\n     * @type {Facet[] | undefined}\r\n     */\r\n    public facets?: Facet[];\r\n\r\n    /**\r\n     * @property fieldFilters\r\n     * @description A set of field filters applied to the data.\r\n     * @type {any}\r\n     */\r\n    public fieldFilters: any = {};\r\n\r\n    /**\r\n     * @property fieldOperators\r\n     * @description A set of field operators used for filtering.\r\n     * @type {any}\r\n     */\r\n    public fieldOperators: any = {};\r\n\r\n    /**\r\n     * @property staticFieldFilters\r\n     * @description A set of static field filters applied to the data.\r\n     * @type {any}\r\n     */\r\n    public staticFieldFilters: any = {};\r\n\r\n    /**\r\n     * @property pageIndex\r\n     * @description The current page index for pagination.\r\n     * @type {number}\r\n     */\r\n    public pageIndex: number = 0;\r\n\r\n    /**\r\n     * @property total\r\n     * @description The current total number of items being paged.\r\n     * @type {number}\r\n     */\r\n    public total: number = 0;\r\n\r\n    /**\r\n     * @property pageSize\r\n     * @description The number of items displayed per page in the data-table.\r\n     * It controls how many records are shown on a single page.\r\n     * @type {number}\r\n     */\r\n    public pageSize: number = 15;\r\n\r\n    /**\r\n     * @property pageCount\r\n     * @description The total number of pages based on pagination.\r\n     * @type {number}\r\n     */\r\n    public pageCount: number = 0;\r\n\r\n    /**\r\n     * @property isLoading\r\n     * @description Flag to show the loading process when the data is being fetched.\r\n     * @type {boolean}\r\n     */\r\n    public isLoading: boolean = false;\r\n\r\n    /**\r\n     * @constructor\r\n     * @description Initializes a new instance of the class and sets up the service, paginator, and sorter.\r\n     * The paginator and sorter are optional parameters used for handling pagination and sorting logic\r\n     * for the data displayed in the table.\r\n     * @param {TService} service - The service used for fetching and managing data.\r\n     * @param {MatPaginator} [paginator] - The paginator instance used for pagination functionality.\r\n     * @param {MatSort} [sorter] - The MatSort instance used for sorting functionality.\r\n     */\r\n    constructor(\r\n        public service: TService,\r\n        public paginator?: MatPaginator,\r\n        public sorter?: MatSort\r\n    ) {\r\n        super();\r\n        this.sort = sorter;\r\n    }\r\n\r\n    /**\r\n     * Connects a collection viewer (such as a data-table) to this data source.\r\n     * @param _ The component that exposes a view over the data provided by this\r\n     *     data source.\r\n     * @returns Observable that emits a new value when the data changes.\r\n     */\r\n    public connect(_?: CollectionViewer): Observable<TEntity[]> {\r\n        this.isConnected = true;\r\n\r\n        /* A list of fields to observe  */\r\n        const displayDataChanges = [\r\n            this.onSortChange,\r\n            this.paginator?.page,\r\n            this._filterChange,\r\n            this._reloadChange\r\n        ];\r\n\r\n        /* If the user changes the sort order, reset back to the first page */\r\n        if (this.paginator) {\r\n            this.onSortChange.subscribe(() => { this.paginator!.pageIndex = 0; });\r\n        }\r\n\r\n        return merge(...displayDataChanges)\r\n            .pipe(\r\n                skip(1),\r\n                switchMap(() => {\r\n                    /* Flip flag to show that loading has begun */\r\n                    this.isLoading = true;\r\n\r\n                    /* Remove empty filters */\r\n                    Utils.cleanObject(this.fieldFilters);\r\n                    Utils.cleanObject(this.staticFieldFilters);\r\n\r\n                    /* Build parameters for the data query */\r\n                    var params = Object.assign({\r\n                        includes: this.includes,\r\n                        projection: Array.isArray(this.projection) ? this.projection.join(',') : this.projection,\r\n                        page: (this.paginator?.pageIndex ?? 0) + 1,\r\n                        pageSize: this.paginator?.pageSize ?? 15,\r\n                        search: this.filter.toLowerCase(),\r\n                        sortBy: this.sort?.active,\r\n                        sortOrder: this.sort?.direction\r\n                    }, this.fieldFilters ?? {}, this.staticFieldFilters ?? {});\r\n\r\n                    /* Load data and return it */\r\n                    return this.service.getList(Utils.cleanObject(params), this.path ?? '', { 'CheckOut': 'Yes' });\r\n                }),\r\n                map((result: any) => {\r\n                    /* Flip flag to show that loading has finished */\r\n                    this.isLoading = false;\r\n\r\n                    /* Update pagination fields */\r\n                    this.pageIndex = Math.max(Math.min(result.page - 1, result.pageCount - 1), 0);\r\n                    this.total = result.total;\r\n                    this.pageSize = result.pageSize;\r\n                    this.pageCount = result.pageCount;\r\n                    this.items = result.items;\r\n                    this.facets = result.facets;\r\n                    this.parameters = result.parameters;\r\n\r\n                    /* Raise onload event */\r\n                    this.onDataLoaded.next(result);\r\n\r\n                    return this.items;\r\n                }),\r\n                catchError(() => {\r\n                    /* Flip flag to show that loading has finished */\r\n                    this.isLoading = false;\r\n\r\n                    return observableOf([]);\r\n                }));\r\n    }\r\n\r\n    /**\r\n     * Disconnects a collection viewer (such as a data-table) from this data source. Can be used\r\n     * to perform any clean-up or tear-down operations when a view is being destroyed.\r\n     *\r\n     * @param _ The component that exposes a view over the data provided by this\r\n     *     data source.\r\n     */\r\n    public disconnect(_: CollectionViewer): void {\r\n        this.isConnected = false;\r\n    }\r\n\r\n    /**\r\n     * Reloads items\r\n     * @param clearSelection \r\n     */\r\n    public reload(clearSelection: boolean = true): void {\r\n        this._reloadChange.next(Math.random());\r\n\r\n        if (clearSelection) {\r\n            this.selectionModel.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clears field filters\r\n     */\r\n    public applyFilters(newFilters: any = {}): void {\r\n        this.fieldFilters = newFilters || {};\r\n        this.reload();\r\n    }\r\n\r\n    /**\r\n     * Clears field filters\r\n     */\r\n    public clearFilters(newFilters: any = {}): void {\r\n        this.fieldFilters = newFilters || {};\r\n        this.reload();\r\n    }\r\n\r\n    /**\r\n     * Checks, whether all items are selected\r\n     */\r\n    public isAllSelected(): boolean {\r\n        if (this.selectionModel.isEmpty()) {\r\n            return false;\r\n        }\r\n\r\n        return this.selectionModel.selected.length === this.total;\r\n    }\r\n\r\n    /**\r\n     * Toggles selected items\r\n     * @param checkbox \r\n     * @param predicate\r\n     */\r\n    public toggleSelect(checkbox: MatCheckboxChange, predicate?: (value: TEntity, index: number, array: TEntity[]) => unknown) {\r\n        if (this.selectionModel.hasValue()) {\r\n            this.selectionModel.clear();\r\n            checkbox.source.checked = false;\r\n        } else {\r\n            this.items.filter(predicate ? predicate : x => x)\r\n                .filter(x => !(x as any)['locked'])\r\n                .forEach(data => this.selectionModel.select(data));\r\n\r\n            if (this.selectionModel.selected.length !== this.total) {\r\n                checkbox.source.checked = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get selected Items\r\n     */\r\n    public getSelected = <TType>(key: string): TType[] => this.selectionModel.selected.map(x => (x as any)[key]);\r\n\r\n    /**\r\n     * Get selected Items\r\n     */\r\n    public getSelectedIds = (): number[] => this.getSelected<number>('id');\r\n}","import { Directive, Input, OnInit } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { TableDataSource } from '../table.data-source';\r\n\r\n@Directive({\r\n\tselector: '[dataSourceFilter]'\r\n})\r\nexport class DataSourceFilterDirective implements OnInit {\r\n\t/**\r\n\t * DataSource instance\r\n\t */\r\n\t@Input()\r\n\tpublic dataSource?: TableDataSource<any, any>;\r\n\r\n\t/**\r\n\t * Represents a value that changes over time. \r\n\t * Observers can subscribe to the subject to receive filter changes\r\n\t */\r\n\tprivate _queryChange = new BehaviorSubject(null);\r\n\r\n\t/**\r\n\t * Sets query\r\n\t */\r\n\t@Input()\r\n\tset dataSourceFilter(query: any) { this._queryChange.next(query); }\r\n\r\n\t/**\r\n\t * Gets query\r\n\t */\r\n\tget dataSourceFilter(): any { return this._queryChange.value; }\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis._queryChange.subscribe(() => {\r\n\t\t\tif (this.dataSource) {\r\n\t\t\t\t/* Update the filters */\r\n\t\t\t\tObject.assign(this.dataSource.staticFieldFilters || {}, this.dataSourceFilter != null ? this.dataSourceFilter : {});\r\n\r\n\t\t\t\t/* Reload data */\r\n\t\t\t\tthis.dataSource.reload();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Pagination } from './models/pagination';\r\n\r\n/**\r\n * A generic datasource class for working with data-tables in Angular Material.\r\n * This class extends MatTableDataSource to provide additional functionality like \r\n * selection management, pagination, and filtering.\r\n */\r\nexport class TableStaticDataSource<TEntity> extends MatTableDataSource<TEntity> {\r\n\r\n    /**\r\n     * @property _reloadChange\r\n     * @description A BehaviorSubject that triggers a reload of the table data. \r\n     * The value is used as a reload token, ensuring the data is reloaded when it changes.\r\n     * @type {BehaviorSubject<number>}\r\n     */\r\n    public _reloadChange: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n\r\n    /**\r\n     * @property onDataLoaded\r\n     * @description A BehaviorSubject that holds the loaded data or pagination information.\r\n     * This is emitted after the data is successfully loaded, providing a mechanism \r\n     * to track the loading state and any updates to the data.\r\n     * @type {BehaviorSubject<Pagination<TEntity> | any>}\r\n     */\r\n    public onDataLoaded: BehaviorSubject<Pagination<TEntity> | any> = new BehaviorSubject<Pagination<TEntity> | any>(null);\r\n\r\n    /**\r\n     * @property items\r\n     * @description The list of items to be displayed in the data table.\r\n     * @type {TEntity[]}\r\n     */\r\n    public items: TEntity[] = [];\r\n\r\n    /**\r\n     * @property selectionModel\r\n     * @description A SelectionModel to handle selection of one or more items from the data-table.\r\n     * It allows managing the selected items in the table and supports multiple selection.\r\n     * @type {SelectionModel<TEntity>}\r\n     */\r\n    public selectionModel: SelectionModel<TEntity> = new SelectionModel<TEntity>(true, []);\r\n\r\n    /**\r\n     * @property reloadToken\r\n     * @description A getter to return the current reload token. \r\n     * The reload token is used to trigger reloading of data.\r\n     * @type {number}\r\n     */\r\n    public get reloadToken(): number { return this._reloadChange.value; }\r\n\r\n    /**\r\n     * @property fieldFilters\r\n     * @description An object used to store filters for specific fields in the data-table.\r\n     * It allows filtering of data based on specific field values.\r\n     * @type {any}\r\n     */\r\n    public fieldFilters: any = {};\r\n\r\n    /**\r\n     * @property fieldOperators\r\n     * @description An object that stores operators to be applied on fields for filtering.\r\n     * It allows complex filtering operations (e.g., equals, contains, greater than).\r\n     * @type {any}\r\n     */\r\n    public fieldOperators: any = {};\r\n\r\n    /**\r\n     * @property staticFieldFilters\r\n     * @description An object to store static filters that are applied to the data-table.\r\n     * These filters are not dynamically set by the user but are always active.\r\n     * @type {any}\r\n     */\r\n    public staticFieldFilters: any = {};\r\n\r\n    /**\r\n     * @property pageIndex\r\n     * @description The index of the current page being viewed in the data-table. \r\n     * It starts from 0 and increments with each page change.\r\n     * @type {number}\r\n     */\r\n    public pageIndex: number = 0;\r\n\r\n    /**\r\n     * @property total\r\n     * @description The total number of items in the data source. \r\n     * This is typically used to calculate pagination.\r\n     * @type {number}\r\n     */\r\n    public total: number = 0;\r\n\r\n    /**\r\n     * @property pageSize\r\n     * @description The number of items displayed per page in the data-table.\r\n     * It controls how many records are shown on a single page.\r\n     * @type {number}\r\n     */\r\n    public pageSize: number = 15;\r\n\r\n    /**\r\n     * @property pageCount\r\n     * @description The total number of pages based on the current page size and total items.\r\n     * This is calculated dynamically whenever data changes.\r\n     * @type {number}\r\n     */\r\n    public pageCount: number = 0;\r\n\r\n    /**\r\n     * @property isLoading\r\n     * @description A flag indicating whether the data is currently being loaded.\r\n     * It is used to show a loading spinner or indicator while data is being fetched.\r\n     * @type {boolean}\r\n     */\r\n    public isLoading: boolean = false;\r\n\r\n    /**\r\n     * @method reload\r\n     * @description Reloads the table data by triggering a new random reload token.\r\n     * Optionally clears the selection if the `clearSelection` flag is set to true.\r\n     * @param {boolean} clearSelection - If true, clears the current selection after reload.\r\n     */\r\n    public reload(clearSelection: boolean = true): void {\r\n        /* Emit a new reload token to trigger data reload */\r\n        this._reloadChange.next(Math.random());\r\n\r\n        /* Clear the selection if specified */\r\n        if (clearSelection) {\r\n            this.selectionModel.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method connect\r\n     * @description Called when the MatTable connects to the data source. \r\n     * This method subscribes to the reload token to trigger a filter update and data refresh.\r\n     * @docs-private\r\n     * @returns {BehaviorSubject<TEntity[]>} A BehaviorSubject containing the current data array.\r\n     */\r\n    override connect(): BehaviorSubject<TEntity[]> {\r\n        /* Subscribe to the reload token and update filters accordingly */\r\n        this._reloadChange.subscribe(x => {\r\n            /* Clean up any empty filters before applying them */\r\n            Object.keys(this.fieldFilters).forEach((key) =>\r\n                ((this.fieldFilters[key] == null || this.fieldFilters[key] === '' || this.fieldFilters[key] === 'undefined')) && this.fieldFilters[key] !== 0 && delete this.fieldFilters[key]);\r\n            Object.keys(this.staticFieldFilters).forEach((key) =>\r\n                ((this.staticFieldFilters[key] == null || this.staticFieldFilters[key] === '' || this.staticFieldFilters[key] === 'undefined')) && this.staticFieldFilters[key] !== 0 && delete this.staticFieldFilters[key]);\r\n\r\n            /* Apply filters dynamically to the table data */\r\n            Object.keys(this.fieldFilters).forEach((key) => {\r\n                this.filterPredicate = (data: TEntity, filter: string) => !filter || `${(data as any)[key]}`.toLowerCase().includes(`${this.filter}`?.toLowerCase());\r\n                this.filter = this.fieldFilters[key];\r\n            });\r\n        });\r\n\r\n        /* Return the data for the MatTable to display */\r\n        return super.connect();\r\n    }\r\n\r\n    /**\r\n     * @method clearFilters\r\n     * @description Clears all current field filters and resets pagination to the first page.\r\n     * Optionally accepts new filters to replace the existing ones.\r\n     * @param {any} newFilters - New filters to apply after clearing the previous ones.\r\n     */\r\n    public clearFilters(newFilters: any = {}): void {\r\n        /* Reset pagination to the first page */\r\n        if (this.paginator) {\r\n            this.paginator.pageIndex = 0;\r\n        }\r\n\r\n        /* Apply the new filters */\r\n        this.fieldFilters = newFilters || {};\r\n        this.filter = '';\r\n        this.reload();\r\n    }\r\n\r\n    /**\r\n     * @method isAllSelected\r\n     * @description Checks if all items in the current page are selected.\r\n     * @returns {boolean} True if all items are selected, false otherwise.\r\n     */\r\n    public isAllSelected(): boolean {\r\n        /* If there are no selected items, return false */\r\n        if (this.selectionModel.isEmpty()) {\r\n            return false;\r\n        }\r\n\r\n        /* Return true if the number of selected items matches the number of items on the current page */\r\n        return this.selectionModel.selected.length === this.paginator?.length;\r\n    }\r\n\r\n    /**\r\n     * @method toggleSelect\r\n     * @description Toggles the selection of all items in the current page.\r\n     * If items are already selected, they are cleared. If not, they are selected.\r\n     * @param {MatCheckboxChange} checkbox - The checkbox change event.\r\n     * @param {Function} predicate - Optional predicate to filter the items before selection.\r\n     */\r\n    public toggleSelect(checkbox: MatCheckboxChange, predicate?: (value: TEntity, index: number, array: TEntity[]) => unknown) {\r\n        /* If any items are selected, clear the selection */\r\n        if (this.selectionModel.hasValue()) {\r\n            this.selectionModel.clear();\r\n            checkbox.source.checked = false;\r\n        } else {\r\n            /* Otherwise, select all items that match the predicate */\r\n            this.data.filter(predicate ? predicate : x => x)\r\n                .filter(x => !(x as any)['locked'])\r\n                .forEach(data => this.selectionModel.select(data));\r\n\r\n            /* If not all items are selected, uncheck the checkbox */\r\n            if (this.selectionModel.selected.length !== this.paginator?.length) {\r\n                checkbox.source.checked = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method getSelected\r\n     * @description Retrieves the selected items based on a specific key (e.g., 'id').\r\n     * @param {string} key - The key to extract from the selected items.\r\n     * @returns {TType[]} An array of selected items.\r\n     */\r\n    public getSelected = <TType>(key: string = 'id'): TType[] => this.selectionModel.selected.map(x => (x as any)[key]);\r\n}","\r\nimport { Component } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { TableDataSource } from '../../table.data-source';\r\nimport { TableStaticDataSource } from '../../table.static-data-source';\r\n\r\n@Component({\r\n\tselector: 'mat-header-cell[filter-clear], [mat-header-cell][filter-clear], [filter-clear]',\r\n\ttemplateUrl: './filter-clear.html',\r\n\timports: [\r\n    MatIconButton,\r\n    MatIconModule\r\n],\r\n})\r\nexport class FilterClearComponent {\r\n\t/**\r\n\t * Constructor\r\n\t * @param table \t\r\n\t */\r\n\tconstructor(private table: MatTable<any>) { }\r\n\r\n\t/**\r\n\t * Clears filters\r\n\t */\r\n\tpublic clear(): void {\r\n\t\tif (this.table.dataSource instanceof TableDataSource) {\r\n\t\t\t(<TableDataSource<any, any>>this.table.dataSource).clearFilters();\r\n\t\t} else if (this.table.dataSource instanceof TableStaticDataSource) {\r\n\t\t\t(<TableStaticDataSource<any>>this.table.dataSource).clearFilters();\r\n\t\t}\r\n\t}\r\n}","<button type=\"button\" mat-icon-button (click)=\"clear()\">\r\n\t<mat-icon fontSet=\"material-symbols-outlined\">backspace</mat-icon>\r\n</button>","import { CdkColumnDef } from '@angular/cdk/table';\r\n\r\nimport { Component, forwardRef, HostListener, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTable } from '@angular/material/table';\r\n\r\n@Component({\r\n\tselector: 'mat-header-cell[filter-date], [mat-header-cell][filter-date], [filter-date]',\r\n\ttemplateUrl: './filter-date.html',\r\n\tstyleUrl: './filter-date.scss',\r\n\timports: [\r\n    FormsModule,\r\n    MatFormFieldModule,\r\n    MatDatepickerModule,\r\n    MatInputModule,\r\n    MatIconModule,\r\n    MatButtonModule\r\n],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FilterDateComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class FilterDateComponent implements ControlValueAccessor {\r\n\r\n\t/**\r\n\t * Field name\r\n\t */\r\n\t@Input() field: string = '';\r\n\r\n\t/**\r\n\t * debounce?: number\r\n\t * Debounce timeout between keypresses. Defaults to 400.\r\n\t */\r\n\t@Input('debounce') debounce: number = 400;\r\n\r\n\t/**\r\n\t * placeholder?: string\r\n\t * Placeholder for the underlying input component.\r\n\t */\r\n\t@Input('placeholder') placeholder: string = 'Filter...';\r\n\r\n\t/**\r\n\t * Setters and getters for the input value\r\n\t */\r\n\tget value(): any { return (this.table.dataSource as any)['fieldFilters'][this.field]; };\r\n\tset value(v: any) {\r\n\t\tif (v !== (this.table.dataSource as any)['fieldFilters'][this.field]) {\r\n\t\t\t(this.table.dataSource as any)['fieldFilters'][this.field] = v;\r\n\t\t\t(this.table.dataSource as any)['paginator']['pageIndex'] = 0;\r\n\t\t\tthis.onChange(v);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Whether the control is focused.\r\n\t */\r\n\tpublic focused = false;\r\n\r\n\t/**\r\n\t * Whether the control is focused.\r\n\t */\r\n\t@HostListener(\"focusin\") onFocusIn() { this.focused = true; }\r\n\t@HostListener(\"focusout\") onFocusOut() { this.focused = false; }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param table \r\n\t */\r\n\tconstructor(private table: MatTable<any>, private column: CdkColumnDef) {\r\n\t\tthis.field = this.column.name.replace('filter.', '');\r\n\t}\r\n\r\n\t/**\r\n\t * Call serch event\r\n\t */\r\n\thandleSearch(date: any): void {\r\n\t\tif (date instanceof Date) {\r\n\t\t\tthis.value = `${date.getFullYear()}-${this.pad(date.getMonth() + 1, 2)}-${this.pad(date.getDate(), 2)}`;\r\n\t\t} else {\r\n\t\t\tthis.value = `${date.year()}-${this.pad(date.month() + 1, 2)}-${this.pad(date.date(), 2)}`;\r\n\t\t}\r\n\r\n\t\tthis.reload();\r\n\t}\r\n\r\n\t/**\r\n\t * Clears input box\r\n\t */\r\n\tclearSearch(): void {\r\n\t\tif (this.value != '') {\r\n\t\t\tthis.value = '';\r\n\t\t\tthis.reload();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Write a new value to the element.\r\n\t */\r\n\twriteValue(value: any) {\r\n\t\tthis.value = value;\r\n\t}\r\n\r\n\t/**\r\n\t * Set the function to be called when the control receives a change event.\r\n\t */\r\n\tregisterOnChange(fn: (_: any) => void): void { this.onChange = fn; }\r\n\r\n\t/**\r\n\t * Set the function to be called when the control receives a touch event.\r\n\t */\r\n\tregisterOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n\t/**\r\n\t * Called when the control receives a change event.\r\n\t */\r\n\tonChange = (_: any) => { };\r\n\r\n\t/**\r\n\t * Called when the control receives a touch event.\r\n\t */\r\n\tonTouched = () => { };\r\n\r\n\t/**\r\n\t * Reload data\r\n\t */\r\n\tprivate reload = () => (this.table.dataSource as any)['reload']();\r\n\r\n\t/**\r\n\t * Adds leading zeros to a digit\r\n\t */\r\n\tprivate pad = (num: number, size: number) => { return ('0' + num).substr(-size) };\r\n}","<mat-form-field subscriptSizing=\"dynamic\" dense-3 flex>\r\n\t<input matInput [matDatepicker]=\"picker\" [ngModel]=\"value\" (ngModelChange)=\"handleSearch($event)\" (click)=\"$event.stopPropagation();picker.open()\" (search)=\"handleSearch($event)\" (keyup.enter)=\"handleSearch($event)\" readonly>\r\n\t@if (!value && !focused) {\r\n\t\t<span matPrefix (click)=\"$event.stopPropagation();picker.open()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n\t\t</span>\r\n\t}\r\n\t@if (value) {\r\n\t\t<button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation();clearSearch()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</button>\r\n\t}\r\n\t<mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>","import { CdkColumnDef } from '@angular/cdk/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, forwardRef, HostListener, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'mat-header-cell[filter-input], [mat-header-cell][filter-input], [filter-input]',\r\n    templateUrl: './filter-input.html',\r\n    styleUrl: './filter-input.scss',\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        MatFormFieldModule,\r\n        MatInputModule,\r\n        MatIconModule,\r\n        MatIconButton\r\n    ],\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => FilterInputComponent),\r\n            multi: true\r\n        }\r\n    ]\r\n})\r\nexport class FilterInputComponent implements OnInit, ControlValueAccessor {\r\n\r\n    /**\r\n     * A refernce to the input element\r\n     */\r\n    @ViewChild('filterElement', { static: true })\r\n    private _filter?: ElementRef;\r\n\r\n    /**\r\n     * Field name\r\n     */\r\n    @Input() field: string = '';\r\n\r\n    /**\r\n     * Query operator\r\n     */\r\n    @Input() operator?: string;\r\n\r\n    /**\r\n     * Only number\r\n     */\r\n    @Input() onlyNumber: boolean = false;\r\n\r\n    /**\r\n     * debounce?: number\r\n     * Debounce timeout between keypresses. Defaults to 400.\r\n     */\r\n    @Input() debounce: number = 400;\r\n\r\n    /**\r\n     * placeholder?: string\r\n     * Placeholder for the underlying input component.\r\n     */\r\n    @Input() placeholder: string = 'Filter...';\r\n\r\n    /**\r\n     * Whether the control is focused.\r\n     */\r\n    public focused = false;\r\n\r\n    /**\r\n     * Whether the control is focused.\r\n     */\r\n    @HostListener(\"focusin\") onFocusIn() { this.focused = true; }\r\n    @HostListener(\"focusout\") onFocusOut() { this.focused = false; }\r\n\r\n    /**\r\n     * Setters and getters for the input value\r\n     */\r\n    get value(): any { return (this.table.dataSource as any)['fieldFilters'][this.field]?.replace(this.operator, '')?.trim(); };\r\n    set value(v: any) {\r\n        if (v !== (this.table.dataSource as any)['fieldFilters'][this.field]) {\r\n            (this.table.dataSource as any)['fieldFilters'][this.field] = v ? `${this.operator || ''}${v}` : '';\r\n            (this.table.dataSource as any)['paginator']['pageIndex'] = 0;\r\n            this.onChange(v);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Constructor\r\n     * @param table\r\n     * @param column\r\n     */\r\n    constructor(private table: MatTable<any>, private column: CdkColumnDef) {\r\n        this.field = this.column.name.replace('filter.', '');\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n     */\r\n    ngOnInit() {\r\n        if (this._filter?.nativeElement) {\r\n            fromEvent(this._filter?.nativeElement, 'keyup')\r\n                .pipe(\r\n                    debounceTime(this.debounce),\r\n                    distinctUntilChanged()\r\n                ).subscribe((value: any) => {\r\n                    if (value != undefined) {\r\n                        this.reload();\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Call serch event\r\n     */\r\n    handleSearch(event: Event): void {\r\n        event.stopPropagation();\r\n        this.reload();\r\n    }\r\n\r\n    /**\r\n     * Clears input box\r\n     */\r\n    clearSearch(): void {\r\n        if (this.value != '') {\r\n            this.value = '';\r\n            this.reload();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Write a new value to the element.\r\n     */\r\n    writeValue(value: any) {\r\n        this.value = value;\r\n        this.onChange(value);\r\n    }\r\n\r\n    /**\r\n     * Set the function to be called when the control receives a change event.\r\n     */\r\n    registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\r\n\r\n    /**\r\n     * Set the function to be called when the control receives a touch event.\r\n     */\r\n    registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n    /**\r\n     * Called when the control receives a change event.\r\n     */\r\n    onChange = (_: any) => { };\r\n\r\n    /**\r\n     * Called when the control receives a touch event.\r\n     */\r\n    onTouched = () => { };\r\n\r\n    /**\r\n     * Handles keydown events\r\n     * @param event \r\n     */\r\n    @HostListener('keydown', ['$event'])\r\n    public onKeyDown(event: any) {\r\n        if (this.onlyNumber) {\r\n            /* Allow navigation keys and control keys */\r\n            const allowedKeys = ['Backspace', 'Delete', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowRight', 'Home', 'End'];\r\n\r\n            /* Allow Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X */\r\n            if ((event.ctrlKey || event.metaKey) && ['a', 'c', 'v', 'x'].includes(event.key.toLowerCase())) {\r\n                return;\r\n            }\r\n\r\n            /* Allow Ctrl+Z, Ctrl+Y */\r\n            if ((event.ctrlKey || event.metaKey) && ['z', 'y'].includes(event.key.toLowerCase())) {\r\n                return;\r\n            }\r\n\r\n            /* Allow control keys */\r\n            if (event.ctrlKey || event.metaKey) {\r\n                return;\r\n            }\r\n\r\n            /* Allow navigation keys */\r\n            if (allowedKeys.includes(event.key)) {\r\n                return;\r\n            }\r\n\r\n            /* Block non-numeric characters */\r\n            if (event.key < '0' || event.key > '9') {\r\n                event.preventDefault();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Reload data\r\n     */\r\n    private reload = () => (this.table.dataSource as any)['reload']();\r\n}","<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n\t<input matInput #filterElement ngControl=\"filterElement\" autocomplete=\"off\" type=\"input\" [(ngModel)]=\"value\" (search)=\"$event.stopPropagation();\" (keyup.enter)=\"handleSearch($event)\" />\r\n\t@if (!value && !focused) {\r\n\t\t<span matPrefix><mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon></span>\r\n\t}\r\n\t@if (value) {\r\n\t\t<button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); clearSearch()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</button>\r\n\t}\r\n</mat-form-field>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { CdkPortal } from '@angular/cdk/portal';\r\nimport { CdkColumnDef } from '@angular/cdk/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Component, ContentChild, Directive, ElementRef, HostListener, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef, forwardRef, inject } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MAT_SELECT_CONFIG, MatSelect, MatSelectModule } from '@angular/material/select';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumMetadata } from '../../../common/models/enum-metadata';\r\nimport { EnumService } from '../../../common/services/enum';\r\n\r\n@Directive({\r\n\tselector: '[vd-filter-option]ng-template'\r\n})\r\nexport class VdFilterOptionDirective extends CdkPortal {\r\n\tconstructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n\t\tsuper(templateRef, viewContainerRef);\r\n\t}\r\n}\r\n\r\n@Component({\r\n\tselector: 'mat-header-cell[filter-select], [mat-header-cell][filter-select], [filter-select]',\r\n\ttemplateUrl: './filter-select.html',\r\n\tstyleUrl: './filter-select.scss',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatInputModule,\r\n\t\tMatSelectModule,\r\n\t\tMatIconModule\r\n\t],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FilterSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: MAT_SELECT_CONFIG,\r\n\t\t\tuseValue: { overlayPanelClass: 'vd-select-filter-overlay' }\r\n\t\t}\r\n\t]\r\n})\r\nexport class FilterSelectComponent implements OnInit, ControlValueAccessor {\r\n\t/**\r\n\t * VdChip template\r\n\t */\r\n\t@ContentChild(VdFilterOptionDirective)\r\n\tpublic optionTemplate?: VdFilterOptionDirective;\r\n\r\n\t/** \r\n\t * The select element.\r\n\t */\r\n\t@ViewChild(MatSelect, { static: false })\r\n\tpublic selectEl?: MatSelect;\r\n\r\n\t/** \r\n\t * The select element.\r\n\t */\r\n\t@ViewChild('filterInput', { static: false })\r\n\tpublic filterInput?: ElementRef;\r\n\r\n\t/**\r\n\t * Represents a value that changes over time. \r\n\t * Observers can subscribe to the subject to receive pdf file changes\r\n\t */\r\n\tprivate _endpointChange: BehaviorSubject<any[]> = new BehaviorSubject(<any>[]);\r\n\r\n\t/**\r\n\t * Represents a value that changes over time. \r\n\t */\r\n\tprivate _enumChange: BehaviorSubject<any[]> = new BehaviorSubject(<any>[]);\r\n\r\n\t/**\r\n\t * Gets pdf endpoint\r\n\t */\r\n\tget endpoint(): any { return this._endpointChange.value; }\r\n\r\n\t/**\r\n\t * Sets pdf endpoint\r\n\t */\r\n\t@Input()\r\n\tset endpoint(endpoint: any) { this._endpointChange.next(Array.isArray(endpoint) ? endpoint.join('') : endpoint); }\r\n\r\n\t/**\r\n\t * _params: any\r\n\t */\r\n\tpublic _params: any = {};\r\n\r\n\t/**\r\n\t * params: any\r\n\t */\r\n\t@Input()\r\n\tget params() { return this._params; }\r\n\tset params(query: any) {\r\n\t\tthis._params = query;\r\n\r\n\t\t/* Remove empty params */\r\n\t\tObject.keys(this._params).forEach((key) => {\r\n\t\t\tif ((this._params[key] == null || this._params[key] == '' || this._params[key] == 'undefined')) {\r\n\t\t\t\tdelete this._params[key];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._endpointChange.next([this.endpoint, this.params, this.projection]);\r\n\t}\r\n\r\n\t/**\r\n\t * _projection: any\r\n\t */\r\n\tpublic _projection?: string;\r\n\r\n\t/**\r\n\t * projection: any\r\n\t */\r\n\t@Input()\r\n\tget projection(): string | undefined { return this._projection; }\r\n\tset projection(projection: string) {\r\n\t\tthis._projection = projection;\r\n\t\tthis._endpointChange.next([this.endpoint, this.params, this.projection]);\r\n\t}\r\n\r\n\t/**\r\n\t * sortBy?\r\n\t */\r\n\t@Input()\r\n\tpublic sortBy?: string;\r\n\r\n\t/**\r\n\t * Sorts options\r\n\t */\r\n\tpublic _sorted: boolean = true;\r\n\r\n\t/**\r\n\t * _enumFilter: Function\r\n\t */\r\n\tprotected _enumFilter?: Function;\r\n\r\n\t/**\r\n\t * Sorts options\r\n\t */\r\n\t@Input()\r\n\tget sorted() { return this._sorted; }\r\n\tset sorted(multi) {\r\n\t\tthis._sorted = coerceBooleanProperty(multi);\r\n\t\tthis._endpointChange.next([this.endpoint, this.params, this.projection]);\r\n\t}\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@Input()\r\n\tpublic get enumFilter(): Function | undefined { return this._enumFilter; }\r\n\tpublic set enumFilter(enumFilter: Function) { this._enumFilter = enumFilter; this._enumChange.next([this._enumFilter]); }\r\n\r\n\t/**\r\n\t * The name of the endpoint\r\n\t */\r\n\t@Input()\r\n\tpublic enum: any;\r\n\r\n\t/**\r\n\t * Metadata for enum types.\r\n\t * @property\r\n\t */\r\n\t@Input()\r\n\tpublic enumMetadata?: { [key in any]: EnumMetadata };\r\n\r\n\t/**\r\n\t * The key\r\n\t */\r\n\t@Input()\r\n\tpublic key: any = 'id';\r\n\r\n\t/**\r\n\t * The text\r\n\t */\r\n\t@Input()\r\n\tpublic text: any = 'name';\r\n\r\n\t/**\r\n\t * The prefix\r\n\t */\r\n\t@Input()\r\n\tpublic prefix: any = '';\r\n\r\n\t/**\r\n\t * multiple?\r\n\t */\r\n\t@Input()\r\n\tpublic multiple: boolean = false;\r\n\r\n\t/**\r\n\t * Option list\r\n\t */\r\n\tpublic _options: any;\r\n\r\n\t/**\r\n\t * Option list\r\n\t */\r\n\t@Input()\r\n\tget options() { return this._options; }\r\n\tset options(value) {\r\n\t\tthis.filteredOptions = this._options = value;\r\n\t}\r\n\t/**\r\n\t * filtered option list\r\n\t */\r\n\t@Input()\r\n\tpublic filteredOptions: any;\r\n\r\n\t/**\r\n\t * filterable?\r\n\t */\r\n\t@Input()\r\n\tpublic filterable: boolean = true;\r\n\r\n\t/**\r\n\t * Field name\r\n\t */\r\n\t@Input() field: string = '';\r\n\r\n\t/**\r\n\t * placeholder?: string\r\n\t * Placeholder for the underlying input component.\r\n\t */\r\n\t@Input() placeholder: string = 'Filter...';\r\n\r\n\t/**\r\n\t * cache?\r\n\t */\r\n\t@Input()\r\n\tpublic cache: boolean = true;\r\n\r\n\t/**\r\n\t * The http service from to get the data\r\n\t */\r\n\tprotected http?: HttpClient;\r\n\r\n\t/**\r\n\t * Setters and getters for the select value\r\n\t */\r\n\tget value(): any { return (this.table.dataSource as any)['fieldFilters'][this.field]; };\r\n\tset value(v: any) {\r\n\t\tif (v != (this.table.dataSource as any)['fieldFilters'][this.field]) {\r\n\t\t\t(this.table.dataSource as any)['fieldFilters'][this.field] = v;\r\n\t\t\t(this.table.dataSource as any)['paginator']['pageIndex'] = 0;\r\n\t\t\t(this.table.dataSource as any)['reload']();\r\n\t\t\tthis.onChange(v);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Whether the control is focused.\r\n\t */\r\n\tpublic focused = false;\r\n\r\n\t/**\r\n\t * Whether the control is focused.\r\n\t */\r\n\t@HostListener(\"focusin\") onFocusIn() { this.focused = true; }\r\n\t@HostListener(\"focusout\") onFocusOut() { this.focused = false; }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param injector\r\n\t * @param table \r\n\t * @param column\r\n\t */\r\n\tconstructor(private table: MatTable<any>, private column: CdkColumnDef) {\r\n\t\tthis.field = this.column.name.replace('filter.', '');\r\n\r\n\t\tif (!this.enum) {\r\n\t\t\tthis.http = inject(HttpClient);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called after data-bound properties of a directive are initialized.\r\n\t */\r\n\tngOnInit() {\r\n\t\tif (this.enum) {\r\n\t\t\tthis.filterable = this.enumMetadata != null;\r\n\t\t\tthis.options = this.enumMetadata ? EnumService.applyMetadata(this.enum, this.enumMetadata) : EnumService.toArray(this.enum, this.prefix);\r\n\r\n\t\t\t/* Apply enum filters */\r\n\t\t\tif (this._enumFilter && this.options) {\r\n\t\t\t\tthis.options = this.options.filter(this._enumFilter);\r\n\t\t\t}\r\n\t\t} else if (this.http && this.endpoint) {\r\n\t\t\tthis._endpointChange.subscribe(_ => {\r\n\t\t\t\tlet headers = new HttpHeaders();\r\n\t\t\t\tif (this.cache) {\r\n\t\t\t\t\theaders.set('Client-Cache', 'Yes');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Init params, if null */\r\n\t\t\t\tthis._params ||= {};\r\n\r\n\t\t\t\t/* Add projection, if any */\r\n\t\t\t\tif (this.projection) {\r\n\t\t\t\t\tthis._params.projection = this.projection;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Add sorting */\r\n\t\t\t\tvar url = new URLSearchParams(this.endpoint);\r\n\t\t\t\tif (!this._params.sortBy && !url.has('sortBy') && (this.sortBy || this.sorted)) {\r\n\t\t\t\t\tthis._params.sortBy = this.sortBy || this.text;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.http!.get(this.endpoint, { params: this._params, headers: headers }).subscribe(x => {\r\n\t\t\t\t\tthis.options = x;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A callback method that is invoked immediately after\r\n\t * Angular has completed initialization of a component's view.\r\n\t * It is invoked only once when the view is instantiated.\r\n\t *\r\n\t */\r\n\tngAfterViewInit(): void {\r\n\t\tthis.selectEl?.openedChange?.subscribe(x => {\r\n\t\t\tif (x && this.filterable) {\r\n\t\t\t\tthis.filterInput?.nativeElement.focus();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Write a new value to the element.\r\n\t */\r\n\twriteValue(value: any) {\r\n\t\tthis.value = value;\r\n\t\tthis.onChange(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Handels filter event\r\n\t * @param $event \r\n\t */\r\n\tpublic handleFilter($event: Event): void {\r\n\t\tlet searchText: string = (($event?.target as HTMLInputElement)?.value ?? '').toLowerCase();\r\n\t\tthis.filteredOptions = this.options.filter((x: any) => x[this.text]?.toLowerCase().search(searchText) > -1);\r\n\t}\r\n\r\n\t/**\r\n\t * Set the function to be called when the control receives a change event.\r\n\t */\r\n\tregisterOnChange(fn: (_: any) => void): void { this.onChange = fn; }\r\n\r\n\t/**\r\n\t * Set the function to be called when the control receives a touch event.\r\n\t */\r\n\tregisterOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n\t/**\r\n\t * Called when the control receives a change event.\r\n\t */\r\n\tonChange = (_: any) => { };\r\n\r\n\t/**\r\n\t * Called when the control receives a touch event.\r\n\t */\r\n\tonTouched = () => { };\r\n}","<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n\t@if (!value && value!=0 && !focused) {\r\n\t\t<span matPrefix (click)=\"$event.stopPropagation();select.open()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n\t\t</span>\r\n\t}\r\n\t<mat-select type=\"input\" [(ngModel)]=\"value\" [multiple]=\"multiple\" flex #select>\r\n\t\t@if (filterable) {\r\n\t\t\t<mat-form-field appearance=\"fill\" subscriptSizing=\"dynamic\" dense-3 flex>\r\n\t\t\t\t<input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (click)=\"$event.stopPropagation();\" (keyup)=\"handleFilter($event)\" flex>\r\n\t\t\t\t@if (filterInput?.value) {\r\n\t\t\t\t\t<mat-icon (click)=\"$event.stopPropagation(); filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t\t\t}\r\n\t\t\t</mat-form-field>\r\n\t\t}\r\n\t\t@if (!multiple) {\r\n\t\t\t<mat-option class=\"tc-grey-500\" (click)=\"$event.stopPropagation();\"></mat-option>\r\n\t\t}\r\n\t\t@for (option of filteredOptions; track option; let first = $first) {\r\n\t\t\t<mat-option [value]=\"option[key]\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t@if (!optionTemplate?.templateRef) {\r\n\t\t\t\t\t<span i18n=\"@@selection\">{option.name, select, option {option} other {{{option[text]}}}}</span>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t@if (optionTemplate?.templateRef) {\r\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"optionTemplate!.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n\t\t\t\t\t}\r\n\t\t\t</mat-option>\r\n\t\t\t}\r\n\t</mat-select>\r\n</mat-form-field>","import { animate, AUTO_STYLE, state, style, transition, trigger } from '@angular/animations';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewChecked, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';\r\nimport { FormArray, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSort, MatSortModule, SortDirection } from '@angular/material/sort';\r\nimport { MatTable, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { Utils } from '../../../common/functions/utils';\r\nimport { DynamicBuilder } from '../../../common/helpers/dynamic-builder';\r\nimport { ActionItem } from '../../../common/models/action-item';\r\nimport { JoinPipe } from '../../../common/pipes/join';\r\nimport { MapPipe } from '../../../common/pipes/map';\r\nimport { PropertyPipe } from '../../../common/pipes/nested-property';\r\nimport { DisableControlDirective, EnumPipe, FormGroupPipe, FuncPipe } from '../../../common/public_api';\r\nimport { VdDynamicMenuComponent } from '../../../layout/dynamic-menu/dynamic-menu';\r\nimport { VdSelectComponent } from '../../../select/components/select';\r\nimport { DataSourceFilterDirective } from '../../directives/data-source-filter';\r\nimport { Grid } from '../../enums/grid';\r\nimport { TableColumnType } from '../../enums/table-column-type';\r\nimport { getTableDefinition } from '../../functions/functions';\r\nimport { TableColumn } from '../../models/table-column';\r\nimport { TableDataSource } from '../../table.data-source';\r\nimport { TableStaticDataSource } from '../../table.static-data-source';\r\nimport { FilterClearComponent } from '../filter-clear/filter-clear';\r\nimport { FilterDateComponent } from '../filter-date/filter-date';\r\nimport { FilterInputComponent } from '../filter-input/filter-input';\r\nimport { FilterSelectComponent } from '../filter-select/filter-select';\r\n\r\n@Component({\r\n\tselector: 'vd-dynamic-table',\r\n\ttemplateUrl: 'dynamic-table.html',\r\n\tstyleUrls: ['dynamic-table.scss'],\r\n\timports: [\r\n\t\tCdkTableModule,\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\t//----------------------\r\n\t\tMapPipe,\r\n\t\tMatCheckboxModule,\r\n\t\tMatChipsModule,\r\n\t\tMatFormFieldModule,\r\n\t\tMatIconModule,\r\n\t\tMatButtonModule,\r\n\t\tMatMenuTrigger,\r\n\t\tMatPaginatorModule,\r\n\t\tMatProgressBarModule,\r\n\t\tMatSortModule,\r\n\t\tMatTableModule,\r\n\t\tMatTooltipModule,\r\n\t\tMatInputModule,\r\n\t\tMatSlideToggleModule,\r\n\t\t//----------------------\r\n\t\tDataSourceFilterDirective,\r\n\t\tDisableControlDirective,\r\n\t\tEnumPipe,\r\n\t\tFilterDateComponent,\r\n\t\tFilterInputComponent,\r\n\t\tFilterSelectComponent,\r\n\t\tFilterClearComponent,\r\n\t\tFormGroupPipe,\r\n\t\tFuncPipe,\r\n\t\tJoinPipe,\r\n\t\tPropertyPipe,\r\n\t\tVdDynamicMenuComponent,\r\n\t\tVdSelectComponent,\r\n\t],\r\n\tanimations: [\r\n\t\ttrigger('detailExpand', [\r\n\t\t\tstate('collapsed', style({ height: '0px', minHeight: '0' })),\r\n\t\t\tstate('expanded', style({ height: AUTO_STYLE })),\r\n\t\t\ttransition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n\t\t]),\r\n\t]\r\n})\r\nexport class VdDynamicTableComponent implements OnInit, AfterViewChecked {\r\n\t/**\r\n\t * Reference to the table component, used for accessing MatTable functionalities.\r\n\t */\r\n\t@ViewChild('table')\r\n\tpublic table?: MatTable<any>;\r\n\r\n\t/**\r\n\t * References to the container elements for detail templates, with ViewContainerRef \r\n\t * allowing dynamic insertion of views.\r\n\t */\r\n\t@ViewChildren('detailsTemplate', { read: ViewContainerRef })\r\n\tpublic detailsTemplateRef?: QueryList<any>;\r\n\r\n\t/**\r\n\t * Reference to a content child template (details template) of type TemplateRef, \r\n\t * used for rendering custom templates in the table.\r\n\t */\r\n\t@ContentChild(TemplateRef)\r\n\tpublic templateRef?: TemplateRef<any>;\r\n\r\n\t/**\r\n\t * Data source for the table, which can either be a custom TableDataSource \r\n\t * implementation or a dynamic object.\r\n\t */\r\n\t@Input()\r\n\tpublic dataSource: TableDataSource<any, any> | any;\r\n\r\n\t/**\r\n\t * Input data for the table, which is set as a static data source.\r\n\t * This method also initializes sorting and pagination for the table.\r\n\t */\r\n\t@Input()\r\n\tpublic set data(data: any) {\r\n\t\tthis.dataSource = new TableStaticDataSource(data);\r\n\t\tthis.dataSource.sort = this.matSort;\r\n\t\tthis.dataSource.paginator = this._paginator;\r\n\t\tthis.paginable = true;\r\n\t\tthis.static = true;\r\n\t}\r\n\r\n\t/**\r\n\t * The parent form control (FormGroup or FormArray) passed into the component.\r\n\t * @type {any}\r\n\t */\r\n\t@Input()\r\n\tpublic parentControl: any;\r\n\r\n\t/**\r\n\t * The associated entity object passed into the component.\r\n\t * @type {any}\r\n\t */\r\n\t@Input()\r\n\tpublic entityObject: any;\r\n\r\n\t/**\r\n\t * Reactive FormArray representing the form data, which is used to track \r\n\t * form controls and synchronize table data with form changes.\r\n\t */\r\n\tpublic _formArray?: FormArray;\r\n\r\n\t/**\r\n\t * Input FormArray for managing form controls associated with the table. \r\n\t * It sets the table data and subscribes to changes in the form values to \r\n\t * update the table dynamically.\r\n\t */\r\n\t@Input()\r\n\tpublic get formArray(): FormArray | undefined { return this._formArray; }\r\n\tpublic set formArray(formArray: FormArray) {\r\n\t\tthis._formArray = formArray;\r\n\t\tthis.data = this._formArray?.value;\r\n\r\n\t\t/* Update the table data when the form array values change */\r\n\t\tthis._formArray?.valueChanges?.subscribe(x => {\r\n\t\t\tif (x.length !== this.dataSource?.data?.length) {\r\n\t\t\t\tthis.dataSource.data = this._formArray?.value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Getter for retrieving the raw value of the form, without applying any transformations.\r\n\t */\r\n\tpublic get formValue(): any { return this.formArray?.getRawValue(); }\r\n\r\n\t/**\r\n\t * Flag to enable or disable debug mode for logging and additional information.\r\n\t */\r\n\t@Input()\r\n\tpublic debugValue: boolean = false;\r\n\r\n\t/**\r\n\t * Input representing the class type used in this component, \r\n\t * typically defining the structure or model of the data.\r\n\t */\r\n\t@Input()\r\n\tpublic classType: any;\r\n\r\n\t/**\r\n\t * Input for the current context or environment in which the table is being used.\r\n\t * This allows passing additional metadata or settings.\r\n\t */\r\n\t@Input()\r\n\tpublic context: any;\r\n\r\n\t/**\r\n\t * Input for applying filters to the data source. It defines criteria or conditions \r\n\t * that will be used to filter the table data.\r\n\t */\r\n\t@Input()\r\n\tpublic dataSourceFilter: any = {};\r\n\r\n\t/**\r\n\t * Flag indicating whether the table uses a static data source. \r\n\t * When true, the table does not rely on dynamic data changes.\r\n\t */\r\n\t@Input()\r\n\tpublic static: boolean = false;\r\n\r\n\t/**\r\n\t * Flag to indicate whether the table data is filterable by the user.\r\n\t * If true, filtering options are provided.\r\n\t */\r\n\t@Input()\r\n\tpublic filterable: boolean = true;\r\n\r\n\t/**\r\n\t * Flag to indicate whether the table headers or columns should stick \r\n\t * to the viewport during scrolling.\r\n\t */\r\n\t@Input()\r\n\tpublic sticky: boolean = false;\r\n\r\n\t/**\r\n\t * Defines the overall width of the table.\r\n\t */\r\n\t@Input()\r\n\tpublic tableWidth?: number;\r\n\r\n\t/**\r\n\t * Determines whether the filter operator is used in table filtering.\r\n\t * If true, filtering logic will apply operators such as equals, contains, etc.\r\n\t */\r\n\t@Input()\r\n\tpublic useFilterOperator: boolean = true;\r\n\r\n\t/**\r\n\t * Determines whether the table supports pagination.\r\n\t * If true, pagination controls will be available for navigating through the data.\r\n\t */\r\n\t@Input()\r\n\tpublic paginable: boolean = false;\r\n\r\n\t/**\r\n\t * Determines whether the 'Checkbox' column is shown for row selection.\r\n\t * If true, a checkbox column will be displayed allowing users to select rows.\r\n\t */\r\n\t@Input()\r\n\tpublic selectable: boolean = false;\r\n\r\n\t/**\r\n\t * Specifies the active column used for sorting the table data.\r\n\t * This input determines which column the sorting is applied to.\r\n\t */\r\n\t@Input()\r\n\tpublic sortActive?: string;\r\n\r\n\t/**\r\n\t * Specifies the direction of sorting (ascending or descending).\r\n\t * Default is 'asc' (ascending).\r\n\t */\r\n\t@Input()\r\n\tpublic sortDirection: SortDirection = 'asc';\r\n\r\n\t/**\r\n\t * Determines whether the table header should remain sticky (fixed) at the top of the viewport \r\n\t * when the table scrolls.\r\n\t */\r\n\t@Input()\r\n\tpublic stickyHeader: boolean = true;\r\n\r\n\t/**\r\n\t * Determines whether the filter section of the table should remain sticky (fixed) \r\n\t * at the top of the viewport when scrolling.\r\n\t */\r\n\t@Input()\r\n\tpublic stickyFilter: boolean = true;\r\n\r\n\t/**\r\n\t * Private backing field for the columnSets input property.\r\n\t * This field stores the sets of columns to be displayed in the table,\r\n\t * enabling control over how the value is accessed or modified through\r\n\t * the public getter and setter.\r\n\t * @private\r\n\t */\r\n\tprivate _columnSets?: string[];\r\n\r\n\t/**\r\n\t * Used to display specific columns in the table.\r\n\t * This array defines sets of columns that can be shown\r\n\t * based on the active configuration, allowing for dynamic table\r\n\t * column customization.\r\n\t * @property\r\n\t */\r\n\t@Input()\r\n\tpublic get columnSets(): string[] | undefined { return this._columnSets; }\r\n\tpublic set columnSets(value: string[] | undefined) { this._columnSets = value; }\r\n\r\n\t/**\r\n\t * Event emitter for row click events. It emits the clicked row's data whenever a row is clicked.\r\n\t */\r\n\t@Output()\r\n\tpublic rowClick: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n\t/**\r\n\t * Function used to dynamically assign CSS classes to table rows based on custom logic.\r\n\t */\r\n\t@Input()\r\n\tpublic rowNgClass?: Function;\r\n\r\n\t/**\r\n\t * Template for rendering additional details below each row. \r\n\t * It accepts a string representing the template key or identifier.\r\n\t */\r\n\t@Input()\r\n\tpublic detailsTemplate?: string;\r\n\r\n\t/**\r\n\t * Flag to indicate whether the table is in a readonly state.\r\n\t * If true, no changes can be made to the table data.\r\n\t */\r\n\tpublic _readonly: boolean = false;\r\n\r\n\t/**\r\n * Input property to determine if the table is readonly. \r\n * Uses `coerceBooleanProperty` to ensure the value is treated as a boolean.\r\n */\r\n\t@Input()\r\n\tpublic get readonly() { return this._readonly; }\r\n\tpublic set readonly(readonly: any) {\r\n\t\tthis._readonly = coerceBooleanProperty(readonly);\r\n\t}\r\n\r\n\t/**\r\n\t * Function to filter items when selecting all rows. \r\n\t * It takes value, index, and array as arguments and returns a boolean or unknown type.\r\n\t */\r\n\t@Input()\r\n\tpublic selectAllFilter?: (value: any, index: number, array: any[]) => unknown;\r\n\r\n\t/**\r\n\t * Reference to the MatSort directive used for applying sorting on the table.\r\n\t */\r\n\t@ViewChild(MatSort, { static: true })\r\n\tpublic matSort?: MatSort;\r\n\r\n\t/**\r\n\t * Private reference to the MatPaginator used to paginate the table data.\r\n\t */\r\n\tprivate _paginator?: MatPaginator;\r\n\r\n\t/**\r\n\t * Input setter for the MatPaginator. When the paginator is set, it assigns it \r\n\t * to the data source for pagination control.\r\n\t */\r\n\t@ViewChild(MatPaginator)\r\n\tpublic set paginator(paginator: MatPaginator) {\r\n\t\tif (paginator) {\r\n\t\t\tthis.dataSource.paginator = paginator;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Input property for the MatPaginator used to paginate the table data.\r\n\t */\r\n\t@Input()\r\n\tpublic set paginatorRef(paginator: MatPaginator) {\r\n\t\tif (paginator) {\r\n\t\t\tthis.dataSource.paginator = paginator;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Private array storing the columns to be displayed in the table.\r\n\t */\r\n\tprivate _columns: TableColumn[] = [];\r\n\r\n\t/**\r\n\t * Input getter and setter for the table columns. \r\n\t * It allows the columns to be customized and updated dynamically.\r\n\t */\r\n\t@Input()\r\n\tpublic get columns(): TableColumn[] { return this._columns; }\r\n\tpublic set columns(columns: TableColumn[]) { this._columns = columns; }\r\n\r\n\t/**\r\n\t * BehaviorSubject to manage and emit changes to the columns dynamically.\r\n\t */\r\n\tpublic columnsSubject: BehaviorSubject<TableColumn[]> = new BehaviorSubject<TableColumn[]>([]);\r\n\r\n\t/**\r\n\t * Observable that tracks and emits changes to the columns.\r\n\t */\r\n\tpublic columns$: Observable<TableColumn[]> = this.columnsSubject.asObservable();\r\n\r\n\t/**\r\n\t * Observable tracking the columns currently displayed in the table.\r\n\t */\r\n\tpublic displayedColumns$?: Observable<string[]>;\r\n\r\n\t/**\r\n\t * Observable tracking the filterable columns displayed in the table.\r\n\t */\r\n\tpublic displayedFilterColumns$?: Observable<string[]>;\r\n\r\n\t/**\r\n\t * Input property for row-specific action menu items. \r\n\t * Defines actions available in the context menu for each row.\r\n\t */\r\n\t@Input()\r\n\tpublic rowMenuItems: ActionItem[] = [];\r\n\r\n\t/**\r\n\t * Input for a single row action to be applied when interacting with a row.\r\n\t * @property {ActionItem} rowAction\r\n\t */\r\n\t@Input()\r\n\tpublic rowAction?: ActionItem;\r\n\r\n\t/**\r\n\t * Input for specifying which columns should be excluded from display in the table.\r\n\t * @property {string[]} excludedColumns\r\n\t */\r\n\t@Input()\r\n\tpublic excludedColumns: string[] = [];\r\n\r\n\t/**\r\n\t * QueryList to reference all MatMenuTriggers associated with row context menus.\r\n\t * Used for handling the context menu interactions on table rows.\r\n\t * @property {QueryList<MatMenuTrigger>} rowContextMenuTriggers\r\n\t */\r\n\t@ViewChildren(MatMenuTrigger)\r\n\tpublic rowContextMenuTriggers?: QueryList<MatMenuTrigger>;\r\n\r\n\t/**\r\n\t * Column type enum reference, mapping table columns to their types for rendering.\r\n\t * @property {typeof TableColumnType} ColumnType\r\n\t */\r\n\tpublic ColumnType: typeof TableColumnType = TableColumnType;\r\n\r\n\t/**\r\n\t * Grid enum reference, representing the type of grid used in the table.\r\n\t * @property {typeof Grid} Grid\r\n\t */\r\n\tpublic Grid: typeof Grid = Grid;\r\n\r\n\t/**\r\n\t * Reference to the currently expanded row, used for handling row expansion logic.\r\n\t * @property {any} expandedRow\r\n\t */\r\n\tpublic expandedRow: any;\r\n\r\n\t/**\r\n\t * Input for setting the default page size for pagination. \r\n\t * Default value is 15.\r\n\t */\r\n\t@Input()\r\n\tpublic pageSize: number = 15;\r\n\r\n\t/**\r\n\t * Input for setting available page size options in the paginator.\r\n\t * Default options include [5, 10, 15, 20, 30, 50, 100, 200].\r\n\t */\r\n\t@Input()\r\n\tpublic pageSizeOptions: Array<number> = [5, 10, 15, 20, 30, 50, 100, 200];\r\n\r\n\t/* \r\n\t * This decorator binds the scrollable container element by its template reference.\r\n\t * The `scrollContainer` will reference the element inside the template with `#scrollContainer`.\r\n\t * It will allow access to the native DOM element for managing scroll operations.\r\n\t */\r\n\t@ViewChild('scrollContainer', { static: true })\r\n\tpublic scrollContainer?: ElementRef;\r\n\r\n\t/* \r\n\t * Indicates whether the right mouse button is actively dragging the scroll container.\r\n\t * This flag ensures that scrolling only occurs when a drag operation is in progress,\r\n\t * providing a smoother and more controlled user experience during interactions.\r\n\t */\r\n\tprivate startDragging = false;\r\n\r\n\t/* \r\n\t * Flag to indicate whether the right mouse button is actively dragging the scroll container.\r\n\t * It ensures that scrolling occurs only during active dragging.\r\n\t */\r\n\tprivate isDragging = false;\r\n\r\n\t/* \r\n\t * Stores the initial X coordinate when the user presses the right mouse button.\r\n\t * This is used to calculate the distance moved during dragging, enabling smooth scrolling.\r\n\t */\r\n\tprivate startX: number = 0;\r\n\r\n\t/* \r\n\t * Keeps track of the container’s scroll position before the drag begins.\r\n\t * This allows updating the scroll position in real-time as the user moves the mouse.\r\n\t */\r\n\tprivate scrollLeft: number = 0;\r\n\r\n\t/**\r\n\t * Constructor for the component, injecting services needed for form building,\r\n\t * dynamic content handling, and change detection.\r\n\t * \r\n\t * @param formBuilder Service for creating form controls and managing form logic.\r\n\t * @param dynamicBuilder Service for dynamically constructing table components.\r\n\t * @param changeDetector Service for detecting and triggering UI changes.\r\n\t */\r\n\tconstructor(\r\n\t\tprivate dynamicBuilder: DynamicBuilder,\r\n\t\tprivate changeDetector: ChangeDetectorRef\r\n\t) { }\r\n\r\n\t/**\r\n\t * A callback method that is invoked immediately after the\r\n\t * default change detector has checked the directive's\r\n\t * data-bound properties for the first time,\r\n\t * and before any of the view or content children have been checked.\r\n\t * It is invoked only once when the directive is instantiated.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tif (this.classType) {\r\n\t\t\t/* Get the table definition using the class type */\r\n\t\t\tvar tableDefinition = getTableDefinition(this.classType);\r\n\t\t\tif (tableDefinition) {\r\n\t\t\t\tthis.columns = [...tableDefinition!.columns ?? []];\r\n\t\t\t\tif (this.rowMenuItems?.length > 0) {\r\n\t\t\t\t\t/* Check if the action column already exists */\r\n\t\t\t\t\tvar actionColmun = this._columns?.find(x => x.name == 'action');\r\n\r\n\t\t\t\t\t/* If so, just add the menu items to it */\r\n\t\t\t\t\tif (actionColmun != null) {\r\n\t\t\t\t\t\tactionColmun.menu ||= { id: 'more', icon: 'more_vert' };\r\n\t\t\t\t\t\tthis.rowMenuItems.forEach(y => actionColmun!.menu!.items?.unshift(y));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Otherwise add a new one */\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis._columns.push(new TableColumn({\r\n\t\t\t\t\t\t\tindex: 2000,\r\n\t\t\t\t\t\t\tname: 'action',\r\n\t\t\t\t\t\t\tcolumnSets: ['action', 'common'],\r\n\t\t\t\t\t\t\ttype: TableColumnType.Action,\r\n\t\t\t\t\t\t\tdisabled: true,\r\n\t\t\t\t\t\t\tmenu: { id: 'more', icon: 'more_vert', items: this.rowMenuItems },\r\n\t\t\t\t\t\t\tconfigurable: false,\r\n\t\t\t\t\t\t\tstickyEnd: true\r\n\t\t\t\t\t\t}));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (this.rowAction) {\r\n\t\t\t\t\tthis._columns.push(new TableColumn({\r\n\t\t\t\t\t\tindex: 2000,\r\n\t\t\t\t\t\tname: 'action',\r\n\t\t\t\t\t\tcolumnSets: ['action', 'common'],\r\n\t\t\t\t\t\ttype: TableColumnType.Action,\r\n\t\t\t\t\t\tdisabled: true,\r\n\t\t\t\t\t\tmenu: this.rowAction,\r\n\t\t\t\t\t\tconfigurable: false,\r\n\t\t\t\t\t\tstickyEnd: true\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Add checkbox column */\r\n\t\t\t\tif (this.selectable) {\r\n\t\t\t\t\tthis.columns.unshift(new TableColumn({\r\n\t\t\t\t\t\tname: 'select',\r\n\t\t\t\t\t\tcolumnSets: ['select', 'common'],\r\n\t\t\t\t\t\ttype: TableColumnType.Checkbox,\r\n\t\t\t\t\t\tconfigurable: false,\r\n\t\t\t\t\t\tsticky: true\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* Build displayed columns & filter */\r\n\t\tthis.columns$?.subscribe(x => {\r\n\t\t\t/* Filter the columns based on the individual column's columnSets property and the global columnSets */\r\n\t\t\tconst selectedColumns = (this.columnSets?.length ?? 0) > 0\r\n\t\t\t\t? this.columns?.filter(c => this.columnSets?.some(set => c.columnSets?.includes(set)))\r\n\t\t\t\t: this.columns;\r\n\r\n\t\t\t/* Build the displayed columns by filtering out the excluded columns and mapping to their names */\r\n\t\t\tthis.displayedColumns$ = of(selectedColumns\r\n\t\t\t\t/* Exclude columns that are in the excludedColumns list */\r\n\t\t\t\t?.filter(x => !this.excludedColumns?.includes(x.name))\r\n\t\t\t\t/* Filter out columns that are hidden by the hide function (if provided) */\r\n\t\t\t\t?.filter(x => !x.hide || !x.hide(this.entityObject, this.parentControl, this.context))\r\n\t\t\t\t/* Map the remaining columns to their name property */\r\n\t\t\t\t?.map(c => c.name)\r\n\t\t\t);\r\n\r\n\t\t\t/* Build the displayed filter columns by filtering out the excluded columns and prefixing with 'filter.' */\r\n\t\t\tthis.displayedFilterColumns$ = of(selectedColumns\r\n\t\t\t\t/* Exclude columns that are in the excludedColumns list */\r\n\t\t\t\t?.filter(x => !this.excludedColumns?.includes(x.name))\r\n\t\t\t\t/* Filter out columns that are hidden by the hide function (if provided) */\r\n\t\t\t\t?.filter(x => !x.hide || !x.hide(this.entityObject, this.parentControl, this.context))\r\n\t\t\t\t/* Map the remaining columns to a filter-friendly string with 'filter.' prefix */\r\n\t\t\t\t?.map(c => `filter.${(c.filter || c.name)}`)\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\t/* Set the table columns */\r\n\t\tthis.updateColumns();\r\n\r\n\t\tconst container = this.scrollContainer?.nativeElement;\r\n\t\tif (container) {\r\n\t\t\t/* \r\n\t\t\t * Disable the context menu on right-click to allow smooth scrolling \r\n\t\t\t * without interference from the default context menu behavior.\r\n\t\t\t */\r\n\t\t\tcontainer.addEventListener('contextmenu', (e: MouseEvent) => e.preventDefault());\r\n\r\n\t\t\t/* \r\n\t\t\t * Start dragging when the right mouse button is pressed (button === 2).\r\n\t\t\t * This saves the initial position and scroll state for later use during movement.\r\n\t\t\t */\r\n\t\t\tcontainer.addEventListener('mousedown', (e: MouseEvent) => {\r\n\t\t\t\tif (e.button === 2 && this.scrollContainer) {\r\n\t\t\t\t\t/* Prevents any default behavior associated with right-click */\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t/* Activate the dragging mode, allowing horizontal scrolling */\r\n\t\t\t\t\tthis.startDragging = true;\r\n\r\n\t\t\t\t\t/* Store the initial X position */\r\n\t\t\t\t\tthis.startX = e.pageX - container.offsetLeft;\r\n\r\n\t\t\t\t\t/* Save the current scroll position */\r\n\t\t\t\t\tthis.scrollLeft = container.scrollLeft;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t/* \r\n\t\t\t * Stop dragging when the mouse leaves the container.\r\n\t\t\t * This ensures the scrolling stops even if the user moves the cursor outside the boundaries.\r\n\t\t\t */\r\n\t\t\tcontainer.addEventListener('mouseleave', (e: MouseEvent) => this.stopDragging(e));\r\n\r\n\t\t\t/* \r\n\t\t\t * Stop dragging when the mouse button is released (on mouse up).\r\n\t\t\t * This prevents further scroll movements after the user releases the mouse.\r\n\t\t\t */\r\n\t\t\tcontainer.addEventListener('mouseup', (e: MouseEvent) => this.stopDragging(e));\r\n\r\n\t\t\t/* \r\n\t\t\t * Handle the actual dragging (scrolling) when the mouse is moved.\r\n\t\t\t * This calculates the movement and updates the scroll position accordingly.\r\n\t\t\t */\r\n\t\t\tcontainer.addEventListener('mousemove', (e: MouseEvent) => {\r\n\t\t\t\t/* If dragging is not active or scroll container is undefined, exit */\r\n\t\t\t\tif (!this.startDragging || !this.scrollContainer) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Activate the dragging mode, allowing horizontal scrolling */\r\n\t\t\t\tthis.isDragging = true;\r\n\r\n\t\t\t\t/* Prevent default action to ensure smooth behavior */\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t/* Calculate the current mouse X position */\r\n\t\t\t\tconst x = e.pageX - container.offsetLeft;\r\n\r\n\t\t\t\t/* Calculate the distance moved (amplified for speed) */\r\n\t\t\t\tconst walk = (x - this.startX) * 2;\r\n\r\n\t\t\t\t/* Update the scroll position based on movement */\r\n\t\t\t\tcontainer.scrollLeft = this.scrollLeft - walk;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the table columns\r\n\t */\r\n\tpublic updateColumns(): void {\r\n\t\t/* Sort the columns by index */\r\n\t\tUtils.sortArray(this.columns || [], 'index');\r\n\r\n\t\t/* Trigger changes */\r\n\t\tthis.columnsSubject.next(this.columns);\r\n\t}\r\n\r\n\t/**\r\n\t * Counts visible action menus\r\n\t * @param row \r\n\t * @param column \r\n\t * @returns \r\n\t */\r\n\tpublic hasVisibleRowMenuItems(row: any, column: TableColumn): boolean {\r\n\t\treturn (column?.rowMenuItems?.filter(x => !x.hide || !x.hide(row))?.length ?? -1) > 0;\r\n\t}\r\n\r\n\t/**\r\n\t * A function to to compute the identity of items in an iterable.\r\n\t * @param index \r\n\t * @param item \r\n\t */\r\n\tpublic trackBy(index: number, item: any): string {\r\n\t\treturn `${item.id}`;\r\n\t}\r\n\r\n\t/**\r\n\t * A function to to compute the identity of items in an iterable.\r\n\t * @param index \r\n\t * @param item \r\n\t */\r\n\tpublic columnsTrackBy(index: number, item: any): string {\r\n\t\treturn item.name;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles row click event\r\n\t * @param index \r\n\t * @param row \r\n\t */\r\n\tpublic handleRowClick(index: any, row: any): void {\r\n\t\tif (this.templateRef) {\r\n\t\t\tthis.expandedRow = this.expandedRow === row ? null : row;\r\n\t\t}\r\n\t\telse if (this.detailsTemplate) {\r\n\t\t\tthis.expandedRow = this.expandedRow === row ? null : row;\r\n\t\t\tif (this.detailsTemplateRef) {\r\n\t\t\t\tthis.dynamicBuilder.compileHtml(this.detailsTemplateRef.get(index), this.detailsTemplate, row);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.rowClick.emit(row);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Method called when the user click with the right button\r\n\t * @param event MouseEvent, it contains the coordinates\r\n\t * @param item Our data contained in the row of the table\r\n\t */\r\n\tpublic handleRowRightClick(event: MouseEvent, item: any) {\r\n\t\tif (this.isDragging) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.rowContextMenuTriggers?.toArray()?.forEach(x => x.closeMenu());\r\n\t\tvar menuTrigger = this.rowContextMenuTriggers?.toArray()?.filter(x => x['_element']?.nativeElement?.getAttribute('id') == `menu-${item.id}`)[0];\r\n\t\tif (menuTrigger != null) {\r\n\t\t\t/* Avoids to show the visualization of the right-click menu of the browser */\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\t/* Set the position of the menu */\r\n\t\t\tmenuTrigger['_element']?.nativeElement?.setAttribute('style', `position: fixed; left: ${event.clientX}px; top: ${event.clientY}px`);\r\n\r\n\t\t\t/* Pass to the menu the current object */\r\n\t\t\tmenuTrigger.menuData = { item: item }\r\n\r\n\t\t\t/* Open the menu */\r\n\t\t\tmenuTrigger.openMenu();\r\n\r\n\t\t\t/* Handle clicks on the menu overlay */\r\n\t\t\tdocument.getElementsByClassName('cdk-overlay-container')[0]?.addEventListener('contextmenu', (offEvent: any) => {\r\n\t\t\t\toffEvent.preventDefault();\r\n\t\t\t\tmenuTrigger!.closeMenu();\r\n\t\t\t}, { once: true });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles model changes\r\n\t * @param column \r\n\t * @param row \r\n\t */\r\n\tpublic handleModelChange(column: TableColumn, row: any, formGroup?: FormGroup): void {\r\n\t\tif (typeof column?.event === 'function') {\r\n\t\t\tcolumn.event(row, formGroup, column.eventArgs ?? this.context);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles keydown enter of <input> and <vd-select>\r\n\t * @param $event \r\n\t */\r\n\tpublic handleKeydownEnter($event: Event): boolean {\r\n\t\t($event?.target as HTMLInputElement)?.blur();\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Patches an entity\r\n\t * @param row \r\n\t * @param fieldName \r\n\t * @param path \r\n\t */\r\n\tpublic patch(row: any, fields: Array<string>, value: any, includes: any): void {\r\n\t\t/* Get entity by ID */\r\n\t\tlet entity = this.dataSource.items?.filter((x: any) => (<any>x).id === row.id)[0];\r\n\t\tif (entity) {\r\n\t\t\t/* Build patch methods */\r\n\t\t\tlet patches = fields.map(x => { return { op: 'replace', path: `/${x}`, value: value != undefined ? value : entity[x] }; });\r\n\r\n\t\t\t/* Send request */\r\n\t\t\tthis.dataSource.service\r\n\t\t\t\t.patch(row.id, patches, null, { headers: { 'Show-Message': 'Yes' }, params: includes ? Utils.toHttpParams({ includes: includes }) : null })\r\n\t\t\t\t.subscribe((_: any) => this.dataSource.reload());\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Renders rows based on the table's latest set of data, which was either provided directly as an\r\n\t * input or retrieved through an Observable stream (directly or from a DataSource).\r\n\t * Checks for differences in the data since the last diff to perform only the necessary\r\n\t * changes (add/remove/move rows).\r\n\t */\r\n\tpublic renderRows(): void {\r\n\t\tthis.table?.renderRows();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a string function expression.\r\n\t * \r\n\t * This method processes an input expression that can either be a string or a function. \r\n\t * If it's a function, it will be invoked with the provided item and context. \r\n\t * If it's a string, it will be returned as-is.\r\n\t * \r\n\t * @param expression - The expression to handle, which can be a string or a function.\r\n\t * @param item - The item to pass to the function if the expression is a function.\r\n\t * @returns - The result of invoking the function with the item and context, or the string expression itself.\r\n\t */\r\n\tpublic handleExpression(expression: string | Function, item: any): string | undefined {\r\n\t\t/* Check if the expression is falsy (e.g., null, undefined, or empty) */\r\n\t\tif (!expression) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t/* If the expression is a function, call it with the item and context */\r\n\t\tif (typeof expression === 'function') {\r\n\t\t\treturn expression(item, this.context);\r\n\t\t}\r\n\r\n\t\t/* If the expression is not a function, assume it's a string and return it */\r\n\t\treturn expression;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a nested property value in an object based on a dot-separated path.\r\n\t * @param row - The object in which the property is being set.\r\n\t * @param propertyPath - A dot-separated string representing the path to the nested property.\r\n\t * @param value - The value to set at the specified nested property.\r\n\t */\r\n\tpublic setNestedProperty(row: any, propertyPath: string, value: any): void {\r\n\t\t/* Split the propertyPath into an array of keys */\r\n\t\tconst keys = propertyPath.split('.');\r\n\r\n\t\t/* Use slice to get all keys except the last one and reduce to traverse to the second-to-last level */\r\n\t\tkeys.slice(0, -1).reduce((acc, key) => acc && acc[key], row)[keys[keys.length - 1]] = value;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets row classes\r\n\t * @param column \r\n\t * @param row \r\n\t * @returns \r\n\t */\r\n\tpublic getRowClasses(column: TableColumn, row: any): any {\r\n\t\treturn Object.assign({\r\n\t\t\t'gt-xs': column.display == Grid.Xs,\r\n\t\t\t'gt-sm': column.display == Grid.Sm,\r\n\t\t\t'gt-md': column.display == Grid.Md,\r\n\t\t\t'gt-lg': column.display == Grid.Lg,\r\n\t\t\t'gt-xl': column.display == Grid.Xl,\r\n\t\t\t'gt-xxl': column.display == Grid.Xxl,\r\n\t\t\t'hidden': column.display == Grid.None,\r\n\t\t\t'text-right': column.arrowBefore\r\n\t\t}, column.cellNgClass ? column.cellNgClass(row, this.context) : {});\r\n\t}\r\n\r\n\t/**\r\n\t * Log to console\r\n\t * @param message \r\n\t * @param optionalParams \r\n\t */\r\n\tpublic log(message: any, ...optionalParams: any[]) {\r\n\t\tconsole.log(message, optionalParams);\r\n\t}\r\n\r\n\t/* \r\n\t * Terminates the dragging action by resetting the `isDragging` flag after a brief delay.\r\n\t * If the `scrollContainer` is defined, it also removes the 'grabbing' class \r\n\t * from the container element, which reverts the cursor back to its default state.\r\n\t * This ensures that the visual feedback (grabbing cursor) is only active during \r\n\t * the drag operation and is properly removed when the user stops interacting.\r\n\t */\r\n\tprivate stopDragging(event: MouseEvent) {\r\n\t\t/* Reset dragging state to stop the scroll interaction */\r\n\t\tthis.startDragging = false;\r\n\r\n\t\t/* \r\n\t\t * Introduce a slight delay before resetting the dragging state.\r\n\t\t * This allows for smoother transitions and ensures that any final scroll adjustments\r\n\t\t * are applied before marking the dragging operation as complete.\r\n\t\t */\r\n\t\tsetTimeout(() => {\r\n\t\t\t/* Reset dragging state to stop the scroll interaction */\r\n\t\t\tthis.isDragging = false;\r\n\r\n\t\t\t/* Restore the default cursor */\r\n\t\t\tif (this.scrollContainer) {\r\n\t\t\t\tthis.scrollContainer.nativeElement.classList.remove('grabbing');\r\n\t\t\t}\r\n\t\t}, 200);\r\n\t}\r\n\r\n\t/**\r\n\t * A callback method that is invoked immediately after the\r\n\t * default change detector has completed one change-check cycle\r\n\t * for a component's view.\r\n\t */\r\n\tpublic ngAfterViewChecked(): void {\r\n\t\tthis.changeDetector.detectChanges();\r\n\t}\r\n}","@if (!static) {\n    <div class=\"loading-progress\">\n        @if (dataSource?.isLoading) {\n            <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n        }\n    </div>\n}\n\n<!-- #region Data table -->\n<div class=\"mat-table-container scrollbar-secondary\" [ngClass]=\"{'mat-table-sticky': sticky}\" #scrollContainer>\n    <table mat-table #table [dataSource]=\"dataSource\" [dataSourceFilter]=\"dataSourceFilter\" [ngClass]=\"{'table-fixed': !sticky && !detailsTemplate && !templateRef, 'table-stick': sticky}\" [trackBy]=\"trackBy\" matSort matSortDisableClear [matSortActive]=\"sortActive||'id'\" [matSortDirection]=\"sortDirection\" multiTemplateDataRows>\n        @for (column of columns$ | async; track columnsTrackBy($index, column)) {\n            <!-- #region Column def -->\n            <ng-container [cdkColumnDef]=\"column.name\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\n                <ng-template #header [ngTemplateOutlet]=\"header\" let-headerText=\"headerText\" [ngTemplateOutletContext]=\"{headerText: column.header | func:context}\">\n                    <th mat-header-cell *cdkHeaderCellDef [mat-sort-header]=\"column.sortBy || column.name\" [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [disabled]=\"column.type == ColumnType.Checkbox || column.disabled\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\" [arrowPosition]=\"column.arrowBefore?'before':'after'\">\n                        @if (column.type == ColumnType.Checkbox) {\n                            <mat-checkbox (change)=\"$event ? dataSource.toggleSelect($event, selectAllFilter) : null\" [disabled]=\"!dataSource.paginator?.length\" [checked]=\"dataSource.selectionModel.hasValue() && dataSource.isAllSelected()\" [indeterminate]=\"dataSource.selectionModel.hasValue() && !dataSource.isAllSelected()\"></mat-checkbox>\n                        }\n                        @if (column.type != ColumnType.Checkbox) {\n                            <span [matTooltip]=\"headerText\">{{headerText}}</span>\n                        }\n                    </th>\n                </ng-template>\n                <td mat-cell *cdkCellDef=\"let row; let rowIndex = dataIndex\" [matTooltip]=\"column.tooltip?column.tooltip(row, undefined, context):null\" [matTooltipClass]=\"column.tooltipClass??''\" [hidden]=\"column.hidden\" [ngClass]=\"getRowClasses(column, row)\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\">\n                    <ng-template #rowVal [ngTemplateOutlet]=\"rowVal\" let-rowValue [ngTemplateOutletContext]=\"{$implicit: column?.content && column?.content(row, undefined, context)}\">\n                        @switch (column.type) {\n                            <!-- #region Checkbox column -->\n                            @case (ColumnType.Checkbox) {\n                                <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? dataSource.selectionModel.toggle(row) : null\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [checked]=\"dataSource.selectionModel.isSelected(row)\"></mat-checkbox>\n                            }\n                            <!-- #endregion -->\n                            <!-- #region Enum column -->\n                            @case (ColumnType.Enum) {\n                                <span>\n                                    @if (column.enumMetadata) {\n                                        @if (column.multiple) {\n                                            @for (item of rowValue; track item; let i = $index) {\n                                                @if (i < 2) {\n                                                    <ng-template let-displayValue=\"displayValue\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ displayValue: column.enumMetadata[item].display }\"></ng-template>\n                                                }\n                                                @if (i === 1 && rowValue?.length > 2) {\n                                                    <small [matTooltip]=\"(rowValue | slice:2 | map:column.enumMetadata | map:'display') | join:'\\n'\" matTooltipClass=\"mat-tooltip-multiline\">...</small>\n                                                }\n                                            }\n                                            <ng-template #template let-displayValue=\"displayValue\">\n                                                <mat-chip-row disableRipple=\"true\" selectable=\"false\" [matTooltip]=\"displayValue\">\n                                                    <span>{{ displayValue }}</span>\n                                                </mat-chip-row>\n                                            </ng-template>\n                                        } @else {\n                                            @if (rowValue >= 0) {\n                                                <span class=\"na\" [ngStyle]=\"{ color: ((column.enumMetadata[rowValue] || {}).textColor || 'inherit') }\" [innerHtml]=\"(column.enumMetadata[rowValue]||{}).display\"></span>\n                                            }\n                                        }\n                                    } @else {\n                                        @if (column.multiple) {\n                                            @for (item of rowValue; track item; let i = $index; let last = $last) {\n                                                <div>\n                                                    @if (i<2) {\n                                                        <small i18n=\"@@selection\">{item | enum:column.enumType:column.enumPrefix, select, type {type} other {{{item | enum:column.enumType:column.enumPrefix}}}}</small>\n                                                    }\n                                                    @if (i==1 && rowValue?.length > 2) {\n                                                        <small>, ...</small>\n                                                    }\n                                                </div>\n                                            }\n                                        } @else {\n                                            @if (rowValue >= 0) {\n                                                <span i18n=\"@@selection\">{rowValue | enum:column.enumType:column.enumPrefix, select, type {type} other {{{rowValue | enum:column.enumType:column.enumPrefix}}}}</span>\n                                                }\n                                                }\n                                                }\n                                </span>\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Toggle column -->\n                                @case (ColumnType.Toggle) {\n                                    @if (!formArray) {\n                                        <mat-slide-toggle [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);handleModelChange(column, row, undefined);\" (click)=\"$event.stopPropagation();\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" color=\"accent\"></mat-slide-toggle>\n                                    }\n                                    @if (formArray) {\n                                        <ng-container [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\n                                            <ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\n                                        </ng-container>\n                                    }\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Date column -->\n                                @case (ColumnType.Date) {\n                                    <span>{{rowValue | date:column.shortDate?'dd.MM.yyyy':'dd.MM.yyyy HH:mm:ss'}}</span>\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Text Input column -->\n                                @case (ColumnType.TextInput) {\n                                    @if (!formArray) {\n                                        <mat-form-field appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\n                                            @if (!formArray) {\n                                                <input matInput type=\"{{column.inputType}}\" autocomplete=\"none\" name=\"{{column.name}}{{rowIndex}}\" [ngModel]=\"row | property:column.name\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [min]=\"column.inputMin?column.inputMin(row, undefined, context):null\" [max]=\"column.inputMax?column.inputMax(row, undefined, context):null\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);(column.change?column.change(row, undefined, context):patch(row, [column.name], $event, column.patchIncludes));\" [ngModelOptions]=\"{updateOn: 'blur'}\" (keydown.enter)=\"handleKeydownEnter($event)\">\n                                            }\n                                        </mat-form-field>\n                                    }\n                                    @if (formArray) {\n                                        <ng-container [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\n                                            <ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\n                                        </ng-container>\n                                    }\n                                }\n                                <!-- #endregion -->\n                                <!-- #region VD-Select column -->\n                                @case (ColumnType.Select) {\n                                    @if (!formArray) {\n                                        <mat-form-field appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\n                                            @if (!formArray) {\n                                                <vd-select name=\"{{column.name}}{{rowIndex}}\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column?.enumFilter  | func:row:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" (change)=\"column.change?column.change(row, undefined, context):patch(row, [column.name], $event.value, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\n                                            }\n                                        </mat-form-field>\n                                    }\n                                    @if (formArray) {\n                                        <ng-container [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\n                                            <ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\n                                        </ng-container>\n                                    }\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Action -->\n                                @case (ColumnType.Action) {\n                                    @if (column.menu) {\n                                        @if (menu?.matMenu && !row.locked && hasVisibleRowMenuItems(row, column)) {\n                                            <div id=\"menu-{{row.id}}\" style=\"visibility: hidden; position: fixed;\" #contextMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu.matMenu!\"></div>\n                                        }\n                                        <vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\" #menu></vd-dynamic-menu>\n                                    }\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Menu -->\n                                @case (ColumnType.Menu) {\n                                    @if (column.menu) {\n                                        <vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\"></vd-dynamic-menu>\n                                    }\n                                }\n                                <!-- #endregion -->\n                                <!-- #region icon -->\n                                @case (ColumnType.Icon) {\n                                    <span layout=\"row\" layout-align=\"start center\">\n                                        @if (column.icon?.matIcon) {\n                                            <mat-icon fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\">{{handleExpression(column.icon?.matIcon!, row)}}</mat-icon>\n                                        }\n                                        @if (column.icon?.svgIcon) {\n                                            <mat-icon fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [svgIcon]=\"handleExpression(column.icon?.svgIcon!, row)!\"></mat-icon>\n                                        }\n                                        @if (column.icon?.fontIcon) {\n                                            <mat-icon fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [fontIcon]=\"handleExpression(column.icon?.fontIcon!, row)!\"></mat-icon>\n                                        }\n                                    </span>\n                                }\n                                <!-- #endregion -->\n                                <!-- #region icon button -->\n                                @case (ColumnType.IconButton) {\n                                    <a mat-icon-button (click)=\"$event.stopPropagation();column.iconButton?.event?column.iconButton?.event(row, context):null\">\n                                        <mat-icon fontSet=\"{{column.iconButton?.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.iconButton?.iconClass??'', row)\">{{handleExpression(column.iconButton?.icon??'radio_button_checked', row) || 'radio_button_checked'}}</mat-icon>\n                                    </a>\n                                }\n                                <!-- #endregion -->\n                                <!-- #region Other column types -->\n                                @default {\n                                    <span [innerHtml]=\"rowValue??''\"></span>\n                                }\n                                <!-- #endregion -->\n                                }\n                                <ng-template #recursiveContainer let-columnNameSegments=\"segments\" let-formGroup=\"formGroup\" let-parentFormGroup=\"parentFormGroup\">\n                                    @if (formGroup) {\n                                        <ng-container [formGroup]=\"formGroup\">\n                                            <!-- If the columnNameSegments array is empty, we're at the leaf node -->\n                                            @if (!columnNameSegments.length) {\n                                                @switch (column.type) {\n                                                    <!-- #region Toggle column -->\n                                                    @case (ColumnType.Toggle) {\n                                                        <mat-slide-toggle [formControl]=\"formGroup\" (click)=\"$event.stopPropagation();\" (change)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):handleModelChange(column, parentFormGroup.value, parentFormGroup)\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" color=\"accent\"></mat-slide-toggle>\n                                                    }\n                                                    <!-- #endregion -->\n                                                    <!-- #region Text Input column -->\n                                                    @case (ColumnType.TextInput) {\n                                                        <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\n                                                            <input matInput [formControl]=\"formGroup\" type=\"{{column.inputType}}\" autocomplete=\"none\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" [min]=\"column.inputMin?column.inputMin(parentFormGroup.value, parentFormGroup, context):null\" [max]=\"column.inputMax?column.inputMax(parentFormGroup.value, parentFormGroup, context):null\" (keydown.enter)=\"handleKeydownEnter($event)\">\n                                                        </mat-form-field>\n                                                    }\n                                                    <!-- #endregion -->\n                                                    <!-- #region VD-Select column -->\n                                                    @case (ColumnType.Select) {\n                                                        <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\n                                                            <vd-select [formControl]=\"formGroup\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:parentFormGroup.value:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" (selectionChange)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):patch(parentFormGroup.value, [column.name], rowValue, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\n                                                        </mat-form-field>\n                                                    }\n                                                    <!-- #endregion -->\n                                                }\n                                            } @else {\n                                                <!-- If not the last segment, create a nested form group -->\n                                                <ng-container [formGroupName]=\"columnNameSegments[0]\">\n                                                    <!-- Recursive call to handle nested segments -->\n                                                    <ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: columnNameSegments.slice(1), parentFormGroup:formGroup, formGroup: formGroup.get(columnNameSegments[0])}\"></ng-container>\n                                                </ng-container>\n                                            }\n                                        </ng-container>\n                                    }\n                                </ng-template>\n                    </ng-template>\n                </td>\n            </ng-container>\n            <!-- #endregion -->\n            }\n\n            <!-- #region Filter row -->\n            @if (dataSource && filterable) {\n                @for (column of columns$ | async; track column) {\n                    <ng-container cdkColumnDef=\"filter.{{column.filter || column.name}}\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\n                        <th mat-header-cell *cdkHeaderCellDef [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\">\n                            <!-- #region Select filter -->\n                            @if(column.endpoint || column.enumType || column.options){\n                                <span filter-select [endpoint]=\"column.endpoint\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:{}:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [text]=\"column.filterOptionText || 'name'\"></span>\n                            }\n                            <!-- #region Text filter -->\n                            @else if(column.type == ColumnType.Text || column.type == ColumnType.TextInput || column.type == ColumnType.Number) {\n                                <span filter-input [onlyNumber]=\"column.filterInputNumber??false\" [matTooltip]=\"column.filterTooltip ? column.filterTooltip(context):null\" [matTooltipClass]=\"column.filterTooltipClass??''\" [operator]=\"!useFilterOperator ? undefined : column.filterOperator\"></span>\n                            }\n                            <!-- #endregion -->\n                            <!-- #region Date filter -->\n                            @else if (column.type == ColumnType.Date) {\n                                <span filter-date></span>\n                            }\n                            <!-- #endregion -->\n                            <!-- #region Action filter (clear) -->\n                            @else if (column.type == ColumnType.Action) {\n                                <span filter-clear></span>\n                            }\n                            <!-- #endregion -->\n                        </th>\n                    </ng-container>\n                }\n            }\n            <!-- #endregion -->\n\n            <!-- #region Details column -->\n            <ng-container cdkColumnDef=\"expandedDetail\">\n                <td mat-cell *matCellDef=\"let row; let index = index\" [attr.colspan]=\"(displayedColumns$ | async)?.length\">\n                    <div class=\"row-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\" #detailsTemplate>\n                        @if (templateRef && row === expandedRow) {\n                            <ng-container *ngTemplateOutlet=\"templateRef; context:{row: row, index: index, context: context}\"></ng-container>\n                        }\n                    </div>\n                </td>\n            </ng-container>\n            <!-- #endregion -->\n\n            <!-- #region Filter header -->\n            @if (filterable) {\n                <tr mat-header-row *cdkHeaderRowDef=\"displayedFilterColumns$ | async\"></tr>\n            }\n            <!-- #endregion -->\n\n            <tr mat-header-row *cdkHeaderRowDef=\"displayedColumns$ | async; sticky: stickyFilter\"></tr>\n            <tr mat-row *cdkRowDef=\"let row; columns: displayedColumns$ | async; let index = dataIndex\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\" [class.expanded-row]=\"expandedRow === row\" (click)=\"handleRowClick(index, row)\" (contextmenu)=\"handleRowRightClick($event, row)\"></tr>\n\n            <!-- #region Detrails row -->\n            @if (detailsTemplate || templateRef) {\n                <tr mat-row *cdkRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\"></tr>\n            }\n            <!-- #endregion -->\n    </table>\n\n    <!-- #region Modern No Results Message -->\n    @if (dataSource?.filteredData?.length <= 0 && dataSource?.total <= 0) {\n        <div class=\"no-results-overlay\">\n            <mat-icon class=\"no-results-icon\">search_off</mat-icon>\n            <div class=\"no-results-text mat-body-1\">\n                <h3 i18n=\"@@noResultsFound\">No results found</h3>\n                <p i18n=\"@@tryAdjustFilters\">Try adjusting your filters or search criteria.</p>\n            </div>\n        </div>\n    }\n    <!-- #endregion -->\n</div>\n<!-- #endregion -->\n\n<!-- #region Debug value -->\n@if (debugValue) {\n    <code>\n    <pre>{{formValue | json}}</pre>\n  </code>\n}\n<!-- #endregion -->\n\n<div class=\"table-footer\" layout=\"row\">\n    <ng-content select=\"[table-footer]\"></ng-content>\n    <span flex></span>\n    @if (paginable) {\n        <mat-paginator [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\n    }\n</div>","import { Display } from \"../../common/functions/decorators\";\r\nimport { Grid } from \"../enums/grid\";\r\nimport { TableColumnType } from \"../enums/table-column-type\";\r\nimport { Column } from \"../functions/decorators\";\r\n\r\nexport class TableColumnConfig {\r\n    /**\r\n     * @property\r\n     */\r\n    public name: string = '';\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({ type: TableColumnType.TextInput })\r\n    @Display($localize`:@@name:Name`)\r\n    public header?: any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({\r\n        type: TableColumnType.TextInput,\r\n        maxWidth: 80,\r\n        change: (_, __, ctx: any) => ctx?.updateColumns()\r\n    })\r\n    @Display($localize`:@@index:Index`)\r\n    public index?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({\r\n        maxWidth: 150,\r\n        enumType: Grid,\r\n        type: TableColumnType.Select,\r\n        enumPrefix: 'Grid_',\r\n        defaultOption: false\r\n    })\r\n    @Display($localize`:@@display:Display`)\r\n    public display?: Grid;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({\r\n        type: TableColumnType.TextInput,\r\n        inputMin: () => 0,\r\n        inputMax: () => 2000,\r\n        maxWidth: 80,\r\n        display: Grid.Md,\r\n        change: (_, __, ctx: any) => ctx?.updateColumns()\r\n    })\r\n    @Display($localize`:@@width:Width`)\r\n    public width?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column({\r\n        type: TableColumnType.TextInput,\r\n        inputMin: () => 0,\r\n        inputMax: () => 2000,\r\n        maxWidth: 80,\r\n        display: Grid.Md\r\n    })\r\n    @Display($localize`:@@minWidth:Min width`)\r\n    public minWidth?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column<TableColumnConfig>({\r\n        type: TableColumnType.TextInput,\r\n        inputMin: () => 0,\r\n        inputMax: () => 2000,\r\n        maxWidth: 80,\r\n        display: Grid.Md,\r\n        change: (x) => x ? (x.width ??= x.maxWidth) : null\r\n    })\r\n    @Display($localize`:@@maxWidth:Max width`)\r\n    public maxWidth?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column<TableColumnConfig>({\r\n        display: Grid.Md,\r\n        width: 120\r\n    })\r\n    @Display($localize`:@@sticky:Sticky`)\r\n    public sticky?: boolean;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Column<TableColumnConfig>({\r\n        display: Grid.Md,\r\n        maxWidth: 85,\r\n        width: 150\r\n    })\r\n    @Display($localize`:@@stickyEnd:Sticky end`)\r\n    public stickyEnd?: boolean;\r\n\r\n    /**\r\n     * constructor\r\n     * @param init \r\n     */\r\n    public constructor(init?: Partial<TableColumnConfig>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { SortDirection } from \"@angular/material/sort\";\r\n\r\n/**\r\n * Represents the configuration for table queries, such as filters, sorting, and pagination.\r\n */\r\nexport class TableQueryConfig {\r\n    /**\r\n     * Filters applied to table columns.\r\n     */\r\n    public fieldFilters: any;\r\n\r\n    /**\r\n     * The active field for sorting.\r\n     */\r\n    public sortBy?: string;\r\n\r\n    /**\r\n     * The direction of sorting ('asc' or 'desc').\r\n     */\r\n    public sortDirection: SortDirection = 'asc';\r\n\r\n    /**\r\n     * The number of items per page.\r\n     */\r\n    public pageSize?: number = 15;\r\n\r\n    /**\r\n     * The current page index.\r\n     */\r\n    public pageIndex?: number = 0;\r\n}","import { prop } from \"../../form-validators/decorators/prop.decorator\";\r\nimport { TableColumnConfig } from \"./table-column-config\";\r\nimport { TableQueryConfig } from \"./table-query-config\";\r\n\r\n/**\r\n * The TableConfig class provides configuration options for table columns.\r\n */\r\nexport class TableConfig {\r\n    /**\r\n     * An optional array of table column configurations.\r\n     * Each configuration specifies how a column should behave in the table (e.g., sortable, filterable, etc.).\r\n     */\r\n    public columns?: TableColumnConfig[] = [];\r\n\r\n    /**\r\n     * Configuration for table queries, including field filters, sorting, and pagination.\r\n     */\r\n    public query?: TableQueryConfig = new TableQueryConfig();\r\n\r\n    /**\r\n     * Specifies if the table should have sticky headers or columns.\r\n     */\r\n    @prop()\r\n    public sticky?: boolean = false;\r\n\r\n    /**\r\n     * Defines the overall width of the table.\r\n     */\r\n    @prop()\r\n    public tableWidth?: number;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<TableConfig>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","\r\nimport { ChangeDetectorRef, Component, Inject } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms'; /* Import FormBuilder and FormGroup */\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { RxReactiveFormsModule } from '../../../form-validators/public_api';\r\nimport { RxFormBuilder } from '../../../form-validators/services/rx-form-builder';\r\nimport { VdDynamicTableComponent } from '../../../table/components/dynamic-table/dynamic-table';\r\nimport { TableColumn } from '../../../table/models/table-column';\r\nimport { TableColumnConfig } from '../../../table/models/table-column-config';\r\nimport { TableConfig } from '../../../table/models/table-config';\r\nimport { IGenericListComponent } from '../../interfaces/igeneric-list-component';\r\nimport { BaseComponent } from '../base';\r\nimport { VdDialogHeaderComponent } from '../dialog-header/dialog-header';\r\n\r\n@Component({\r\n    selector: 'vd-dynamic-table-config-dialog',\r\n    templateUrl: 'dynamic-table-config-dialog.comnponent.html',\r\n    styleUrl: 'dynamic-table-config-dialog.comnponent.scss',\r\n    imports: [\r\n        ReactiveFormsModule,\r\n        RxReactiveFormsModule,\r\n        MatIconModule,\r\n        MatCheckboxModule,\r\n        MatFormFieldModule,\r\n        MatDialogModule,\r\n        MatPaginatorModule,\r\n        MatButtonModule,\r\n        VdDynamicTableComponent,\r\n        VdDialogHeaderComponent\r\n    ]\r\n})\r\nexport class VdDynamicTableConfigDialogComponent extends BaseComponent {\r\n\r\n    /**\r\n     * The array of columns to be configured in the dynamic table.\r\n     * This is of type TableColumnConfig, which holds the configuration details for each column.\r\n     */\r\n    public columns?: TableColumnConfig[] = [];\r\n\r\n    /**\r\n     * A reference to the TableConfig class for use in the template.\r\n     */\r\n    public tableConfigClassType: typeof TableConfig = TableConfig;\r\n\r\n    /**\r\n     * A reference to the TableColumnConfig class for use in the template.\r\n     */\r\n    public tableColumnConfigClassType: typeof TableColumnConfig = TableColumnConfig;\r\n\r\n    /**\r\n     * Form group to manage the table configuration form controls.\r\n     */\r\n    public configForm: FormGroup;\r\n\r\n    /**\r\n     * Constructor to initialize the dialog component.\r\n     * \r\n     * @param route - The activated route for the current component.\r\n     * @param changeDetectorRef - Service to request change detection for the component.\r\n     * @param dialogRef - Reference to the dialog instance.\r\n     * @param genericList - The generic list component that contains the table data and configurations.\r\n     * @param formBuilder - Service to build reactive forms.\r\n     */\r\n    constructor(\r\n        protected override route: ActivatedRoute,\r\n        protected override changeDetectorRef: ChangeDetectorRef,\r\n        public dialogRef: MatDialogRef<VdDynamicTableConfigDialogComponent>,\r\n        @Inject(MAT_DIALOG_DATA) public genericList: IGenericListComponent<any>,\r\n        private formBuilder: RxFormBuilder /* Inject RxFormBuilder */\r\n    ) {\r\n        super(route, changeDetectorRef);\r\n\r\n        /* Initialize the form controls */\r\n        /* Create a new FormGroup instance for TableConfig using the FormBuilder */\r\n        this.configForm = this.formBuilder.formGroup<TableConfig>(new TableConfig());\r\n\r\n        /* Check if a genericList and its tableConfig exist */\r\n        if (genericList?.tableConfig) {\r\n            /* Patch the existing tableConfig values into the form controls */\r\n            this.configForm.patchValue(genericList.tableConfig);\r\n        }\r\n\r\n        /* Subscribe to value changes on the 'sticky' control */\r\n        if (genericList.dynamicTable) {\r\n            this.configForm.controls[\"sticky\"].valueChanges.subscribe(value => genericList.dynamicTable!.sticky = value);\r\n        }\r\n\r\n        /* Filter columns that are configurable from the provided dynamic table configuration */\r\n        this.columns = genericList?.dynamicTable?.columns?.filter((x: TableColumn) => x.configurable);\r\n    }\r\n\r\n    /**\r\n     * Saves the current column configuration and closes the dialog.\r\n     */\r\n    public save(): void {\r\n        this.apply();  /* Apply changes before closing */\r\n        this.dialogRef.close(); /* Close the dialog */\r\n    }\r\n\r\n    /**\r\n     * Applies the current column configuration to the generic list.\r\n     * Maps the column data to a new array of TableColumnConfig instances \r\n     * and saves the configuration.\r\n     */\r\n    public apply(): void {\r\n        /* Map the config data from the columns */\r\n        let tableConfig = new TableConfig({\r\n            sticky: this.configForm?.value?.sticky,\r\n            tableWidth: this.configForm?.value?.tableWidth,\r\n            columns: this.columns?.map(x => new TableColumnConfig({\r\n                name: x.name,\r\n                header: x.header,\r\n                index: x.index,\r\n                display: x.display,\r\n                width: x.width,\r\n                maxWidth: x.maxWidth,\r\n                minWidth: x.minWidth,\r\n                sticky: x.sticky,\r\n                stickyEnd: x.stickyEnd\r\n            }))\r\n        });\r\n\r\n        /* Save the table configurations using the generic list component's method */\r\n        this.genericList?.saveConfigs(tableConfig);\r\n    }\r\n\r\n    /**\r\n     * Triggers an update of the columns in the generic list component.\r\n     */\r\n    public updateColumns(): void {\r\n        this.genericList?.updateColumns();\r\n    }\r\n}","<!-- Title bar with close button -->\r\n<vd-dialog-header [dialogRef]=\"dialogRef\" i18n=\"@@tableConfiguration\">Table configuration</vd-dialog-header>\r\n\r\n@if (configForm) {\r\n    <div class=\"pad-xs flex\" layout=\"column\">\r\n        <div class=\"pad-bottom-sm\">\r\n            @if (configForm) {\r\n                <form [formGroup]=\"configForm\" class=\"pad-xs\">\r\n                    <div layout-gt-sm=\"row\" layout=\"column\">\r\n                        <mat-checkbox formControlName=\"sticky\">\r\n                            <span i18n=\"@@sticky\">Sticky</span>\r\n                            <span class=\"description\" i18n=\"@@tableStickyDescription\"> - Select to make the table headers fixed during scrolling.</span>\r\n                        </mat-checkbox>\r\n                        @if (false) {\r\n                            <mat-form-field layout-margin flex>\r\n                                <mat-label i18n=\"@@tableWidth\">Table width</mat-label>\r\n                                <input matInput type=\"number\" formControlName=\"tableWidth\" />\r\n                            </mat-form-field>\r\n                        }\r\n                    </div>\r\n                </form>\r\n            }\r\n        </div>\r\n    </div>\r\n    <div layout-gt-sm=\"row\" class=\"dialog-container\" flex>\r\n        <vd-dynamic-table #table [data]=\"columns\" [paginatorRef]=\"paginator\" [classType]=\"tableColumnConfigClassType\" [filterable]=\"true\" [paginable]=\"false\" [useFilterOperator]=\"false\" [pageSize]=\"10\" [context]=\"this\"></vd-dynamic-table>\r\n    </div>\r\n    <mat-dialog-actions>\r\n        <a mat-flat-button color=\"primary\" (click)=\"save()\" i18n=\"@@save\">Save</a>\r\n        <a mat-button (click)=\"apply()\" i18n=\"@@apply\">Apply</a>\r\n        <a mat-button (click)=\"dialogRef.close()\" i18n=\"@@close\">Close</a>\r\n        <span flex></span>\r\n        <mat-paginator #paginator [length]=\"table.dataSource.total\" [pageIndex]=\"table.dataSource.pageIndex\" [pageSize]=\"table.dataSource.pageSize\" [pageSizeOptions]=\"table.pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n    </mat-dialog-actions>\r\n}","import { ChangeDetectorRef, Directive, HostListener, inject, Input, OnDestroy, ViewChild } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { saveAs } from 'file-saver';\r\nimport { Subscription } from 'rxjs';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { AppStorage } from '../../common/helpers/app-storage';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { IEntity } from '../../common/models/entity';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { VdDynamicTableComponent } from '../../table/components/dynamic-table/dynamic-table';\r\nimport { TableColumnType } from '../../table/enums/table-column-type';\r\nimport { getTableDefinition } from '../../table/functions/functions';\r\nimport { TableColumn } from '../../table/models/table-column';\r\nimport { TableColumnConfig } from '../../table/models/table-column-config';\r\nimport { TableConfig } from '../../table/models/table-config';\r\nimport { TableDataSource } from '../../table/table.data-source';\r\nimport { EXPORT_DIALOG_COMPONENT } from '../constants/common';\r\nimport { AuthHelper } from '../helpers/auth-helper';\r\nimport { IGenericListComponent } from '../interfaces/igeneric-list-component';\r\nimport { BaseComponent } from './base';\r\nimport { VdDynamicTableConfigDialogComponent } from './dynamic-table-config-dialog/dynamic-table-config-dialog.comnponent';\r\n\r\n/**\r\n * A base list component for components with pagination support\r\n */\r\n// @dynamic\r\n@Directive()\r\nexport abstract class GenericListComponent<\r\n    TEntity extends IEntity | any,\r\n    TService extends GenericService<TEntity>\r\n> extends BaseComponent implements IGenericListComponent<TEntity>, OnDestroy {\r\n    /**\r\n     * @property paginator\r\n     * @description A reference to the MatPaginator element. \r\n     *              This is used for handling pagination in the data table.\r\n     * @type {MatPaginator | undefined}\r\n     */\r\n    @ViewChild(MatPaginator, { static: true })\r\n    public paginator?: MatPaginator;\r\n\r\n    /**\r\n     * @property sort\r\n     * @description A reference to the MatSort element. \r\n     *              This is used for handling sorting functionality in the data table.\r\n     * @type {MatSort | undefined}\r\n     */\r\n    @ViewChild(MatSort, { static: true })\r\n    public sort?: MatSort;\r\n\r\n    /**\r\n     * @property pageSizeOptions\r\n     * @description An array of available page size options for the data table.\r\n     * @type {number[]}\r\n     */\r\n    public pageSizeOptions: Array<number> = [5, 10, 15, 20, 30, 50, 100, 200];\r\n\r\n    /**\r\n     * @property includes\r\n     * @description Specifies the navigations to include when fetching data.\r\n     * @type {string[]}\r\n     */\r\n    public includes: Array<string> = [];\r\n\r\n    /**\r\n     * @property projection\r\n     * @description Specifies the projection(s) to apply when fetching data.\r\n     *              Can be a single string or an array of strings.\r\n     * @type {string | string[]}\r\n     */\r\n    public projection: string | string[] = [];\r\n\r\n    /**\r\n     * @property excludedColumns\r\n     * @description Specifies the columns to exclude from the data table.\r\n     * @type {string[]}\r\n     */\r\n    public excludedColumns: Array<string> = [];\r\n\r\n    /**\r\n     * @property query\r\n     * @description The query parameters for fetching data from the server.\r\n     * @type {any}\r\n     */\r\n    public query: any = {};\r\n\r\n    /**\r\n     * @property dataSource\r\n     * @description The data source for the data table, managing the data displayed.\r\n     * @type {TableDataSource<TEntity, TService> | any}\r\n     */\r\n    public dataSource?: TableDataSource<TEntity, TService> | any;\r\n\r\n    /**\r\n     * @property items\r\n     * @description Initializes the items array as an optional array of entities.\r\n     * @type {TEntity[]}\r\n     */\r\n    public items?: TEntity[] = [];\r\n\r\n    /**\r\n     * @property sortActive\r\n     * @description The currently active sort column in the data table.\r\n     * @type {string | undefined}\r\n     */\r\n    public sortActive?: string;\r\n\r\n    /**\r\n     * @property sortDirection\r\n     * @description The current sort direction for the data table. Default is 'asc'.\r\n     * @type {SortDirection}\r\n     */\r\n    public sortDirection: SortDirection = 'asc';\r\n\r\n    /**\r\n     * @property classInstance\r\n     * @description An instance of the class used to create the table for a specific type of entity.\r\n     * @type {any}\r\n     */\r\n    public classInstance: any;\r\n\r\n    /**\r\n     * @property columns\r\n     * @description An array defining the table columns and their configuration.\r\n     * @type {TableColumn[]}\r\n     */\r\n    public columns: TableColumn[] = [];\r\n\r\n    /**\r\n     * @property columnSets\r\n     * @description Used to display specific columns in the table. \r\n     *              This array defines sets of columns that can be shown \r\n     *              based on the active configuration, allowing for dynamic table \r\n     *              column customization.\r\n     * @type {string[]}\r\n     */\r\n    public columnSets?: string[] = [];\r\n\r\n    /**\r\n     * @property dynamicTable\r\n     * @description A reference to the dynamic table component.\r\n     * @type {VdDynamicTableComponent}\r\n     */\r\n    @ViewChild(VdDynamicTableComponent, { static: true })\r\n    public dynamicTable?: VdDynamicTableComponent;\r\n\r\n    /**\r\n     * @property tableConfig\r\n     * @description Configuration object for the table, including query and column settings.\r\n     * @type {TableConfig}\r\n     */\r\n    public tableConfig: TableConfig = new TableConfig();\r\n\r\n    /**\r\n     * @property addDialogType\r\n     * @description The type of the dialog used for creating new entries in the table.\r\n     * @type {any}\r\n     */\r\n    public addDialogType: any = null;\r\n\r\n    /**\r\n     * @property selectable\r\n     * @description If true, show the column 'Checkbox'.\r\n     * @type {boolean}\r\n     */\r\n    public selectable: boolean = true;\r\n\r\n    /**\r\n     * @property addable\r\n     * @description If true, show the button 'Add'.\r\n     * @type {boolean}\r\n     */\r\n    public addable: boolean = true;\r\n\r\n    /**\r\n     * @property editable\r\n     * @description If true, show the menu 'Edit'.\r\n     * @type {boolean}\r\n     */\r\n    public editable: boolean = true;\r\n\r\n    /**\r\n     * @property deletable\r\n     * @description If true, show the menu 'Delete'.\r\n     * @type {boolean}\r\n     */\r\n    public deletable: boolean = true;\r\n\r\n    /**\r\n     * @property downloadable\r\n     * @description If true, show the menu 'Download'.\r\n     * @type {boolean}\r\n     */\r\n    public downloadable: boolean = false;\r\n\r\n    /**\r\n     * @property duplicable\r\n     * @description If true, show the menu 'Duplicate'.\r\n     * @type {boolean}\r\n     */\r\n    public duplicable: boolean = false;\r\n\r\n    /**\r\n     * @property configurable\r\n     * @description If true, show the menu 'Configure table'.\r\n     * @type {boolean}\r\n     */\r\n    public configurable: boolean = true;\r\n\r\n    /**\r\n     * @property exportable\r\n     * @description Determines if the table is exportable.\r\n     * @type {boolean}\r\n     */\r\n    public exportable?: boolean;\r\n\r\n    /**\r\n     * @property exportFileName\r\n     * @description The name of the file to export.\r\n     * @type {string}\r\n     */\r\n    public exportFileName?: string;\r\n\r\n    /**\r\n     * @property sticky\r\n     * @description Flag to indicate whether the table headers or columns should stick \r\n     *              to the viewport during scrolling.\r\n     * @type {boolean}\r\n     */\r\n    public sticky: boolean = false;\r\n\r\n    /**\r\n     * @property tableWidth\r\n     * @description Defines the overall width of the table.\r\n     * @type {number}\r\n     */\r\n    public tableWidth?: number;\r\n\r\n    /**\r\n     * @property rowNgClass\r\n     * @description A function to determine the dynamic CSS class for table rows.\r\n     * @type {(x: TEntity, ctx: any) => any}\r\n     */\r\n    public rowNgClass?: (x: TEntity, ctx: any) => any = undefined;\r\n\r\n    /**\r\n     * @property rowClick\r\n     * @description A function to handle row click events.\r\n     * @type {(x: TEntity, ctx: any) => any}\r\n     */\r\n    public rowClick?: (x: TEntity, ctx: any) => any = undefined;\r\n\r\n    /**\r\n     * @property onEdit\r\n     * @description A function to handle edit actions for a row.\r\n     * @type {(x: TEntity, ctx: any) => any}\r\n     */\r\n    public onEdit?: (x: TEntity, ctx: any) => any = undefined;\r\n\r\n    /**\r\n     * @property detailsTemplate\r\n     * @description Template string for displaying row details.\r\n     * @type {string}\r\n     */\r\n    public detailsTemplate?: string = undefined;\r\n\r\n    /**\r\n     * @property dialogComponent\r\n     * @description Instance of the export dialog component injected via dependency injection.\r\n     *              Used to manage or display the export dialog.\r\n     * @type {any}\r\n     */\r\n    public dialogComponent = inject<any>(EXPORT_DIALOG_COMPONENT);\r\n\r\n    /**\r\n     * @property toolbarActions\r\n     * @description Array of toolbar action items.\r\n     * @type {ActionItem[]}\r\n     */\r\n    public toolbarActions: ActionItem[] = [{\r\n        id: 'refresh',\r\n        icon: 'refresh',\r\n        tooltip: $localize`:@@refreshList:Refresh the list`,\r\n        event: () => this.loadList()\r\n    }];\r\n\r\n    /**\r\n     * @property toolbarMenuItems\r\n     * @description Array of toolbar menu items for actions.\r\n     * @type {ActionItem<TEntity>[]}\r\n     */\r\n    public toolbarMenuItems: ActionItem<TEntity>[] = [];\r\n\r\n    /**\r\n     * @property rowMenuItems\r\n     * @description Array of menu items for actions related to table rows.\r\n     * @type {ActionItem<TEntity>[]}\r\n     */\r\n    public rowMenuItems: ActionItem<TEntity>[] = [];\r\n\r\n    /**\r\n     * @property backButton\r\n     * @description Adds a back button to the toolbar.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public backButton: boolean = false;\r\n\r\n    /**\r\n     * @property dataLoadedSubscription\r\n     * @description Subscription to the DataLoaded event.\r\n     * @type {Subscription}\r\n     */\r\n    protected dataLoadedSubscription?: Subscription;\r\n\r\n    /**\r\n     * @property configsKey\r\n     * @description The key used for storing table configurations.\r\n     * @type {string}\r\n     */\r\n    protected configsKey: string = '';\r\n\r\n    /**\r\n     * Constructor for the table component.\r\n     * @param service The service used for managing table data.\r\n     * @param route ActivatedRoute for retrieving route information.\r\n     * @param changeDetectorRef ChangeDetectorRef for managing view updates.\r\n     * @param classType The class type of the table entity.\r\n     */\r\n    constructor(\r\n        public service: TService,\r\n        protected override route: ActivatedRoute,\r\n        protected override changeDetectorRef: ChangeDetectorRef,\r\n        public classType?: { new(): TEntity }\r\n    ) {\r\n        super(route, changeDetectorRef);\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after data-bound properties \r\n     * of a directive are initialized.\r\n     */\r\n    public override ngOnInit(): void {\r\n        super.ngOnInit();\r\n\r\n        /* Assemble the config key */\r\n        this.configsKey = [this.projectName, 'list-config.v2', window.btoa(this.currentBaseRoute ?? ''), this.menu?.title].join('.');\r\n\r\n        /* Load list configs */\r\n        this.tableConfig = AppStorage.getObjectEncoded(this.configsKey, new TableConfig());\r\n\r\n        this.sticky = this.tableConfig.sticky ?? false;\r\n\r\n        /* Set back button from route params */\r\n        this.backButton = this.route?.snapshot?.paramMap?.get('backButton') == 'true';\r\n\r\n        /* Read some params from routing data */\r\n        this.route.data.subscribe((data: any) => {\r\n            Object.assign(this.query, data.query || {});\r\n            this.classType ||= data.classType;\r\n\r\n            if (data.className) {\r\n                this.className = data.className;\r\n\r\n                /* Check if the user has permission to create, update and delete based on the class name */\r\n                this.canCreate ||= AuthHelper.isPermitted(`Create${this.className}`);\r\n                this.canUpdate ||= AuthHelper.isPermitted(`Update${this.className}`);\r\n                this.canDelete ||= AuthHelper.isPermitted(`Delete${this.className}`);\r\n            }\r\n\r\n            if (data.columns) {\r\n                this.columns = [...(data.columns || [])];\r\n            }\r\n\r\n            if (data.endpoint) {\r\n                this.service.endpoint = data.endpoint;\r\n            }\r\n\r\n            if (data.includes) {\r\n                this.includes = data.includes;\r\n            }\r\n\r\n            Object.keys(data).forEach(x => {\r\n                if (this.hasOwnProperty(x) && x != 'columns') {\r\n                    (this as any)[x] = data[x];\r\n                }\r\n            });\r\n        });\r\n\r\n        /* Get columns from class */\r\n        if (this.classType) {\r\n            this.classInstance = new this.classType();\r\n\r\n            /* Get the table definition using the class type */\r\n            var tableDefinition = getTableDefinition(this.classType);\r\n\r\n            /* Set the props in the current object from the table definition */\r\n            Object.keys(tableDefinition || {}).forEach(x => {\r\n                if (this.hasOwnProperty(x)) {\r\n                    if (Array.isArray((this as any)[x]) && Array.isArray((tableDefinition as any)[x])) {\r\n                        (this as any)[x] = (tableDefinition as any)[x].concat((this as any)[x])\r\n                    } else {\r\n                        (this as any)[x] = (tableDefinition as any)[x];\r\n                    }\r\n                }\r\n            });\r\n\r\n            /* Set endpoint from table definition, if any */\r\n            if (tableDefinition?.endpoint) {\r\n                this.service.endpoint = tableDefinition?.endpoint;\r\n\r\n                /* Check if the user has permission to create, update and delete based on the api endpoint */\r\n                this.canCreate ||= AuthHelper.isPermitted(`Create${this.service.endpoint}`);\r\n                this.canUpdate ||= AuthHelper.isPermitted(`Update${this.service.endpoint}`);\r\n                this.canDelete ||= AuthHelper.isPermitted(`Delete${this.service.endpoint}`);\r\n            }\r\n\r\n            /* Set the table columns from the table defintion */\r\n            if (tableDefinition?.columns) {\r\n                this.columns = tableDefinition.columns.map(x => { return { ...x } });\r\n            }\r\n\r\n            /* Handle events */\r\n            this.columns?.forEach((x: TableColumn) => {\r\n                if (typeof x.event === 'string') {\r\n                    let eventName: string = ((x.event) as string);\r\n                    x.event = (row: any) => (x.eventArgs ? (this as any)[eventName](row, x.eventArgs) : (this as any)[eventName](row));\r\n                }\r\n            });\r\n\r\n            /* Hide columns using route data */\r\n            this.route.data.subscribe((data: any) => {\r\n                this.columns = this.columns?.filter((x: TableColumn) => !x.hide || !x.hide(data, undefined, this));\r\n            });\r\n\r\n            /* Get custom action, if any */\r\n            var actions = tableDefinition?.actions;\r\n            if (actions != null) {\r\n                actions.forEach(y => this.rowMenuItems?.push(y));\r\n            }\r\n        }\r\n\r\n        /* Filter the columns based on the individual column's columnSets property and the global columnSets */\r\n        const selectedColumns = (this.columnSets?.length ?? 0) > 0\r\n            ? this.columns?.filter(c => this.columnSets?.some(set => c.columnSets?.includes(set)))\r\n            : this.columns;\r\n\r\n        /* Hide excluded columns */\r\n        this.columns = selectedColumns?.filter((x: TableColumn) => !this.excludedColumns?.includes(x.name));\r\n\r\n        /* Add list mneu items */\r\n        this.addToolbarMenuItems();\r\n\r\n        if (this.dynamicTable) {\r\n            /* Add menu items for each row */\r\n            this.addRowMenuItems();\r\n\r\n            /* Check if the action column already exists */\r\n            var actionColmun = (this.columns as TableColumn[])?.find(x => x.name == 'action');\r\n\r\n            /* If so, just add the menu items to it */\r\n            if (actionColmun) {\r\n                actionColmun.rowMenuItems ??= [];\r\n                this.rowMenuItems.forEach(y => actionColmun!.rowMenuItems!.unshift(y));\r\n\r\n                /* Create a table menu */\r\n                actionColmun.menu = new ActionItem({\r\n                    icon: 'more_vert',\r\n                    items: this.rowMenuItems\r\n                });\r\n            }\r\n\r\n            /* Otherwise add a new one */\r\n            else {\r\n                this.columns.push(new TableColumn({\r\n                    index: 2000,\r\n                    name: 'action',\r\n                    columnSets: ['action', 'common'],\r\n                    type: TableColumnType.Action,\r\n                    disabled: true,\r\n                    menu: new ActionItem({\r\n                        icon: 'more_vert',\r\n                        items: this.rowMenuItems\r\n                    }),\r\n                    rowMenuItems: this.rowMenuItems,\r\n                    configurable: false,\r\n                    stickyEnd: true\r\n                }));\r\n            }\r\n\r\n            this.updateColumns(true);\r\n        }\r\n\r\n        /* Set query params into query object */\r\n        this.route.queryParams.subscribe(x => Object.assign(this.query, x || {}, { returnUrl: null }));\r\n\r\n        /* Initilialize the data source with the current service, paginator and sort */\r\n        this.sort = this.dynamicTable?.matSort || (this.sort ? this.sort : new MatSort());\r\n        this.dataSource = new TableDataSource<TEntity, TService>(this.service!, this.paginator, this.sort);\r\n\r\n        /* Set includes */\r\n        this.dataSource.includes = this.includes;\r\n        this.dataSource.projection = this.projection;\r\n\r\n        /* Load query from browser storage */\r\n        var storredQuery = this.tableConfig?.query;\r\n        if (storredQuery) {\r\n            this.dataSource.fieldFilters = this.clean(storredQuery.fieldFilters) || {};\r\n            this.sortActive = storredQuery.sortBy;\r\n            this.sortDirection = storredQuery.sortDirection;\r\n            this.dataSource.pageSize = storredQuery.pageSize;\r\n            this.dataSource.pageIndex = storredQuery.pageIndex;\r\n        }\r\n\r\n        /* Add some filter from router */\r\n        if (this.query) {\r\n            this.dataSource.staticFieldFilters = this.query;\r\n        }\r\n\r\n        /* Remember the filters */\r\n        this.dataLoadedSubscription = this.dataSource.onDataLoaded.subscribe((result: any) => {\r\n            if (result) {\r\n                this.tableConfig ??= new TableConfig();\r\n                this.tableConfig.query = {\r\n                    fieldFilters: this.dataSource.fieldFilters,\r\n                    sortBy: this.sort?.active,\r\n                    sortDirection: this.sort?.direction ?? 'asc',\r\n                    pageSize: this.paginator?.pageSize ?? 15,\r\n                    pageIndex: this.paginator?.pageIndex ?? 1,\r\n                };\r\n\r\n                /* Save the settings */\r\n                AppStorage.setObjectEncoded(this.configsKey, this.tableConfig);\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * @method connect\r\n     * @description Connects a collection viewer (such as a data table) to the data source. \r\n     *              This method initializes the data source with static field filters and an optional path. \r\n     *              It also subscribes to the data source to update the displayed items in the table.\r\n     * @param {any} staticFieldFilters - Optional static field filters to apply when connecting the data source.\r\n     * @param {string} [path] - Optional path for the data source connection.\r\n     * @returns {void}\r\n     */\r\n    public connect(staticFieldFilters: any = null, path?: string): void {\r\n        /* Set the optional path for the data source */\r\n        this.dataSource.path = path;\r\n\r\n        /* Apply static field filters */\r\n        this.dataSource.staticFieldFilters = staticFieldFilters || {};\r\n\r\n        /* Update items from the data source */\r\n        this.dataSource.connect(undefined).subscribe({\r\n            next: (items: TEntity[]) => {\r\n                this.items = items;\r\n                this.changeDetectorRef.detectChanges();\r\n\r\n                /* Call the onAfterItemsLoaded method if defined */\r\n                this.onAfterItemsLoaded();\r\n            }\r\n        });\r\n\r\n        /* Add row menu items if the table is not dynamic */\r\n        if (!this.dynamicTable) {\r\n            this.addRowMenuItems();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the table columns\r\n     */\r\n    public updateColumns(loadConfig?: boolean): void {\r\n        /* Get config from local storage */\r\n        if (loadConfig) {\r\n            this.loadColumnConfigs();\r\n        }\r\n\r\n        /* Sort the columns by index */\r\n        Utils.sortArray(this.columns || [], 'index');\r\n\r\n        /* Trigger changes */\r\n        this.dynamicTable?.updateColumns();\r\n    }\r\n\r\n    /**\r\n     * Reloads items\r\n     */\r\n    public loadList(resetSelection: boolean = true): void {\r\n        this?.dataSource?.reload(resetSelection);\r\n    }\r\n\r\n    /**\r\n     * Search\r\n     * @param filter \r\n     */\r\n    public search(filter: string): void {\r\n        this.dataSource.filter = filter;\r\n    }\r\n\r\n\r\n    /**\r\n     * Navigates to the add page.\r\n     */\r\n    public add(): void {\r\n        if (this.addDialogType) {\r\n            this.dialogService.open(this.addDialogType, { width: '650px', data: this.classInstance })\r\n                .afterClosed()\r\n                .subscribe(() => this.loadList(false));\r\n        } else {\r\n            var hasParams = Object.keys(this.route.snapshot.queryParams).length > 0;\r\n            this.router.navigate(\r\n                [`${this.currentBaseRoute}/add`],\r\n                { queryParams: hasParams ? { returnUrl: this.currentRoute } : {}, relativeTo: this.route }\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Navigates to the edit page.\r\n     * @param entity - The entity to be edited.\r\n     * @param context - Additional context data.\r\n     */\r\n    public edit(entity?: TEntity, context?: any): void {\r\n        /* Check if entity is null */\r\n        if (entity === null || entity === undefined) {\r\n            throw new Error('Entity must be defined for editing.');\r\n        }\r\n\r\n        /* Check if text is selected */\r\n        if (!this.isTextSelected()) {\r\n            /* If a custom onEdit function is provided, call it */\r\n            if (this.onEdit) {\r\n                /* Call the custom onEdit function with the entity and context */\r\n                this.onEdit(entity, context);\r\n            } else {\r\n                /* If the item is not editable, log a warning and return */\r\n                if (this.canEditItem(entity) === false) {\r\n                    this.log('This item is not editable.');\r\n                    return;\r\n                }\r\n\r\n                /* If onEdit is not provided, construct the edit route and navigate */\r\n                const hasParams = Object.keys(this.route.snapshot.queryParams).length > 0;\r\n\r\n                /* Navigate to the edit page with the entity's id and optional query parameters */\r\n                this.router.navigate(\r\n                    [`${this.currentBaseRoute}/edit`, (entity as any)?.id],\r\n                    { queryParams: hasParams ? { returnUrl: this.currentRoute } : {}, relativeTo: this.route }\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Patches the entity\r\n     * Patches the entity\r\n     * @param id The ID of the entity\r\n     * @param fields The fields to patch\r\n     * @param value The (optional) value to change\r\n     * @param includes Includes some navigations\r\n     */\r\n    public patch(id: number, fields: Array<string>, value: any, includes?: any): void {\r\n        this._patch(id, fields, value, includes, (_: any) => this.loadList());\r\n    }\r\n\r\n    /**\r\n     * Patches the entity\r\n     * @param id The ID of the entity\r\n     * @param fields The fields to patch\r\n     * @param value The (optional) value to change\r\n     * @param includes Includes some navigations\r\n     * @param successCallback A callback function to e called on success\r\n     */\r\n    protected _patch(id: number, fields: Array<string>, value: any, includes?: any, successCallback?: Function): void {\r\n        this.isSaving = true;\r\n\r\n        /* Get entity by ID */\r\n        let entity = this.dataSource.items?.filter((x: any) => (<any>x).id === id)[0];\r\n        if (entity) {\r\n            /* Build patch methods */\r\n            let patches = fields.map(x => { return { op: 'replace', path: `/${x}`, value: value != undefined ? value : entity[x] }; });\r\n\r\n            /* Send request */\r\n            this.service\r\n                .patch(id, patches, undefined, { headers: { 'Show-Message': 'Yes' }, params: includes ? Utils.toHttpParams({ includes: includes }) : null })\r\n                .subscribe({\r\n                    next: (x) => {\r\n                        this.isSaving = false;\r\n                        if (successCallback) {\r\n                            successCallback(x);\r\n                        }\r\n                    }, error: (_) => this.isSaving = false\r\n                });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Deletes an item from the database.\r\n     */\r\n    public deleteItem(entity?: TEntity): void {\r\n        this.showDeleteItemDialog().subscribe((accept: boolean) => {\r\n            if (accept) {\r\n                this.service.delete((entity as any).id).subscribe({\r\n                    next: (_) => this.onAfterItemDeleted(<any>entity),\r\n                    error: (error) => this.log(error)\r\n                });\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Deletes an item from the database.\r\n     */\r\n    public deleteItems(): void {\r\n        if (this.dataSource.selectionModel.hasValue()) {\r\n            this.showDeleteItemsDialog().subscribe((accept: boolean) => {\r\n                if (accept) {\r\n                    let ids = this.dataSource.getSelectedIds();\r\n                    this.service.deleteList(ids).subscribe({\r\n                        next: (_) => this.onAfterItemsDeleted(ids),\r\n                        error: (error) => this.log(error)\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Toggles a property.\r\n     * This method supports both direct and nested properties.\r\n     * \r\n     * @param item - The object whose property will be toggled.\r\n     * @param property - The path to the property to toggle, which can be a nested property (e.g., 'profile.name').\r\n     */\r\n    public toggle(item: TEntity, property: string = 'enabled'): void {\r\n        /* Resolve the nested property value */\r\n        const value = this.getNestedProperty(item, property, '/');\r\n\r\n        /* Prepare the patch operation */\r\n        const patchOperation = {\r\n            op: 'replace',\r\n            path: `/${(property.startsWith('/') ? property.substring(1) : property)}`,\r\n            value: value\r\n        };\r\n\r\n        /* Apply the patch operation */\r\n        this.service\r\n            .patch((<any>item).id, [patchOperation])\r\n            .subscribe(() => this.loadList());\r\n    }\r\n\r\n    /**\r\n     * Uploads tarnsfers csv files\r\n     * @param file The file to upload\r\n     * @param reload If true, reload items\r\n     */\r\n    public upload(file: File, reload: boolean = true): void {\r\n        this.service.upload(file).subscribe({\r\n            next: (response) => {\r\n                response = response.json();\r\n\r\n                /* Reload list */\r\n                if (reload) {\r\n                    this.loadList();\r\n                }\r\n            }, error: (error) => this.log(error)\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Downloads a document\r\n     * @param entity \r\n     */\r\n    public download(entity?: TEntity, path: string = 'download'): void {\r\n        this.service.download(`${path}/${(entity as IEntity).id}`).subscribe(x => {\r\n            saveAs(new Blob([x.data], {}), x.filename);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Duplicates a record\r\n     * @param entity \r\n     */\r\n    public duplicate(entity?: TEntity) {\r\n        this.service.duplicate((entity as any).id).subscribe(_ => this.loadList());\r\n    }\r\n\r\n    /**\r\n     * This informs the table how to uniquely identify rows to \r\n     * track how the data changes with each update.\r\n     * @param index \r\n     * @param item \r\n     */\r\n    public trackById(_: number, item: any) {\r\n        return item.id;\r\n    }\r\n\r\n    /**\r\n     * Opens the config dialog\r\n     */\r\n    public openConfigDialog(): void {\r\n        this.dialog.open(VdDynamicTableConfigDialogComponent, {\r\n            width: '1080px',\r\n            height: '830px',\r\n            data: this,\r\n            disableClose: true,\r\n            panelClass: ['flat-dialog', 'dialog-full-screen', 'dialog-resizable']\r\n        }).afterClosed().subscribe(_ => this.reloadPage());\r\n    }\r\n\r\n    /**\r\n     * Opens the export dialog\r\n     */\r\n    public openExportDialog(): void {\r\n        this.openDialog(this.dialogComponent, {\r\n            width: '940px',\r\n            height: '770px',\r\n            data: {\r\n                endpoint: this.service.endpoint,\r\n                formData: {\r\n                    fileName: this.exportFileName ?? this.subtitle,\r\n                    projection: this.projection,\r\n                    page: this.dataSource?.pageIndex + 1,\r\n                    pageSize: this.paginator?.pageSize,\r\n                    sortBy: this.sort?.active,\r\n                    sortOrder: this.sort?.direction,\r\n                    filters: Object.assign(this.dataSource?.staticFieldFilters ?? {}, this.dataSource?.fieldFilters ?? {})\r\n                }\r\n            },\r\n            disableClose: true,\r\n            panelClass: ['flat-dialog', 'dialog-full-screen', 'dialog-resizable']\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Saves the table config\r\n     * @param tableConfig\r\n     */\r\n    public saveConfigs(tableConfig: TableConfig): void {\r\n        if (tableConfig) {\r\n            /* Set the config in the list config */\r\n            this.tableConfig ??= new TableConfig();\r\n            this.tableConfig.columns = tableConfig.columns ?? [];\r\n            this.tableConfig.sticky = tableConfig.sticky;\r\n            this.tableConfig.tableWidth = tableConfig.tableWidth;\r\n\r\n            /* Save the configs */\r\n            AppStorage.setObjectEncoded(this.configsKey, this.tableConfig);\r\n\r\n            /* Set the table columns */\r\n            this.updateColumns();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets and applies the table column configs\r\n     */\r\n    public loadColumnConfigs(): void {\r\n        if (this.tableConfig?.columns) {\r\n            try {\r\n                (this.tableConfig?.columns ?? [])?.forEach((x: TableColumnConfig) => {\r\n                    var column = this.columns.filter((y: TableColumn) => y.name == x.name)[0];\r\n                    if (column) {\r\n                        Object.assign(column, x);\r\n                    }\r\n                });\r\n            } catch (error) { }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Includes some navigations\r\n     * @param inc \r\n     */\r\n    protected include(...inc: string[]) {\r\n        inc?.forEach(x => this.includes.push(x));\r\n    }\r\n\r\n    /**\r\n     * Add toolbar menu items\r\n     */\r\n    protected addToolbarMenuItems(): void {\r\n        /* Add 'Delete selected' menu item */\r\n        if (this.deletable) {\r\n            this.toolbarMenuItems.push({\r\n                id: 'delete-selected',\r\n                title: $localize`:@@deleteSelected:Delete selected`,\r\n                icon: 'delete_forever',\r\n                iconClass: 'tc-orange-800',\r\n                event: () => this.deleteItems(),\r\n                hide: () => !this.canDelete,\r\n                disable: () => !this.canExecuteMultipleOperations((x: TEntity) => this.canDeleteItem(x))\r\n            });\r\n        }\r\n\r\n        /* Opens config dialog */\r\n        if (this.configurable) {\r\n            this.toolbarMenuItems.push({\r\n                id: 'configure-table',\r\n                title: $localize`:@@configureTable:Configure table`,\r\n                icon: 'settings',\r\n                event: () => this.openConfigDialog()\r\n            });\r\n        }\r\n\r\n        /* Opens export dialog */\r\n        if (this.exportable) {\r\n            this.toolbarMenuItems.push({\r\n                id: 'export-data',\r\n                title: $localize`:@@exportData:Export data`,\r\n                icon: 'download',\r\n                iconClass: 'tc-blue-500',\r\n                event: () => this.openExportDialog()\r\n            });\r\n        }\r\n\r\n        if (this.toolbarMenuItems?.length) {\r\n            /* Sort the menu items by index */\r\n            Utils.sortArray(this.toolbarMenuItems, 'index');\r\n\r\n            /* Add the toolbar menu items to the the toolbar actions */\r\n            this.toolbarActions.push({ id: 'more', icon: 'more_vert', items: this.toolbarMenuItems });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add row menu items\r\n     */\r\n    protected addRowMenuItems(): void {\r\n        /* Add checkbox column */\r\n        if (this.selectable) {\r\n            this.columns.unshift(new TableColumn({\r\n                name: 'select',\r\n                columnSets: ['select', 'common'],\r\n                type: TableColumnType.Checkbox,\r\n                disable: (row?: TEntity) => !this.canSelectItem(row),\r\n                cellNgClass: (row: TEntity) => this.selectRowNgClass(row),\r\n                configurable: false,\r\n                sticky: true\r\n            }));\r\n        }\r\n\r\n        /* Add duplicate menu */\r\n        if (this.duplicable) {\r\n            this.rowMenuItems.unshift({\r\n                id: 'duplicate',\r\n                title: $localize`:@@duplicate:Duplicate`,\r\n                icon: 'file_copy',\r\n                event: (row?: TEntity) => this.duplicate(row),\r\n                hide: (row?: TEntity) => !this.canDuplicateItem(row)\r\n            });\r\n        }\r\n\r\n        /* Add download menu */\r\n        if (this.downloadable) {\r\n            this.rowMenuItems.unshift({\r\n                id: 'download',\r\n                title: $localize`:@@download:Download`,\r\n                icon: 'file_download',\r\n                event: (row?: TEntity) => this.download(row),\r\n                hide: (row?: TEntity) => !this.canDownloadItem(row)\r\n            });\r\n        }\r\n\r\n        /* Add delete menu */\r\n        if (this.deletable && this.canDelete) {\r\n            this.rowMenuItems.unshift({\r\n                id: 'delete',\r\n                title: $localize`:@@delete:Delete`,\r\n                icon: 'delete_forever',\r\n                iconClass: 'tc-orange-800',\r\n                event: (row?: TEntity) => this.deleteItem(row),\r\n                hide: (row?: TEntity) => !this.canDeleteItem(row)\r\n            });\r\n        }\r\n\r\n        /* Add edit menu */\r\n        if (this.editable && this.canUpdate) {\r\n            this.rowMenuItems.unshift({\r\n                id: 'edit',\r\n                title: $localize`:@@edit:Edit`,\r\n                icon: 'edit_note',\r\n                iconClass: 'tc-blue-400',\r\n                event: (row?: TEntity) => this.edit(row, this),\r\n                hide: (row?: TEntity) => !this.canEditItem(row)\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Determines if the given item can be selected.\r\n     * \r\n     * An item is considered selectable if:\r\n     * - It does not have the `selectable` property, or the property is `true`.\r\n     * - It does not have the `isSelectable` property, or the property is `true`.\r\n     * \r\n     * @param entity The item to check.\r\n     * @returns `true` if the item is selectable; otherwise, `false`.\r\n     */\r\n    protected canSelectItem(entity?: TEntity): boolean {\r\n        return (!entity?.hasOwnProperty('selectable') || (entity as any)['selectable']) &&\r\n            (!entity?.hasOwnProperty('isSelectable') || (entity as any)['isSelectable']);\r\n    }\r\n\r\n    /**\r\n     * Determines if the given item can be deleted.\r\n     * \r\n     * An item is considered deletable if:\r\n     * - The `canDelete` flag is `true`.\r\n     * - It does not have the `deletable` property, or the property is `true`.\r\n     * - It does not have the `isDeletable` property, or the property is `true`.\r\n     * \r\n     * @param entity The item to check.\r\n     * @returns `true` if the item is deletable; otherwise, `false`.\r\n     */\r\n    protected canDeleteItem(entity?: TEntity): boolean {\r\n        return this.canDelete &&\r\n            (!entity?.hasOwnProperty('deletable') || (entity as any)['deletable']) &&\r\n            (!entity?.hasOwnProperty('isDeletable') || (entity as any)['isDeletable']);\r\n    }\r\n\r\n    /**\r\n     * Determines if the given item can be edited.\r\n     * \r\n     * An item is considered editable if:\r\n     * - The `canUpdate` flag is `true`.\r\n     * - It does not have the `editable` property, or the property is `true`.\r\n     * - It does not have the `isEditable` property, or the property is `true`.\r\n     * \r\n     * @param entity The item to check.\r\n     * @returns `true` if the item is editable; otherwise, `false`.\r\n     */\r\n    protected canEditItem(entity?: TEntity): boolean {\r\n        return this.canUpdate &&\r\n            (!entity?.hasOwnProperty('editable') || (entity as any)['editable']) &&\r\n            (!entity?.hasOwnProperty('isEditable') || (entity as any)['isEditable']);\r\n    }\r\n\r\n    /**\r\n     * Determines if the given item can be downloaded.\r\n     * \r\n     * An item is considered downloadable if:\r\n     * - It does not have the `downloadable` property, or the property is `true`.\r\n     * - It does not have the `isDownloadable` property, or the property is `true`.\r\n     * \r\n     * @param entity The item to check.\r\n     * @returns `true` if the item is downloadable; otherwise, `false`.\r\n     */\r\n    protected canDownloadItem(entity?: TEntity): boolean {\r\n        return (!entity?.hasOwnProperty('downloadable') || (entity as any)['downloadable']) &&\r\n            (!entity?.hasOwnProperty('isDownloadable') || (entity as any)['isDownloadable']);\r\n    }\r\n\r\n    /**\r\n     * Determines if the given item can be duplicated.\r\n     * \r\n     * An item is considered duplicable if:\r\n     * - It does not have the `duplicable` property, or the property is `true`.\r\n     * - It does not have the `isDuplicable` property, or the property is `true`.\r\n     * \r\n     * @param entity The item to check.\r\n     * @returns `true` if the item is duplicable; otherwise, `false`.\r\n     */\r\n    protected canDuplicateItem(entity?: TEntity): boolean {\r\n        return (!entity?.hasOwnProperty('duplicable') || (entity as any)['duplicable']) &&\r\n            (!entity?.hasOwnProperty('isDuplicable') || (entity as any)['isDuplicable']);\r\n    }\r\n\r\n    /**\r\n     * Returns NgClass object for select column\r\n     */\r\n    protected selectRowNgClass(_: TEntity): any { }\r\n\r\n    /**\r\n     * Check if the there any selected row\r\n     * @returns \r\n     */\r\n    protected hasSelectedRows(): boolean { return this.dataSource?.selectionModel?.hasValue() };\r\n\r\n    /**\r\n     * Hook method called after the items list has been loaded.\r\n     * Subclasses can override this to perform actions like setting\r\n     * a subtitle, transforming data, or triggering follow-up requests.\r\n     */\r\n    protected onAfterItemsLoaded(): void { }\r\n\r\n    /**\r\n     * Event emitted when the entity has been deleted.\r\n     */\r\n    protected onAfterItemDeleted(item: IEntity): void {\r\n        this.loadList(true);\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the entities has been deleted.\r\n     */\r\n    protected onAfterItemsDeleted(ids: number[]): void {\r\n        this.loadList(true);\r\n    }\r\n\r\n    /**\r\n     * Checks if the user can perform multiple operations (Like 'delete selected').\r\n     * @param action \r\n     * @returns \r\n     */\r\n    protected canExecuteMultipleOperations(action?: Function): boolean {\r\n        return this.hasSelectedRows() && (action ? this.dataSource?.selectionModel?.selected?.every((x: any) => action(x)) : true);\r\n    }\r\n\r\n    /**\r\n     * Gets the value of a nested property from an object.\r\n     * \r\n     * @param obj - The object to query.\r\n     * @param path - The path to the property, which can be delimited by a custom character (e.g., dot, slash).\r\n     * @param delimiter - The delimiter used to separate levels in the property path (default is '.').\r\n     * @returns - The value of the nested property or undefined if not found.\r\n     */\r\n    protected getNestedProperty(obj: any, path: string, delimiter: string = '.'): any {\r\n        /* Split the path into an array of keys using the specified delimiter */\r\n        const keys = path.split(delimiter);\r\n\r\n        /* Traverse the object based on the array of keys */\r\n        return keys.reduce((acc, key) => acc && acc[key], obj);\r\n    }\r\n\r\n    /**\r\n     * Responds to user-initiated events\r\n     * @param event \r\n     */\r\n    @HostListener('document:keydown', ['$event'])\r\n    public handleKeyboardEvent(event: KeyboardEvent) {\r\n        if (event.ctrlKey || event.metaKey) {\r\n            switch (event.key) {\r\n                /* Navigate to add page */\r\n                case 'a':\r\n                    event.preventDefault();\r\n                    this.add();\r\n                    break;\r\n            }\r\n        } else if (this.paginator) {\r\n            switch (event.key) {\r\n                /* Navigate to previous page */\r\n                case 'PageUp':\r\n                    this.paginator.previousPage();\r\n                    break;\r\n\r\n                /* Navigate to next page */\r\n                case 'PageDown':\r\n                    this.paginator.nextPage();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A callback used for any custom cleanup that needs to occur \r\n     * when the instance is destroyed.\r\n     */\r\n    public override ngOnDestroy(): void {\r\n        super.ngOnDestroy();\r\n        if (this.dataLoadedSubscription) {\r\n            this.dataLoadedSubscription.unsubscribe();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The Symbol.toStringTag well-known symbol is a string valued property that is used \r\n     * in the creation of the default string description of an object\r\n     */\r\n    get [Symbol.toStringTag]() { return 'GenericListComponent'; }\r\n}","import { ChangeDetectorRef, Directive, Input, Type } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { IEntity } from '../../common/models/entity';\r\nimport { RxFormArray } from '../../form-validators/services/rx-form-array';\r\nimport { RxFormBuilder } from '../../form-validators/services/rx-form-builder';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { TableStaticDataSource } from '../../table/table.static-data-source';\r\nimport { GenericListComponent } from './generic-list';\r\n\r\n/**\r\n * @class GenericEmbeddedListComponent\r\n * \r\n * A base class for managing a list of embedded items within a form.\r\n * It provides common functionalities for adding, removing, and managing items.\r\n */\r\n@Directive()\r\nexport abstract class GenericEmbeddedListComponent<\r\n\tTEntity extends IEntity,\r\n\tTParent extends IEntity,\r\n\tTService extends GenericService<TEntity>\r\n> extends GenericListComponent<TEntity, TService> {\r\n\t/**\r\n\t * The reactive form associated with this component.\r\n\t */\r\n\t@Input()\r\n\tpublic form?: FormGroup;\r\n\r\n\t/**\r\n\t * The parent entity that this component is associated with.\r\n\t */\r\n\t@Input()\r\n\tpublic parent?: TParent;\r\n\r\n\t/**\r\n\t * A prefix for hashing purposes, default is an empty string.\r\n\t */\r\n\t@Input()\r\n\tpublic hashPrefix: string = '';\r\n\r\n\t/**\r\n\t * Determines whether the list supports pagination.\r\n\t * If true, pagination controls will be available for navigating through the data.\r\n\t */\r\n\t@Input()\r\n\tpublic paginable: boolean = false;\r\n\r\n\t/**\r\n\t * @property pageSize\r\n\t * @description The number of items displayed per page in the data-table.\r\n\t * It controls how many records are shown on a single page.\r\n\t * @type {number}\r\n\t */\r\n\t@Input()\r\n\tpublic pageSize: number = 10;\r\n\r\n\t/**\r\n\t * The name of the property representing the list of items.\r\n\t */\r\n\tprotected itemsPropertyName = 'items';\r\n\r\n\t/**\r\n\t * Menu options for managing a list of items, including delete and more options.\r\n\t */\r\n\tpublic itemListMenu: ActionItem<TEntity>[] = [\r\n\t\t/* Option to remove the selected item from the list */\r\n\t\t{\r\n\t\t\tid: 'delete',\r\n\t\t\ticon: 'delete_forever',\r\n\t\t\tevent: (_, __, i) => this.removeItem(i!),\r\n\t\t\thide: (item) => (item?.id ?? 0) > 0\r\n\t\t},\r\n\t\t/* Action to show additional options for the item */\r\n\t\t{\r\n\t\t\tid: 'more',\r\n\t\t\ticon: 'more_vert',\r\n\t\t\thide: (item) => (item?.id ?? 0) <= 0,\r\n\t\t\titems: this.rowMenuItems\r\n\t\t}\r\n\t];\r\n\r\n\t/**\r\n\t * Constructor for initializing the component.\r\n\t * \r\n\t * @param entity The type of entity being managed.\r\n\t * @param service The service for managing entity operations.\r\n\t * @param formBuilder The builder for creating reactive forms.\r\n\t * @param route The activated route for navigation.\r\n\t * @param changeDetectorRef The change detector for managing view updates.\r\n\t */\r\n\tconstructor(\r\n\t\tprotected entity: Type<TEntity>,\r\n\t\tpublic override service: TService,\r\n\t\tprotected formBuilder: RxFormBuilder,\r\n\t\tprotected override route: ActivatedRoute,\r\n\t\tprotected override changeDetectorRef: ChangeDetectorRef\r\n\t) {\r\n\t\tsuper(service, route, changeDetectorRef, <any>null)\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook called after the constructor.\r\n\t * Initializes input properties and sets up data fetching.\r\n\t */\r\n\toverride ngOnInit(): void {\r\n\t\tsuper.ngOnInit();\r\n\t\tif (this.parent?.id) {\r\n\t\t\t/* Sets the paginator for the dataSource */\r\n\t\t\tthis.dataSource.paginator = this.paginator!;\r\n\r\n\t\t\t/* \r\n\t\t\tIf a parent entity exists (i.e., it has an ID), connect to the data source \r\n\t\t\twith the specified page size and any additional fetch data.\r\n\t\t\t*/\r\n\t\t\tthis.connect(Object.assign({ pageSize: 10 }, this.getFetchData(), { id: null }));\r\n\t\t} else if (this.dataSource.items.length <= 0) {\r\n\t\t\t/* \r\n\t\t\tIf there is no parent entity and the data source items are empty,\r\n\t\t\tpopulate the data source with initial items from the form's value.\r\n\t\t\t*/\r\n\t\t\tthis.dataSource.items?.push(...this.form?.value[this.itemsPropertyName]);\r\n\t\t}\r\n\r\n\t\tif (!this.parent?.id && this.paginable) {\r\n\t\t\t/* Initializes the dataSource with the entities */\r\n\t\t\tthis.dataSource = new TableStaticDataSource(...this.form?.value[this.itemsPropertyName]);\r\n\r\n\t\t\t/* Set the default page size */\r\n\t\t\tthis.dataSource.pageSize = this.pageSize;\r\n\r\n\t\t\t/* Sets the paginator for the dataSource */\r\n\t\t\tthis.dataSource.paginator = this.paginator;\r\n\r\n\t\t\t/* Subscribes to the dataSource connection and assigns the result to the items array */\r\n\t\t\tthis.connect();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a new item to the current list.\r\n\t * \r\n\t * @param init Optional initial values for the new entity.\r\n\t */\r\n\tpublic addItem(init?: Partial<TEntity>): void {\r\n\t\t/* Create a new entity instance with optional initial values */\r\n\t\tvar entity = <TEntity>this.newInstance(init || {});\r\n\r\n\t\t/* Add the new item to the data source to show it in the expansion panel */\r\n\t\tthis.dataSource.items?.push(entity);\r\n\r\n\t\t/* Update the data source with the modified items array */\r\n\t\tthis.dataSource.data = this.dataSource.items;\r\n\r\n\t\t/* Add the entity to the form array in 'add mode' */\r\n\t\tif (!this.parent?.id) {\r\n\t\t\t(this.form?.controls[this.itemsPropertyName] as RxFormArray)?.push(this.formBuilder.formGroup<TEntity>(entity));\r\n\r\n\t\t\t/* Ensure the form is valid after adding the item */\r\n\t\t\tthis.form?.updateValueAndValidity();\r\n\t\t}\r\n\r\n\t\t/* Trigger change detection to update the view */\r\n\t\tthis.changeDetectorRef.detectChanges();\r\n\t}\r\n\r\n\t/**\r\n\t * Removes an item from the list and the form.\r\n\t * \r\n\t * @param index The index of the item to remove.\r\n\t */\r\n\tpublic removeItem(index: number): void {\r\n\t\t/* Remove item from the form array */\r\n\t\t(this.form?.controls[this.itemsPropertyName] as RxFormArray)?.removeAt(index);\r\n\r\n\t\t/* Remove item from the data source */\r\n\t\tthis.dataSource.items?.splice(index, 1);\r\n\t\tthis.items?.splice(index, 1);\r\n\r\n\t\tif (this.parent?.id) {\r\n\t\t\t/* Refresh data source if associated with a parent */\r\n\t\t\tthis.dataSource.connect().subscribe();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Clears all items from the list and the form.\r\n\t */\r\n\tpublic clearItems(): void {\r\n\t\t/* Clear the items from the data source */\r\n\t\tthis.dataSource.items = [];\r\n\t\tthis.dataSource.data = [];\r\n\r\n\t\t/* Clear the form array */\r\n\t\t(this.form?.controls[this.itemsPropertyName] as RxFormArray)?.clear();\r\n\t}\r\n\r\n\t/**\r\n\t * Abstract method to fetch data for the list.\r\n\t * Must be implemented by derived classes.\r\n\t */\r\n\tprotected abstract getFetchData(): any;\r\n\r\n\t/**\r\n\t * Creates a new instance of the TEntity.\r\n\t * \r\n\t * @param init Optional initial values for the entity.\r\n\t * @returns A new instance of TEntity.\r\n\t */\r\n\tprotected newInstance(init: Partial<TEntity>): TEntity {\r\n\t\t/* Create a new entity instance */\r\n\t\treturn new this.entity(init);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds menu items to the row options for managing individual items.\r\n\t */\r\n\tprotected override addRowMenuItems(): void {\r\n\t\tthis.editable = false;\r\n\t\tsuper.addRowMenuItems();\r\n\t}\r\n}","export const formDefinitionMetadataKey = 'custom:vdFormDefinition';\r\nexport const formFieldsMetadataKey = 'custom::vdFormFields';\r\nexport const formFieldGroupsMetadataKey = 'custom:vdFormFieldGroups';","import { IGenericReactiveFormBaseComponent } from \"../../base/interfaces/igeneric-reactive-form-base\";\r\nimport { ActionItem } from \"../../common/models/action-item\";\r\nimport { FormFieldGroupDefinition } from \"./form-field-group-definition\";\r\n\r\n/**\r\n * Represents a form definition.\r\n */\r\nexport class FormDefinition<T = any> {\r\n    /**\r\n     * The endpoint for form data submission.\r\n     * @property\r\n     */\r\n    public endpoint?: string;\r\n\r\n    /**\r\n     * Fields to include in form data.\r\n     * @property\r\n     */\r\n    public projection?: string[] | string;\r\n\r\n    /**\r\n     * Entities to include in form data.\r\n     * @property\r\n     */\r\n    public includes?: { entity: string, update?: boolean, delete?: boolean }[];\r\n\r\n    /**\r\n     * Flag to show action buttons on the form. Default is true.\r\n     * @property\r\n     */\r\n    public showAction?: boolean = true;\r\n\r\n    /**\r\n     * Flag to allow deleting form data. Default is true.\r\n     * @property\r\n     */\r\n    public deletable?: boolean = true;\r\n\r\n    /**\r\n     * Flag to allow downloading form data.\r\n     * @property\r\n     */\r\n    public downloadable?: boolean;\r\n\r\n    /**\r\n     * Flag to allow duplicating form data.\r\n     * @property\r\n     */\r\n    public duplicable?: boolean;\r\n\r\n    /**\r\n     * Actions to perform on form data.\r\n     * @property\r\n     */\r\n    public actions?: ActionItem<T, IGenericReactiveFormBaseComponent<T>>[] = [];\r\n\r\n    /**\r\n     * Groups of form fields.\r\n     * @property\r\n     */\r\n    public fieldGroups?: FormFieldGroupDefinition[] = [];\r\n\r\n    /**\r\n     * Menu items for the form toolbar.\r\n     * @property\r\n     */\r\n    public toolbarMenuItems?: ActionItem<T, IGenericReactiveFormBaseComponent<T>>[] = [];\r\n\r\n    /**\r\n     * Constructor for the FormDefinition class.\r\n     * @param {Partial<FormDefinition<T>>} init - Optional partial object to initialize properties.\r\n     */\r\n    public constructor(init?: Partial<FormDefinition<T>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}\r\n","import { Type } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { IGenericFormBaseComponent } from \"../../base/interfaces/igeneric-form-base\";\r\nimport { FormFieldDefinition } from \"./form-field-definition\";\r\n\r\n/**\r\n * Represents a group of form fields definition.\r\n * @template TProperty - The type of data for the form fields.\r\n */\r\nexport class FormFieldGroupDefinition<TProperty = any, TEntity = any> {\r\n    /**\r\n     * Name of the form field group.\r\n     */\r\n    public name: string = 'details';\r\n\r\n    /**\r\n     * Index of the form field group.\r\n     */\r\n    public index?: number;\r\n\r\n    /**\r\n     * Header for the form field group.\r\n     */\r\n    public header?: string;\r\n\r\n    /**\r\n     * Array of form field definitions within the group.\r\n     */\r\n    public fields: FormFieldDefinition<TProperty>[] = [];\r\n\r\n    /**\r\n     * Nested groups of form field definitions.\r\n     */\r\n    public groups: FormFieldDefinition<TProperty>[][] = [];\r\n\r\n    /**\r\n     * Array of field sets for organizing form fields.\r\n     */\r\n    public fieldSets?: string[];\r\n\r\n    /**\r\n     * Type associated with the form field group.\r\n     */\r\n    public type?: Type<any>;\r\n\r\n    /**\r\n     * Instance of an object associated with the form field group.\r\n     */\r\n    public instance?: TEntity;\r\n\r\n    /**\r\n     * Indicates whether the form field group is hidden.\r\n     */\r\n    public hidden?: boolean;\r\n\r\n    /**\r\n     * Callback function to hide the field group.\r\n     * @property\r\n     */\r\n    public hide?: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Constructor for the FormFieldGroupDefinition class.\r\n     * @param init - Optional partial data to initialize the form field group.\r\n     */\r\n    public constructor(init?: Partial<FormFieldGroupDefinition<TEntity>>) {\r\n        Object.assign(this, init);\r\n    }\r\n}\r\n","import { Type } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { endpointMetadataKey } from \"../../common/constants/constants\";\r\nimport { Utils } from \"../../common/functions/utils\";\r\nimport { formDefinitionMetadataKey, formFieldGroupsMetadataKey, formFieldsMetadataKey } from \"../constants/constants\";\r\nimport { FormDefinition } from \"../models/form-definition\";\r\nimport { FormFieldDefinition } from \"../models/form-field-definition\";\r\nimport { FormFieldGroupDefinition } from \"../models/form-field-group-definition\";\r\n\r\n/**\r\n * Retrieves the form definition for a given object decorated with @Form.\r\n *\r\n * This function reads metadata defined via decorators on the class\r\n * to build a FormDefinition instance, including field groups and\r\n * an optional API endpoint.\r\n *\r\n * @template TEntity The type of the entity associated with the form.\r\n * @param origin The entity instance for which to retrieve the form definition. Must not be undefined.\r\n * @param form Optional NgForm or FormGroup associated with the entity.\r\n * @param context Optional context object to customize form definition generation,\r\n *                e.g., for conditional fields or groups.\r\n * @returns The FormDefinition object containing field groups and endpoint metadata.\r\n * @throws Error if the `origin` argument is not provided.\r\n */\r\nexport function getFormDefinition<TEntity>(origin: TEntity, form?: FormGroup, context?: any): FormDefinition {\r\n    /* Check if origin is not defined */\r\n    if (!origin) {\r\n        throw new Error('Origin object must be defined.');\r\n    }\r\n\r\n    /* Save the form defintion in the metadata */\r\n    var formDefinition: FormDefinition = Reflect.getMetadata(formDefinitionMetadataKey, origin.constructor) ?? new FormDefinition({});\r\n    if (formDefinition) {\r\n        /* Populate form groups from decorated fields, passing the optional context */\r\n        formDefinition.fieldGroups = getFormGroups(origin, undefined, undefined, form, context);\r\n\r\n        /* Set endpoint from the decorator @Api, if any */\r\n        var endpoint = Reflect.getMetadata(endpointMetadataKey, origin);\r\n        if (endpoint) {\r\n            formDefinition.endpoint = endpoint;\r\n        }\r\n    }\r\n\r\n    return formDefinition;\r\n}\r\n\r\n/**\r\n * Retrieves properties decorated with @FormField, grouped by row.\r\n *\r\n * This function reads metadata from the instance (or type) to generate\r\n * an array of FormFieldGroupDefinition objects. It can use additional\r\n * arguments, the form instance, or a context object to customize group creation.\r\n *\r\n * @template TEntity The type of the entity associated with the form fields.\r\n * @param instance The instance of the object containing decorated properties.\r\n * @param type Optional constructor of the class; used if instance is not provided.\r\n * @param args Optional partial configuration to customize the resulting FormFieldGroupDefinition.\r\n * @param form Optional NgForm or FormGroup associated with the entity, for dynamic field logic.\r\n * @param context Optional context object for conditional logic or dynamic modifications\r\n *                when generating form groups.\r\n * @returns An array of FormFieldGroupDefinition objects representing the grouped form fields.\r\n */\r\nexport function getFormGroups<TEntity = any>(\r\n    instance?: TEntity,\r\n    type?: Type<TEntity>,\r\n    args?: Partial<FormFieldGroupDefinition<TEntity>>,\r\n    form?: FormGroup,\r\n    context?: any\r\n): FormFieldGroupDefinition[] {\r\n    /* Create a new instance */\r\n    instance ??= Reflect.construct(type!, []);\r\n\r\n    /* Check if origin is not defined */\r\n    if (!instance) {\r\n        throw new Error('Origin object must be defined.');\r\n    }\r\n\r\n    /* Get main fields grouped by the group name */\r\n    const mainFieldGroups = Utils.groupArrayBy(Reflect.getMetadata(formFieldsMetadataKey, instance) as FormFieldDefinition[], x => x.groupName);\r\n\r\n    /* Group the fields */\r\n    var groups = Array.from(mainFieldGroups).map(([_, value], i: number) => new FormFieldGroupDefinition({\r\n        name: value[0].groupName || undefined,\r\n        header: value[0].groupHeader,\r\n        type: type,\r\n        instance: instance,\r\n        index: args?.index ?? i,\r\n        hidden: args?.hidden,\r\n        hide: args?.hide,\r\n        groups: (Object.values(\r\n            (value).reduce(function (r: [FormFieldDefinition[]], a: FormFieldDefinition) {\r\n                if (a.row) {\r\n                    /* \r\n                     * Determine the row number for this field:\r\n                     * - If `a.row` is a function, call it with instance, form, and context.\r\n                     * - Otherwise, use the number directly.\r\n                     */\r\n                    const rowNumber = typeof a.row === 'function'\r\n                        ? a.row(instance, form, context)\r\n                        : a.row;\r\n\r\n                    /* Initialize the row array if it doesn't exist */\r\n                    r[rowNumber] = r[rowNumber] || [];\r\n\r\n                    /* Add the current field to the corresponding row */\r\n                    r[rowNumber].push(a);\r\n\r\n                    /* Assign index to each field in the row if not already set */\r\n                    r[rowNumber].forEach((x, i) => x.index = x.index || i);\r\n\r\n                    /* Sort the row fields by index to ensure consistent ordering */\r\n                    Utils.sortArray(r[rowNumber], 'index');\r\n\r\n                    /* Return the accumulator for the next iteration */\r\n                    return r;\r\n                }\r\n\r\n                /* If the field has no row defined, skip it by returning an empty array */\r\n                return <any>[];\r\n\r\n            }, Object.create(null))) as [FormFieldDefinition[]]\r\n        )\r\n    }));\r\n\r\n    /* Get object groups */\r\n    var objectFieldGroups = Reflect.getMetadata(formFieldGroupsMetadataKey, instance);\r\n    if (objectFieldGroups && Array.isArray(objectFieldGroups)) {\r\n        groups = groups.concat(objectFieldGroups);\r\n    }\r\n\r\n    /* Sort the groups by index */\r\n    Utils.sortArray(groups, 'index');\r\n\r\n    return groups;\r\n}","import { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Directive, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, Type, ViewChild, ViewChildren } from '@angular/core';\r\nimport { AbstractControl, FormArray, FormGroup, NgForm, ValidationErrors } from '@angular/forms';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Observable, map, tap } from 'rxjs';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { IEntity } from '../../common/models/entity';\r\nimport { Permission } from '../../common/models/permission';\r\nimport { SaveAction } from '../../common/models/save-action';\r\nimport { getFormDefinition } from '../../forms/functions/functions';\r\nimport { FormDefinition } from '../../forms/models/form-definition';\r\nimport { FormFieldGroupDefinition } from '../../forms/models/form-field-group-definition';\r\nimport { ApiResponse } from '../../http/models/response';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { IGenericFormBaseComponent } from '../interfaces/igeneric-form-base';\r\nimport { BaseComponent } from './base';\r\n\r\n// @dynamic\r\n@Directive()\r\nexport abstract class GenericFormBaseComponent<TEntity extends IEntity, TService extends GenericService<TEntity>> extends BaseComponent implements IGenericFormBaseComponent<TEntity>, OnChanges {\r\n    /**\r\n     * The action of the form (add | edit).\r\n     */\r\n    public action: string = 'add';\r\n\r\n    /**\r\n     * Indicates if the form is in edit mode.\r\n     */\r\n    public isEditMode: boolean = false;\r\n\r\n    /**\r\n     * Whether to automatically initialize a new form instance if \r\n     * no existing record is found in the database.\r\n     */\r\n    @Input()\r\n    public initializeDefaultOnEmpty: boolean = false;\r\n\r\n    /**\r\n     * Save action enumeration.\r\n     */\r\n    public SaveAction: typeof SaveAction = SaveAction;\r\n\r\n    /**\r\n     * Navigation routes.\r\n     */\r\n    public editSaveAndCloseRoute: string = '../../';\r\n    public addSaveAndCloseRoute: string = '../';\r\n    public addSaveAndEditRoute: string = '../edit/';\r\n    public addSaveAndNewRoute: string = '../add';\r\n    public listRoute: string = this.addSaveAndCloseRoute;\r\n\r\n    /**\r\n     * The ID of the item to load.\r\n     */\r\n    protected _id?: number | string;\r\n\r\n    /**\r\n     * The ID of the item to load.\r\n     */\r\n    @Input()\r\n    public get id(): number | string | undefined { return this._id; }\r\n    public set id(id: number | string | undefined) {\r\n        if (this._id != id) {\r\n            this._id = id;\r\n            this.action = 'edit';\r\n            this.isEditMode = true;\r\n            this.listRoute = this.editSaveAndCloseRoute;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The current item to add or edit.\r\n     */\r\n    @Input()\r\n    protected _item?: TEntity;\r\n\r\n    /**\r\n     * The current item to add or edit.\r\n     */\r\n    @Input()\r\n    public get item(): TEntity | undefined { return this._item; }\r\n    public set item(item: TEntity | undefined) {\r\n        if (this._item !== item) {\r\n            this._item = item;\r\n            this.id ??= item?.id;\r\n            this.buildFields();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Includes fields for query.\r\n     */\r\n    @Input()\r\n    public includes: string[] = [];\r\n\r\n    /**\r\n     * Update includes fields for query.\r\n     */\r\n    @Input()\r\n    public updateIncludes: string[] = [];\r\n\r\n    /**\r\n     * Projection fields for query.\r\n     */\r\n    @Input()\r\n    public projection?: string[];\r\n\r\n    /**\r\n     * Query parameters.\r\n     */\r\n    @Input()\r\n    public query: any = {};\r\n\r\n    /**\r\n     * Read-only flag.\r\n     */\r\n    @Input()\r\n    public readonly: boolean = false;\r\n\r\n    /**\r\n     * Disabled flag.\r\n     */\r\n    @Input()\r\n    public disabled: boolean = false;\r\n\r\n    /**\r\n     * Emitted when the form has been fully initialized\r\n     * and is ready to be accessed or modified.\r\n     */\r\n    @Output()\r\n    public formInitialized = new EventEmitter<NgForm | FormGroup>();\r\n\r\n    /**\r\n     * The current date.\r\n     */\r\n    public currentDate: Date = new Date();\r\n\r\n    /**\r\n     * Date & time input mask.\r\n     */\r\n    public dateTimeMask = [/[0-3]/, /[0-9]/, '.', /[0-1]/, /[0-9]/, '.', 2, 0, /[1-2]/, /[0-9]/, ' ', /[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];\r\n\r\n    /**\r\n     * Date input mask.\r\n     */\r\n    public dateMask = [/[0-3]/, /[0-9]/, '.', /[0-1]/, /[0-9]/, '.', 2, 0, /[1-2]/, /[0-9]/];\r\n\r\n    /**\r\n     * Time input mask.\r\n     */\r\n    public timeMask = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];\r\n\r\n    /**\r\n     * Date validation pattern.\r\n     */\r\n    public datePattern: string = `(?:(?:31(\\\\/|-|\\\\.)(?:0?[13578]|1[02]))\\\\1|(?:(?:29|30)(\\\\/|-|\\\\.)(?:0?[1,3-9]|1[0-2])\\\\2))(?:(?:1[6-9]|[2-9]\\\\d)?\\\\d{2})$|^(?:29(\\\\/|-|\\\\.)0?2\\\\3(?:(?:(?:1[6-9]|[2-9]\\\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\\\d|2[0-8])(\\\\/|-|\\\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\\\4(?:(?:1[6-9]|[2-9]\\\\d)?\\\\d{2})`;\r\n\r\n    /**\r\n     * Phone prefix validation pattern.\r\n     */\r\n    public phonePrefixPattern: string = '^(0\\\\d{2,6})$';\r\n\r\n    /**\r\n     * Phone number validation pattern.\r\n     */\r\n    public phoneNumberPattern: string = '^(\\\\d{3,30})$';\r\n\r\n    /**\r\n     * Password validation pattern.\r\n     */\r\n    public passwordPattern: string = '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)(?=.*[$@$!%*?&#.])[A-Za-z\\\\d$@$!%*?&#.]{6,}$';\r\n\r\n    /**\r\n     * Editor options including default modules and toolbar configuration.\r\n     */\r\n    public editorOptions = {\r\n        modules: {\r\n            toolbar: [\r\n                ['bold', 'italic', 'underline'],\r\n                [{ 'list': 'ordered' }, { 'list': 'bullet' }],\r\n                [{ 'indent': '-1' }, { 'indent': '+1' }],\r\n                [{ 'size': ['small', false, 'large', 'huge'] }],\r\n                [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n                [{ 'color': new Array<any>() }, { 'background': new Array<any>() }],\r\n                ['link', 'image']\r\n            ],\r\n            clipboard: {\r\n                matchVisual: false\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * If true, shows the 'Delete' menu.\r\n     */\r\n    public deletable: boolean = true;\r\n\r\n    /**\r\n     * Toolbar menu items.\r\n     */\r\n    public toolbarMenuItems: ActionItem[] = [];\r\n\r\n    /**\r\n     * Toolbar action buttons.\r\n     */\r\n    public toolbarActions: ActionItem<TEntity, IGenericFormBaseComponent<TEntity>>[] = [{\r\n        id: 'refresh',\r\n        icon: 'refresh',\r\n        tooltip: $localize`:@@refreshPage:Refresh the page`,\r\n        event: () => this.reloadPage(),\r\n    }];\r\n\r\n    /**\r\n     * MatStepper reference.\r\n     */\r\n    @ViewChild(MatStepper)\r\n    protected matStepper?: MatStepper;\r\n\r\n    /**\r\n     * Reference to the input elements.\r\n     */\r\n    @ViewChildren('focus')\r\n    public input: any;\r\n\r\n    /**\r\n     * Form group instance.\r\n     */\r\n    public _form?: NgForm | FormGroup;\r\n\r\n    /**\r\n     * Form group.\r\n     */\r\n    @Input()\r\n    public get form(): NgForm | FormGroup | undefined { return this._form; }\r\n    public set form(form: NgForm | FormGroup | undefined) {\r\n        this._form = form;\r\n        this.onAfterFormBuild();\r\n    }\r\n\r\n    /**\r\n     * @property List of field sets.\r\n     * @description The `fieldSets` array is used to filter and group form fields based on specific sets,\r\n     * allowing dynamic field rendering.\r\n     * @type {string[]}\r\n     */\r\n    @Input()\r\n    public fieldSets?: string[];\r\n\r\n    /**\r\n     * Gets the form value.\r\n     */\r\n    public abstract get formValue(): TEntity | any;\r\n\r\n    /**\r\n     * Form definition.\r\n     */\r\n    public formDefinition?: FormDefinition;\r\n\r\n    /**\r\n     * Field groups definition.\r\n     */\r\n    public fieldGroups?: FormFieldGroupDefinition[];\r\n\r\n    /**\r\n     * Constructor.\r\n     * @param service The service to manage the entity.\r\n     * @param route The activated route.\r\n     * @param changeDetectorRef The change detector reference.\r\n     */\r\n    constructor(\r\n        public entityCtor: Type<TEntity>,\r\n        protected service: TService,\r\n        protected override route: ActivatedRoute,\r\n        protected override changeDetectorRef: ChangeDetectorRef\r\n    ) {\r\n        super(route, changeDetectorRef);\r\n        this.listRoute = this.addSaveAndCloseRoute;\r\n    }\r\n\r\n    /**\r\n     * Called after the constructor, initializing input properties, \r\n     * and the first call to ngOnChanges.\r\n     */\r\n    public override  ngOnInit(): void {\r\n        super.ngOnInit();\r\n        this.init();\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after a component's view has been fully initialized.\r\n     */\r\n    public override  ngAfterViewInit(): void {\r\n        this.handleExpansionPanelChanges = this.isEditMode;\r\n        super.ngAfterViewInit();\r\n\r\n        /* Set page title */\r\n        this.title = this.titleService.getTitle();\r\n\r\n        /* Set focus */\r\n        this.focus();\r\n\r\n        /* \r\n         * Force a new change detection cycle since change detections \r\n         * have finished when `ngAfterViewInit` is executed.\r\n         */\r\n        this.changeDetectorRef.detectChanges();\r\n\r\n        /* Listen for stepper selection changes */\r\n        this.matStepper?.selectionChange?.subscribe((event: StepperSelectionEvent) => this.onAfterStepChange(event));\r\n\r\n        /* Select the appropriate step based on the URL hash and mark previous steps as completed */\r\n        this.selectStepBasedOnUrlHash();\r\n    }\r\n\r\n    /**\r\n     * Called before any other lifecycle hook. Use it to inject dependencies, \r\n     * but avoid any serious work here.\r\n     * @param changes The changes object.\r\n     */\r\n    public ngOnChanges(changes: SimpleChanges): void {\r\n        if (\r\n            (changes[\"id\"]?.currentValue && changes[\"id\"].currentValue !== changes[\"id\"].previousValue) ||\r\n            (changes[\"item\"]?.currentValue && changes[\"item\"].currentValue !== changes[\"item\"].previousValue)\r\n        ) {\r\n            this.loadItem();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Loads an item by ID.\r\n     * This method fetches the item if the component is in edit mode and the service endpoint is defined.\r\n     * \r\n     * @param successCallback - A function to be called after the item has been successfully loaded.\r\n     *                          This function will receive the loaded item as an argument.\r\n     * @param errorCallback - A function to be called if an error occurs during loading.\r\n     *                        This function will receive the error as an argument.\r\n     * @param headers - Optional HTTP headers to include in the request.\r\n     * @param handleError - Indicates whether to automatically handle and parse errors (default: true).\r\n     * @param observeResponse - If true, the full HTTP response will be observed instead of just the body (default: false).\r\n     */\r\n    public loadItem(\r\n        successCallback?: (item: { entity: TEntity, permissions: Permission }) => void,\r\n        errorCallback?: (error: any) => void,\r\n        headers?: Record<string, string>,\r\n        handleError: boolean = true,\r\n        observeResponse: boolean = true\r\n    ): void {\r\n        if (this.isEditMode && this.service?.endpoint) {\r\n            /* Set loading state to true to indicate that an item is being loaded */\r\n            this.isLoading = true;\r\n\r\n            /* Trigger change detection to update the view with the loading state */\r\n            this.changeDetectorRef.detectChanges();\r\n\r\n            /* Call the asynchronous method to load the item */\r\n            this.loadItemAsync(headers, handleError, observeResponse).subscribe({\r\n                /* Handle the response when the item is successfully loaded */\r\n                next: (item) => {\r\n                    /* Set loading state to false to indicate that loading has completed */\r\n                    this.isLoading = false;\r\n\r\n                    /* Execute the success callback if provided */\r\n                    if (successCallback) {\r\n                        successCallback(item);\r\n                    }\r\n                },\r\n                /* Handle any errors that occur during the loading process */\r\n                error: (error) => {\r\n                    /* Set loading state to false to indicate that loading has completed with error */\r\n                    this.isLoading = false;\r\n\r\n                    /* Parse the error internally */\r\n                    this.parseErrors(error);\r\n\r\n                    /* Execute the error callback if provided */\r\n                    if (errorCallback) {\r\n                        errorCallback(error);\r\n                    }\r\n\r\n                    /* If the error indicates that the item was not found and initializeDefaultOnEmpty is true, initialize a new form instance */\r\n                    const isNotFound = error?.status === 404 || (typeof error === 'string' && error.includes('404'));\r\n\r\n                    /* If the error status is 404 (Not Found) and initializeDefaultOnEmpty is true, initialize a new form instance */\r\n                    if (this.initializeDefaultOnEmpty && isNotFound) {\r\n                        /* Set the form to edit mode to allow creating a new item */\r\n                        this.isEditMode = false;\r\n\r\n                        /* Initialize a new item with default values and the provided ID */\r\n                        this.item = Object.assign(this.newInstance(), <TEntity>{ id: this.id });\r\n\r\n                        /* Build the form for the new item */\r\n                        this.buildForm();\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Loads an item by ID asynchronously.\r\n     * \r\n     * @param headers - Optional HTTP headers to include in the request.\r\n     * @param handleError - Indicates whether to automatically handle and parse errors (default: true).\r\n     * @param observeResponse - If true, the full HTTP response will be observed instead of just the body (default: false).\r\n     * @returns An Observable of the loaded entity.\r\n     */\r\n    public loadItemAsync(\r\n        headers?: Record<string, string>,\r\n        handleError: boolean = true,\r\n        observeResponse: boolean = true\r\n    ): Observable<{ entity: TEntity, permissions: Permission }> {\r\n        if (this.id) {\r\n            /* Merge provided headers with default 'Disable-Cache' header */\r\n            const mergedHeaders = Object.assign({ 'Disable-Cache': 'Yes' }, headers || {});\r\n\r\n            /* Perform the GET request to load the entity */\r\n            return this.service.get(this.id, Object.assign(this.query || {}, {\r\n                includes: this.includes?.length ? this.includes : this.updateIncludes,\r\n                projection: this.projection?.join(','),\r\n                observe: 'response'\r\n            }), mergedHeaders, handleError, observeResponse).pipe(\r\n                map((response) => {\r\n                    /* Read permissions from the http headers */\r\n                    const permissions = response?.headers?.get('Permissions')?.split(';') ?? [];\r\n\r\n                    return {\r\n                        entity: Object.assign(this.newInstance(), response.body as TEntity),\r\n                        permissions: new Permission({\r\n                            canCreate: permissions.includes('Create'),\r\n                            canRead: permissions.includes('Read'),\r\n                            canUpdate: permissions.includes('Update'),\r\n                            canDelete: permissions.includes('Delete'),\r\n                        }),\r\n                    }\r\n                }),\r\n                tap(x => {\r\n                    /* Set the loaded item */\r\n                    this.item = Object.assign(this.newInstance(), <TEntity>x.entity);\r\n\r\n                    /* Check if the user has permission to create, read, update, and delete */\r\n                    this.canCreate ||= x.permissions.canCreate;\r\n                    this.canRead ||= x.permissions.canRead;\r\n                    this.canUpdate ||= x.permissions.canUpdate;\r\n                    this.canDelete ||= x.permissions.canDelete;\r\n\r\n                    /* Build the form */\r\n                    this.buildForm();\r\n\r\n                    /* Trigger event afterItemLoaded */\r\n                    this.onAfterItemLoaded();\r\n                })\r\n            );\r\n        }\r\n\r\n        return new Observable();\r\n    }\r\n\r\n    /**\r\n     * Saves data into the database.\r\n     * This method validates the form, checks if it's valid, and sends data to the server to either update or create a new record.\r\n     * @param action The save action to perform.\r\n     * @param form The form to validate and save.\r\n     */\r\n    public save(action: SaveAction = SaveAction.SaveAndClose, form?: NgForm | FormGroup): void {\r\n        /* Validate the form data before proceeding */\r\n        this.validateForm(form);\r\n\r\n        /* Ensure that the form reference is set and validated */\r\n        form = this.form || form;\r\n\r\n        /* Exit if the form is invalid */\r\n        if (form && !this.isFormValid(form)) {\r\n            return;\r\n        }\r\n\r\n        /* Set a flag to prevent duplicate form submissions */\r\n        this.isSaving = true;\r\n\r\n        /* If in edit mode, update the record */\r\n        if (this.isEditMode) {\r\n            /* The data has not changed? */\r\n            if (form && form.pristine) {\r\n                this.onAfterSubmit(action);\r\n                return;\r\n            }\r\n\r\n            /* Send the data to the server */\r\n            this.update({ params: Utils.toHttpParams({ includes: this.updateIncludes }) }).subscribe({\r\n                next: (response) => {\r\n                    /* Apply saved data to the form */\r\n                    this.onAfterSubmit(action, response);\r\n\r\n                    /* If the user clicks 'apply' reload the page */\r\n                    if (action == SaveAction.SaveAndEdit) {\r\n                        if (this.reload.observed) {\r\n                            this.reload.emit(this.formValue);\r\n                        } else {\r\n                            this.loadItem();\r\n                        }\r\n                    }\r\n                },\r\n\r\n                /* Process any errors from the server response */\r\n                error: (error) => this.parseErrors(error)\r\n            });\r\n        }\r\n        /* Otherwise, create a new one */\r\n        else {\r\n            /* Send the data to the server */\r\n            this.create<ApiResponse<TEntity>>().subscribe({\r\n                next: (response) => {\r\n                    this.id = response?.value?.id;\r\n                    this.onAfterSubmit(action, response);\r\n\r\n                    if (form) {\r\n                        Object.keys(form.controls).forEach(key => {\r\n                            let ctr = form!.controls[key];\r\n                            ctr.markAsPristine();\r\n                            ctr.markAsUntouched();\r\n                            ctr.updateValueAndValidity();\r\n                        });\r\n                    }\r\n                },\r\n\r\n                /* Process any errors from the server response */\r\n                error: (error) => this.parseErrors(error)\r\n            });\r\n        }\r\n\r\n        /* Detect changes */\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Saves data and navigates to the edit view.\r\n     */\r\n    public apply(): void {\r\n        this.save(SaveAction.SaveAndEdit);\r\n    }\r\n\r\n    /**\r\n     * Deletes the current record.\r\n     * This method shows a confirmation dialog and deletes the record if the user confirms.\r\n     * @param httpHeaders Optional HTTP headers to include in the delete request.\r\n     */\r\n    public delete(httpHeaders?: HttpHeaders): void {\r\n        this.showDeleteItemDialog().subscribe((accept: boolean) => {\r\n            if (accept && this.id) {\r\n                this.service.delete(this.id!, undefined, { headers: httpHeaders ?? this.toHttpHeaders({ 'Show-Message': 'yes' }) })\r\n                    .subscribe(response => {\r\n                        this.back();\r\n                    }, error => {\r\n                        console.debug(error);\r\n                    });\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Initializes the form.\r\n     * This method sets up the form by extracting query parameters, setting the entity ID, and building the form.\r\n     */\r\n    protected init(): void {\r\n        /* Get the entity ID from the query */\r\n        if (!this.id && !this.item) {\r\n            /* Assign query params into query object */\r\n            let ignoredParams: string[] = ['id', 'returnurl', 'panelId'];\r\n            Object.assign(this.query,\r\n                this.sanitizeObject(this.route.snapshot.params || {}, ...ignoredParams),\r\n                this.sanitizeObject(this.route.snapshot.data[\"query\"] || {}, ...ignoredParams),\r\n                this.sanitizeObject(this.route.snapshot.queryParams || {}, ...ignoredParams)\r\n            );\r\n\r\n            /* Get id from the url */\r\n            let id = <any>this.route.snapshot.paramMap.get('id');\r\n            if (id > 0) {\r\n                this.id = id;\r\n            } else if (!this.id && this.route.snapshot?.data[\"id\"]) {\r\n                this.id = this.route.snapshot?.data[\"id\"];\r\n            }\r\n\r\n            this.onAfterSetId();\r\n        }\r\n\r\n        /* Create a new instance of the TEntity */\r\n        if (!this.isEditMode && !this.form) {\r\n            this.item = Object.assign(this.newInstance(), this.item || {}, this.query || {});\r\n            this.buildForm();\r\n        }\r\n\r\n        /* Set panel ID from query */\r\n        this.subtitle ||= this.route.snapshot?.data[\"subtitle\"];\r\n    }\r\n\r\n    /**\r\n     * Builds the form fields.\r\n     * This method constructs form fields based on the entity's form definition and includes necessary navigation and menu items.\r\n     */\r\n    protected buildFields(): void {\r\n        if (this.formDefinition) {\r\n            return;\r\n        }\r\n\r\n        /* Get form definition */\r\n        this.formDefinition = getFormDefinition(this.newInstance(), this.form as FormGroup, this);\r\n\r\n        /* Set includes from form definition, if any */\r\n        this.formDefinition?.includes?.forEach(x => this.include(x.entity, x.update));\r\n\r\n        /* Add toolbar menu items, if any */\r\n        if (this.formDefinition?.toolbarMenuItems?.length) {\r\n            this.toolbarMenuItems ??= [];\r\n            this.toolbarMenuItems = this.toolbarMenuItems.concat(...this.formDefinition?.toolbarMenuItems);\r\n            this.toolbarMenuItems.forEach((x, i) => x.index ??= i);\r\n        }\r\n\r\n        /* \r\n        Assign a value to `this.deletable` only if it is currently falsy. \r\n        Use the `deletable` property from `formDefinition`, defaulting to `false` if undefined.\r\n         */\r\n        this.deletable &&= (this.formDefinition.deletable ?? false);\r\n\r\n        /* Create the form fields using the entity type */\r\n        this.fieldGroups = this.formDefinition?.fieldGroups?.filter(x => !x.hidden);\r\n\r\n        /* Add list menu items */\r\n        this.addToolbarMenuItems();\r\n    }\r\n\r\n    /**\r\n     * Builds a new form.\r\n     * This method should be implemented to construct the form for the specific entity.\r\n     */\r\n    protected buildForm(): void { }\r\n\r\n    /**\r\n     * Validates the form.\r\n     * This method sets the form as submitted, updates its validity, and optionally logs debug information.\r\n     * @param form The form to validate.\r\n     */\r\n    public validateForm(form?: NgForm | FormGroup): void {\r\n        var form = form || this.form;\r\n\r\n        /* Set the form as submitted */\r\n        if (form && form instanceof FormGroup) {\r\n            /* Set form as submitted */\r\n            (form as any)['submitted'] = true;\r\n\r\n            /* Update value and validity */\r\n            form.updateValueAndValidity();\r\n\r\n            /* Check if the form is valid and show error messages if not */\r\n            this.isFormValid(form);\r\n        } else {\r\n            /* Print some debug information */\r\n            this.debugForm(form);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if the form is valid.\r\n     * This method validates the form, marks invalid controls, and shows error messages if any.\r\n     * @param form The form to check for validity.\r\n     * @returns A boolean indicating whether the form is valid.\r\n     */\r\n    public isFormValid(form?: NgForm | FormGroup | FormArray): boolean {\r\n        /* Print some debug information */\r\n        this.debugForm(form);\r\n\r\n        if (form && !form.valid) {\r\n            /* Mark invalid controls recursively as dirty and touched */\r\n            this.markControlsAsInvalid(<AbstractControl>form);\r\n\r\n            /* Show error messages */\r\n            (async () => {\r\n                /* Wait until 'mat-error' is displayed in the DOM */\r\n                await new Promise(y => setTimeout(y, 250));\r\n\r\n                const errors = new Array<string>();\r\n                this.collectErrors(<AbstractControl>form, errors);\r\n\r\n                /* Build error message: show first 3 specific errors or a generic one */\r\n                const message = errors.length\r\n                    ? errors.slice(0, 3).join('\\n')\r\n                    : $localize`:@@snackbar.error.required-fields:All fields marked with an asterisk (*) are required.`;\r\n\r\n                /* Show a notice */\r\n                this.snackBarService.open(message, 'Ok', { duration: 3000, panelClass: ['error'] });\r\n\r\n                /* Call the onAfterFormInvalid hook with the collected errors */\r\n                this.onAfterFormInvalid(errors);\r\n            })();\r\n\r\n            return false;\r\n        }\r\n\r\n        /* Call the onAfterFormValid hook if the form is valid */\r\n        this.onAfterFormValid();\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Recursively marks controls as invalid and touched.\r\n     * This method traverses the form controls and marks any invalid controls as dirty and touched to trigger validation messages in the UI.\r\n     * @param container The form group, array, or control to traverse.\r\n     */\r\n    protected markControlsAsInvalid(container: FormGroup | FormArray | AbstractControl): void {\r\n        if (container instanceof FormGroup || container instanceof FormArray) {\r\n            Object.keys(container.controls).forEach(key => {\r\n                const control = (container.controls as any)[key];\r\n                this.markControlsAsInvalid(control);\r\n            });\r\n        } else {\r\n            if (!container.valid) {\r\n                this.invalidateControl(container);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Recursively parses the form to collect error messages from the DOM.\r\n     * This method traverses the form controls and attempts to find associated error messages in the DOM, collecting them into an array.\r\n     * @param container The form group, array, or control to traverse.\r\n     * @param errors The array to collect error messages into.\r\n     */\r\n    protected collectErrors(container: FormGroup | FormArray | AbstractControl, errors: string[]): void {\r\n        if (container instanceof FormGroup || container instanceof FormArray) {\r\n            Object.keys(container.controls).forEach(key => {\r\n                const control = (container.controls as any)[key];\r\n                if (!control.valid) {\r\n                    /* Attempt to find the DOM element by its formControlName or ID */\r\n                    const element = (control as any)?.nativeElement;\r\n                    if (element) {\r\n                        const error = this.getElementError(element as HTMLElement);\r\n                        if (error && !errors.includes(error)) {\r\n                            errors.push(error);\r\n                        }\r\n                    }\r\n\r\n                    /* Dive deeper for nested groups/arrays */\r\n                    this.collectErrors(control, errors);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Resets form controls.\r\n     * This method marks all controls in the form as pristine, untouched, and updates their validity.\r\n     * @param form The form to reset.\r\n     */\r\n    public resetForm(form: NgForm): void {\r\n        if (!form) {\r\n            return;\r\n        }\r\n\r\n        Object.keys(form.controls).forEach(key => {\r\n            let ctr = form.controls[key];\r\n            ctr.markAsPristine();\r\n            ctr.markAsUntouched();\r\n            ctr.updateValueAndValidity();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Manually triggers the formInitialized event.\r\n     * Useful when a parent component needs to access the form after asynchronous data has loaded.\r\n     */\r\n    public triggerFormInitialized(): void {\r\n        if (this.form) {\r\n            this.formInitialized?.emit(this.form);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Invalidates controls recursively.\r\n     * This method marks all controls in the group as dirty and touched if they are invalid.\r\n     * @param control The control or group of controls to invalidate.\r\n     */\r\n    protected invalidateControl(control: AbstractControl): void {\r\n        /* Check the control against null */\r\n        if (!control) {\r\n            return;\r\n        }\r\n\r\n        /* Check if the control is a group */\r\n        let formGroup = control as FormGroup;\r\n        if (formGroup?.controls) {\r\n            Object.keys(formGroup.controls)\r\n                .filter(x => !formGroup.controls[x].valid)\r\n                .forEach(x => this.invalidateControl(formGroup.controls[x]));\r\n        } else {\r\n            control.markAsDirty();\r\n            control.markAsTouched();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Shows form errors.\r\n     * This method logs form control errors to the console recursively if debugging is enabled.\r\n     * @param form The form or control container to debug.\r\n     * @param path The current path in the form hierarchy (used for recursive logging).\r\n     */\r\n    protected debugForm(form?: NgForm | FormGroup | FormArray | AbstractControl, path: string = 'root'): void {\r\n        /* Check if debugging is enabled and form exists */\r\n        if (form && this.debug) {\r\n\r\n            /* If at the root, log the entire form object once */\r\n            if (path === 'root') {\r\n                console.log('Form:', form);\r\n            }\r\n\r\n            /* Handle FormGroups and FormArrays which contain controls */\r\n            if (form instanceof FormGroup || form instanceof FormArray || (form as any).controls) {\r\n                const controls = (form as any).controls;\r\n\r\n                Object.keys(controls).forEach(key => {\r\n                    const control = controls[key];\r\n                    const currentPath = `${path} -> ${key}`;\r\n\r\n                    /* Get errors for the current control */\r\n                    const controlErrors: ValidationErrors | null = control.errors;\r\n\r\n                    if (controlErrors != null) {\r\n                        Object.keys(controlErrors).forEach(keyError => {\r\n                            console.log(`[DEBUG] Path: ${currentPath}, keyError: ${keyError}, value:`, controlErrors[keyError]);\r\n                        });\r\n                    }\r\n\r\n                    /* Recursively call debugForm for nested groups or arrays */\r\n                    this.debugForm(control, currentPath);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds toolbar menu items.\r\n     * This method adds the 'Delete' menu item to the toolbar if the entity is deletable.\r\n     */\r\n    protected addToolbarMenuItems(): void {\r\n        /* Add 'Delete' menu item */\r\n        if (this.deletable) {\r\n            this.toolbarMenuItems.push({\r\n                id: 'delete',\r\n                title: $localize`:@@delete:Delete`,\r\n                icon: 'delete_forever',\r\n                iconClass: 'tc-orange-800',\r\n                event: () => this.delete(),\r\n                disable: () => !this.id,\r\n                hide: () => !this.canDeleteItem(),\r\n                index: 1000\r\n            });\r\n        }\r\n\r\n        if (this.toolbarMenuItems.length) {\r\n            /* Sort the menu items by index */\r\n            Utils.sortArray(this.toolbarMenuItems, 'index');\r\n\r\n            /* Add the toolbar menu items to the the toolbar actions */\r\n            this.toolbarActions.push({ id: 'more', icon: 'more_vert', items: this.toolbarMenuItems });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Loads the previous URL in the history list.\r\n     * This method navigates back to the previous URL or performs specific actions based on the save action.\r\n     * @param action The save action that determines the navigation behavior.\r\n     */\r\n    public back(action: SaveAction = SaveAction.SaveAndClose): void {\r\n        if (this.reload.observed) {\r\n            /* If there are observers for the reload event, emit the current form value */\r\n            this.reload.emit(this.formValue);\r\n        } else {\r\n            /* No observers, proceed with navigation logic */\r\n            if (action == SaveAction.SaveAndClose && this.returnUrl) {\r\n                /* Navigate to the return URL if action is SaveAndClose and returnUrl is set */\r\n                this.navigateToReturnUrl();\r\n            } else {\r\n                /* No returnUrl, continue with other actions */\r\n                if (action == SaveAction.SaveAndClose) {\r\n                    /* Go back to the previous page in history */\r\n                    this.location.back();\r\n                } else if (action == SaveAction.SaveAndEdit && parseInt(this.id?.toString() ?? '0') > 0) {\r\n                    /* For SaveAndEdit action with a valid ID */\r\n                    if (!this.currentBaseRoute?.endsWith('/add')) {\r\n                        /* Reload the page if the current route does not end with '/add' */\r\n                        this.reloadPage();\r\n                    } else {\r\n                        /* Navigate to the edit route */\r\n                        this.router.navigate([`${this.addSaveAndEditRoute}${this.id}`], { relativeTo: this.route });\r\n\r\n                        /* Replace the current history entry to remove this page from the history */\r\n                        this.location.replaceState(this.router.createUrlTree([`${this.addSaveAndEditRoute}${this.id}`], { relativeTo: this.route }).toString());\r\n                    }\r\n                } else if (action == SaveAction.SaveAndNew) {\r\n                    /* Handle SaveAndNew action */\r\n                    this.afterReload();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the return URL.\r\n     * This method sets the return URL and updates the list route accordingly.\r\n     * @param returnUrl The URL to return to after the current action is complete.\r\n     */\r\n    protected override  setReturnUrl(returnUrl: string): void {\r\n        super.setReturnUrl(returnUrl);\r\n        this.listRoute = this.returnUrl || this.listRoute;\r\n    }\r\n\r\n    /**\r\n     * Creates a new instance of TEntity.\r\n     * This method initializes a new entity using the provided constructor.\r\n     * @param init Optional partial initialization object.\r\n     * @returns A new instance of TEntity.\r\n     */\r\n    protected newInstance(init?: Partial<TEntity>): TEntity {\r\n        return new this.entityCtor(init);\r\n    }\r\n\r\n    /**\r\n     * Creates the entity.\r\n     * This method sends a request to create a new entity on the server.\r\n     * @param httpOptions Optional HTTP options for the request.\r\n     * @param httpHeaders Optional HTTP headers for the request.\r\n     * @param path A relative path to the action\r\n     * @returns An Observable of the created TEntity.\r\n     */\r\n    protected create<TEntity>(httpOptions?: Object, httpHeaders?: HttpHeaders, path?: string): Observable<TEntity> {\r\n        this.onBeforeCreate();\r\n        return this.service.create<TEntity>(\r\n            this.formValue,\r\n            path,\r\n            Object.assign(httpOptions || {}, { headers: httpHeaders ?? this.toHttpHeaders({ 'Show-Message': 'yes' }) }),\r\n            false\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Updates the entity.\r\n     * This method sends a request to update an existing entity on the server.\r\n     * @param httpOptions Optional HTTP options for the request.\r\n     * @param httpHeaders Optional HTTP headers for the request.\r\n     * @returns An Observable of the updated TEntity.\r\n     */\r\n    protected update(httpOptions?: Object, httpHeaders?: HttpHeaders): Observable<TEntity> {\r\n        this.onBeforeUpdate();\r\n        return this.service.update(this.id!,\r\n            Object.assign(this.item!, this.formValue),\r\n            undefined,\r\n            Object.assign(httpOptions || {}, { headers: httpHeaders ?? this.toHttpHeaders({ 'Show-Message': 'yes' }), }),\r\n            false\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Includes specified navigations.\r\n     * This method adds specified navigation properties to the includes array,\r\n     * optionally adding them to the updateIncludes array as well.\r\n     * @param inc The navigation property to include.\r\n     * @param update Whether to include in updateIncludes array.\r\n     */\r\n    protected include(inc: string, update: boolean = false) {\r\n        this.includes.push(inc);\r\n        if (update) {\r\n            this.updateIncludes.push(inc);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if the item is deletable.\r\n     * This method determines if the current item can be deleted based on its properties.\r\n     * @returns True if the item can be deleted, false otherwise.\r\n     */\r\n    protected canDeleteItem(): boolean { return this.canDelete && (!this.item?.hasOwnProperty('deletable') || (this.item as any)['deletable']); }\r\n\r\n    /**\r\n     * Event emitted when the ID is set.\r\n     * This method triggers the loading of the item when the ID is set.\r\n     */\r\n    protected onAfterSetId(): void {\r\n        if (this.id) {\r\n            this.loadItem();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the selected step has changed.\r\n     * This method handles actions to be taken when the stepper selection changes.\r\n     * @param $event The stepper selection event.\r\n     */\r\n    protected onAfterStepChange($event: StepperSelectionEvent): void { }\r\n\r\n    /**\r\n     * Sets the selected step in the stepper based on the URL hash.\r\n     * Marks all previous steps as completed.\r\n     */\r\n    protected selectStepBasedOnUrlHash(): void {\r\n        /* Ensure we are not in edit mode, and that both the stepper and URL hash are available */\r\n        if (!this.isEditMode && this.matStepper && this.urlHash) {\r\n\r\n            /* Find the step that matches the state from the URL hash */\r\n            const matchedStep = this.matStepper.steps.find((step) => step.state === this.urlHash);\r\n\r\n            if (matchedStep) {\r\n                /* Get the index of the matched step */\r\n                const matchedIndex = this.matStepper.steps.toArray().indexOf(matchedStep);\r\n\r\n                /* Mark all previous steps as completed */\r\n                this.matStepper.steps.forEach((step, index) => {\r\n                    if (index < matchedIndex) {\r\n                        step.completed = true;\r\n                    }\r\n                });\r\n\r\n                /* Set the selected step based on the matched state */\r\n                this.matStepper.selectedIndex = matchedIndex;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the entity has been loaded.\r\n     * This method handles actions to be taken after the entity is loaded.\r\n     */\r\n    protected onAfterItemLoaded(): void { }\r\n\r\n    /**\r\n     * Event emitted before the form is built.\r\n     * This method allows performing operations before the form is constructed.\r\n     */\r\n    protected onBeforeFormBuild(): void { }\r\n\r\n    /**\r\n     * Event emitted when the form has been built.\r\n     * This method handles actions to be taken after the form is constructed,\r\n     * such as disabling form controls if the form is set to be disabled.\r\n     */\r\n    protected onAfterFormBuild(): void {\r\n        /* Emit form initialized event */\r\n        this.triggerFormInitialized();\r\n\r\n        /* Disable the form if the 'disabled' property is set */\r\n        if (this.form && this.disabled) {\r\n            Object.keys(this.form.controls).forEach(key => {\r\n                let control: AbstractControl = this.form!.controls[key];\r\n                control?.disable({ emitEvent: false });\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the form is invalid.\r\n     * This method allows performing operations when the form is found to be invalid.\r\n     * @param errors The validation errors found in the form.\r\n     */\r\n    protected onAfterFormInvalid(errors: ValidationErrors | null): void { }\r\n\r\n    /**\r\n     * Event emitted when the form is valid.\r\n     * This method allows performing operations when the form is found to be valid.\r\n     */\r\n    protected onAfterFormValid(): void { }\r\n\r\n    /**\r\n     * Event emitted when the entity has been created.\r\n     */\r\n    protected onBeforeCreate(): void { }\r\n\r\n    /**\r\n     * Event emitted when the entity has been updated.\r\n     */\r\n    protected onBeforeUpdate(): void { }\r\n\r\n    /**\r\n     * Called before data submission.\r\n     * This method allows performing operations before submitting data.\r\n     */\r\n    protected beforeSubmit(_: SaveAction = SaveAction.SaveAndClose): void { }\r\n\r\n    /**\r\n     * Event emitted after data submission.\r\n     * This method handles post-submission actions such as resetting the saving state,\r\n     * updating the change detector, and navigating back based on the save action.\r\n     * @param action The save action taken (e.g., SaveAndClose, SaveAndNew).\r\n     * @param response The response received after submission.\r\n     */\r\n    protected onAfterSubmit(action: SaveAction = SaveAction.SaveAndClose, response: any = null): void {\r\n        /* Reset the saving flag once data is successfully sent */\r\n        this.isSaving = false;\r\n        this.changeDetectorRef.detectChanges();\r\n        this.back(action);\r\n    }\r\n\r\n    /**\r\n     * Called after the page is reloaded.\r\n     * This method reinitializes the item with a new instance and applies any query parameters.\r\n     */\r\n    protected afterReload(): void {\r\n        this.item = Object.assign(this.newInstance(), this.query);\r\n    }\r\n\r\n    /**\r\n     * Sets focus to the first input element.\r\n     * Ensures the first input element in the form is focused for user convenience.\r\n     */\r\n    protected focus(): void {\r\n        if (this.input && this.input.first && this.input.first.nativeElement) {\r\n            this.input.first.nativeElement.focus();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the error message for a given native element.\r\n     * This method navigates through the DOM structure to find error messages associated with form fields.\r\n     * @param nativeElement The DOM element to check for errors.\r\n     * @returns The error message associated with the element, or undefined if no error is found.\r\n     */\r\n    protected getElementError(nativeElement: any): string | undefined {\r\n        /* Get parent element 'mat-form-field' */\r\n        var matFormField = nativeElement?.closest('mat-form-field');\r\n        if (!matFormField) {\r\n            return undefined;\r\n        }\r\n\r\n        /* Get child element 'mat-error' */\r\n        var matErrors = matFormField.querySelectorAll('mat-error');\r\n        if (!matErrors) {\r\n            return undefined;\r\n        }\r\n\r\n        /* Get child element 'mat-label' */\r\n        var matLabel = matFormField.querySelector('mat-label');\r\n        if (!matLabel) {\r\n            return undefined;\r\n        }\r\n\r\n        /* Get error texts */\r\n        var errorsArray = Array.prototype.slice.call(matErrors)\r\n            ?.filter((x: any) => x.textContent)\r\n            ?.map((x: any) => x.textContent);\r\n\r\n        return `${matLabel.textContent}: ${errorsArray?.join(', ')}`;\r\n    }\r\n\r\n    /**\r\n     * Responds to user-initiated keyboard events.\r\n     * This method listens for specific key combinations and triggers save actions or form cancellation.\r\n     * @param event The keyboard event triggered by the user.\r\n     */\r\n    @HostListener('document:keydown', ['$event'])\r\n    public handleKeyboardEvent(event: KeyboardEvent) {\r\n        if (event.ctrlKey || event.metaKey) {\r\n            switch (event.key) {\r\n                case 's':\r\n                    event.preventDefault();\r\n                    this.save(SaveAction.SaveAndClose);\r\n                    break;\r\n\r\n                case 'd':\r\n                    event.preventDefault();\r\n                    this.save(SaveAction.SaveAndNew);\r\n                    break;\r\n\r\n                case 'e':\r\n                    event.preventDefault();\r\n                    this.save(SaveAction.SaveAndEdit);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        /* Cancel the form if the user presses the ESC key */\r\n        if (event.keyCode == 27) {\r\n            this.back();\r\n        }\r\n    }\r\n}","import { ChangeDetectorRef, Directive, Input, Type } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { IEntity } from '../../common/models/entity';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { GenericFormBaseComponent } from './generic-form-base';\r\n\r\n// @dynamic\r\n@Directive()\r\nexport abstract class GenericFormComponent<TEntity extends IEntity, TService extends GenericService<TEntity>> extends GenericFormBaseComponent<TEntity, TService> {\r\n\r\n\t/**\r\n\t * Form group\r\n\t */\r\n\t@Input()\r\n\tpublic override get form(): NgForm { return super.form as NgForm };\r\n\tpublic override set form(form: NgForm) { super.form = form; }\r\n\r\n\t/**\r\n\t * Gets form value\r\n\t */\r\n\tpublic get formValue(): TEntity | any { return this.item; };\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param service \r\n\t */\r\n\tconstructor(\r\n\t\tpublic override entityCtor: Type<TEntity>,\r\n\t\tprotected override service: TService,\r\n\t\tprotected override route: ActivatedRoute,\r\n\t\tprotected override changeDetectorRef: ChangeDetectorRef\r\n\t) {\r\n\t\tsuper(entityCtor, service, route, changeDetectorRef);\r\n\t\tthis.listRoute = this.addSaveAndCloseRoute;\r\n\t}\r\n}","import { ChangeDetectorRef, Directive, inject, Input, Type } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { IEntity } from '../../common/models/entity';\r\nimport { FormBuilderConfiguration } from '../../form-validators/models';\r\nimport { PropValidationConfig } from '../../form-validators/models/prop-validation-config';\r\nimport { RxFormBuilder, RxFormGroup } from '../../form-validators/public_api';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { IGenericReactiveFormBaseComponent } from '../interfaces/igeneric-reactive-form-base';\r\nimport { GenericFormBaseComponent } from './generic-form-base';\r\n\r\n// @dynamic\r\n@Directive()\r\nexport abstract class GenericReactiveFormComponent<TEntity extends IEntity, TService extends GenericService<TEntity>> extends GenericFormBaseComponent<TEntity, TService> implements IGenericReactiveFormBaseComponent<TEntity> {\r\n\r\n    /**\r\n     * Form group\r\n     */\r\n    @Input()\r\n    public override  get form(): FormGroup { return super.form as FormGroup };\r\n    public override  set form(form: FormGroup | undefined) { super.form = form; }\r\n\r\n    /**\r\n     * Form builder\r\n     */\r\n    protected formBuilder: RxFormBuilder = inject(RxFormBuilder);\r\n\r\n    /**\r\n     * formBuilderConfig: FormBuilderConfiguration\r\n     */\r\n    protected formBuilderConfig: FormBuilderConfiguration = new FormBuilderConfiguration();\r\n\r\n    /**\r\n     * Gets form value\r\n     */\r\n    public get formValue(): TEntity | any { return this.form?.getRawValue(); };\r\n\r\n    /**\r\n     * formValidation: any\r\n     */\r\n    public formValidation?: { [key: string]: PropValidationConfig };\r\n\r\n    /**\r\n     * buildFieldGroups: boolean\r\n     * Builds field groups, if true\r\n     */\r\n    public buildFieldGroups: boolean = false;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param service \r\n     */\r\n    constructor(\r\n        public override entityCtor: Type<TEntity>,\r\n        protected override service: TService,\r\n        protected override route: ActivatedRoute,\r\n        protected override changeDetectorRef: ChangeDetectorRef\r\n    ) {\r\n        super(entityCtor, service, route, changeDetectorRef);\r\n    }\r\n\r\n    /**\r\n     * Builds a new form\r\n     */\r\n    protected override buildForm(): void {\r\n        this.onBeforeFormBuild();\r\n\r\n        /* Add dynamic validation */\r\n        if (this.formValidation) {\r\n            this.formBuilderConfig.dynamicValidation = this.formValidation;\r\n        }\r\n\r\n        /* Ensure that this.item is defined before proceeding */\r\n        if (!this.item) {\r\n            throw new Error('Item must be defined before building the form.');\r\n        }\r\n\r\n        /* Create the form */\r\n        this.form = <RxFormGroup>this.formBuilder.formGroup(this.item, this.formBuilderConfig);\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the form has built.\r\n     */\r\n    protected override onAfterFormBuild(): void {\r\n        super.onAfterFormBuild();\r\n\r\n        /* Build the form fields */\r\n        if (this.buildFieldGroups && !this.fieldGroups) {\r\n            this.buildFields();\r\n            if (this.debug) {\r\n                console.log('Field groups', this.fieldGroups);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Shows form errors\r\n     * @param form \r\n     */\r\n    protected override debugForm(form?: FormGroup): void {\r\n        super.debugForm(form);\r\n        console.log((this.form as RxFormGroup).getErrorSummary(false));\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { CanDeactivate } from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { CanComponentDeactivate } from \"../components/can-component-deactivate\";\r\n\r\n/* Injectable guard registered globally in the application */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ConfirmExitGuard implements CanDeactivate<CanComponentDeactivate> {\r\n\r\n    /**\r\n     * Determines whether the current component allows navigation away from it.\r\n     * Delegates to the component's canDeactivate method if available.\r\n     *\r\n     * @param component The component that may be deactivated\r\n     * @returns A boolean, Promise, or Observable indicating if deactivation is allowed\r\n     */\r\n    canDeactivate(component: CanComponentDeactivate): Observable<boolean> | Promise<boolean> | boolean {\r\n        /* If the component implements canDeactivate, call it; otherwise, allow deactivation by default */\r\n        return component.canDeactivate ? component.canDeactivate() : true;\r\n    }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { AppSetting } from '../../common/models/app-setting';\r\n\r\n/**\r\n * Pass untouched request through to the next request handler.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class BaseInterceptor implements HttpInterceptor {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(private appSetting: AppSetting, private snackBar: MatSnackBar) { }\r\n\r\n\t/**\r\n\t * Intercepts an outgoing `HttpRequest` and optionally transforms it or the\r\n\t * response.\r\n\t *\r\n\t * Typically an interceptor will transform the outgoing request before returning\r\n\t * `next.handle(transformedReq)`. An interceptor may also choose to transform the\r\n\t * response event stream by applying additional Rx operators.\r\n\t *\r\n\t * In rare cases, an interceptor may completely handle the request itself,\r\n\t * creating a new event stream and bypassing `next.handle()`. This is allowed,\r\n\t * but it means that other interceptors will not be triggered.\r\n\t *\r\n\t * It's also possible, though rare, for an interceptor to return multiple responses\r\n\t * on the event stream for a single request.\r\n\t */\r\n\tpublic intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\r\n\t\t/* Clone the request and set the base URL if it's not already an absolute URL */\r\n\t\tconst authReq = req.clone({\r\n\t\t\t/* Check if the URL is already absolute or starts with './assets' */\r\n\t\t\turl: req.url.startsWith('http') || req.url.startsWith('./assets')\r\n\t\t\t\t? req.url : `${this.appSetting.apiUrl}${req.url}`,\r\n\t\t\t/* Add a custom header for GET requests */\r\n\t\t\theaders: req.method == 'GET' ? req.headers.set('CheckIn', 'Yes') : req.headers\r\n\t\t});\r\n\r\n\t\t/* Send the cloned request with added headers to the next handler in the chain */\r\n\t\treturn next.handle(authReq).pipe(\r\n\t\t\ttap(\r\n\t\t\t\t/* Handle the response */\r\n\t\t\t\tevent => {\r\n\t\t\t\t\tif (event instanceof HttpResponse) {\r\n\t\t\t\t\t\t/* Check for specific headers in the response */\r\n\t\t\t\t\t\tif (req.headers.get('Show-Message')?.trim().toLowerCase() == 'yes') {\r\n\t\t\t\t\t\t\t/* Show success messages for different types of requests */\r\n\t\t\t\t\t\t\tif (req.method == 'POST') {\r\n\t\t\t\t\t\t\t\tthis.snackBar.open($localize`:@@snackbar.send.success:Data sent successfully.`, undefined, {\r\n\t\t\t\t\t\t\t\t\tduration: 3000,\r\n\t\t\t\t\t\t\t\t\tpanelClass: ['primary']\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (['PUT', 'PATCH'].indexOf(req.method) >= 0) {\r\n\t\t\t\t\t\t\t\tthis.snackBar.open($localize`:@@snackbar.update.success:Changes saved successfully.`, undefined, {\r\n\t\t\t\t\t\t\t\t\tduration: 3000,\r\n\t\t\t\t\t\t\t\t\tpanelClass: ['primary']\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (['DELETE'].indexOf(req.method) >= 0) {\r\n\t\t\t\t\t\t\t\tthis.snackBar.open($localize`:@@snackbar.delete.success:Record(s) deleted successfully.`, undefined, {\r\n\t\t\t\t\t\t\t\t\tduration: 3000,\r\n\t\t\t\t\t\t\t\t\tpanelClass: ['primary']\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Show warnings from response headers if available */\r\n\t\t\t\t\t\t\tvar warning = event.headers.get(\"Warning\");\r\n\t\t\t\t\t\t\tif (warning) {\r\n\t\t\t\t\t\t\t\t/* First, replace the plus signs (+) with spaces */\r\n\t\t\t\t\t\t\t\tconst withSpaces = warning.replace(/\\+/g, ' ');\r\n\r\n\t\t\t\t\t\t\t\t/* Then, decode the URL-encoded characters */\r\n\t\t\t\t\t\t\t\tconst decodedString = decodeURIComponent(withSpaces);\r\n\r\n\t\t\t\t\t\t\t\t/* Finally, show the decoded warning message */\r\n\t\t\t\t\t\t\t\tthis.snackBar.open(decodedString, \"OK\", { duration: 6000, panelClass: ['warn'] });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/* Handle errors */\r\n\t\t\t\terror => {\r\n\t\t\t\t\t/* Check if the 'Show-Message' header is set to 'yes' */\r\n\t\t\t\t\tif (req.headers.get('Show-Message')?.trim().toLowerCase() != 'yes') {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Handle validation errors for status code 400 (Bad Request) */\r\n\t\t\t\t\tif (error.status == 400) {\r\n\t\t\t\t\t\tlet message = this.parseErrors(error.error);\r\n\t\t\t\t\t\tif (message) {\r\n\t\t\t\t\t\t\tthis.snackBar.open(message, \"OK\", { duration: 8000, panelClass: ['error'] });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Handle permission errors for status code 403 (Forbidden) */\r\n\t\t\t\t\tif (error.status == 403) {\r\n\t\t\t\t\t\tthis.snackBar.open($localize`:@@snackbar.error.not-allowed:You are not allowed to perform this request.`, undefined, {\r\n\t\t\t\t\t\t\tduration: 6000,\r\n\t\t\t\t\t\t\tpanelClass: ['error']\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Handle not found errors for status code 404 (Not Found) */\r\n\t\t\t\t\tif (error.status == 404) {\r\n\t\t\t\t\t\tthis.snackBar.open($localize`:@@snackbar.error.not-found:The resource could not be found.`, undefined, {\r\n\t\t\t\t\t\t\tduration: 6000,\r\n\t\t\t\t\t\t\tpanelClass: ['error']\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Handle custom error message for status code 452 */\r\n\t\t\t\t\tif (error.status == 452) {\r\n\t\t\t\t\t\tthis.snackBar.open(error.text(), undefined, { duration: 6000, panelClass: ['error'] });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Handle internal server errors for status code 500 */\r\n\t\t\t\t\tif (error.status == 500) {\r\n\t\t\t\t\t\tthis.snackBar.open(error.text(), undefined, { duration: 6000, panelClass: ['error'] });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Parses HTTP response errors and extracts the error messages.\r\n\t * Handles both ArrayBuffer and structured error objects.\r\n\t * \r\n\t * @param error The error object to parse, which could be an ArrayBuffer or a structured error object.\r\n\t * @returns A string containing all error messages, joined by new lines.\r\n\t */\r\n\tprotected parseErrors(error: Object): string {\r\n\t\tlet errors: string[] = [];\r\n\r\n\t\t/* Check if error exists before processing */\r\n\t\tif (error) {\r\n\t\t\t/* If the error is an ArrayBuffer, attempt to decode and parse it */\r\n\t\t\tif (error instanceof ArrayBuffer) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t/* Decode the ArrayBuffer to a string and then parse the JSON */\r\n\t\t\t\t\terror = JSON.parse(new TextDecoder().decode(new Uint8Array(error)));\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\t/* Log the error if JSON parsing fails */\r\n\t\t\t\t\tconsole.error(\"Error parsing ArrayBuffer:\", err);\r\n\r\n\t\t\t\t\t/* Return a generic message if parsing fails */\r\n\t\t\t\t\treturn \"Failed to parse error details.\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* Ensure the error is an object (for structured error responses) */\r\n\t\t\tif (typeof error === 'object') {\r\n\t\t\t\t/* Iterate over the keys of the error object */\r\n\t\t\t\tObject.keys(error).forEach(el => {\r\n\t\t\t\t\tlet err = (error as any)[el];\r\n\r\n\t\t\t\t\t/* If the value is an array, iterate over each element */\r\n\t\t\t\t\tif (Array.isArray(err)) {\r\n\t\t\t\t\t\terr.forEach(e => {\r\n\t\t\t\t\t\t\t/* Ensure each element is a string before adding to errors */\r\n\t\t\t\t\t\t\tif (typeof e === 'string') {\r\n\t\t\t\t\t\t\t\terrors.push(e);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else if (typeof err === 'string') {\r\n\t\t\t\t\t\t/* If the value is a string, add it directly to the errors list */\r\n\t\t\t\t\t\terrors.push(err);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* Join the error messages with newlines and return the result */\r\n\t\treturn errors.join('\\n');\r\n\t}\r\n}","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\n/**\r\n * Pass untouched request through to the next request handler.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class CachingInterceptor implements HttpInterceptor {\r\n\t/**\r\n\t * Cache container\r\n\t */\r\n\tprivate cache = new Map<string, HttpResponse<any>>();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() { }\r\n\r\n\t/**\r\n\t * Intercept an outgoing `HttpRequest` and optionally transform it or the\r\n\t * response.\r\n\t *\r\n\t * Typically an interceptor will transform the outgoing request before returning\r\n\t * `next.handle(transformedReq)`. An interceptor may choose to transform the\r\n\t * response event stream as well, by applying additional Rx operators on the stream\r\n\t * returned by `next.handle()`.\r\n\t *\r\n\t * More rarely, an interceptor may choose to completely handle the request itself,\r\n\t * and compose a new event stream instead of invoking `next.handle()`. This is\r\n\t * acceptable behavior, but keep in mind further interceptors will be skipped entirely.\r\n\t *\r\n\t * It is also rare but valid for an interceptor to return multiple responses on the\r\n\t * event stream for a single request.\r\n\t */\r\n\tintercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\r\n\t\t/* Before doing anything, it's important to only cache GET requests. */\r\n\t\tif (req.method !== 'GET' || req.responseType.toLowerCase() === 'arraybuffer') {\r\n\t\t\tthis.cache.clear();\r\n\t\t\treturn next.handle(req);\r\n\t\t}\r\n\r\n\t\t/* First, check the cache to see if this request exists. */\r\n\t\tconst cachedResponse = this.cache.get(req.urlWithParams);\r\n\t\tif (cachedResponse && req.headers.get('Client-Cache')) {\r\n\t\t\t/*\r\n\t\t\tA cached response exists. Serve it instead of forwarding \r\n\t\t\tthe request to the next handler.\r\n\t\t\t*/\r\n\t\t\treturn of(cachedResponse.clone());\r\n\t\t}\r\n\r\n\t\t/* No cached response exists. Go to the network, and cache the response when it arrives. */\r\n\t\treturn next.handle(req).pipe(\r\n\t\t\ttap(\r\n\t\t\t\t/* Succeeds when there is a response; ignore other events */\r\n\t\t\t\tevent => {\r\n\t\t\t\t\t/* Remember, there may be other events besides just the response. */\r\n\t\t\t\t\tif (event instanceof HttpResponse && req.headers.get('Client-Cache')) {\r\n\t\t\t\t\t\t/* Update the cache. */\r\n\t\t\t\t\t\tthis.cache.set(req.urlWithParams, event.clone());\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from \"rxjs\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoadingScreenService {\r\n\r\n    /**\r\n     * _loading: boolean\r\n     */\r\n    private _loading: boolean = false;\r\n\r\n    /**\r\n     * loadingStatus: Subject<any>\r\n     */\r\n    public loadingStatus: Subject<any> = new Subject();\r\n\r\n    /**\r\n     * Gets the loading\r\n     */\r\n    get loading(): boolean {\r\n        return this._loading;\r\n    }\r\n\r\n    /**\r\n     * Sets the loading\r\n     */\r\n    set loading(value) {\r\n        this._loading = value;\r\n        this.loadingStatus.next(value);\r\n    }\r\n\r\n    /**\r\n     * Starts the loding\r\n     */\r\n    public startLoading() {\r\n        this.loading = true;\r\n    }\r\n\r\n    /**\r\n     * Stops the loading\r\n     */\r\n    public stopLoading() {\r\n        this.loading = false;\r\n    }\r\n}","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { finalize } from \"rxjs/operators\";\r\nimport { LoadingScreenService } from \"../services/loading-screen\";\r\n\r\n@Injectable()\r\nexport class LoadingScreenInterceptor implements HttpInterceptor {\r\n\r\n    /**\r\n     * activeRequests: number\r\n     */\r\n    activeRequests: number = 0;\r\n\r\n    /**\r\n     * URLs for which the loading screen should not be enabled\r\n     */\r\n    skippUrls = ['/authrefresh'];\r\n\r\n    /**\r\n     * Constructor\r\n     * @param loadingScreenService \r\n     */\r\n    constructor(private loadingScreenService: LoadingScreenService) { }\r\n\r\n    /**\r\n    * Identifies and handles a given HTTP request.\r\n    * @param req The outgoing request object to handle.\r\n    * @param next The next interceptor in the chain, or the backend\r\n    * if no interceptors remain in the chain.\r\n    * @returns An observable of the event stream.\r\n    */\r\n    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n        let displayLoadingScreen = true;\r\n\r\n        /* Skip loading screen for folowed urls */\r\n        for (const skippUrl of this.skippUrls) {\r\n            if (new RegExp(skippUrl).test(request.url)) {\r\n                displayLoadingScreen = false;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (displayLoadingScreen) {\r\n            if (this.activeRequests === 0) {\r\n                this.loadingScreenService.startLoading();\r\n            }\r\n\r\n            /* Count the active requests */\r\n            this.activeRequests++;\r\n\r\n            /* handle the request */\r\n            return next.handle(request).pipe(\r\n                finalize(() => {\r\n                    this.activeRequests--;\r\n                    if (this.activeRequests === 0) {\r\n                        this.loadingScreenService.stopLoading();\r\n                    }\r\n                })\r\n            )\r\n        } else {\r\n            return next.handle(request);\r\n        }\r\n    };\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '../../http/services/generic';\r\n\r\n//@dynamic\r\n@Injectable({ providedIn: 'root' })\r\nexport class FileService extends GenericService<any> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('file');\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PrintService {\r\n    isPrinting = false;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param router \r\n     */\r\n    constructor(private router: Router) { }\r\n\r\n    /**\r\n     * Print document\r\n     * @param documentName \r\n     * @param documentData \r\n     */\r\n    printDocument(documentName: string, documentData: string[]) {\r\n        this.isPrinting = true;\r\n        this.router.navigate(['/', { outlets: { 'print': ['print', documentName, documentData.join()] } }]);\r\n    }\r\n\r\n    /**\r\n     * On data ready\r\n     */\r\n    onDataReady() {\r\n        setTimeout(() => {\r\n            window.print();\r\n            this.isPrinting = false;\r\n            this.router.navigate([{ outlets: { print: null } }]);\r\n        });\r\n    }\r\n}\r\n","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdAutocompleteOptionDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-autocomplete-option]ng-template'\r\n})\r\nexport class VdAutocompleteOptionDirective extends CdkPortal {\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdChipDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-chip]ng-template'\r\n})\r\nexport class VdChipDirective extends CdkPortal {\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Type, ViewChild } from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MatAutocomplete, MatAutocompleteModule, MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, skip } from 'rxjs/operators';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { Filter } from '../../common/models/filter';\r\nimport { SuffixButton } from '../../common/models/suffix-button';\r\nimport { BaseService } from '../../common/services/base';\r\nimport { RxFormControl } from '../../form-validators/services/form-control';\r\nimport { AbstractMatFormField } from '../../forms/helpers/abstract-mat-form-field';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { VdDynamicTableComponent } from '../../table/components/dynamic-table/dynamic-table';\r\nimport { TableDataSource } from '../../table/table.data-source';\r\nimport { VdAutocompleteOptionDirective } from '../directives/autocomplete-option';\r\nimport { VdChipDirective } from '../directives/chip';\r\n\r\n@Component({\r\n    selector: 'vd-chips',\r\n    templateUrl: './chips.html',\r\n    styleUrls: ['./chips.scss'],\r\n    providers: [\r\n        { provide: MatFormFieldControl, useExisting: VdChipsComponent },\r\n        {\r\n            provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,\r\n            useValue: { overlayPanelClass: 'vd-chips-autocomplete' }\r\n        }\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        ReactiveFormsModule,\r\n        MatAutocompleteModule,\r\n        MatDividerModule,\r\n        MatPaginator,\r\n        MatChipsModule,\r\n        MatIconModule,\r\n        MatInputModule,\r\n        VdDynamicTableComponent,\r\n    ]\r\n})\r\nexport class VdChipsComponent extends AbstractMatFormField<any> implements OnInit, AfterViewInit, OnDestroy {\r\n    /**\r\n     * Reference to the dynamic table component.\r\n     */\r\n    private _dynamicTable?: VdDynamicTableComponent;\r\n\r\n    /**\r\n     * Gets the dynamic table component reference.\r\n     * Sets the data source's sort when the dynamic table is defined.\r\n     */\r\n    @ViewChild(VdDynamicTableComponent, { static: false })\r\n    public get dynamicTable(): VdDynamicTableComponent | undefined { return this._dynamicTable; }\r\n    public set dynamicTable(dynamicTable: VdDynamicTableComponent) {\r\n        this._dynamicTable = dynamicTable;\r\n        if (this._dynamicTable) {\r\n            this.dataSource!.sort = this._dynamicTable.matSort;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Defines the class type for the dynamic table.\r\n     */\r\n    @Input()\r\n    public classType?: Type<any>;\r\n\r\n    /**\r\n     * Reference to the paginator component.\r\n     */\r\n    private _paginator?: MatPaginator;\r\n\r\n    /**\r\n     * Gets the paginator component reference.\r\n     */\r\n    @ViewChild(MatPaginator, { static: true })\r\n    public set paginator(paginator: MatPaginator) { this._paginator = paginator; }\r\n    public get paginator(): MatPaginator | undefined { return this._paginator; }\r\n\r\n    /**\r\n     * Reference to the sorting directive for the table.\r\n     */\r\n    @ViewChild(MatSort, { static: false })\r\n    public sort?: MatSort;\r\n\r\n    /**\r\n     * Available page size options for pagination.\r\n     */\r\n    public pageSizeOptions: Array<number> = [5, 10, 15, 20, 30, 50, 100, 200];\r\n\r\n    /**\r\n     * Current active sort column.\r\n     */\r\n    public sortActive?: string = 'id';\r\n\r\n    /**\r\n     * Current direction of sorting.\r\n     */\r\n    public sortDirection: SortDirection = 'asc';\r\n\r\n    /**\r\n     * Data source for the data table.\r\n     */\r\n    public dataSource?: TableDataSource<any, any> | null;\r\n\r\n    /**\r\n     * Subscription for the data source observable.\r\n     */\r\n    public dataSourceSubscription?: Subscription;\r\n\r\n    /**\r\n     * Form control for the autocomplete chip list.\r\n     */\r\n    public autoCompleteChipList: FormControl = new FormControl();\r\n\r\n    /** \r\n     * Reference to the filter input element.\r\n     */\r\n    @ViewChild('filterInput', { static: false })\r\n    public filterInput?: ElementRef;\r\n\r\n    /**\r\n     * List of search operators for filtering.\r\n     */\r\n    public searchOperators: string[] = [\"!=\", \"!\", \"<>\", \">=\", \">\", \"<=\", \"<\", \"^\", \"$\", \"~\"];\r\n\r\n    /**\r\n     * Array of chips currently being used.\r\n     */\r\n    @Input()\r\n    public chips: any[] = [];\r\n\r\n    /**\r\n     * Template for rendering chips.\r\n     */\r\n    @ContentChild(VdChipDirective)\r\n    public chipTemplate?: VdChipDirective;\r\n\r\n    /**\r\n     * Template for autocomplete options.\r\n     */\r\n    @ContentChild(VdAutocompleteOptionDirective)\r\n    public autocompleteOptionTemplate?: VdAutocompleteOptionDirective;\r\n\r\n    /**\r\n     * Reference to the autocomplete component.\r\n     */\r\n    @ViewChild(MatAutocomplete, { static: false })\r\n    public autocomplete?: MatAutocomplete;\r\n\r\n    /**\r\n     * Reference to the autocomplete trigger.\r\n     */\r\n    @ViewChild(MatAutocompleteTrigger)\r\n    public autocompleteTrigger?: MatAutocompleteTrigger;\r\n\r\n    /**\r\n     * Endpoint for data retrieval.\r\n     */\r\n    public _endpoint?: string | Function;\r\n\r\n    /**\r\n     * Gets or sets the endpoint for the service.\r\n     */\r\n    @Input()\r\n    get endpoint(): string | Function | undefined { return this._endpoint; }\r\n    set endpoint(endpoint: string | Function) {\r\n        this._endpoint = endpoint;\r\n        this.service.endpoint = typeof endpoint === 'function' ? endpoint(this) : (<string>endpoint);\r\n        this.clear();\r\n    }\r\n\r\n    /**\r\n     * Parameters used for data retrieval.\r\n     */\r\n    public _params: any;\r\n\r\n    /**\r\n     * Gets or sets the parameters for the service.\r\n     */\r\n    @Input()\r\n    get params() { return this._params; }\r\n    set params(params: any) {\r\n        /* Remove empty parameters */\r\n        Utils.cleanObject(params);\r\n\r\n        if (!Utils.equals(this._params, params)) {\r\n            this._params = params;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Projection fields for data retrieval.\r\n     */\r\n    public _projection?: string | string[];\r\n\r\n    /**\r\n     * Gets or sets the projection for the service.\r\n     */\r\n    @Input()\r\n    get projection(): string | string[] | undefined { return this._projection; }\r\n    set projection(projection: string | string[]) {\r\n        this._projection = projection;\r\n        this.clear();\r\n    }\r\n\r\n    /**\r\n     * Indicates whether the component is disabled.\r\n     */\r\n    public override  get disabled(): boolean {\r\n        if (this._readonly) {\r\n            return true;\r\n        }\r\n\r\n        return super.disabled;\r\n    }\r\n\r\n    /**\r\n     * Indicates if pagination is enabled.\r\n     */\r\n    public _paginated: boolean = true;\r\n\r\n    /**\r\n     * Gets or sets the pagination option.\r\n     */\r\n    @Input()\r\n    get paginated(): boolean { return this._paginated; }\r\n    set paginated(paginated: boolean) {\r\n        this._paginated = coerceBooleanProperty(paginated);\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * Indicates whether custom values are allowed.\r\n     */\r\n    public _customValue: boolean = false;\r\n\r\n    /**\r\n     * Gets or sets the custom value option.\r\n     */\r\n    @Input()\r\n    get customValue(): boolean { return this._customValue; }\r\n    set customValue(customValue: boolean) {\r\n        this._customValue = coerceBooleanProperty(customValue);\r\n        this.key = customValue && this.key == 'id' ? 'name' : this.key;\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * Gets the parent control of the current RxFormControl.\r\n     * Can be either a FormGroup, FormArray, or null if not present.\r\n     * @type {FormGroup | FormArray | null}\r\n     */\r\n    public get parentControl(): FormGroup | FormArray | null {\r\n        return (this.ngControl!.control as RxFormControl).parent;\r\n    }\r\n\r\n    /**\r\n     * Gets the associated entity object from the underlying RxFormControl.\r\n     * @type {any}\r\n     */\r\n    public get entityObject(): any {\r\n        return (this.ngControl!.control as RxFormControl).entityObject;\r\n    }\r\n\r\n    /**\r\n     * Current context for the component.\r\n     */\r\n    @Input()\r\n    public context: any;\r\n\r\n    /**\r\n     * Key used for identifying items.\r\n     */\r\n    @Input()\r\n    public key: string = 'id';\r\n\r\n    /**\r\n     * Field used for search functionality.\r\n     */\r\n    @Input()\r\n    public searchField: string = 'search';\r\n\r\n    /**\r\n     * List of fields used for search functionality.\r\n     */\r\n    @Input()\r\n    public searchFields: string[] = [];\r\n\r\n    /**\r\n     * An array of filter objects, each defined by a glue operator and fields.\r\n     */\r\n    @Input()\r\n    public filters?: Filter[];\r\n\r\n    /**\r\n     * Indicates whether chips can be removed.\r\n     */\r\n    @Input()\r\n    public removable: boolean = true;\r\n\r\n    /**\r\n     * Whether to select the first option by default.\r\n     */\r\n    @Input()\r\n    public selectFirst: boolean = false;\r\n\r\n    /**\r\n     * Timeout in milliseconds between key presses for debouncing.\r\n     * Defaults to 400.\r\n     */\r\n    @Input()\r\n    public debounce: number = 400;\r\n\r\n    /**\r\n     * CSS class for the autocomplete component.\r\n     */\r\n    @Input()\r\n    public autocompleteCssClass: string = '';\r\n\r\n    /**\r\n     * Indicates whether the component is currently opened.\r\n     */\r\n    public opened: boolean = false;\r\n\r\n    /**\r\n     * Event emitted when the select action is initialized.\r\n     */\r\n    @Output()\r\n    public initSelect: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Event emitted when an item is selected.\r\n     * The event emits an object containing the selected value and a callback function.\r\n     * \r\n     * The callback function is expected to be called with a boolean parameter to indicate \r\n     * whether the operation (such as adding a chip) was successful. When the callback \r\n     * is invoked with `true`, the component proceeds with the following steps:\r\n     * 1. Sets the selected value as the only chip in the list.\r\n     * 2. Updates the internal ngModel value with the selected chip's key.\r\n     * 3. Disables further input to prevent the addition of multiple chips.\r\n     * 4. Resets the input field and closes the autocomplete suggestion panel.\r\n     * \r\n     * If the callback is invoked with `false`, no changes are made.\r\n     */\r\n    @Output()\r\n    public selected: EventEmitter<{ value: any, callback: (success: boolean) => void }> = new EventEmitter<{ value: any, callback: (success: boolean) => void }>();\r\n\r\n    /**\r\n     * Event emitted when the selection is cleared.\r\n     */\r\n    @Output()\r\n    public cleared: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Event emitted on launch action.\r\n     */\r\n    @Output('launch')\r\n    public onLaunch: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Array of suffix buttons for additional actions.\r\n     */\r\n    @Input()\r\n    public suffixButtons: SuffixButton[] = [];\r\n\r\n    /**\r\n     * Event emitted when a chip is focused.\r\n     * Sends the chip value as an event.\r\n     */\r\n    @Output()\r\n    public chipFocus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Determines if the label of the `MatFormField` should float.\r\n     */\r\n    public override  get shouldLabelFloat(): boolean { return super.shouldLabelFloat || this.autoCompleteChipList?.value; }\r\n\r\n    /**\r\n     * Indicates whether data is currently loading.\r\n     */\r\n    public loading: boolean = false;\r\n\r\n    /**\r\n     * Indicates whether the result set is empty.\r\n     */\r\n    public emptyResult: boolean = false;\r\n\r\n    /**\r\n     * Service used for data operations.\r\n     */\r\n    protected service: BaseService = new BaseService();\r\n\r\n    /**\r\n     * Constructor for initializing the component.\r\n     * \r\n     * @param media - Media service for handling media queries.\r\n     */\r\n    constructor(public media: VdMediaService) {\r\n        super(\"app-vd-chips\");\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after data-bound properties of a \r\n     * directive are initialized. It sets up subscriptions to the \r\n     * search input value changes and ngControl value changes.\r\n     */\r\n    public ngOnInit() {\r\n        /* Listen to value changes of the search input and debounce the input */\r\n        this.autoCompleteChipList.valueChanges\r\n            .pipe(debounceTime(this.debounce))\r\n            .subscribe(v => {\r\n                if (typeof v === 'string') {\r\n                    this.filterOptions(v);\r\n                }\r\n            });\r\n\r\n        /* Subscribe to ngControl value changes to manage chip list */\r\n        this.ngControl?.valueChanges?.pipe(skip(1)).subscribe((value: string) => {\r\n            if (!value) {\r\n                this.chips = [];\r\n                this._value = \"\";\r\n                this.autoCompleteChipList.setValue(\"\");\r\n                this.autoCompleteChipList.enable();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Lifecycle hook that is called after a component's view has been fully initialized.\r\n     * It broadcasts media changes and initializes the data source with the current service,\r\n     * paginator, and sort options.\r\n     */\r\n    public ngAfterViewInit(): void {\r\n        this.media.broadcast();\r\n\r\n        /* Initialize the data source with the current service, paginator, and sort */\r\n        this.dataSource ??= new TableDataSource<any, any>(this.service!, this.paginator, this.sort);\r\n    }\r\n\r\n    /**\r\n     * From the ControlValueAccessor interface. This method is called to write a new value \r\n     * to the element.\r\n     * @param value - The value to write.\r\n     */\r\n    public override writeValue(value: any) {\r\n        /* Set the value to the internal state */\r\n        this._value = value;\r\n\r\n        /* Clear the chips list for new input */\r\n        this.chips = [];\r\n\r\n        if (!this.customValue && value && this.chips?.length <= 0) {\r\n            this.loading = true;\r\n            let _params: any = {};\r\n\r\n            /* Include parameters from _params if available */\r\n            if (this._params?.includes) {\r\n                _params.includes = this._params.includes;\r\n            }\r\n\r\n            /* Include projection from _params if available */\r\n            if (this._params?.projection) {\r\n                _params.projection = this._params.projection;\r\n            }\r\n\r\n            /* Add projection if specified */\r\n            if (this.projection) {\r\n                _params.projection = Array.isArray(this.projection) ? this.projection.join(',') : this.projection;\r\n            }\r\n\r\n            /* Construct the request URL */\r\n            var urlParts: string[] = this.service?.endpoint?.split('?') ?? [];\r\n            this.service.http.get(`${urlParts[0]}/${value}${urlParts.length > 1 ? `?${urlParts[1]}` : ''}`, { params: Utils.cleanObject(_params) }).subscribe({\r\n                next: (x: any) => {\r\n                    this.loading = false;\r\n\r\n                    /* Add the returned item as a chip */\r\n                    this.chips.push(x);\r\n\r\n                    /* Emit the selected item */\r\n                    this.initSelect.emit(x);\r\n\r\n                    this.changeDetectorRef.detectChanges();\r\n                },\r\n                error: () => this.loading = false\r\n            });\r\n        } else if (this.customValue) {\r\n            /* Handle custom value input */\r\n            this.chips = value ? [{ [this.key]: value }] : [];\r\n        } else {\r\n            /* Clear the input if no value is provided */\r\n            this.clear(false);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Connects the data source and subscribes to data changes. \r\n     * It also sets up the necessary parameters for the data source.\r\n     */\r\n    public connect(): void {\r\n        /* Set the dropdown to open */\r\n        this.opened = true;\r\n\r\n        /* Configure field filters for the data source */\r\n        this.dataSource!.fieldFilters = this.getQueryParams();\r\n\r\n        /* Manually connect the data source for 'mat-option' triggers */\r\n        if (!this.classType && !this.dataSource?.isConnected) {\r\n            this.dataSourceSubscription?.unsubscribe();\r\n            this.dataSourceSubscription = this.dataSource?.connect().subscribe();\r\n        }\r\n\r\n        /* Reload the data source if it is already connected */\r\n        else if (this.dataSource?.isConnected) {\r\n            this.dataSource?.reload();\r\n        }\r\n\r\n        /* Trigger change detection */\r\n        this.changeDetectorRef.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * Sets focus on the filter input element.\r\n     */\r\n    public focus(): void {\r\n        this.filterInput?.nativeElement?.focus();\r\n    }\r\n\r\n    /**\r\n     * Handles the blur event of the input box. If the focus moves away from a \r\n     * mat-option, it adds the current value as a chip.\r\n     * @param event - The focus event.\r\n     */\r\n    public addOnBlur(event: FocusEvent) {\r\n        const target: HTMLElement = event.relatedTarget as HTMLElement;\r\n        if (!target || target.tagName !== 'MAT-OPTION') {\r\n            let value: string = this.filterInput?.nativeElement?.value;\r\n            if (value) {\r\n                this.addChipAndResetInput({ [this.key]: value }, this.filterInput);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a chip with the specified value and clears the input.\r\n     * \r\n     * This method emits the selected value to external listeners, along with a callback \r\n     * function. The callback is responsible for informing the component whether the \r\n     * addition of the chip was successful.\r\n     * \r\n     * Upon successful callback (`success: true`), the following actions occur:\r\n     * 1. The new chip is added to the `chips` array.\r\n     * 2. The component's ngModel is updated with the selected value's key.\r\n     * 3. The input field is disabled to restrict further chip entries.\r\n     * 4. The input text field is cleared.\r\n     * 5. The autocomplete suggestion panel is closed (if it is open).\r\n     * \r\n     * @param value - The value to add as a chip.\r\n     * @param input - The input element to reset after the chip is added.\r\n     */\r\n    public addChip(value: any, input: any): void {\r\n        /* Emit the selected value along with a callback function */\r\n        if (this.selected.observed) {\r\n            this.selected.emit({\r\n                value: value,\r\n                callback: (success) => {\r\n                    /* Handle chip addition and input resetting */\r\n                    if (success) {\r\n                        this.addChipAndResetInput(value, input);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        /* Handle chip addition and input resetting */\r\n        else {\r\n            this.addChipAndResetInput(value, input);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the logic for adding a chip and resetting the input field.\r\n     * \r\n     * 1. Adds the new chip to the chips array.\r\n     * 2. Updates the ngModel value with the selected chip's key.\r\n     * 3. Disables the autocomplete input to prevent further chip additions.\r\n     * 4. Clears the input field value.\r\n     * 5. Closes the autocomplete panel if it is open.\r\n     * \r\n     * @param value - The value to be added as a chip.\r\n     * @param input - The input element to be reset after adding the chip.\r\n     * @private\r\n     */\r\n    public addChipAndResetInput(value: any, input?: any): void {\r\n        /* Add the new chip to the chips array */\r\n        this.chips = [value];\r\n\r\n        /* Set the ngModel value to the selected chip's key */\r\n        this.value = value[this.key];\r\n\r\n        /* Disable further input to allow only one chip */\r\n        this.autoCompleteChipList.disable({ emitEvent: false });\r\n        this.autoCompleteChipList.patchValue('', { emitEvent: false });\r\n\r\n        /* Reset the autocomplete input field */\r\n        if (input) {\r\n            input.value = '';\r\n        }\r\n\r\n        /* Close the autocomplete panel if it is currently open */\r\n        this.autocompleteTrigger?.closePanel();\r\n    }\r\n\r\n    /**\r\n     * Clears all chips and resets the control state.\r\n     * @param triggerStateChanges - Whether to trigger state changes.\r\n     */\r\n    public clear(triggerStateChanges: boolean = true): void {\r\n        /* Reset the value and chips */\r\n        this.value = null;\r\n        this.chips = [];\r\n\r\n        /* Mark the control as touched */\r\n        if (this.ngControl.control) {\r\n            this.ngControl.control.markAsTouched();\r\n        }\r\n\r\n        /* Reset the ngModel value */\r\n        this.autoCompleteChipList.patchValue('', { emitEvent: false });\r\n\r\n        if (triggerStateChanges) {\r\n            this.stateChanges.next();\r\n        }\r\n\r\n        /* Enable the input for new entries */\r\n        this.autoCompleteChipList.enable({ emitEvent: false });\r\n\r\n        /* Trigger change detection */\r\n        this.changeDetectorRef.detectChanges();\r\n\r\n        if (this.dataSource) {\r\n            this.dataSource.pageIndex = 0;\r\n        }\r\n\r\n        /* Reset filters */\r\n        delete this._params?.['filters' as any];\r\n    }\r\n\r\n    /**\r\n     * Filters the options based on the provided text input.\r\n     * @param text - The text to filter options by.\r\n     */\r\n    private filterOptions(text: string) {\r\n        /* Perform filtering based on the current text input */\r\n        if (this.dataSource) {\r\n            /* Initialize parameters for filtering */\r\n            let _params: any[] = { ...this.getQueryParams() };\r\n\r\n            /* Add search term to parameters if a search field is specified */\r\n            if (this.searchField && (this.searchFields.length ?? 0) == 0 && (this.filters?.length ?? 0) == 0) {\r\n                var result = new RegExp(`(\\\\${this.searchOperators.join('|\\\\')})?(.*)`).exec(this.searchField);\r\n                if (result) {\r\n                    _params[(result as any)[2]] = `${result[1] ? result[1] : ''}${text}`;\r\n                }\r\n            }\r\n\r\n            /* Add search terms for each specified search field */\r\n            if ((this.filters?.length ?? 0) == 0) {\r\n                this.searchFields?.map(x => x.trim())?.forEach(x => {\r\n                    var result = new RegExp(`(\\\\${this.searchOperators.join('|\\\\')})?(.*)`).exec(x);\r\n                    if (result) {\r\n                        _params[(result as any)[2]] = `${result[1] ? result[1] : ''}${text}`;\r\n                    }\r\n                });\r\n            }\r\n\r\n            if ((this.filters?.length ?? 0) > 0) {\r\n                /* Construct the URL for the filters */\r\n                let filterQuery = '';\r\n\r\n                /* Include additional filters if defined */\r\n                if (text) {\r\n                    this.filters!.forEach(filter => {\r\n                        const { glue, fields } = filter;\r\n                        fields.forEach((field, index) => {\r\n                            const { name, operator } = field;\r\n                            /* Construct the filter string */\r\n                            filterQuery += `${name}:${operator}${text}`;\r\n\r\n                            /* Add glue if it's not the last field */\r\n                            if (index < fields.length - 1 || filter !== this.filters![this.filters!.length - 1]) {\r\n                                filterQuery += `${glue}`;\r\n                            }\r\n                        });\r\n                    });\r\n                }\r\n\r\n                /* Update the URL parameters with the constructed filter query */\r\n                _params['filters' as any] = filterQuery;\r\n            }\r\n\r\n            /* Check if there are no changes to the parameters */\r\n            if (Utils.equals(this._params, _params)) {\r\n                return;\r\n            }\r\n\r\n            /* Update parameters for the data source */\r\n            this._params = _params;\r\n\r\n            /* Request new results from the server */\r\n            this.loading = true;\r\n            this.dataSource.applyFilters(this._params);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the event when a chip is removed. It emits the cleared value \r\n     * and optionally clears the chips.\r\n     */\r\n    public handleRemovedEvent(): void {\r\n        this.cleared?.emit(this.value);\r\n        if (this.removable) {\r\n            this.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the click event on the launch button, emitting the \r\n     * selected chip if available.\r\n     */\r\n    public handleLaunchClicked(): void {\r\n        if (this.chips?.length > 0) {\r\n            this.onLaunch.emit(this.chips[0]);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Retrieves the current query parameters for the data source.\r\n     * @returns An object containing the query parameters.\r\n     */\r\n    protected getQueryParams(): any {\r\n        /* Initialize parameters if null */\r\n        var params = this._params || {};\r\n\r\n        /* Include projection if specified */\r\n        if (this.projection) {\r\n            params.projection = this.projection;\r\n        }\r\n\r\n        return params;\r\n    }\r\n\r\n    /**\r\n     * Cleanup method that is invoked immediately before the instance \r\n     * is destroyed. It unsubscribes from the data source subscription.\r\n     */\r\n    public override ngOnDestroy(): void {\r\n        super.ngOnDestroy();\r\n        this.dataSourceSubscription?.unsubscribe();\r\n    }\r\n\r\n    /**\r\n     * Log to console\r\n     * @param message \r\n     * @param optionalParams \r\n     */\r\n    public log(message: any, ...optionalParams: any[]) {\r\n        console.log(message, optionalParams);\r\n    }\r\n}","<mat-chip-grid #chipList [required]=\"required\" [disabled]=\"readonly\">\n    <!-- #region Chips -->\n    @for (chip of chips; track chip; let first = $first; let index = $index) {\n        <mat-chip-row [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\n            <span class=\"vd-chip-content\">\n                @if (!chipTemplate?.templateRef) {\n                    <span>\n                        @if (!autocompleteOptionTemplate?.templateRef) {\n                            <span>{{ chip }}</span>\n                        }\n                        @if (autocompleteOptionTemplate && autocompleteOptionTemplate.templateRef) {\n                            <ng-template [ngTemplateOutlet]=\"autocompleteOptionTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\n                        }\n                    </span>\n                }\n                @if (chipTemplate && chipTemplate.templateRef) {\n                    <ng-template [ngTemplateOutlet]=\"chipTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\n                }\n            </span>\n            @for (button of suffixButtons; track button; let first = $first) {\n                <a matChipTrailingIcon [hidden]=\"button.hide && button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\n                    <mat-icon fontSet=\"material-symbols-outlined\">{{button.icon}}</mat-icon>\n                </a>\n            }\n            @if ((onLaunch.observers.length) > 0) {\n                <a matChipTrailingIcon (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\n                    <mat-icon fontSet=\"material-symbols-outlined\">launch</mat-icon>\n                </a>\n            }\n            @if (!readonly) {\n                <a matChipTrailingIcon (click)=\"handleRemovedEvent()\">\n                    <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\n                </a>\n            }\n        </mat-chip-row>\n    }\n    <!-- #endregion -->\n\n    <!-- #region Search box -->\n    <input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" (focus)=\"connect()\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [matAutocompleteConnectedTo]=\"origin\" [formControl]=\"autoCompleteChipList\" (blur)=\"customValue && addOnBlur($event)\" #filterInput />\n    <!-- #endregion -->\n\n    <!-- #region Reset button -->\n    @if ((!value || empty) && !readonly && !disabled) {\n        <a trailingIcon class=\"mat-mdc-select-arrow\" (click)=\"filterInput.value = ''\">\n            <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" class=\"ng-tns-c184-21\">\n                <path d=\"M7 10l5 5 5-5z\" class=\"ng-tns-c184-21\"></path>\n            </svg>\n        </a>\n    }\n    <!-- #endregion -->\n</mat-chip-grid>\n\n<!-- #region Autocomplete -->\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event.option.value, filterInput)\" class=\"{{autocompleteCssClass}}{{classType?' table-autocomplete':''}}\">\n    @if(!classType && opened)\n    {\n        @for (item of dataSource?.items; track item; let first = $first; let last = $last) {\n            <mat-option [value]=\"item\">\n                @if (!autocompleteOptionTemplate?.templateRef) {\n                    <span>{{item}}</span>\n                }\n                @if (autocompleteOptionTemplate && autocompleteOptionTemplate.templateRef) {\n                    <ng-template [ngTemplateOutlet]=\"autocompleteOptionTemplate.templateRef!\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\n                }\n            </mat-option>\n            <mat-divider *ngIf=\"!last\"></mat-divider>\n        }\n    }\n    @if (classType && opened) {\n        <mat-option hide=\"true\"></mat-option>\n        <vd-dynamic-table [dataSource]=\"dataSource\" [classType]=\"classType\" [entityObject]=\"entityObject\" [parentControl]=\"parentControl\" [context]=\"context\" [stickyHeader]=\"true\" [sticky]=\"true\" (rowClick)=\"addChip($event, filterInput)\" matSort [sortActive]=\"sortActive\" [sortDirection]=\"sortDirection\"></vd-dynamic-table>\n    }\n    <div class=\"vd-chips-paginator\">\n        <mat-divider></mat-divider>\n        <mat-paginator [length]=\"dataSource?.total ?? 0\" [pageIndex]=\"dataSource?.pageIndex ?? 0\" [pageSize]=\"dataSource?.pageSize ?? 15\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\" hidePageSize=\"true\"></mat-paginator>\n    </div>\n</mat-autocomplete>\n<!-- #endregion -->\n\n<div matAutocompleteOrigin #origin=\"matAutocompleteOrigin\" class=\"autocomplete-origin\"></div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { Subject } from 'rxjs';\r\n\r\nconst noop = () => { };\r\nlet nextUniqueId = 0;\r\n\r\n@Component({\r\n\tselector: '[vd-file-input]',\r\n\ttemplate: `\r\n\t\t<div layout=\"row\" flex>\r\n\t\t  <input matInput #fileElement [(ngModel)]=\"value\" (click)=\"fileInput.click(); $event.stopPropagation()\" readonly=\"true\" [placeholder]=\"placeholder\" [disabled]=\"disabled\" [required]=\"required\">\r\n\t\t  <input hidden type=\"file\" [accept]=\"accept\" #fileInput (change)=\"handleSelect($event)\" />\r\n\t\t  <div class=\"btn-suffix\">\r\n\t\t    @if (!value) {\r\n\t\t      <button type=\"button\" mat-icon-button matSuffix (click)=\"fileInput.click(); $event.stopPropagation()\">\r\n\t\t        <mat-icon fontSet=\"material-symbols-outlined\">file_upload</mat-icon>\r\n\t\t      </button>\r\n\t\t    }\r\n\t\t    @if (value) {\r\n\t\t      <button type=\"button\" mat-icon-button matSuffix (click)=\"clear(); $event.stopPropagation()\">\r\n\t\t        <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t      </button>\r\n\t\t    }\r\n\t\t  </div>\r\n\t\t</div>`,\r\n\tstyles: [`\r\n\t\t.btn-suffix .mat-mdc-icon-button {\r\n\t\t\tposition: absolute;\r\n\t\t\tright: -16px;\r\n\t\t\ttop: 0;\r\n\t\t}`\r\n\t],\r\n\timports: [\r\n    FormsModule,\r\n    MatInputModule,\r\n    MatIconModule,\r\n    MatIconButton\r\n],\r\n\tproviders: [{ provide: MatFormFieldControl, useExisting: VdFileInputComponent }]\r\n})\r\nexport class VdFileInputComponent implements MatFormFieldControl<any>, ControlValueAccessor, OnDestroy {\r\n\r\n\t/** \r\n\t * A name for this control that can be used by `vd-file-input`.\r\n\t */\r\n\tpublic controlType = 'vd-file-input';\r\n\r\n\t/**\r\n\t * Because the <mat-form-field> uses the OnPush change detection strategy, we need \r\n\t * to let it know when something happens in the form field control that may require \r\n\t * the form field to run change detection. We do this via the stateChanges property. \r\n\t * So far the only thing the form field needs to know about is when the value changes. \r\n\t * We'll need to emit on the stateChanges stream when that happens, and as we continue \r\n\t * flushing out these properties we'll likely find more places we need to emit. We \r\n\t * should also make sure to complete stateChanges when our component is destroyed.\r\n\t */\r\n\tpublic stateChanges = new Subject<void>();\r\n\r\n\t/** \r\n\t * The placeholder displayed in the trigger of the select.\r\n\t */\r\n\tprivate _placeholder?: string;\r\n\r\n\t/**\r\n\t * This property is used to indicate whether the input is focused.\r\n\t */\r\n\tpublic _focused: boolean = false;\r\n\r\n\t/**\r\n\t * This property tells the form field when it should be in the disabled state.\r\n\t */\r\n\tpublic _disabled: boolean = false;\r\n\r\n\t/**\r\n\t * This property is used to indicate whether the input is required.\r\n\t */\r\n\tpublic _required: boolean = false;\r\n\r\n\t/**\r\n\t * This property is used to indicate whether the input support multiple files.\r\n\t */\r\n\tpublic _multiple: boolean = false;\r\n\r\n\t/**\r\n\t * This property allows someone to set or get the value of our control.\r\n\t */\r\n\tpublic _value?: string;\r\n\r\n\t/**\r\n\t * accept?: string\r\n\t * Sets files accepted when opening the file browser dialog.\r\n\t * Same as 'accept' attribute in <input/> element.\r\n\t */\r\n\t@Input()\r\n\tpublic accept?: string;\r\n\r\n\t/**\r\n\t * select?: function\r\n\t * Event emitted a file is selected\r\n\t * Emits a [File | FileList] object.\r\n\t */\r\n\t@Output('select')\r\n\tpublic onSelect: EventEmitter<File | FileList> = new EventEmitter<File | FileList>();\r\n\r\n\t/**\r\n\t* clear?: function\r\n\t* Event emitted a file is cleared\r\n\t*/\r\n\t@Output('clear')\r\n\tpublic onClear: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n\t/** \r\n\t * The input element\r\n\t */\r\n\t@ViewChild('fileElement', { static: true })\r\n\tprivate _inputElement?: ElementRef;\r\n\tpublic get inputElement(): HTMLInputElement | undefined { return this._inputElement?.nativeElement; }\r\n\r\n\t/** \r\n\t * The native `<input type=\"file\"> element\r\n\t */\r\n\t@ViewChild('fileInput', { static: true })\r\n\tprivate _fileInputElement?: ElementRef;\r\n\tpublic get fileInputElement(): HTMLInputElement | undefined { return this._fileInputElement?.nativeElement; }\r\n\r\n\t/**\r\n\t * Setters and getters for the input value.\r\n\t * Its type should be the same type we used for the type parameter when we \r\n\t * implemented MatFormFieldControl. Since our component already has a value \r\n\t * property, we don't need to do anything for this one.\r\n\t */\r\n\tpublic get value(): string | undefined { return this._value };\r\n\tpublic set value(v: string) {\r\n\t\tif (v !== this._value) {\r\n\t\t\tthis._value = v;\r\n\t\t\tthis.onChangeCallback(v);\r\n\t\t\tthis.stateChanges.next();\r\n\t\t}\r\n\t}\r\n\r\n\t/** \r\n\t * Whether the input is focused.\r\n\t */\r\n\tpublic get focused() { return this._fileInputElement?.nativeElement?.focused === true; }\r\n\r\n\t/** \r\n\t * Whether the input has a value.\r\n\t */\r\n\tpublic get empty(): boolean { return !this.value; }\r\n\r\n\t/** \r\n\t * Placeholder to be shown if no value has been selected.\r\n\t * Since the value of the placeholder may change over time, we need to make sure to \r\n\t * trigger change detection in the parent form field by emitting on the stateChanges \r\n\t * stream when the placeholder changes.\r\n\t */\r\n\t@Input()\r\n\tpublic get placeholder(): string { return this._placeholder ?? ''; }\r\n\tpublic set placeholder(value: string) {\r\n\t\tthis._placeholder = value;\r\n\t\tthis.stateChanges.next();\r\n\t}\r\n\r\n\t/**\r\n\t * Whether the input is required.\r\n\t * Again, we'll want to make sure we run change detection if the required state changes.\r\n\t */\r\n\t@Input()\r\n\tpublic get required() { return this._required; }\r\n\tpublic set required(req) {\r\n\t\tthis._required = coerceBooleanProperty(req);\r\n\t\tthis.stateChanges.next();\r\n\t}\r\n\r\n\t/**\r\n\t * Whether the input is multiple.\r\n\t * Again, we'll want to make sure we run change detection if the required state changes.\r\n\t */\r\n\t@Input()\r\n\tpublic get multiple() { return this._multiple; }\r\n\tpublic set multiple(req) {\r\n\t\tthis._multiple = coerceBooleanProperty(req);\r\n\t\tthis.stateChanges.next();\r\n\t}\r\n\r\n\t/**\r\n\t * In addition to reporting the right state to the form field, we need to \r\n\t * set the disabled state on the individual inputs that make up our component.\r\n\t */\r\n\t@Input()\r\n\tpublic get disabled() { return this._disabled; }\r\n\tpublic set disabled(dis) {\r\n\t\tthis._disabled = coerceBooleanProperty(dis);\r\n\t\tthis.stateChanges.next();\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic get errorState(): boolean { return (this.ngControl.errors !== null && this.ngControl.touched) ?? false; }\r\n\r\n\t/**\r\n\t * This property should return the ID of an element in the component's template \r\n\t * that we want the <mat-form-field> to associate all of its labels and hints with. \r\n\t * In this case, we'll use the host element and just generate a unique ID for it.\r\n\t */\r\n\t@HostBinding()\r\n\tpublic id: string = `vd-file-input-${nextUniqueId++}`;\r\n\r\n\t/**\r\n\t * This property is used to indicate whether the label should be in the floating position.\r\n\t * We'll use the same logic as matInput and float the placeholder when the input is focused\r\n\t *  or non-empty. Since the placeholder will be overlapping our control when when it's not \r\n\t * floating, we should hide the – characters when it's not floating.\r\n\t */\r\n\t@HostBinding('class.floating')\r\n\tpublic get shouldLabelFloat() {\r\n\t\treturn this.focused || !this.empty;\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _merchantService \r\n\t */\r\n\tconstructor(public ngControl: NgControl, private fm: FocusMonitor, private _elementRef: ElementRef, private _renderer: Renderer2, private _changeDetectorRef: ChangeDetectorRef) {\r\n\t\tngControl.valueAccessor = this;\r\n\t\tfm.monitor(_elementRef.nativeElement, true).subscribe(origin => {\r\n\t\t\tthis._focused = !!origin;\r\n\t\t\tthis.stateChanges.next();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t* Method executed when a file is selected.\r\n\t*/\r\n\tpublic handleSelect($event: Event): void {\r\n\t\tlet file = (($event?.target as HTMLInputElement).files ?? [])[0];\r\n\t\tif (file) {\r\n\t\t\tthis.writeValue(file.name);\r\n\t\t\tthis.onSelect.emit(file);\r\n\t\t} else {\r\n\t\t\tthis.writeValue(null);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* Used to clear the selected files from the [VdFileInputComponent].\r\n\t*/\r\n\tpublic clear(): void {\r\n\t\tthis.writeValue(null);\r\n\t\tthis._renderer.setProperty(this.inputElement, 'value', null);\r\n\t\tthis.onClear.emit(null);\r\n\t}\r\n\r\n\t/** Method executed when the disabled value changes */\r\n\tpublic onDisabledChange(v: boolean): void {\r\n\t\tif (v) {\r\n\t\t\tthis.clear();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* Implemented as part of ControlValueAccessor.\r\n\t*/\r\n\tpublic writeValue(value: any): void {\r\n\t\tthis.value = value;\r\n\r\n\t\tif (this.ngControl && this.ngControl.control) {\r\n\t\t\tthis.ngControl.control.markAsTouched();\r\n\t\t\tthis.ngControl.control.markAsDirty();\r\n\t\t}\r\n\r\n\t\tthis._changeDetectorRef.markForCheck();\r\n\r\n\t\tif (!value) {\r\n\t\t\tthis.fileInputElement!.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * From ControlValueAccessor interface\r\n\t * @param fn \r\n\t */\r\n\tpublic registerOnChange(fn: any) {\r\n\t\tthis.onChangeCallback = fn;\r\n\t}\r\n\r\n\t/**\r\n\t * From ControlValueAccessor interface\r\n\t * @param fn \r\n\t */\r\n\tpublic registerOnTouched(fn: any) {\r\n\t\tthis.onTouchedCallback = fn;\r\n\t}\r\n\r\n\t/**\r\n\t * Placeholders for the callbacks which are later providesd \r\n\t * by the Control Value Accessor\r\n\t */\r\n\tprivate onChangeCallback: (_: any) => void = noop;\r\n\tprivate onTouchedCallback: () => void = noop;\r\n\r\n\t/**\r\n\t * This method is used by the <mat-form-field> to specify the IDs that \r\n\t * should be used for the aria-describedby attribute of your component. \r\n\t * The method has one parameter, the list of IDs, we just need to apply\r\n\t *  the given IDs to our host element.\r\n\t */\r\n\t@HostBinding('attr.aria-describedby') describedBy = '';\r\n\tpublic setDescribedByIds(ids: string[]) {\r\n\t\tthis.describedBy = ids.join(' ');\r\n\t}\r\n\r\n\t/**\r\n\t * This method will be called when the form field is clicked on. \r\n\t * It allows the component to hook in and handle that click however it wants. \r\n\t * The method has one parameter, the MouseEvent for the click. In our case we'll \r\n\t * just focus the first <input> if the user isn't about to click an <input> anyways.\r\n\t * @param event \r\n\t */\r\n\tpublic onContainerClick(event: MouseEvent) {\r\n\t\tif (this.empty) {\r\n\t\t\tthis.inputElement?.click();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called when a directive, pipe or service is destroyed.\r\n\t */\r\n\tpublic ngOnDestroy() {\r\n\t\tthis.stateChanges.complete();\r\n\t\tthis.fm.stopMonitoring(this._elementRef.nativeElement);\r\n\t}\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { VdFileInputComponent } from './file-input';\r\n\r\nexport { VdFileInputComponent } from './file-input';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tMatInputModule,\r\n\t\tMatIconModule,\r\n\t\tMatButtonModule,\r\n\t\tVdFileInputComponent\r\n\t],\r\n\texports: [VdFileInputComponent]\r\n})\r\nexport class VdFileModule { }","\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from \"@angular/material/core\";\r\nimport { MatCalendar } from \"@angular/material/datepicker\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\n\r\n/** Custom header component for datepicker. */\r\n@Component({\r\n\tselector: 'vd-datepicker-header',\r\n\tstyleUrls: ['./datepicker-header.scss'],\r\n\ttemplateUrl: './datepicker-header.html',\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n\timports: [\r\n    MatIconModule,\r\n    MatButtonModule\r\n]\r\n})\r\nexport class DatePickerHeaderComponent<D> implements OnInit, OnDestroy {\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tprivate destroyed = new Subject<void>();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param calendar \r\n\t * @param dateAdapter \r\n\t * @param _dateFormats \r\n\t * @param cdr \r\n\t */\r\n\tconstructor(\r\n\t\tprivate calendar: MatCalendar<D>,\r\n\t\tprivate dateAdapter: DateAdapter<D>,\r\n\t\t@Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\r\n\t\tprivate cdr: ChangeDetectorRef,\r\n\t) {\r\n\t\tcalendar.stateChanges.pipe(takeUntil(this.destroyed)).subscribe(() => cdr.markForCheck());\r\n\t}\r\n\r\n\t/**\r\n\t * Gets period label\r\n\t */\r\n\tpublic get periodLabel() {\r\n\t\treturn this.dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearLabel).toLocaleUpperCase();\r\n\t}\r\n\r\n\t/**\r\n\t * A callback method that is invoked immediately after the\r\n\t * default change detector has checked the directive's\r\n\t * data-bound properties for the first time,\r\n\t * and before any of the view or content children have been checked.\r\n\t * It is invoked only once when the directive is instantiated.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.calendar.monthSelected.emit(this.calendar.activeDate);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles previous button click event\r\n\t * @param mode \r\n\t */\r\n\tpublic previousClicked(mode: 'month' | 'year') {\r\n\t\tthis.calendar.activeDate = mode === 'month' ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, -1) : this.dateAdapter.addCalendarYears(this.calendar.activeDate, -1);\r\n\t\tthis.calendar.monthSelected.emit(this.calendar.activeDate);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles nexr button click event\r\n\t * @param mode \r\n\t */\r\n\tpublic nextClicked(mode: 'month' | 'year') {\r\n\t\tthis.calendar.activeDate = mode === 'month' ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, 1) : this.dateAdapter.addCalendarYears(this.calendar.activeDate, 1);\r\n\t\tthis.calendar.monthSelected.emit(this.calendar.activeDate);\r\n\t}\r\n\r\n\t/**\r\n\t * A callback method that performs custom clean-up, invoked immediately\r\n\t * before a directive, pipe, or service instance is destroyed.\r\n\t */\r\n\tngOnDestroy() {\r\n\t\tthis.destroyed.next();\r\n\t\tthis.destroyed.complete();\r\n\t}\r\n}","<div class=\"header\">\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_left</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_left</mat-icon>\r\n\t</button>\r\n\t<span class=\"header-label\">{{periodLabel}}</span>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_right</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_right</mat-icon>\r\n\t</button>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { IGenericFormBaseComponent } from '../../../base/interfaces/igeneric-form-base';\r\n\r\n/**\r\n * @component EditFormActionsComponent\r\n * @description\r\n * Reusable action row for edit forms.\r\n * Uses the provided form context to derive button states and trigger\r\n * standard form actions (save, apply, cancel/back).\r\n */\r\n@Component({\r\n    selector: '[msa-edit-form-actions]',\r\n    templateUrl: './edit-form-actions.html',\r\n    styleUrls: ['./edit-form-actions.scss'],\r\n    imports: [\r\n        CommonModule,\r\n        MatButtonModule,\r\n        MatExpansionModule\r\n    ]\r\n})\r\nexport class MsaEditFormActionsComponent {\r\n    /**\r\n     * Reference to the generic form context used by this action row.\r\n     * @type {IGenericFormBaseComponent<any>}\r\n     */\r\n    @Input()\r\n    public context!: IGenericFormBaseComponent<any>;\r\n\r\n    /**\r\n     * Determines if the save action is disabled.\r\n     * Save is disabled while saving is in progress or when form is readonly.\r\n     * @type {boolean}\r\n     */\r\n    public get isSaveDisabled(): boolean {\r\n        return !!(this.context.isSaving || this.context.readonly);\r\n    }\r\n\r\n    /**\r\n     * Determines whether the apply button should be displayed.\r\n     * Apply is only visible when the form is in edit mode.\r\n     * @type {boolean}\r\n     */\r\n    public get isApplyVisible(): boolean {\r\n        return !!this.context.isEditMode;\r\n    }\r\n\r\n    /**\r\n     * Determines if the apply action is disabled.\r\n     * Apply is disabled while saving is in progress or when form is readonly.\r\n     * @type {boolean}\r\n     */\r\n    public get isApplyDisabled(): boolean {\r\n        return !!(this.context.isSaving || this.context.readonly);\r\n    }\r\n\r\n    /**\r\n     * Determines if the cancel action is disabled.\r\n     * Cancel remains enabled by default.\r\n     * @type {boolean}\r\n     */\r\n    public get isCancelDisabled(): boolean {\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Triggers the context save action.\r\n     */\r\n    public onSave(): void {\r\n        this.context.save();\r\n    }\r\n\r\n    /**\r\n     * Triggers the context apply action.\r\n     */\r\n    public onApply(): void {\r\n        this.context.apply();\r\n    }\r\n\r\n    /**\r\n     * Triggers the context back action.\r\n     */\r\n    public onCancel(): void {\r\n        this.context.back();\r\n    }\r\n}\r\n","<button type=\"button\" mat-flat-button color=\"primary\" [disabled]=\"isSaveDisabled\" (click)=\"onSave()\" i18n=\"@@save\">Save</button>\r\n@if (isApplyVisible) {\r\n    <button type=\"button\" mat-button [disabled]=\"isApplyDisabled\" (click)=\"onApply()\" i18n=\"@@apply\">Apply</button>\r\n}\r\n<button type=\"button\" mat-button [disabled]=\"isCancelDisabled\" (click)=\"onCancel()\" i18n=\"@@cancel\">Cancel</button>\r\n<span class=\"spacer\"></span>","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdListOptionDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-list-option]ng-template'\r\n})\r\nexport class VdListOptionDirective extends CdkPortal {\r\n    /**\r\n     * Constructor\r\n     * @param templateRef \r\n     * @param viewContainerRef \r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, ElementRef, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\r\nimport { AbstractSelectFormField } from '../../forms/helpers/abstract-select-form-field';\r\nimport { VdListOptionDirective } from '../directives/vd-list-option';\r\n\r\n@Component({\r\n\tselector: 'vd-list',\r\n\ttemplateUrl: './list.html',\r\n\tstyleUrls: ['./list.scss'],\r\n\thost: { 'class': 'vd-list' },\r\n\tproviders: [{ provide: MatFormFieldControl, useExisting: VdListComponent }],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatSelectionList,\r\n\t\tMatListOption,\r\n\t\tFormsModule,\r\n\t]\r\n})\r\nexport class VdListComponent extends AbstractSelectFormField<any> {\r\n\r\n\t/**\r\n\t * Option template\r\n\t */\r\n\t@ContentChild(VdListOptionDirective)\r\n\tpublic optionTemplate?: VdListOptionDirective;\r\n\r\n\t/** \r\n\t * The select element.\r\n\t */\r\n\t@ViewChild(MatSelectionList, { static: false })\r\n\tpublic selectEl?: MatSelectionList;\r\n\r\n\t/** \r\n\t * The select element.\r\n\t */\r\n\t@ViewChild('filterInput', { static: false })\r\n\tpublic filterInput?: ElementRef;\r\n\r\n\t/** \r\n\t * Whether the select has a value.\r\n\t */\r\n\tpublic override get empty(): boolean { return this._readonly ? !this.currentValue : (this.selectEl?.selectedOptions?.isEmpty() ?? true); }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper(\"vd-list\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sets control focus\r\n\t */\r\n\tpublic focus(): void {\r\n\t\tthis.selectEl?.focus();\r\n\t}\r\n}","<mat-selection-list i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelectionList\" (selectionChange)=\"handleChange($event)\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled || readonly\" [hideSingleSelectionIndicator]=\"false\" flex>\r\n  <!-- #region Options -->\r\n  @for (option of filteredOptions; track option; let first = $first) {\r\n    <mat-list-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n      @if (!optionTemplate?.templateRef) {\r\n        <span i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n      }\r\n      @if (optionTemplate?.templateRef) {\r\n        <ng-template [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n      }\r\n    </mat-list-option>\r\n  }\r\n  <!-- #endregion -->\r\n</mat-selection-list>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { AutofillMonitor } from '@angular/cdk/text-field';\r\nimport { Directive, DoCheck, ElementRef, HostBinding, Input, Optional, Self } from '@angular/core';\r\nimport { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';\r\nimport { _ErrorStateTracker, ErrorStateMatcher } from '@angular/material/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\n\r\n/* Unique ID counter for generating unique IDs for each instance of the directive. */\r\nlet nextUniqueId: number = 0;\r\n\r\n/**\r\n * Directive that allows a radio button to be used inside a MatFormField.\r\n */\r\n@Directive({\r\n    selector: '[radioMatFormControl]',\r\n    providers: [{ provide: MatFormFieldControl, useExisting: MatFormFieldRadioDirective }],\r\n    host: {\r\n        '[attr.id]': 'id',\r\n        '[attr.aria-describedby]': 'ariaDescribedby || null',\r\n        '[attr.aria-invalid]': 'errorState',\r\n        '[attr.aria-required]': 'required.toString()',\r\n    }\r\n})\r\nexport class MatFormFieldRadioDirective implements MatFormFieldControl<any>, DoCheck {\r\n    /**\r\n     * Tracks the error state of the radio button control. \r\n     * @type {_ErrorStateTracker}\r\n     */\r\n    protected errorStateTracker: _ErrorStateTracker;\r\n\r\n    /**\r\n     * Object used to control when error messages are shown. \r\n     * @type {ErrorStateMatcher}\r\n     */\r\n    @Input()\r\n    public get errorStateMatcher() { return this.errorStateTracker!.matcher; }\r\n    public set errorStateMatcher(value: ErrorStateMatcher) { this.errorStateTracker!.matcher = value; }\r\n\r\n    /**\r\n     * Whether the control is in an error state. \r\n     * @type {boolean}\r\n     */\r\n    get errorState() { return this.errorStateTracker!.errorState; }\r\n    set errorState(value: boolean) { this.errorStateTracker!.errorState = value; }\r\n\r\n    /**\r\n     * Stream that emits whenever the state of the control changes and should cause the parent\r\n     * form-field to update. Implemented as part of `MatFormFieldControl`.\r\n     * @type {Subject<void>}\r\n     */\r\n    public readonly stateChanges: Subject<void> = new Subject<void>();\r\n\r\n    /**\r\n     * Internal tracking for the disabled state.\r\n     * @type {boolean}\r\n     */\r\n    private _disabled: boolean = false;\r\n\r\n    /**\r\n     * Whether the control is disabled. \r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    get disabled(): boolean {\r\n        if (this.ngControl && this.ngControl.disabled !== null) {\r\n            return this.ngControl.disabled;\r\n        }\r\n        return this._disabled;\r\n    }\r\n    set disabled(value: boolean) {\r\n        this._disabled = coerceBooleanProperty(value);\r\n\r\n        /* Browsers may not fire the blur event if the input is disabled too quickly.\r\n           Reset focus state here to ensure the element doesn't become stuck. */\r\n        if (this.focused) {\r\n            this.focused = false;\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /** \r\n     * Internal tracking for the unique ID.\r\n     * @type {string | undefined}\r\n     */\r\n    private _id?: string;\r\n\r\n    /**\r\n     * Unique ID of the element.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    get id(): string { return this._id ?? ''; }\r\n    set id(value: string) { this._id = value || this.uid; }\r\n\r\n    /**\r\n     * This input provides the placeholder to the mat-form-field.\r\n     * Visual setup is handled via TinyMCE placeholder configuration.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public placeholder: string = '';\r\n\r\n    /** \r\n     * Internal tracking for the required state.\r\n     * @type {boolean}\r\n     */\r\n    private _required: boolean = false;\r\n\r\n    /**\r\n     * Whether the control is required. \r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get required(): boolean {\r\n        return this._required;\r\n    }\r\n    public set required(value: boolean) {\r\n        /* Coerce the input value to a boolean and store it. */\r\n        this._required = coerceBooleanProperty(value);\r\n\r\n        /* Notify the parent form-field to update the required state of the label. */\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /** \r\n     * Internal tracking for the value.\r\n     * @type {any}\r\n     */\r\n    private _value: any;\r\n\r\n    /** \r\n     * The value of the radio button control. \r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public get value(): any {\r\n        return this._value;\r\n    }\r\n    public set value(value: any) {\r\n        if (value !== this._value) {\r\n            this._value = value;\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /** \r\n     * Whether the control is empty. \r\n     * @type {boolean}\r\n     */\r\n    public get empty(): boolean {\r\n        return this.value == null || this.value === '';\r\n    }\r\n\r\n    /** \r\n     * Whether the control is focused. \r\n     * @type {boolean}\r\n     */\r\n    public focused: boolean = false;\r\n\r\n    /** \r\n     * The selector used to identify this control type in the form field. \r\n     * @type {string}\r\n     */\r\n    public controlType: string = 'mat-radio-button';\r\n\r\n    /** \r\n     * The aria-describedby attribute for the control. \r\n     * @type {string | null | undefined}\r\n     */\r\n    public ariaDescribedby?: string | null;\r\n\r\n    /** \r\n     * Whether the label should float.\r\n     * @type {boolean}\r\n     */\r\n    @HostBinding('class.floating')\r\n    public get shouldLabelFloat() {\r\n        return true;\r\n    }\r\n\r\n    /** \r\n     * Whether the control is currently autofilled by the browser. \r\n     * @type {boolean}\r\n     */\r\n    public autofilled: boolean = false;\r\n\r\n    /** \r\n     * Generated unique ID for the instance. \r\n     * @type {string}\r\n     */\r\n    private uid: string = `mat-radio-form-control-${nextUniqueId++}`;\r\n\r\n    /** \r\n     * Constructor that injects necessary dependencies and initializes the error state tracker.\r\n     * @param ngControl The NgControl associated with this control, if any.\r\n     * @param parentForm The parent NgForm, if any.\r\n     * @param parentFormGroup The parent FormGroupDirective, if any.\r\n     * @param defaultErrorStateMatcher The default ErrorStateMatcher to use for error state tracking.\r\n     * @param _elementRef Reference to the host element.\r\n     * @param platform The Platform service for checking the current platform.\r\n     * @param autofillMonitor The AutofillMonitor service for monitoring autofill state.\r\n     */\r\n    constructor(\r\n        @Optional() @Self() public ngControl: NgControl,\r\n        @Optional() parentForm: NgForm,\r\n        @Optional() parentFormGroup: FormGroupDirective,\r\n        defaultErrorStateMatcher: ErrorStateMatcher,\r\n        private _elementRef: ElementRef<HTMLElement>,\r\n        private platform: Platform,\r\n        private autofillMonitor: AutofillMonitor\r\n    ) {\r\n        /* Initialize the error state tracker to manage validation visibility */\r\n        this.errorStateTracker = new _ErrorStateTracker(\r\n            defaultErrorStateMatcher,\r\n            this.ngControl,\r\n            parentFormGroup,\r\n            parentForm,\r\n            this.stateChanges,\r\n        );\r\n\r\n        /* Monitor autofill state and update the control's appearance accordingly */\r\n        if (this.platform.isBrowser) {\r\n            this.autofillMonitor.monitor(this._elementRef.nativeElement).subscribe((event) => {\r\n                this.autofilled = event.isAutofilled;\r\n                this.stateChanges.next();\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Standard Angular lifecycle hook used to check for state changes.\r\n     */\r\n    public ngDoCheck(): void {\r\n        if (this.ngControl) {\r\n            this.updateErrorState();\r\n\r\n            /* Check if the required state has changed on the underlying control */\r\n            const isRequired = this.ngControl.control?.hasValidator(Validators.required) ?? this._required;\r\n            if (isRequired !== this._required) {\r\n                this._required = isRequired;\r\n                this.stateChanges.next();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the error state of the control.\r\n     */\r\n    public updateErrorState() {\r\n        this.errorStateTracker!.updateErrorState();\r\n    }\r\n\r\n    /**\r\n     * Sets the list of IDs that describe the control.\r\n     * Implemented as part of MatFormFieldControl.\r\n     */\r\n    public setDescribedByIds(ids: string[]) {\r\n        this.ariaDescribedby = ids.join(' ');\r\n    }\r\n\r\n    /** \r\n     * Handles clicks on the container by focusing the element.\r\n     * Implemented as part of MatFormFieldControl.\r\n     */\r\n    public onContainerClick() {\r\n        if (!this.focused) {\r\n            this._elementRef.nativeElement.focus();\r\n        }\r\n    }\r\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n/**\r\n * This directive parses pasted currency strings into decimal values and updates the reactive form control.\r\n */\r\n@Directive({\r\n    selector: '[parseDecimal]'\r\n})\r\nexport class ParseDecimalDirective {\r\n    /**\r\n     * Whether the directive is enabled.\r\n     */\r\n    @Input()\r\n    public parseDecimalEnabled = true;\r\n\r\n    /**\r\n     * Constructor to inject dependencies.\r\n     * @param el - The ElementRef instance representing the DOM element.\r\n     * @param control - The NgControl instance for accessing the form control.\r\n     */\r\n    constructor(private el: ElementRef, private control: NgControl) { }\r\n\r\n    /**\r\n     * Handles the paste event to parse and normalize pasted currency strings into decimals.\r\n     * @param event - The ClipboardEvent triggered on pasting.\r\n     */\r\n    @HostListener('paste', ['$event'])\r\n    public onPaste(event: ClipboardEvent): void {\r\n        /* Skip the directive's functionality if disabled */\r\n        if (!this.parseDecimalEnabled) {\r\n            return;\r\n        }\r\n\r\n        /* Retrieve the pasted text from the clipboard. */\r\n        const pastedValue = event.clipboardData?.getData('text');\r\n\r\n        /* Parse the pasted text into a valid decimal. */\r\n        const parsedValue = this.parseCurrency(pastedValue ?? '');\r\n\r\n        /* If the parsed value is a valid number, update the input value and form control. */\r\n        if (!isNaN(parsedValue)) {\r\n            this.el.nativeElement.value = parsedValue;\r\n            this.updateFormControl(parsedValue);\r\n        }\r\n\r\n        /* Prevent the default paste behavior to avoid invalid input. */\r\n        event.preventDefault();\r\n    }\r\n\r\n    /**\r\n     * Parses a currency string into a decimal.\r\n     * @param value - The formatted currency string.\r\n     * @returns The parsed decimal or NaN if invalid.\r\n     */\r\n    private parseCurrency(value: string): number {\r\n        /* Return NaN if the input value is empty. */\r\n        if (!value) {\r\n            return NaN;\r\n        }\r\n\r\n        /* Remove all non-numeric characters except for `,` and `.` to normalize the value. */\r\n        let normalizedValue = value.replace(/[^\\d.,-]/g, '');\r\n\r\n        /* Replace thousands separators (.) with nothing and decimal separators (,) with a dot. */\r\n        normalizedValue = normalizedValue.replace(/\\./g, '').replace(',', '.');\r\n\r\n        /* Convert the cleaned string into a floating-point number. */\r\n        return parseFloat(normalizedValue);\r\n    }\r\n\r\n    /**\r\n     * Updates the reactive form control's value.\r\n     * @param value - The normalized decimal value.\r\n     */\r\n    private updateFormControl(value: number): void {\r\n        if (this.control && this.control.control) {\r\n            this.control.control.setValue(value);\r\n\r\n            /* Mark the control as dirty to indicate user interaction. */\r\n            this.control.control.markAsDirty();\r\n        }\r\n    }\r\n}","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\r\n\r\n/**\r\n * Directive that optionally enforces a fixed, non-removable prefix\r\n * at the beginning of an input field.\r\n */\r\n@Directive({\r\n    selector: '[prefix]'\r\n})\r\nexport class PrefixDirective implements OnInit {\r\n\r\n    /**\r\n     * @property Optional prefix that should be enforced at the beginning\r\n     * of the input value. If undefined or empty, the directive is inactive.\r\n     * @type {string | undefined}\r\n     */\r\n    @Input()\r\n    public prefix?: string;\r\n\r\n    /**\r\n     * @constructor\r\n     * @param el Reference to the native input element.\r\n     */\r\n    constructor(private el: ElementRef<HTMLInputElement>) { }\r\n\r\n    /**\r\n     * Lifecycle hook invoked after input bindings are initialized.\r\n     * Applies the prefix only if it is defined.\r\n     */\r\n    ngOnInit(): void {\r\n        const input = this.el.nativeElement;\r\n\r\n        /* Do nothing if no prefix is configured */\r\n        if (!this.prefix) {\r\n            return;\r\n        }\r\n\r\n        /* Ensure the input starts with the configured prefix */\r\n        if (!input.value?.startsWith(this.prefix)) {\r\n            input.value = this.prefix;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Host listener for the native `input` event.\r\n     * Restores the prefix if it was removed (e.g. via paste),\r\n     * only when a prefix is configured.\r\n     */\r\n    @HostListener('input')\r\n    onInput(): void {\r\n        const input = this.el.nativeElement;\r\n\r\n        /* Skip processing if no prefix is configured */\r\n        if (!this.prefix) {\r\n            return;\r\n        }\r\n\r\n        /* Restore prefix if missing while keeping user input */\r\n        if (!input.value.startsWith(this.prefix)) {\r\n            input.value = this.prefix + input.value.replace(this.prefix, '');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Host listener for the native `keydown` event.\r\n     * Prevents deleting or modifying the prefix using Backspace or Delete,\r\n     * only when a prefix is configured.\r\n     *\r\n     * @param event Keyboard event triggered by user input.\r\n     */\r\n    @HostListener('keydown', ['$event'])\r\n    onKeyDown(event: KeyboardEvent): void {\r\n        /* Skip processing if no prefix is configured */\r\n        if (!this.prefix) {\r\n            return;\r\n        }\r\n\r\n        const input = this.el.nativeElement;\r\n        const prefixLength = this.prefix.length;\r\n\r\n        /* Block Backspace/Delete when cursor is within the prefix range */\r\n        if (\r\n            input.selectionStart !== null &&\r\n            input.selectionStart <= prefixLength &&\r\n            ['Backspace', 'Delete'].includes(event.key)\r\n        ) {\r\n            event.preventDefault();\r\n        }\r\n    }\r\n}","import { Directive, HostListener, Input, Optional, Self } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n    selector: '[removeWhitespace]'\r\n})\r\nexport class RemoveWhitespaceDirective {\r\n\r\n    /**\r\n     * Optional condition to enable or disable the whitespace removal.\r\n     * Use as [removeWhitespace]=\"condition\" or simply removeWhitespace.\r\n     */\r\n    @Input('removeWhitespace')\r\n    public IsEnabled: boolean | string = true;\r\n\r\n    /**\r\n     * Directive to remove all types of whitespace (spaces, tabs, newlines) from the input value.\r\n     * @param ngControl The Angular form control associated with the input element.\r\n     */\r\n    constructor(@Optional() @Self() private ngControl: NgControl) { }\r\n\r\n    /**\r\n     * Event handler for the input event, removing all types of whitespace from the input value.\r\n     * @param value The current value of the input element.\r\n     */\r\n    @HostListener('input', ['$event.target.value'])\r\n    public OnInput(value: string): void {\r\n        /* If the directive is explicitly set to false, do nothing */\r\n        if (this.IsEnabled === false || this.IsEnabled === 'false') {\r\n            return;\r\n        }\r\n\r\n        /* Remove all types of whitespace (spaces, tabs, newlines) from the input value */\r\n        const strippedValue = value.replace(/\\s+/g, '');\r\n\r\n        /* Only update if a change actually occurred to avoid unnecessary processing */\r\n        if (value !== strippedValue) {\r\n            /* Update the form control value without emitting an event to avoid triggering validation or other side effects */\r\n            if (this.ngControl?.control) {\r\n                /* Update the form control value without emitting an event to avoid triggering validation or other side effects */\r\n                this.ngControl.control.setValue(strippedValue, { emitEvent: false });\r\n            }\r\n\r\n            /* If the value accessor is available, update the view value as well to reflect the changes in the input field */\r\n            if (this.ngControl?.valueAccessor) {\r\n                this.ngControl.valueAccessor.writeValue(strippedValue);\r\n            }\r\n        }\r\n    }\r\n}","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdGenericFormCustomFieldDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-generic-form-custom-field]ng-template'\r\n})\r\nexport class VdGenericFormCustomFieldDirective extends CdkPortal {\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Input()\r\n    public row?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Input()\r\n    public inline: boolean = false;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param templateRef \r\n     * @param viewContainerRef \r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}","export enum FormFieldType {\r\n    Text,\r\n    TextArea,\r\n    Checkbox,\r\n    Radio,\r\n    Enum,\r\n    Select,\r\n    VdSelect,\r\n    VdList,\r\n    VdChips,\r\n    Date,\r\n    Time,\r\n    DateTime,\r\n    Calendar,\r\n    Toggle,\r\n    Editor,\r\n    Code,\r\n    File,\r\n    Autocomplete,\r\n    Chips,\r\n    Color,\r\n    Custom = 100\r\n}","import { AfterViewInit, Directive, ElementRef, OnDestroy } from \"@angular/core\";\r\nimport { NgControl } from \"@angular/forms\";\r\n\r\n@Directive({\r\n    selector: '[ngModel], [formControl], [formControlName]'\r\n})\r\nexport class NativeElementInjectorDirective implements AfterViewInit, OnDestroy {\r\n\r\n    /**\r\n     * Constructor\r\n     * @param elementRef Reference to the host DOM element\r\n     * @param control The Angular control associated with the element\r\n     */\r\n    constructor(\r\n        private elementRef: ElementRef,\r\n        private control: NgControl\r\n    ) { }\r\n\r\n    /**\r\n     * Called after the view is initialized. \r\n     * We inject the nativeElement into the abstract control.\r\n     */\r\n    ngAfterViewInit(): void {\r\n        this.injectElement();\r\n    }\r\n\r\n    /**\r\n     * Injects the native element into the control.\r\n     */\r\n    private injectElement(): void {\r\n        /* Ensure the control exists (important for FormArrays) */\r\n        if (this.control?.control) {\r\n            /* \r\n             * Injecting nativeElement into the AbstractControl.\r\n             * This allows us to access it later in isFormValid via (control as any).nativeElement\r\n             */\r\n            (this.control.control as any).nativeElement = this.elementRef.nativeElement;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Cleanup to prevent memory leaks when elements are removed from FormArrays\r\n     */\r\n    ngOnDestroy(): void {\r\n        if (this.control?.control) {\r\n            delete (this.control.control as any).nativeElement;\r\n        }\r\n    }\r\n}","import { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { CdkPortal } from '@angular/cdk/portal';\r\nimport { CommonModule, JsonPipe } from '@angular/common';\r\nimport { Component, ContentChild, ContentChildren, Directive, EventEmitter, Input, OnInit, Output, QueryList, SimpleChange, SimpleChanges, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\r\nimport { MatCalendar, MatDatepicker, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NgxColorsModule } from 'ngx-colors';\r\nimport { VdAutocompleteOptionDirective } from '../../../chips/directives/autocomplete-option';\r\nimport { VdChipDirective } from '../../../chips/directives/chip';\r\nimport { VdChipsComponent } from '../../../chips/public_api';\r\nimport { AutofocusDirective, DisableControlDirective, FuncPipe, OnlyNumberDirective } from '../../../common/public_api';\r\nimport { VdFileInputComponent, VdFileModule } from '../../../file/file.module';\r\nimport { VdListComponent } from '../../../list/components/list';\r\nimport { VdSelectComponent } from '../../../select/components/select';\r\nimport { VdSelectOptionDirective, VdSelectTriggerDirective } from '../../../select/public_api';\r\nimport { MatFormFieldRadioDirective } from '../../directives/mat-form-field-radio';\r\nimport { ParseDecimalDirective } from '../../directives/parse-decimal';\r\nimport { PrefixDirective } from '../../directives/prefix';\r\nimport { RemoveWhitespaceDirective } from '../../directives/remove-whitespace';\r\nimport { VdGenericFormCustomFieldDirective } from '../../directives/vd-generic-form-custom-field';\r\nimport { FormFieldType } from '../../enums/form-field-type';\r\nimport { getFormDefinition } from '../../functions/functions';\r\nimport { FormDefinition } from '../../models/form-definition';\r\nimport { FormFieldDefinition } from '../../models/form-field-definition';\r\nimport { FormFieldGroupDefinition } from '../../models/form-field-group-definition';\r\nimport { NativeElementInjectorDirective } from '../../validators/native-element-injector';\r\nimport { DatePickerHeaderComponent } from '../datepicker/datepicker-header';\r\n\r\n/**\r\n * @interface VdGenericFormModifyEvent\r\n * @description The `VdGenericFormModifyEvent` interface defines the structure of the event emitted\r\n * by the `VdGenericFormComponent` when the form is initialized. It allows parent components to modify\r\n * the form group, field rows, or fields before dynamic subscriptions are attached.\r\n */\r\nexport interface VdGenericFormInitEvent {\r\n    formGroup?: FormGroup;\r\n    fieldRows?: FormFieldDefinition[][];\r\n    fields?: FormFieldDefinition[];\r\n    context?: any;\r\n}\r\n\r\n/**\r\n * @class VdEditorDirective\r\n * @description The `VdEditorDirective` is a custom directive that attaches a `CdkPortal` \r\n * to a template with the `vd-editor` selector. It allows content to be dynamically rendered \r\n * inside the component, using a template reference.\r\n */\r\n@Directive({\r\n    selector: '[vd-editor]ng-template'\r\n})\r\nexport class VdEditorDirective extends CdkPortal {\r\n    /**\r\n     * @constructor\r\n     * @param {TemplateRef<any>} templateRef - The reference to the template to be rendered.\r\n     * @param {ViewContainerRef} viewContainerRef - The container where the template will be inserted.\r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n\r\n/**\r\n * @class VdCodeDirective\r\n * @description The `VdCodeDirective` is a custom directive that attaches a `CdkPortal` \r\n * to a template with the `vd-code` selector. It is used to dynamically render code blocks \r\n * inside the component, using a template reference.\r\n */\r\n@Directive({\r\n    selector: '[vd-code]ng-template'\r\n})\r\nexport class VdCodeDirective extends CdkPortal {\r\n    /**\r\n     * @constructor\r\n     * @param {TemplateRef<any>} templateRef - The reference to the template to be rendered.\r\n     * @param {ViewContainerRef} viewContainerRef - The container where the template will be inserted.\r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n\r\n/**\r\n * @class VdFileDirective\r\n * @description The `VdFileDirective` is a custom directive that attaches a `CdkPortal` \r\n * to a template with the `vd-file` selector. It enables the dynamic rendering of file-related \r\n * content inside the component, using a template reference.\r\n */\r\n@Directive({\r\n    selector: '[vd-file]ng-template'\r\n})\r\nexport class VdFileDirective extends CdkPortal {\r\n    /**\r\n     * @constructor\r\n     * @param {TemplateRef<any>} templateRef - The reference to the template to be rendered.\r\n     * @param {ViewContainerRef} viewContainerRef - The container where the template will be inserted.\r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n\r\n/**\r\n * @class VdCustomDirective\r\n * @description The `VdCustomDirective` is a custom directive that attaches a `CdkPortal` \r\n * to a template with the `vd-custom` selector. It allows custom content to be dynamically \r\n * rendered inside the component, using a template reference.\r\n */\r\n@Directive({\r\n    selector: '[vd-custom]ng-template'\r\n})\r\nexport class VdCustomDirective extends CdkPortal {\r\n    /**\r\n     * @constructor\r\n     * @param {TemplateRef<any>} templateRef - The reference to the template to be rendered.\r\n     * @param {ViewContainerRef} viewContainerRef - The container where the template will be inserted.\r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}\r\n\r\n@Component({\r\n    selector: 'vd-generic-form',\r\n    templateUrl: './generic-form.html',\r\n    styleUrls: ['./generic-form.scss'],\r\n    imports: [\r\n        CommonModule,\r\n        ReactiveFormsModule,\r\n        //--------------------\r\n        MatAutocompleteModule,\r\n        MatChipsModule,\r\n        MatDatepickerModule,\r\n        MatFormFieldModule,\r\n        MatIconModule,\r\n        MatIconButton,\r\n        MatInputModule,\r\n        MatSelectModule,\r\n        MatCheckboxModule,\r\n        MatRadioModule,\r\n        //--------------------\r\n        VdChipsComponent,\r\n        VdFileInputComponent,\r\n        VdFileModule,\r\n        VdListComponent,\r\n        VdSelectComponent,\r\n        VdSelectOptionDirective,\r\n        VdSelectTriggerDirective,\r\n        VdChipDirective,\r\n        VdAutocompleteOptionDirective,\r\n        //--------------------\r\n        AutofocusDirective,\r\n        DisableControlDirective,\r\n        FuncPipe,\r\n        JsonPipe,\r\n        //--------------------\r\n        NgxColorsModule,\r\n        OnlyNumberDirective,\r\n        ParseDecimalDirective,\r\n        PrefixDirective,\r\n        RemoveWhitespaceDirective,\r\n        NativeElementInjectorDirective,\r\n        MatFormFieldRadioDirective\r\n    ]\r\n})\r\nexport class VdGenericFormComponent implements OnInit {\r\n    /**\r\n     * @property Form group associated with the form.\r\n     * @description The `formGroup` is an instance of `FormGroup` that holds the controls and validation rules \r\n     * for the form.\r\n     * @type {FormGroup}\r\n     */\r\n    @Input()\r\n    public formGroup?: FormGroup;\r\n\r\n    /**\r\n     * @property Raw value of the form.\r\n     * @description This getter returns the raw values of all controls in the form as an object, \r\n     * which does not include any validation or status information.\r\n     * @type {any}\r\n     */\r\n    public get formValue(): any { return this.formGroup?.getRawValue(); }\r\n\r\n    /**\r\n     * @property Specifies the class type for the form.\r\n     * @description The `classType` is a generic type used to define the form's structure and behavior.\r\n     * @type {Type<any>}\r\n     */\r\n    @Input()\r\n    public classType?: Type<any>;\r\n\r\n    /**\r\n     * @property The definition of the form structure.\r\n     * @description The `formDefinition` holds the structure and metadata of the form \r\n     * to dynamically generate form fields and validation rules.\r\n     * @type {FormDefinition}\r\n     */\r\n    @Input()\r\n    public formDefinition?: FormDefinition;\r\n\r\n    /**\r\n     * @property Array of form field groups.\r\n     * @description The `fieldGroups` define groups of fields used in the form, enabling organization and structure \r\n     * of the form sections.\r\n     * @type {FormFieldGroupDefinition[]}\r\n     */\r\n    @Input()\r\n    public fieldGroups?: FormFieldGroupDefinition[];\r\n\r\n    /**\r\n     * @property Name of the form group.\r\n     * @description The `groupName` is a string used to identify and target a specific group of form fields \r\n     * within the form.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public groupName?: string;\r\n\r\n    /**\r\n     * @property List of field sets.\r\n     * @description The `fieldSets` array is used to filter and group form fields based on specific sets,\r\n     * allowing dynamic field rendering.\r\n     * @type {string[]}\r\n     */\r\n    @Input()\r\n    public fieldSets?: string[];\r\n\r\n    /**\r\n     * @property Context for the form.\r\n     * @description The `context` represents the current context or environment in which the form is being used,\r\n     * providing necessary information for field rendering and validation.\r\n     * @type {any}\r\n     */\r\n    @Input()\r\n    public context: any;\r\n\r\n    /**\r\n     * @property Flag indicating if debugging is enabled.\r\n     * @description The `debugValue` flag is used to enable or disable debugging features like logging \r\n     * or additional UI components to facilitate troubleshooting.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public debugValue: boolean = false;\r\n\r\n    /**\r\n     * @property Flag indicating if the form is read-only.\r\n     * @description The `readonly` flag determines whether the form fields can be edited or not. \r\n     * If set to `true`, the form fields are disabled for editing.\r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public readonly?: boolean;\r\n\r\n    /**\r\n     * @property onInit\r\n     * @description Emitted after fields are built and filtered, allowing parent components to mutate `formGroup`,\r\n     * `fieldRows`, or `fields` before dynamic subscriptions are attached.\r\n     * @type {EventEmitter<VdGenericFormInitEvent>}\r\n     */\r\n    @Output('init')\r\n    public onInit: EventEmitter<VdGenericFormInitEvent> = new EventEmitter<VdGenericFormInitEvent>();\r\n\r\n    /**\r\n     * @property Key codes used for separating input values.\r\n     * @description The `separatorKeysCodes` is an array of key codes (e.g., for comma or enter) used for \r\n     * separating values in input fields like tags or chips.\r\n     * @type {number[]}\r\n     */\r\n    @Input()\r\n    public separatorKeysCodes: number[] = [ENTER, COMMA];\r\n\r\n    /**\r\n     * @property Array of field rows.\r\n     * @description The `fieldRows` represent the layout and organization of form fields grouped in rows.\r\n     * Each row contains an array of `FormFieldDefinition` objects.\r\n     * @type {FormFieldDefinition[][]}\r\n     */\r\n    public fieldRows?: FormFieldDefinition[][];\r\n\r\n    /**\r\n     * @property Array of form fields.\r\n     * @description The `fields` array holds the list of form fields to be rendered, each defined by a `FormFieldDefinition`.\r\n     * @type {FormFieldDefinition[]}\r\n     */\r\n    public fields?: FormFieldDefinition[];\r\n\r\n    /**\r\n     * @property The `FormFieldType` enumeration.\r\n     * @description The `FormFieldType` is an enum used to classify different types of form fields, such as \r\n     * text, checkbox, file, etc.\r\n     * @type {typeof FormFieldType}\r\n     */\r\n    public FormFieldType: typeof FormFieldType = FormFieldType;\r\n\r\n    /**\r\n     * @property Editor template content.\r\n     * @description The `editorTemplate` holds the content for the editor section, which can be customized \r\n     * using a `VdEditorDirective`.\r\n     * @type {VdEditorDirective}\r\n     */\r\n    @ContentChild(VdEditorDirective)\r\n    public editorTemplate?: VdEditorDirective;\r\n\r\n    /**\r\n     * @property Code template content.\r\n     * @description The `codeTemplate` holds the content for the code section, which can be customized \r\n     * using a `VdCodeDirective`.\r\n     * @type {VdCodeDirective}\r\n     */\r\n    @ContentChild(VdCodeDirective)\r\n    public codeTemplate?: VdCodeDirective;\r\n\r\n    /**\r\n     * @property File template content.\r\n     * @description The `fileTemplate` holds the content for the file upload section, which can be customized \r\n     * using a `VdFileDirective`.\r\n     * @type {VdFileDirective}\r\n     */\r\n    @ContentChild(VdFileDirective)\r\n    public fileTemplate?: VdFileDirective;\r\n\r\n    /**\r\n     * @property Custom template content.\r\n     * @description The `customTemplate` holds the content for custom form sections, which can be customized \r\n     * using a `VdCustomDirective`.\r\n     * @type {VdCustomDirective}\r\n     */\r\n    @ContentChild(VdCustomDirective)\r\n    public customTemplate?: VdCustomDirective;\r\n\r\n    /**\r\n     * @property Date picker header component.\r\n     * @description The `datePickerHeaderComponent` represents the component used for displaying a custom \r\n     * header in the date picker.\r\n     * @type {DatePickerHeaderComponent}\r\n     */\r\n    public datePickerHeaderComponent = DatePickerHeaderComponent;\r\n\r\n    /**\r\n     * @property Template reference for custom fields at the bottom.\r\n     * @description The `bottom` template reference is used to display custom fields at the bottom of the form \r\n     * if needed.\r\n     * @type {TemplateRef<any>}\r\n     */\r\n    @ContentChild('bottom')\r\n    public bottom?: TemplateRef<any>;\r\n\r\n    /**\r\n     * @property Template reference for custom fields.\r\n     * @description The `customFields` template reference is used to render custom fields in the form as defined \r\n     * by the user.\r\n     * @type {TemplateRef<any>}\r\n     */\r\n    @ContentChild('customFields')\r\n    public customFields?: TemplateRef<any>;\r\n\r\n    /**\r\n     * @property Template references for custom fields.\r\n     * @description The `customFieldsTemplates` holds a collection of `VdGenericFormCustomFieldDirective` templates \r\n     * used for rendering custom fields in the form.\r\n     * @type {QueryList<VdGenericFormCustomFieldDirective>}\r\n     */\r\n    @ContentChildren(VdGenericFormCustomFieldDirective)\r\n    public customFieldsTemplates?: QueryList<VdGenericFormCustomFieldDirective>;\r\n\r\n    /**\r\n     * @property Filtered options for autocomplete fields.\r\n     * @description The `autocompleteFilteredOptions` holds the options for autocomplete fields after they have \r\n     * been filtered based on the user input.\r\n     * @type {any}\r\n     */\r\n    public autocompleteFilteredOptions: any = {};\r\n\r\n    /**\r\n     * A callback method that is invoked immediately after the\r\n     * default change detector has checked the directive's\r\n     * data-bound properties for the first time,\r\n     * and before any of the view or content children have been checked.\r\n     * It is invoked only once when the directive is instantiated.\r\n     */\r\n    public ngOnInit(): void {\r\n        /* Build the form fields if a class type is defined */\r\n        if (this.classType /*&& !this.fieldGroups*/) {\r\n            this.buildFields();\r\n        }\r\n\r\n        /* Retrieve the field rows matching the specified group name, excluding hidden groups */\r\n        let fieldRows = this.fieldGroups?.filter(x =>\r\n            x.name?.trim() == this.groupName?.trim() &&\r\n            !x.hidden\r\n        )[0]?.groups;\r\n\r\n        /* Clone the field rows to avoid modifying the original data */\r\n        if (fieldRows) {\r\n            this.fieldRows = fieldRows.map(a => [...a.map(y => ({ ...y }))]);\r\n        }\r\n\r\n        /* Filter the fields to retain only those belonging to the specified field sets */\r\n        if (this.fieldSets && this.fieldRows) {\r\n            this.fieldRows = this.fieldRows\r\n                .map(x =>\r\n                    x.filter(y =>\r\n                        y.fieldSets?.some(z =>\r\n                            this.fieldSets?.some(a => a?.trim()?.toLowerCase() == z?.trim()?.toLowerCase())\r\n                        )\r\n                    )\r\n                )\r\n                .filter(x => x.length); // Remove empty rows\r\n        }\r\n\r\n        /* Flatten the field rows to extract all fields and clone them */\r\n        let fields = this.fieldRows?.reduce((a, b) => a.concat(b), []);\r\n        if (fields) {\r\n            this.fields = fields.map(a => ({ ...a }));\r\n        }\r\n\r\n        /* Allow parent components to adjust form controls and field metadata before subscriptions are created. */\r\n        this.onInit.emit({\r\n            formGroup: this.formGroup,\r\n            fieldRows: this.fieldRows,\r\n            fields: this.fields,\r\n            context: this.context\r\n        });\r\n\r\n        /* Subscribe to value change events for fields with custom 'change' handlers */\r\n        this.fields\r\n            ?.filter(y => y.type != FormFieldType.File && y.change)\r\n            ?.forEach(x => {\r\n                this.formGroup\r\n                    ?.get(x.name ?? '')\r\n                    ?.valueChanges?.subscribe(y => x.change?.(y, this.formGroup?.value, this.formGroup, this.context));\r\n            });\r\n\r\n        /**\r\n         * Updates the dynamic properties (type, label, options, etc.) of a field.\r\n         * @param orgField - The original field definition.\r\n         * @param x - The current field instance being updated.\r\n         */\r\n        let updateFormField = (orgField: FormFieldDefinition, x: FormFieldDefinition) => {\r\n            /* Retrieve and render the field type */\r\n            x.type = typeof orgField?.type === 'function'\r\n                ? orgField.type(this.formValue, this.formGroup, this.context)\r\n                : x.type;\r\n\r\n            /* Retrieve and render the field label */\r\n            x.label = typeof orgField?.label === 'function'\r\n                ? orgField.label(this.formValue, this.formGroup, this.context)\r\n                : x.label;\r\n\r\n            /* Retrieve and render the field options */\r\n            x.options = typeof orgField?.options === 'function'\r\n                ? orgField.options(this.formValue, this.formGroup, this.context)\r\n                : x.options;\r\n\r\n            /* Get the form control associated with the field */\r\n            let formControl: FormControl<any> = <FormControl<any>>this.formGroup?.get(x.name ?? '');\r\n\r\n            /* Check if the field is required and update validators accordingly */\r\n            let required = typeof x.required === 'function' ? x.required(this.formValue, this.formGroup, this.context) : x.required;\r\n            if (formControl && required !== undefined) {\r\n                if (required === true) {\r\n                    formControl.addValidators(Validators.required);\r\n                } else {\r\n                    formControl.removeValidators(Validators.required);\r\n                }\r\n            }\r\n        };\r\n\r\n        /* Update dynamic properties for each field and subscribe to form value changes */\r\n        this.fields?.forEach(x => {\r\n            const orgField = this.fields?.find(y => y.name == x.name);\r\n            if (orgField) {\r\n                updateFormField(orgField, x);\r\n                this.formGroup?.valueChanges?.subscribe(() => updateFormField(orgField, x));\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Handles the autocomplete event by filtering options based on user input.\r\n     * @param field - The field definition for which autocomplete is handled.\r\n     * @param event - The input event containing the current value.\r\n     */\r\n    public filterAutocomplete(field: FormFieldDefinition, event: any): void {\r\n        if (field.name) {\r\n            this.autocompleteFilteredOptions[field.name] = (<{ id: any; name: string }[]>field.options)\r\n                ?.filter(option => option.name.toLowerCase().includes(event.value?.toString()?.toLowerCase()));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a chip when an autocomplete value is selected.\r\n     * @param field - The form field definition where the chip is added.\r\n     * @param event - The event containing the selected autocomplete option.\r\n     * @param chipInputEvent - The input event associated with the chip input.\r\n     */\r\n    public autocompleteValueSelected(field: FormFieldDefinition, event: MatAutocompleteSelectedEvent, chipInputEvent: any): void {\r\n        /* Add the selected value as a chip */\r\n        this._addChip(field, event.option.viewValue);\r\n\r\n        /* Clear the input value */\r\n        chipInputEvent.value = '';\r\n    }\r\n\r\n    /**\r\n     * Adds a chip from the chip input event.\r\n     * @param field - The form field definition where the chip is added.\r\n     * @param event - The event containing the chip input value.\r\n     */\r\n    public addChip(field: FormFieldDefinition, event: MatChipInputEvent): void {\r\n        /* Add the value from the chip input */\r\n        this._addChip(field, event.value);\r\n\r\n        /* Clear the chip input field */\r\n        event.chipInput!.clear();\r\n    }\r\n\r\n    /**\r\n     * Handles pasting multiple chips into the chip input field.\r\n     * @param field - The form field definition where chips are added.\r\n     * @param event - The clipboard event containing the pasted data.\r\n     */\r\n    public onPasteChips(field: FormFieldDefinition, event: ClipboardEvent): void {\r\n        /* Extract text from the clipboard data */\r\n        const clipboardData = event.clipboardData;\r\n        const pastedText = clipboardData?.getData('text') || '';\r\n\r\n        /* Split the pasted text by commas, semicolons, or newlines, then trim and filter out empty items */\r\n        const items = pastedText\r\n            .split(/[,\\n;]/)            /* Split by commas, semicolons, or newlines */\r\n            .map(item => item.trim())   /* Trim leading and trailing spaces */\r\n            .filter(item => item);      /* Remove empty items */\r\n\r\n        /* Add each valid item as a chip */\r\n        items?.forEach(x => this._addChip(field, x.trim()));\r\n\r\n        /* Prevent the default paste action */\r\n        event.preventDefault();\r\n    }\r\n\r\n    /**\r\n     * Removes a chip from the chip list.\r\n     * @param field - The form field definition where the chip is removed.\r\n     * @param chip - The chip value to remove.\r\n     */\r\n    public removeChip(field: FormFieldDefinition, chip: any): void {\r\n        /* Get the form control associated with the field name */\r\n        let control = this.formGroup?.controls[field.name ?? ''];\r\n\r\n        /* Find the index of the chip to remove */\r\n        const index = control?.value.indexOf(chip);\r\n        if (control && index >= 0) {\r\n            /* Remove the chip from the control's value array */\r\n            control.value.splice(index, 1);\r\n\r\n            /* Update the form control state and validity */\r\n            control.updateValueAndValidity();\r\n            this.formGroup?.markAsDirty();\r\n            this.formGroup?.updateValueAndValidity();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a chip to the form control based on its value.\r\n     * @param field - The form field definition where the chip is added.\r\n     * @param value - The value of the chip to add.\r\n     */\r\n    private _addChip(field: FormFieldDefinition, value: string): void {\r\n        /* Get the form control associated with the field name */\r\n        let control = this.formGroup?.controls[field.name ?? ''];\r\n\r\n        /* Trim the input value */\r\n        value = (value || '').trim();\r\n\r\n        if (control && value) {\r\n            /* Add the value to the control based on its input type */\r\n            switch (field.inputType) {\r\n                case 'number':\r\n                    /* Parse and add a number if valid */\r\n                    let number = parseInt(value);\r\n                    if (!isNaN(number)) {\r\n                        control.value.push(number);\r\n                    }\r\n                    break;\r\n\r\n                case 'float':\r\n                    /* Parse and add a float if valid */\r\n                    let float = parseFloat(value);\r\n                    if (!isNaN(float)) {\r\n                        control.value.push(float);\r\n                    }\r\n                    break;\r\n\r\n                default:\r\n                    /* Add the value as a string */\r\n                    control.value.push(value);\r\n                    break;\r\n            }\r\n\r\n            /* Update the form control state and validity */\r\n            control.updateValueAndValidity();\r\n            this.formGroup?.markAsDirty();\r\n            this.formGroup?.updateValueAndValidity();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the event when a date picker is opened.\r\n     * @param datePicker - The date picker instance that is opened.\r\n     * @param field - The form field definition associated with the date picker.\r\n     */\r\n    public handleDatePickerOpened(datePicker: MatDatepicker<any>, field: FormFieldDefinition): void {\r\n        if (field?.datePickerOpened) {\r\n            /* Invoke the custom callback for when the date picker is opened */\r\n            field.datePickerOpened(datePicker, this.formGroup?.value, this.formGroup, this.context);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles date filter event asynchronously for the date picker.\r\n     * @param datePicker - The date picker instance to apply the filter to.\r\n     * @param field - The form field definition containing the async filter logic.\r\n     * @param date - The current date value to be validated.\r\n     */\r\n    public handleDatePickerFilterAsync(datePicker: MatDatepicker<any>, field: FormFieldDefinition, date: Date | any): void {\r\n        if (field?.dateFilterAsync) {\r\n            /* Disable all dates by setting the date filter to always return false. */\r\n            datePicker.datepickerInput.dateFilter = (d: Date) => false;\r\n\r\n            /* Trigger Angular's change detection to update the date filter in the view. */\r\n            datePicker.ngOnChanges(<SimpleChanges>{ 'dateFilter': new SimpleChange(\"\", \"\", false) });\r\n\r\n            /* Call the asynchronous date filter function to validate the provided date. */\r\n            field.dateFilterAsync(date, this.formGroup?.value, this.formGroup, this.context).subscribe(x => {\r\n                /* Update the date filter based on the asynchronous validation result. */\r\n                datePicker.datepickerInput.dateFilter = (d: Date) => d && x(d);\r\n\r\n                /* Trigger Angular's change detection again to reflect the new date filter. */\r\n                datePicker.ngOnChanges(<SimpleChanges>{ 'dateFilter': new SimpleChange(\"\", \"\", false) });\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles calendar filter event asynchronously for the calendar component.\r\n     * @param calendar - The calendar instance to apply the filter to.\r\n     * @param field - The form field definition containing the async filter logic.\r\n     * @param date - The current date value to be validated.\r\n     */\r\n    public handleCalendarFilterAsync(calendar: MatCalendar<any>, field: FormFieldDefinition, date: Date | any): void {\r\n        if (field?.dateFilterAsync) {\r\n            /* Disable all dates by setting the date filter to always return false. */\r\n            calendar.dateFilter = (d: Date) => false;\r\n\r\n            /* Trigger Angular's change detection to update the date filter in the view. */\r\n            calendar.ngOnChanges(<SimpleChanges>{ 'dateFilter': new SimpleChange(\"\", \"\", false) });\r\n\r\n            /* Call the asynchronous date filter function to validate the provided date. */\r\n            var subscription = field.dateFilterAsync(date, this.formGroup?.value, this.formGroup, this.context).subscribe(x => {\r\n                /* Update the date filter based on the asynchronous validation result. */\r\n                calendar.dateFilter = (d: Date) => d && x(d);\r\n\r\n                /* Trigger Angular's change detection again to reflect the new date filter. */\r\n                calendar.ngOnChanges(<SimpleChanges>{ 'dateFilter': new SimpleChange(\"\", \"\", false) });\r\n\r\n                /* Unsubscribe from the observable to prevent memory leaks. */\r\n                subscription.unsubscribe();\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Builds the form fields for the component.\r\n     */\r\n    protected buildFields(): void {\r\n        /* Ensure the class type is defined, as it is required to generate the form definition. */\r\n        if (!this.classType) {\r\n            throw new Error('Invalid classType. Please ensure classType is defined, not null, and is a constructor function.');\r\n        }\r\n\r\n        /* Generate the form definition using the class type's metadata. */\r\n        this.formDefinition = getFormDefinition(new this.classType(), this.formGroup, this.context);\r\n\r\n        /* Create form field groups, excluding any hidden fields. */\r\n        this.fieldGroups = this.formDefinition?.fieldGroups?.filter(x => !x.hidden)?.map(a => { return { ...a } });\r\n    }\r\n\r\n    /**\r\n     * Logs a message to the console.\r\n     * @param message - The primary message to log.\r\n     * @param optionalParams - Additional parameters to include in the log.\r\n     */\r\n    public log(message: any, ...optionalParams: any[]): void {\r\n        /* Log the provided message and optional parameters to the console. */\r\n        console.log(message, optionalParams);\r\n    }\r\n}","@if (formGroup && fieldRows) {\n    <div [formGroup]=\"formGroup!\">\n        <!-- #region Fields -->\n        @for (fields of fieldRows; track fields; let i = $index) {\n            <div layout-gt-sm=\"row\" layout=\"column\">\n                @for (field of fields; track field) {\n                    @if (!field.hidden && !(field.hide && field.hide(formValue, formGroup, context))) {\n                        @switch (field.type) {\n                            <!-- #region Text input -->\n                            @case (FormFieldType.Text) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <input matInput\n                                           [type]=\"field.inputType ?? 'text'\"\n                                           [minlength]=\"field.minLength | func:formValue:formGroup:context\"\n                                           [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\n                                           [min]=\"field.min\" [max]=\"field.max\"\n                                           [formControlName]=\"field.name!\"\n                                           [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                           [pattern]=\"((field.pattern  | func:formValue:formGroup:context)??'')\"\n                                           [autoFocus]=\"((field.focus  | func:formValue:formGroup:context)??false)\"\n                                           [selectText]=\"((field.selectText  | func:formValue:formGroup:context)??false)\"\n                                           [onlyNumber]=\"(field.numbersOnly??false)\"\n                                           [prefix]=\"field.prefix | func:formValue:formGroup:context\"\n                                           parseDecimal\n                                           [parseDecimalEnabled]=\"(field.parseDecimal??false)\"\n                                           [removeWhitespace]=\"(field.removeWhitespace??false)\"\n                                           (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\"\n                                                        mat-icon-button\n                                                        (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Textarea -->\n                            @case (FormFieldType.TextArea) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <textarea matInput\n                                              [formControlName]=\"field.name!\"\n                                              rows=\"field.rows||2\"\n                                              [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                              [prefix]=\"field.prefix | func:formValue:formGroup:context\"\n                                              [removeWhitespace]=\"(field.removeWhitespace??false)\"\n                                              (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\n                                    </textarea>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\"\n                                                        mat-icon-button\n                                                        (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Enum -->\n                            @case (FormFieldType.Enum) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <vd-select [formControlName]=\"field.name!\"\n                                               [enum]=\"field.enumType\"\n                                               [enumMetadata]=\"field.enumMetadata\"\n                                               [enumFilter]=\"field.enumFilter | func:formValue:formGroup:context\"\n                                               [optionValueProperty]=\"field.optionValueProperty\"\n                                               [optionTextProperty]=\"field.optionTextProperty\"\n                                               [defaultOption]=\"field.defaultOption??true\"\n                                               [multiple]=\"field.multiple\"\n                                               [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                               [triggerCssClass]=\"field.triggerCssClass\"\n                                               [context]=\"context\"\n                                               layout=\"row\"\n                                               flex>\n                                        @if (field.triggerTemplate; as trigger) {\n                                            <ng-template vd-select-trigger let-trigger=\"trigger\">\n                                                <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\n                                            </ng-template>\n                                        }\n                                        @if (field.optionTemplate; as option) {\n                                            <ng-template vd-select-option let-option=\"option\">\n                                                <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\n                                            </ng-template>\n                                        }\n                                        @if(field.optionIcon && !field.optionTemplate){\n                                            <ng-template vd-select-option let-option=\"option\" let-text=\"text\">\n                                                <div layout=\"row\" layout-align=\"start center\">\n                                                    <ng-template #enumOptionIconTemplate\n                                                                 [ngTemplateOutlet]=\"enumOptionIconTemplate\"\n                                                                 let-optionIcon=\"optionIcon\"\n                                                                 [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\n                                                        @if (optionIcon.svgIcon) {\n                                                            <mat-icon [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\n                                                        }\n                                                        @if (optionIcon.matIcon) {\n                                                            <mat-icon [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\n                                                        }\n                                                    </ng-template>\n                                                    <span>{{text}}</span>\n                                                </div>\n                                            </ng-template>\n                                        }\n                                    </vd-select>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\"\n                                                        mat-icon-button\n                                                        (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region VdSelect -->\n                            @case (FormFieldType.VdSelect) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <vd-select [formControlName]=\"field.name!\"\n                                               [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\n                                               [params]=\"field.params??{} | func:formValue:formGroup:context\"\n                                               [projection]=\"field.projection\" [mapper]=\"field.mapper\"\n                                               [compareWith]=\"field.compareWith\"\n                                               [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\n                                               [optionValueProperty]=\"field.optionValueProperty\"\n                                               [optionTextProperty]=\"field.optionTextProperty\"\n                                               [defaultOption]=\"field.defaultOption??true\"\n                                               [matIconKey]=\"field.optionMatIconProperty\"\n                                               [svgIconKey]=\"field.optionSvgIconProperty\"\n                                               [fontSet]=\"field.optionIconFontSet\"\n                                               [multiple]=\"field.multiple\"\n                                               [selectFirst]=\"field.selectFirst\"\n                                               [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                               [triggerCssClass]=\"field.triggerCssClass\"\n                                               (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\n                                               (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\n                                               layout=\"row\"\n                                               flex>\n                                        @if (field.triggerTemplate; as trigger) {\n                                            <ng-template vd-select-trigger let-trigger=\"trigger\">\n                                                <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\n                                            </ng-template>\n                                        }\n                                        @if (field.triggerMapper && field.multiple && field.triggerMode == 'chip'; as trigger) {\n                                            <ng-template vd-select-trigger let-trigger=\"trigger\">\n                                                <mat-chip-set>\n                                                    @for (item of trigger; track item) {\n                                                        <mat-chip [color]=\"field.chipColor\" [color]=\"field.chipColor\" highlighted selected>\n                                                            <span [innerHTML]=\"field.triggerMapper(item, formValue, formGroup, context)\"></span>\n                                                        </mat-chip>\n                                                    }\n                                                </mat-chip-set>\n                                            </ng-template>\n                                        }\n                                        @if (field.optionTemplate; as option) {\n                                            <ng-template vd-select-option let-option=\"option\">\n                                                <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\n                                            </ng-template>\n                                        }\n                                        @if(field.optionIcon && !field.optionTemplate){\n                                            <ng-template vd-select-option let-option=\"option\" let-text=\"text\">\n                                                <div layout=\"row\" layout-align=\"start center\">\n                                                    <ng-template #selectOptionIconTemplate\n                                                                 [ngTemplateOutlet]=\"selectOptionIconTemplate\"\n                                                                 let-optionIcon=\"optionIcon\"\n                                                                 [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\n                                                        @if (optionIcon.svgIcon) {\n                                                            <mat-icon [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\n                                                        }\n                                                        @if (optionIcon.matIcon) {\n                                                            <mat-icon [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\n                                                        }\n                                                    </ng-template>\n                                                    <span>{{text}}</span>\n                                                </div>\n                                            </ng-template>\n                                        }\n                                    </vd-select>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region VdList -->\n                            @case (FormFieldType.VdList) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-list\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <vd-list [formControlName]=\"field.name!\"\n                                             [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\n                                             [params]=\"field.params ??{} | func:formValue:formGroup:context\"\n                                             [projection]=\"field.projection\"\n                                             [mapper]=\"field.mapper\"\n                                             [compareWith]=\"field.compareWith\"\n                                             [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\n                                             [optionValueProperty]=\"field.optionValueProperty\"\n                                             [optionTextProperty]=\"field.optionTextProperty\"\n                                             [multiple]=\"field.multiple\"\n                                             [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                             (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\n                                             (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\n                                             [style.max-width]=\"field.maxWidth\"\n                                             [style.max-height]=\"field.maxHeight\"\n                                             flex>\n                                        @if (field.optionTemplate; as option) {\n                                            <ng-template vd-list-option let-option=\"option\">\n                                                <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\n                                            </ng-template>\n                                        }\n                                    </vd-list>\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Chips -->\n                            @case (FormFieldType.Chips) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <mat-chip-grid #chipList [formControlName]=\"field.name!\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\n                                        @for (chip of $any(formGroup.controls[field.name!])?.value; track chip) {\n                                            <mat-chip-row\n                                                          (removed)=\"removeChip(field, chip)\"\n                                                          [color]=\"field.chipColor\"\n                                                          selectable=\"true\"\n                                                          highlighted\n                                                          selected>\n                                                <span>{{chip}}</span>\n                                                <button matChipRemove>\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">cancel</mat-icon>\n                                                </button>\n                                            </mat-chip-row>\n                                        }\n                                        <input [placeholder]=\"$any(field.label)\"\n                                               #chipInput\n                                               [matChipInputFor]=\"chipList\"\n                                               [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n                                               [matAutocomplete]=\"chipAutocomplete\"\n                                               (input)=\"filterAutocomplete(field, chipInput)\"\n                                               (matChipInputTokenEnd)=\"addChip(field, $event)\"\n                                               (paste)=\"onPasteChips(field, $event)\"\n                                               autocomplete=\"off\">\n                                    </mat-chip-grid>\n                                    <mat-autocomplete autoActiveFirstOption #chipAutocomplete=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\" (optionSelected)=\"autocompleteValueSelected(field, $event, chipInput)\">\n                                        @for (option of autocompleteFilteredOptions[field.name!]; track option) {\n                                            <mat-option [value]=\"option.id\">\n                                                {{option.name}}\n                                            </mat-option>\n                                        }\n                                    </mat-autocomplete>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region VdChips -->\n                            @case (FormFieldType.VdChips) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <vd-chips #vdChip\n                                              [formControlName]=\"field.name!\"\n                                              [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\n                                              [params]=\"field.params || {} | func:formValue:formGroup:context\"\n                                              [searchField]=\"field.searchField\"\n                                              [searchFields]=\"field.searchFields\"\n                                              [filters]=\"field.filters\"\n                                              [selectFirst]=\"field.selectFirst\"\n                                              [classType]=\"field.classType\"\n                                              [projection]=\"field.projection\"\n                                              [key]=\"field.optionValueProperty\"\n                                              [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                              [removable]=\"!field.clear\"\n                                              [context]=\"context\"\n                                              [suffixButtons]=\"field.suffixButtons\"\n                                              [autocompleteCssClass]=\"field.autocompleteCssClass\"\n                                              (initSelect)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\n                                              (selected)=\"!field.itemChange ? $event.callback(true) : $event.callback(field.itemChange($event.value, formValue, formGroup, context) !== false)\"\n                                              (cleared)=\"field.clear && field.clear(formValue, formGroup, context);\"\n                                              [customValue]=\"field.customValue\"\n                                              layout=\"row\"\n                                              flex>\n                                        @if (field.chipTemplate; as chip) {\n                                            <ng-template vd-chip let-chip=\"chip\">\n                                                <div [outerHTML]=\"field.chipTemplate(chip, formValue, formGroup, context)\"></div>\n                                            </ng-template>\n                                        }\n                                        @if (field.autocompleteTemplate; as option) {\n                                            <ng-template vd-autocomplete-option let-option=\"option\">\n                                                <div [outerHTML]=\"field.autocompleteTemplate(option, formValue, formGroup, context)\"></div>\n                                            </ng-template>\n                                        }\n                                    </vd-chips>\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @if (vdChip.emptyResult) {\n                                        <mat-hint class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results were found.</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Select -->\n                            @case (FormFieldType.Select) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <mat-select [formControlName]=\"field.name!\"\n                                                [multiple]=\"field.multiple\"\n                                                [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                                (selectionChange)=\"field.itemSelect && field.itemSelect($event.value, formValue, formGroup, context);\"\n                                                flex>\n                                        @for (option of (field?.options | func:formValue:formGroup:context) ?? []; track option.id) {\n                                            <mat-option [value]=\"option.id\">{{option.name}}</mat-option>\n                                        }\n                                    </mat-select>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Autocomplete -->\n                            @case (FormFieldType.Autocomplete) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <input type=\"text\"\n                                           matInput\n                                           [formControlName]=\"field.name!\"\n                                           [min]=\"field.min\"\n                                           [max]=\"field.max\"\n                                           [matAutocomplete]=\"auto\"\n                                           (input)=\"filterAutocomplete(field, autocompleteInput)\"\n                                           autocomplete=\"off\"\n                                           [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                           [prefix]=\"field.prefix | func:formValue:formGroup:context\"\n                                           (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\n                                           #autocompleteInput>\n                                    <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\">\n                                        @for (option of autocompleteFilteredOptions[field.name!]; track option) {\n                                            <mat-option [value]=\"option.id\">\n                                                {{option.name}}\n                                            </mat-option>\n                                        }\n                                    </mat-autocomplete>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Date -->\n                            @case (FormFieldType.Date) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <!-- Row container inside one mat-form-field -->\n                                    <div flex layout=\"row\" layout-align=\"start center\" [class]=\"{'has-time': field.showTime}\">\n                                        <!-- Date input -->\n                                        <input matInput\n                                               [formControlName]=\"field.name!\"\n                                               [min]=\"field.min\"\n                                               [max]=\"field.max\"\n                                               autocomplete=\"off\"\n                                               [matDatepicker]=\"datePicker\"\n                                               [matDatepickerFilter]=\"field.dateFilter\"\n                                               [readonly]=\"readonly || field.forceSelect || (field.readonly && field.readonly(formValue, formGroup, context))\"\n                                               (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\n                                        <!-- Time display -->\n                                        @if(field.showTime) {\n                                            <input matInput [value]=\"formGroup.get(field.name!)?.value | date:field.timeFormat\" readonly>\n                                        }\n                                    </div>\n                                    <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\n                                    <mat-datepicker #datePicker [disabled]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\" (monthSelected)=\"handleDatePickerFilterAsync(datePicker, field, $event )\" (opened)=\"handleDatePickerOpened(datePicker, field)\" [calendarHeaderComponent]=\"datePickerHeaderComponent\"></mat-datepicker>\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Calendar -->\n                            @case (FormFieldType.Calendar) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-calendar\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <input input=\"hidden\" hidden matInput [formControlName]=\"field.name!\">\n                                    <mat-calendar #calendar\n                                                  [selected]=\"formGroup.get(field.name!)?.value\"\n                                                  (selectedChange)=\"formGroup.get(field.name!)?.setValue($event);\"\n                                                  (monthSelected)=\"handleCalendarFilterAsync(calendar, field, $event )\"\n                                                  [headerComponent]=\"datePickerHeaderComponent\"\n                                                  (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\n                                                  style=\"width: 100%;\"></mat-calendar>\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error layout-margin>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Color input -->\n                            @case (FormFieldType.Color) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <input [type]=\"field.inputType ?? 'text'\"\n                                           [minlength]=\"field.minLength | func:formValue:formGroup:context\"\n                                           [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\n                                           [min]=\"field.min\" [max]=\"field.max\" matInput [formControlName]=\"field.name!\"\n                                           [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                           [pattern]=\"((field.pattern  | func:formValue:formGroup:context)??'')\"\n                                           [onlyNumber]=\"(field.numbersOnly??false)\"\n                                           (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\n                                    <ngx-colors matSuffix ngx-colors-trigger [formControlName]=\"field.name!\" [hideTextInput]=\"true\" (close)=\"this.formGroup.get(field.name!)?.setValue($event)\" format=\"hex\" class=\"color-picker\"></ngx-colors>\n                                    @for (suffixButton of field.suffixButtons; track suffixButton) {\n                                        <ng-container matSuffix>\n                                            @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                                                <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                                                    <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                                                </button>\n                                            }\n                                        </ng-container>\n                                    }\n                                    @if (field.hint) {\n                                        <mat-hint>{{field.hint}}</mat-hint>\n                                    }\n                                    @for (errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Checkbox -->\n                            @case (FormFieldType.Checkbox) {\n                                <div [attr.flex]=\"field.flex||0\" class=\"mat-checkbox-wrap\" [class]=\"field.cssClass\">\n                                    <mat-checkbox [formControlName]=\"field.name!\"\n                                                  [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\n                                        {{field.label}}\n                                    </mat-checkbox>\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error layout-margin>{{errorMessage}}</mat-error>\n                                    }\n                                </div>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Radio -->\n                            @case(FormFieldType.Radio) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass || 'radio-form-field'\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <mat-radio-group radioMatFormControl [formControlName]=\"field.name!\" layout=\"row\" class=\"radio-group-inside-field\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\n                                        @for (option of $any(field.options); track option) {\n                                            <mat-radio-button [value]=\"option.id\" class=\"mat-radio-button-wrap\">\n                                                {{option.name}}\n                                            </mat-radio-button>\n                                        }\n                                    </mat-radio-group>\n                                    @for (errorMessage of $any(formGroup.controls[field.name!])['errorMessages']; track errorMessage) {\n                                        <mat-error>{{errorMessage}}</mat-error>\n                                    }\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Editor -->\n                            @case (FormFieldType.Editor) {\n                                @if (editorTemplate  && editorTemplate.templateRef) {\n                                    <ng-template [ngTemplateOutlet]=\"editorTemplate.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\n                                }\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Code -->\n                            @case (FormFieldType.Code) {\n                                @if (codeTemplate  && codeTemplate.templateRef) {\n                                    <ng-template [ngTemplateOutlet]=\"codeTemplate.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\n                                }\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region File -->\n                            @case (FormFieldType.File) {\n                                <mat-form-field [attr.flex]=\"field.flex||0\" layout-margin>\n                                    <mat-label>{{field.label}}</mat-label>\n                                    <div vd-file-input\n                                         [formControlName]=\"field.name!\"\n                                         (select)=\"field.change && field.change(field, $event, formGroup, context)\"\n                                         [accept]=\"field.fileExtensions\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\n                                         flex>\n                                    </div>\n                                </mat-form-field>\n                            }\n                            <!-- #endregion -->\n\n                            <!-- #region Custom -->\n                            @case (FormFieldType.Custom) {\n                                @if (customTemplate  && customTemplate.templateRef) {\n                                    <ng-template [ngTemplateOutlet]=\"customTemplate.templateRef\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\n                                }\n                            }\n                            <!-- #endregion -->\n                        }\n                    }\n                }\n                <!-- #region Template for custom fields -->\n                @for (customField of customFieldsTemplates; track customField) {\n                    @if (customField?.templateRef && customField.row == fields[0]?.row && customField.inline) {\n                        <ng-template [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\n                    }\n                }\n                <!-- #endregion -->\n            </div>\n            <!-- #region Template for custom fields -->\n            @if (customFields) {\n                <ng-container [ngTemplateOutlet]=\"customFields\" [ngTemplateOutletContext]=\"{formGroup: formGroup, row: fields[0].row}\"></ng-container>\n            }\n            @for (customField of customFieldsTemplates; track customField) {\n                @if (customField?.templateRef && customField.row == (((fields[0]?.row | func:formValue:formGroup:context) ??0)+1) && !customField.inline) {\n                    <ng-template [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\n                }\n            }\n            <!-- #endregion -->\n        }\n        <!-- #endregion -->\n        <!-- #region Form bottom -->\n        @if (bottom) {\n            <ng-container [ngTemplateOutlet]=\"bottom\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-container>\n        }\n        <!-- #endregion -->\n        <!-- #region Template for suffix buttons -->\n        <ng-template #suffixButtons let-field>\n            @for (suffixButton of field.suffixButtons; track suffixButton) {\n                <ng-container matSuffix>\n                    @if (!suffixButton.hide || !suffixButton.hide(formValue, context)) {\n                        <button type=\"button\" mat-icon-button (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\n                            <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\n                        </button>\n                    }\n                </ng-container>\n            }\n        </ng-template>\n        <!-- #endregion -->\n        <!-- #region Debug value -->\n        @if (debugValue) {\n            <code>\n        <pre>{{formValue | json}}</pre>\n      </code>\n        }\n        <!-- #endregion -->\n    </div>\n}","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { AutofillMonitor } from '@angular/cdk/text-field';\r\nimport { Directive, DoCheck, EventEmitter, HostListener, Input, Optional, Output, Self } from '@angular/core';\r\nimport { FormGroupDirective, NgControl, NgForm, Validators } from '@angular/forms';\r\nimport { _ErrorStateTracker, ErrorStateMatcher } from '@angular/material/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { Editor } from 'tinymce';\r\n\r\nlet nextUniqueId: number = 0;\r\n\r\n/**\r\n * Event object emitted when the editor content changes.\r\n */\r\nexport interface EditorChange {\r\n    textContent: string;\r\n    displayContent: string;\r\n}\r\n\r\n/**\r\n * Directive that allows a TinyMCE editor to be used inside a MatFormField.\r\n */\r\n@Directive({\r\n    selector: '[tinyMatFormControl]',\r\n    providers: [{ provide: MatFormFieldControl, useExisting: MatFormFieldEditorDirective }],\r\n    host: {\r\n        '[attr.id]': 'id',\r\n        '[attr.aria-describedby]': 'ariaDescribedby || null',\r\n        '[attr.aria-invalid]': 'errorState',\r\n        '[attr.aria-required]': 'required.toString()',\r\n    }\r\n})\r\nexport class MatFormFieldEditorDirective implements MatFormFieldControl<any>, DoCheck {\r\n    /**\r\n     * Tracks the error state of the editor control. \r\n     * @type {_ErrorStateTracker}\r\n     */\r\n    protected errorStateTracker: _ErrorStateTracker;\r\n\r\n    /**\r\n     * Object used to control when error messages are shown. \r\n     * @type {ErrorStateMatcher}\r\n     */\r\n    @Input()\r\n    public get errorStateMatcher() { return this.errorStateTracker!.matcher; }\r\n    public set errorStateMatcher(value: ErrorStateMatcher) { this.errorStateTracker!.matcher = value; }\r\n\r\n    /**\r\n     * Whether the control is in an error state. \r\n     * @type {boolean}\r\n     */\r\n    get errorState() { return this.errorStateTracker!.errorState; }\r\n    set errorState(value: boolean) { this.errorStateTracker!.errorState = value; }\r\n\r\n    /**\r\n     * Stream that emits whenever the state of the control changes and should cause the parent\r\n     * form-field to update. Implemented as part of `MatFormFieldControl`.\r\n     * @type {Subject<void>}\r\n     */\r\n    public readonly stateChanges: Subject<void> = new Subject<void>();\r\n\r\n    /**\r\n     * Internal tracking for the disabled state.\r\n     * @type {boolean}\r\n     */\r\n    private _disabled = false;\r\n\r\n    /**\r\n     * Whether the control is disabled. \r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    get disabled(): boolean {\r\n        if (this.ngControl && this.ngControl.disabled !== null) {\r\n            return this.ngControl.disabled;\r\n        }\r\n        return this._disabled;\r\n    }\r\n    set disabled(value: boolean) {\r\n        this._disabled = coerceBooleanProperty(value);\r\n\r\n        /* Browsers may not fire the blur event if the input is disabled too quickly.\r\n           Reset focus state here to ensure the element doesn't become stuck. */\r\n        if (this.focused) {\r\n            this.focused = false;\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /** \r\n     * Internal tracking for the unique ID.\r\n     * @type {string | undefined}\r\n     */\r\n    private _id?: string;\r\n\r\n    /**\r\n     * Unique ID of the element.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    get id(): string { return this._id ?? ''; }\r\n    set id(value: string) { this._id = value || this.uid; }\r\n\r\n    /**\r\n     * This input provides the placeholder to the mat-form-field.\r\n     * Visual setup is handled via TinyMCE placeholder configuration.\r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public placeholder: string = '';\r\n\r\n    /** \r\n     * Internal tracking for the required state.\r\n     * @type {boolean}\r\n     */\r\n    private _required: boolean = false;\r\n\r\n    /**\r\n     * Whether the control is required. \r\n     * @type {boolean}\r\n     */\r\n    @Input()\r\n    public get required(): boolean {\r\n        return this._required;\r\n    }\r\n    public set required(value: boolean) {\r\n        /* Coerce the input value to a boolean and store it. */\r\n        this._required = coerceBooleanProperty(value);\r\n\r\n        /* Notify the parent form-field to update the required state of the label. */\r\n        this.stateChanges.next();\r\n    }\r\n\r\n    /**\r\n     * The value of the editor control (HTML content). \r\n     * @type {string}\r\n     */\r\n    @Input()\r\n    public get value(): string {\r\n        return this.editor ? this.editor.getContent() : '';\r\n    }\r\n    public set value(value: string) {\r\n        if (value !== this.value && this.editor) {\r\n            this.editor.setContent(value);\r\n            this.stateChanges.next();\r\n        }\r\n    }\r\n\r\n    /** \r\n     * Event emitted when the editor content is modified. \r\n     * @type {EventEmitter<EditorChange>}\r\n     */\r\n    @Output()\r\n    public editorChange: EventEmitter<EditorChange> = new EventEmitter<EditorChange>();\r\n\r\n    /** \r\n     * Whether the control is empty. \r\n     * @type {boolean}\r\n     */\r\n    public empty: boolean = false;\r\n\r\n    /** \r\n     * Whether the control is focused. \r\n     * @type {boolean}\r\n     */\r\n    public focused: boolean = false;\r\n\r\n    /** \r\n     * The selector used to identify this control type in the form field. \r\n     * @type {string}\r\n     */\r\n    public controlType: string = 'tinymce-editor';\r\n\r\n    /** \r\n     * The aria-describedby attribute for the control. \r\n     * @type {string | null | undefined}\r\n     */\r\n    public ariaDescribedby?: string | null;\r\n\r\n    /** \r\n     * Whether the label should float.\r\n     * @type {boolean}\r\n     */\r\n    public shouldLabelFloat: boolean = true;\r\n\r\n    /** \r\n     * Whether the control is currently autofilled by the browser. \r\n     * @type {boolean}\r\n     */\r\n    public autofilled: boolean = false;\r\n\r\n    /** \r\n     * Generated unique ID for the instance. \r\n     * @type {string}\r\n     */\r\n    private uid: string = `tinymce-mat-form-control-${nextUniqueId++}`;\r\n\r\n    /** \r\n     * Reference to the TinyMCE editor instance. \r\n     * @type {Editor | undefined}\r\n     */\r\n    private editor?: Editor;\r\n\r\n    /** \r\n     * Reference to the editor's underlying HTML element. \r\n     * @type {HTMLElement | undefined}\r\n     */\r\n    private editorElement?: HTMLElement;\r\n\r\n    /** \r\n     * Constructor that injects necessary dependencies and initializes the error state tracker.\r\n     * @param ngControl The NgControl associated with this control, if any.\r\n     * @param parentForm The parent NgForm, if any.\r\n     * @param parentFormGroup The parent FormGroupDirective, if any.\r\n     * @param defaultErrorStateMatcher The default ErrorStateMatcher to use for error state tracking.\r\n     * @param valueAccessor The NG_VALUE_ACCESSOR for this control, which is the EditorComponent.\r\n     * @param platform The Platform service for checking the current platform.\r\n     * @param autofillMonitor The AutofillMonitor service for monitoring autofill state.\r\n     */\r\n    constructor(\r\n        @Optional() @Self() public ngControl: NgControl,\r\n        @Optional() parentForm: NgForm,\r\n        @Optional() parentFormGroup: FormGroupDirective,\r\n        defaultErrorStateMatcher: ErrorStateMatcher,\r\n        private platform: Platform,\r\n        private autofillMonitor: AutofillMonitor\r\n    ) {\r\n        /* Initialize the error state tracker to manage validation visibility */\r\n        this.errorStateTracker = new _ErrorStateTracker(\r\n            defaultErrorStateMatcher,\r\n            this.ngControl,\r\n            parentFormGroup,\r\n            parentForm,\r\n            this.stateChanges,\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Standard Angular lifecycle hook used to check for state changes.\r\n     */\r\n    public ngDoCheck(): void {\r\n        if (this.ngControl) {\r\n            this.updateErrorState();\r\n\r\n            /* Check if the required state has changed on the underlying control */\r\n            const isRequired = this.ngControl.control?.hasValidator(Validators.required) ?? this._required;\r\n            if (isRequired !== this._required) {\r\n                this._required = isRequired;\r\n                this.stateChanges.next();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the error state of the control.\r\n     */\r\n    public updateErrorState() {\r\n        this.errorStateTracker!.updateErrorState();\r\n    }\r\n\r\n    /**\r\n     * Handles the editor initialization event and caches references.\r\n     * @param event The initialization event containing the editor instance.\r\n     */\r\n    @HostListener('onInit', ['$event'])\r\n    public onEditorInit({ editor }: { editor: Editor }) {\r\n        /* Cache a copy of the editor so that we have access to it elsewhere */\r\n        this.editor = editor;\r\n\r\n        /* Cache the editor element so that we can focus it on container clicks */\r\n        this.editorElement = editor.getElement() as HTMLElement;\r\n\r\n        if (this.platform.isBrowser) {\r\n            this.autofillMonitor.monitor(this.editorElement).subscribe((event) => {\r\n                this.autofilled = event.isAutofilled;\r\n                this.stateChanges.next();\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the list of IDs that describe the control.\r\n     * Implemented as part of MatFormFieldControl.\r\n     */\r\n    public setDescribedByIds(ids: string[]) {\r\n        this.ariaDescribedby = ids.join(' ');\r\n    }\r\n\r\n    /**\r\n     * Handles clicks on the container by focusing the editor.\r\n     * Implemented as part of MatFormFieldControl.\r\n     */\r\n    public onContainerClick() {\r\n        if (!this.focused && this.editorElement) {\r\n            this.editorElement.focus();\r\n        }\r\n    }\r\n}","import { Directive } from '@angular/core';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\n@Directive({\r\n    selector: 'mat-form-field',\r\n    host: { '[class.mat-form-field-readonly]': 'isReadonlyInput()' }\r\n})\r\nexport class MatFormFieldReadonlyDirective {\r\n\r\n    /**\r\n     * Constructor\r\n     * @param matFormField \r\n     */\r\n    constructor(private matFormField: MatFormField) { }\r\n\r\n    /**\r\n     * Checks if the control is readonly\r\n     */\r\n    public isReadonlyInput(): boolean {\r\n        if (this.matFormField?._control instanceof MatInput) {\r\n            return this.matFormField._control.readonly;\r\n        }\r\n\r\n        return false;\r\n    }\r\n}","import { Type } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { DateFilterFn, MatDatepicker } from \"@angular/material/datepicker\";\r\nimport { Observable } from \"rxjs\";\r\nimport { IGenericFormBaseComponent } from \"../../base/interfaces/igeneric-form-base\";\r\nimport { EnumMetadata } from \"../../common/models/enum-metadata\";\r\nimport { Filter } from \"../../common/models/filter\";\r\nimport { Icon } from \"../../common/models/icon\";\r\nimport { SuffixButton } from \"../../common/models/suffix-button\";\r\nimport { FormFieldType } from \"../enums/form-field-type\";\r\n\r\nexport class FormFieldDefinition<TEntity = any, TProperty = any> {\r\n    /**\r\n     * CSS class applied to autocomplete functionality for styling purposes.\r\n     */\r\n    public autocompleteCssClass: string = '';\r\n\r\n    /**\r\n     * Template function for rendering the autocomplete suggestions.\r\n     * @param x The property value for autocomplete.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns The rendered autocomplete template.\r\n     */\r\n    public autocompleteTemplate?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Default text to display for autocomplete suggestions.\r\n     */\r\n    public autocompleteText: string = 'name';\r\n\r\n    /**\r\n     * Callback function executed when the field value changes.\r\n     * @param x The updated property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public change?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Keydown event handler, allowing for custom behavior when a key is pressed within the field.\r\n     * Can be used for form validation, formatting, or other custom interactions.\r\n     * @param e The keydown event triggered on the form field.\r\n     * @param x The entity instance associated with this form field.\r\n     * @param f The FormGroup containing the form field definitions.\r\n     * @param ctx The generic form component context, providing additional data and methods.\r\n     */\r\n    public keydown?: (e: KeyboardEvent, x?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => void;\r\n\r\n    /**\r\n     * Template function for displaying chip elements related to this field.\r\n     * @param x The property value for the chip.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns The rendered chip template.\r\n     */\r\n    public chipTemplate?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Default text displayed in chip elements.\r\n     */\r\n    public chipText: string = 'name';\r\n\r\n    /**\r\n     * Color theme for the chip, determined from the predefined palette.\r\n     */\r\n    public chipColor: 'primary' | 'accent' | 'warn' = 'accent';\r\n\r\n    /**\r\n     * The class type to instantiate for this field.\r\n     */\r\n    public classType?: Type<any>;\r\n\r\n    /**\r\n     * Callback function executed when the field is cleared.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public clear?: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Function for comparing two property values.\r\n     * @param o1 The first property value.\r\n     * @param o2 The second property value.\r\n     * @returns A boolean indicating if the values are equal.\r\n     */\r\n    public compareWith?: (o1: TProperty, o2: TProperty) => boolean;\r\n\r\n    /**\r\n     * CSS class applied for general styling of the field.\r\n     */\r\n    public cssClass?: string;\r\n\r\n    /**\r\n     * Indicates whether the field value can be customized by the user.\r\n     */\r\n    public customValue: boolean = false;\r\n\r\n    /**\r\n     * Function to filter selectable dates.\r\n     * @param date The date to evaluate.\r\n     * @returns A boolean indicating if the date is selectable.\r\n     */\r\n    public dateFilter: DateFilterFn<any> = (date: any) => true;\r\n\r\n    /**\r\n     * Asynchronous function to filter dates based on additional conditions.\r\n     * @param d The date to evaluate.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns An observable that emits the date filter function.\r\n     */\r\n    public dateFilterAsync?: (d: Date | any, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => Observable<DateFilterFn<any>>;\r\n\r\n    /**\r\n     * Callback function invoked when the date picker is opened.\r\n     * @param datePicker The MatDatepicker component instance.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public datePickerOpened?: (datePicker: MatDatepicker<any>, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Indicates whether the time should be displayed alongside the date.\r\n     * Defaults to false.\r\n     */\r\n    public showTime?: boolean = false;\r\n\r\n    /**\r\n     * Format for displaying time in the field.\r\n     * Can be 'shortTime' or 'mediumTime', defaults to 'mediumTime'.\r\n     */\r\n    public timeFormat?: 'shortTime' | 'mediumTime' = 'shortTime';\r\n\r\n    /**\r\n     * Endpoint for retrieving data, which can be a URL or a function returning data.\r\n     */\r\n    public endpoint?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any) | string;\r\n\r\n    /**\r\n     * Function to filter options based on enumerations.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public enumFilter?: (y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * The type of enumeration associated with this field.\r\n     */\r\n    public enumType?: any;\r\n\r\n    /**\r\n     * Metadata associated with enumeration types for additional context.\r\n     */\r\n    public enumMetadata?: { [key in any]: EnumMetadata };\r\n\r\n    /**\r\n     * Function that determines whether data should be fetched based on specific conditions.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns A boolean indicating whether data fetching is required.\r\n     */\r\n    public fetchCondition: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => boolean = () => true;\r\n\r\n    /**\r\n     * Array of field sets that organize related fields.\r\n     */\r\n    public fieldSets?: string[];\r\n\r\n    /**\r\n     * Allowed file extensions for file uploads.\r\n     */\r\n    public fileExtensions?: string;\r\n\r\n    /**\r\n     * The file path for storing uploaded files.\r\n     */\r\n    public filePath?: string;\r\n\r\n    /**\r\n     * Flex layout property defining the space the field occupies in a flex container.\r\n     */\r\n    public flex?: number;\r\n\r\n    /**\r\n     * Indicates if selection of an option is mandatory for this field.\r\n     */\r\n    public forceSelect?: boolean;\r\n\r\n    /**\r\n     * Indicates whether the field should be focused automatically when the form initializes.\r\n     * This can be either a boolean or a function that returns a boolean based on the entity and form context.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field, allowing for additional context.\r\n     * @param ctx The context of the generic form component, providing access to the form's overall state.\r\n     * @returns A boolean indicating if the field should be focused automatically (true), or not (false).\r\n     */\r\n    public focus?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => boolean) | boolean;\r\n\r\n    /**\r\n     * Indicates whether the field should automatically select its text when the form initializes.\r\n     * This can be either a boolean or a function that returns a boolean based on the entity and form context.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field, allowing for additional context.\r\n     * @param ctx The context of the generic form component, providing access to the form's overall state.\r\n     * @returns A boolean indicating if the field's text should be selected automatically (true), or not (false).\r\n     */\r\n    public selectText?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => boolean) | boolean;\r\n\r\n    /**\r\n     * Header text for grouping related fields.\r\n     */\r\n    public groupHeader: string = $localize`:@@details:Details`;\r\n\r\n    /**\r\n     * The name assigned to the group of fields.\r\n     */\r\n    public groupName?: string;\r\n\r\n    /**\r\n     * Specifies whether the field is hidden from view.\r\n     */\r\n    public hidden?: boolean;\r\n\r\n    /**\r\n     * Callback function invoked to determine if the field should be hidden based on specific criteria.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public hide?: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Hint text displayed to assist the user in filling out the field.\r\n     */\r\n    public hint?: string;\r\n\r\n    /**\r\n     * Index representing the position of this field within its parent structure.\r\n     */\r\n    public index?: number;\r\n\r\n    /**\r\n     * Specifies the type of input (e.g., text, number) for this field.\r\n     */\r\n    public inputType?: string;\r\n\r\n    /**\r\n     * Indicates whether the uploaded file is accessible to the public.\r\n     */\r\n    public isPublicFile?: boolean;\r\n\r\n    /**\r\n     * Callback function executed when an item in the field changes.\r\n     * @param x The updated property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public itemChange?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Callback function executed when an item in the field is selected.\r\n     * @param x The selected property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public itemSelect?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Label text for the field, can be a static string or a function that returns a label based on context.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns The label text for the field.\r\n     */\r\n    public label?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Function for mapping input values from one format to another.\r\n     * @param x An array of values to map.\r\n     * @returns The mapped values.\r\n     */\r\n    public mapper?: (x: any[]) => any;\r\n\r\n    /**\r\n     * Maximum permissible value for the field, can be a number or a date.\r\n     */\r\n    public max?: number | Date;\r\n\r\n    /**\r\n     * Maximum height for the field's display, can be a string or a function that returns a string.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns The maximum height for the field's display.\r\n     */\r\n    public maxHeight?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Maximum length of the input.\r\n     * Can be a number or a function that returns a number.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public maxLength?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => number) | number;\r\n\r\n    /**\r\n     * Maximum width of the input.\r\n     * Can be a string or a function that returns a string.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public maxWidth?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Minimum permissible value for the input.\r\n     * Can be a number or a date.\r\n     */\r\n    public min?: number | Date;\r\n\r\n    /**\r\n     * Minimum length of input characters allowed.\r\n     * Can be a number or a function that returns a number.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public minLength?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => number) | number;\r\n\r\n    /**\r\n     * Indicates whether the field supports multiline input.\r\n     */\r\n    public multiline?: boolean;\r\n\r\n    /**\r\n     * Indicates whether multiple selections are allowed.\r\n     * Defaults to false.\r\n     */\r\n    public multiple: boolean = false;\r\n\r\n    /**\r\n     * Flag indicating if only numeric input is permitted.\r\n     */\r\n    public numbersOnly?: boolean;\r\n\r\n    /**\r\n     * Flag to enable or disable decimal parsing on input.\r\n     * If set to true, pasted values will be normalized to a valid decimal format.\r\n     */\r\n    public parseDecimal?: boolean;\r\n\r\n    /**\r\n     * Indicates whether the first option in a selection should be automatically selected.\r\n     * Defaults to false.\r\n     */\r\n    public selectFirst: boolean = false;\r\n\r\n    /**\r\n     * Name of the field for identification and display purposes.\r\n     */\r\n    public name?: string;\r\n\r\n    /**\r\n     * Options available for selection.\r\n     * Can be an array or a function that returns an array of options.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public options?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => { id: any, name: string }[]) | { id: any, name: string }[];\r\n\r\n    /**\r\n     * Indicates whether a default option should be included in the selection.\r\n     * Defaults to true.\r\n     */\r\n    public defaultOption?: boolean = true;\r\n\r\n    /**\r\n     * Template function for rendering options in the selection.\r\n     * @param x The current property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public optionTemplate?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Property name in the option object for displaying text.\r\n     * Used to specify which property shows as the option's text.\r\n     */\r\n    public optionTextProperty: string = 'name';\r\n\r\n    /**\r\n     * Property name in the option object representing the unique value for each option.\r\n     */\r\n    public optionValueProperty: string = 'id';\r\n\r\n    /**\r\n     * Property name in the option object for the Material icon.\r\n     * Used for displaying icons alongside options.\r\n     */\r\n    public optionMatIconProperty?: string;\r\n\r\n    /**\r\n     * Function that returns the icon based on provided parameters.\r\n     * @param x The current property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public optionIcon?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => Icon<TEntity, any>;\r\n\r\n    /**\r\n     * Property name in the option object for displaying an SVG icon.\r\n     */\r\n    public optionSvgIconProperty?: string;\r\n\r\n    /**\r\n     * Custom font set used for icons in the options.\r\n     * Defaults to 'material-symbols-outlined'.\r\n     */\r\n    public optionIconFontSet?: string = 'material-symbols-outlined';\r\n\r\n    /**\r\n     * Parameters for data retrieval associated with this field.\r\n     * Can be an object or a function returning an object.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public params?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any) | {};\r\n\r\n    /**\r\n     * Regular expression pattern for input validation.\r\n     * Can be a string, RegExp, or a function returning a string or RegExp.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public pattern?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => RegExp | string) | RegExp | string;\r\n\r\n    /**    \r\n     * Prefix text displayed before the input field.\r\n     * Can be a string or a function that returns a string.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public prefix?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Suffix text displayed after the input field.\r\n     * Can be a string or a function that returns a string.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public suffix?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => string) | string;\r\n\r\n    /**\r\n     * Flag indicating whether whitespace should be removed from the input value.\r\n     * Defaults to false.\r\n     */\r\n    public removeWhitespace?: boolean = false;\r\n\r\n    /**\r\n     * Projection specification for data retrieval.\r\n     * Can be a string or an array of strings.\r\n     */\r\n    public projection: string | string[] = '';\r\n\r\n    /**\r\n     * Callback function to determine if the field is readonly.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public readonly?: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => boolean;\r\n\r\n    /**\r\n     * Callback function to determine if the field is required.\r\n     * Can return a boolean value or a function returning a boolean.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public required?: ((x?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => boolean | boolean);\r\n\r\n    /**\r\n     * The row number indicating the display position of the field.\r\n     * Can be a fixed number or a callback returning a number.\r\n     * \r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     * @returns The row number for display.\r\n     * Defaults to 1.\r\n     */\r\n    public row: number | ((x?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => number) = 1;\r\n\r\n    /**\r\n     * The number of rows for multi-line input fields (e.g., text area).\r\n     */\r\n    public rows?: number;\r\n\r\n    /**\r\n     * Default field used for searching.\r\n     */\r\n    public searchField: string = 'search';\r\n\r\n    /**\r\n     * List of fields utilized for search functionality.\r\n     */\r\n    public searchFields: string[] = [];\r\n\r\n    /**\r\n     * Array of filter objects, each defined by a glue operator and associated fields.\r\n     */\r\n    public filters?: Filter[];\r\n\r\n    /**\r\n     * Callback function invoked when an option is selected.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public select?: (x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Array of suffix buttons associated with the field.\r\n     */\r\n    public suffixButtons: SuffixButton<TProperty, IGenericFormBaseComponent<TEntity>>[] = [];\r\n\r\n    /**\r\n     * CSS class applied to triggers associated with the field.\r\n     */\r\n    public triggerCssClass?: string;\r\n\r\n    /**\r\n     * Callback function for mapping trigger values.\r\n     * @param x The current property value.\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public triggerMapper?: (x: TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Mode of the trigger (e.g., chip).\r\n     * @deprecated This property is no longer used and will be removed in a future version.\r\n     */\r\n    public triggerMode?: 'chip';\r\n\r\n    /**\r\n     * Template function for rendering the trigger.\r\n     * @param x The current property value(s).\r\n     * @param y The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public triggerTemplate?: (x: TProperty[] | TProperty, y?: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => any;\r\n\r\n    /**\r\n     * Function to determine the type of the field.\r\n     * Can be a function returning a FormFieldType or a direct FormFieldType value.\r\n     * @param x The entity associated with the field.\r\n     * @param f The FormGroup containing this field.\r\n     * @param ctx The context of the generic form component.\r\n     */\r\n    public type?: ((x: TEntity, f?: FormGroup, ctx?: IGenericFormBaseComponent<TEntity>) => FormFieldType) | FormFieldType;\r\n\r\n    /**\r\n     * Indicates whether the field is wrapped.\r\n     * Defaults to true.\r\n     */\r\n    public wrapped: boolean = true;\r\n\r\n    /**\r\n     * Constructor for the FormFieldDefinition class.\r\n     * @param init Optional initial values for properties in FormFieldDefinition.\r\n     * @param init.x The entity associated with the field.\r\n     * @param init.f The FormGroup containing this field.\r\n     * @param init.ctx The context of the generic form component.\r\n     */\r\n    public constructor(init?: Partial<FormFieldDefinition<TEntity>>) {\r\n        Object.assign(this, init);\r\n    }\r\n\r\n}","import { Type } from \"@angular/core\";\r\nimport { headerMetadataKey } from \"../../common/constants/constants\";\r\nimport { formDefinitionMetadataKey, formFieldGroupsMetadataKey, formFieldsMetadataKey } from \"../constants/constants\";\r\nimport { FormFieldType } from \"../enums/form-field-type\";\r\nimport { FormDefinition } from \"../models/form-definition\";\r\nimport { FormFieldDefinition } from \"../models/form-field-definition\";\r\nimport { FormFieldGroupDefinition } from \"../models/form-field-group-definition\";\r\nimport { getFormGroups } from \"./functions\";\r\n\r\nconst unwarppedFormFields = [FormFieldType.Checkbox, FormFieldType.Editor, FormFieldType.Code, FormFieldType.File, FormFieldType.Custom];\r\n\r\n/**\r\n * Class decorator to create a form\r\n * @param formDefinition \r\n * @returns \r\n */\r\nexport function Form<T = any>(formDefinition?: Partial<FormDefinition<T>>): Function {\r\n    return function (target: Function) {\r\n        /* Save the form defintion in the metadata */\r\n        Reflect.defineMetadata(formDefinitionMetadataKey, formDefinition ?? new FormDefinition(), target);\r\n    };\r\n}\r\n\r\n/**\r\n * Property decorator to create form fields\r\n * @param args \r\n * @returns \r\n */\r\nexport function FormField<TEntity = any, TProperty = any>(args: Partial<FormFieldDefinition<TEntity, TProperty>>): Function {\r\n    return function (target: any, propertyKey: string) {\r\n        /* Get property name */\r\n        var propertyName = args.name || propertyKey;\r\n\r\n        /* Get property type */\r\n        var propertyType: string = Reflect.getMetadata(\"design:type\", target, propertyKey)?.name;\r\n\r\n        /* Create table column */\r\n        var formField: FormFieldDefinition<TEntity, TProperty> = new FormFieldDefinition<TEntity, TProperty>(Object.assign(args, <FormFieldDefinition<TEntity, TProperty>>{\r\n            name: args.name || propertyKey,\r\n            label: args.label || Reflect.getMetadata(headerMetadataKey, target, propertyKey) || propertyName,\r\n            autocompleteTemplate: args.autocompleteTemplate || ((option: any) => option[formField.autocompleteText ?? '']),\r\n            chipTemplate: args.chipTemplate || ((chip: any) => (args.customValue ? chip : chip[formField.chipText ?? '']))\r\n        }));\r\n\r\n        /* Type enum */\r\n        if (formField.enumType) {\r\n            formField.type ||= FormFieldType.Enum;\r\n        }\r\n\r\n        /* Type VdSelect */\r\n        else if (formField.endpoint) {\r\n            formField.type ||= FormFieldType.VdSelect;\r\n        }\r\n\r\n        /* Type Select */\r\n        else if (formField.options) {\r\n            formField.type ||= FormFieldType.Select;\r\n        }\r\n\r\n        /* Type TextArea */\r\n        else if (formField.rows) {\r\n            formField.type ||= FormFieldType.TextArea;\r\n        }\r\n\r\n        /* Type File */\r\n        else if (formField.filePath) {\r\n            formField.type ||= FormFieldType.File;\r\n        }\r\n\r\n        /* Other types */\r\n        else {\r\n            switch (propertyType?.toLowerCase()) {\r\n                case 'number':\r\n                    formField.type ||= FormFieldType.Text;\r\n                    formField.inputType ||= 'number';\r\n                    break;\r\n\r\n                case 'date':\r\n                    formField.type ||= FormFieldType.Date;\r\n                    break;\r\n\r\n                case 'boolean':\r\n                    formField.type ||= FormFieldType.Checkbox;\r\n                    break;\r\n\r\n                default:\r\n                    formField.type ||= FormFieldType.Text;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        /* Set wrapped to false, if the field cant be wrapped in the <mat-form-field> */\r\n        if ((formField.type as FormFieldType) && unwarppedFormFields?.includes((formField.type as FormFieldType))) {\r\n            formField.wrapped = false;\r\n        }\r\n\r\n        /* Add class multiline to the form field */\r\n        if (formField.multiline) {\r\n            formField.cssClass += ' multiline';\r\n            formField.cssClass = formField.cssClass?.trim();\r\n        }\r\n\r\n        /**\r\n         * If the 'numbersOnly' flag is set to true and no custom pattern is defined,\r\n         * set the pattern to allow only numbers after the optional prefix.\r\n         */\r\n        if (formField.numbersOnly && !formField.pattern) {\r\n            /* Get the prefix */\r\n            const prefix = formField.prefix ?? '';\r\n\r\n            /* Set pattern to allow only numbers after the prefix */\r\n            if (prefix) {\r\n                formField.pattern = new RegExp(`^${prefix}[0-9]*$`);\r\n            }\r\n            /* No prefix case */\r\n            else {\r\n                formField.pattern = /^[0-9]*$/;\r\n            }\r\n        }\r\n\r\n        /* Get old form fields */\r\n        let previousFormFields: FormFieldDefinition<TEntity, TProperty>[] = Reflect.getMetadata(formFieldsMetadataKey, target);\r\n\r\n        /* Override the field, if exists */\r\n        previousFormFields = previousFormFields?.filter(x => x.name != formField.name);\r\n\r\n        /* Create a copy of the result */\r\n        let formFields = previousFormFields ? previousFormFields.concat([formField]) : [formField];\r\n\r\n        /* Override the result in the metadata */\r\n        Reflect.defineMetadata(formFieldsMetadataKey, formFields, target);\r\n    };\r\n}\r\n\r\n/**\r\n * Property decorator to create and register form field groups.\r\n *\r\n * This decorator can be applied to a class property to automatically\r\n * generate and register form groups based on the provided type and arguments.\r\n *\r\n * @param type The class type whose decorated properties will be grouped.\r\n * @param args Optional partial configuration to customize the resulting FormFieldGroupDefinition.\r\n * @param context Optional context object to influence form group generation, e.g., for conditional fields.\r\n * @returns A property decorator function.\r\n */\r\nexport function FormFieldGroup<T = any>(type: Type<T>, args?: Partial<FormFieldGroupDefinition<T>>, context?: any): Function {\r\n    return function (target: any, propertyKey: string) {\r\n        /* Create an instance of the group object */\r\n        var instance = Reflect.construct(type, []);\r\n\r\n        /* Retrieve form groups from the type, passing args and context */\r\n        var groups = getFormGroups(undefined, type, args, context);\r\n\r\n        /* Get the header of the groups or create one using the property name */\r\n        var groupHeader = args?.header || Reflect.getMetadata(headerMetadataKey, target, propertyKey) || propertyKey;\r\n\r\n        /* Get the fields from the groups */\r\n        groups?.forEach((x, i) => {\r\n            Object.assign(x, <FormFieldGroupDefinition<T>>{\r\n                name: args?.name ?? x.name ?? propertyKey,\r\n                header: groupHeader,\r\n                index: args?.index || i\r\n            });\r\n\r\n            /* Set the name of the group in the fields */\r\n            x.fields.forEach(y => Object.assign(y, {\r\n                groupName: propertyKey,\r\n                groupHeader: groupHeader,\r\n                fieldSets: args?.fieldSets\r\n            }));\r\n        });\r\n\r\n        /* Get old form field groups */\r\n        var previousGroups: FormFieldGroupDefinition<T>[] = Reflect.getMetadata(formFieldGroupsMetadataKey, target);\r\n\r\n        /* Remove the groups in previousGroups that exist in groups */\r\n        previousGroups = previousGroups?.filter(prevGroup => !groups?.some(group => group.name === prevGroup.name));\r\n\r\n        /* Override the result in the metadata */\r\n        Reflect.defineMetadata(formFieldGroupsMetadataKey, (previousGroups ? previousGroups.concat(groups) : groups), target);\r\n    };\r\n}","import { Directive, HostBinding, OnDestroy } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Directive()\r\nexport class ValueAccessorBase<T> extends MatFormFieldControl<any> implements ControlValueAccessor, OnDestroy {\r\n\t/**\r\n\t * Inner model value\r\n\t */\r\n\tprotected innerValue?: T;\r\n\r\n\t// /**\r\n\t//  * This property indicates whether the associated NgControl is in an error state\r\n\t//  */\r\n\t// @Input()\r\n\t// get errorState() { return false; }\r\n\r\n\tprivate changed = new Array<(value: T) => void>();\r\n\tprivate touched = new Array<() => void>();\r\n\r\n\t/**\r\n\t * Because the <mat-form-field> uses the OnPush change detection strategy, we need \r\n\t * to let it know when something happens in the form field control that may require \r\n\t * the form field to run change detection. We do this via the stateChanges property. \r\n\t * So far the only thing the form field needs to know about is when the value changes. \r\n\t * We'll need to emit on the stateChanges stream when that happens, and as we continue \r\n\t * flushing out these properties we'll likely find more places we need to emit. We \r\n\t * should also make sure to complete stateChanges when our component is destroyed.\r\n\t */\r\n\tpublic override stateChanges = new Subject<void>();\r\n\r\n\t/**\r\n\t * This property allows us to tell the <mat-form-field> what to use as a placeholder.\r\n\t */\r\n\tprivate _placeholder?: string;\r\n\r\n\t/**\r\n\t * This property is used to indicate whether the input is required.\r\n\t */\r\n\tprivate _required = false;\r\n\r\n\t/**\r\n\t * This property tells the form field when it should be in the disabled state.\r\n\t */\r\n\tprivate _disabled = false;\r\n\r\n\t/**\r\n\t * This property allows the form field control to specify the @angular/forms control \r\n\t * that is bound to this component. Since we haven't set up our component to act as \r\n\t * a ControlValueAccessor, we'll just set this to null in our component.\r\n\t */\r\n\tpublic override ngControl = null;\r\n\r\n\t// /**\r\n\t//  * Gets or sets the value\r\n\t//  */\r\n\t// get value(): T { return this.innerValue; }\r\n\t// set value(value: T) {\r\n\t// \tif (this.innerValue !== value) {\r\n\t// \t\tthis.innerValue = value;\r\n\t// \t\tthis.changed.forEach(f => f(value));\r\n\t// \t\tthis.stateChanges.next();\r\n\t// \t}\r\n\t// }\r\n\r\n\t// /**\r\n\t//  * Since the value of the placeholder may change over time, we need to make sure to trigger change \r\n\t//  * detection in the parent form field by emitting on the stateChanges stream when the placeholder changes.\r\n\t//  */\r\n\t// @Input()\r\n\t// get placeholder(): string { return this._placeholder; }\r\n\t// set placeholder(value: string) { this._placeholder = value; this.stateChanges.next(); }\r\n\r\n\t// /**\r\n\t//  * Since the value of the required may change over time, we need to make sure to trigger change \r\n\t//  * detection in the parent form field by emitting on the stateChanges stream when the required changes.\r\n\t//  */\r\n\t// @Input()\r\n\t// get required(): boolean { return this._required; }\r\n\t// set required(value: boolean) { this._required = coerceBooleanProperty(value); this.stateChanges.next(); }\r\n\r\n\t// /**\r\n\t//  * Since the value of the disabled may change over time, we need to make sure to trigger change \r\n\t//  * detection in the parent form field by emitting on the stateChanges stream when the disabled changes.\r\n\t//  */\r\n\t// @Input()\r\n\t// get disabled(): boolean { return this._disabled; }\r\n\t// set disabled(value: boolean) { this._disabled = coerceBooleanProperty(value); this.stateChanges.next(); }\r\n\r\n\t/**\r\n\t * //TODO ???\r\n\t */\r\n\ttouch() {\r\n\t\tthis.touched.forEach(f => f());\r\n\t}\r\n\r\n\t/**\r\n\t * Writes a new value to the element.\r\n\t *\r\n\t * This method will be called by the forms API to write to the view when programmatic\r\n\t * (model -> view) changes are requested.\r\n\t *\r\n\t * Example implementation of `writeValue`:\r\n\t *\r\n\t * ```ts\r\n\t * writeValue(value: any): void {\r\n\t *   this._renderer.setProperty(this._elementRef.nativeElement, 'value', value);\r\n\t * }\r\n\t * ```\r\n\t */\r\n\twriteValue(value: T) {\r\n\t\tthis.innerValue = value;\r\n\t}\r\n\r\n\t/**\r\n\t * From ControlValueAccessor interface\r\n\t * @param fn \r\n\t */\r\n\tregisterOnChange(fn: any) {\r\n\t\tthis.changed.push(fn);\r\n\t}\r\n\r\n\t/**\r\n\t * From ControlValueAccessor interface\r\n\t * @param fn \r\n\t */\r\n\tregisterOnTouched(fn: any) {\r\n\t\tthis.touched.push(fn);\r\n\t}\r\n\r\n\t/**\r\n\t * This method is used by the <mat-form-field> to specify the IDs that \r\n\t * should be used for the aria-describedby attribute of your component. \r\n\t * The method has one parameter, the list of IDs, we just need to apply\r\n\t *  the given IDs to our host element.\r\n\t */\r\n\t@HostBinding('attr.aria-describedby') describedBy = '';\r\n\tsetDescribedByIds(ids: string[]) { this.describedBy = ids.join(' '); }\r\n\r\n\t/**\r\n\t * This method will be called when the form field is clicked on. \r\n\t * It allows the component to hook in and handle that click however it wants. \r\n\t * The method has one parameter, the MouseEvent for the click. In our case we'll \r\n\t * just focus the first <input> if the user isn't about to click an <input> anyways.\r\n\t * @param event \r\n\t */\r\n\tonContainerClick(event: MouseEvent) {\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called when a directive, pipe or service is destroyed.\r\n\t */\r\n\tngOnDestroy() {\r\n\t\tthis.stateChanges.complete();\r\n\t}\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n    name: 'fieldFunc'\r\n})\r\nexport class FieldFuncPipe implements PipeTransform {\r\n    /**    \r\n     * @param groups - Array of FormFieldGroupDefinition instances to filter.\r\n     * @param formValue - The current value of the form.\r\n     * @param form - The FormGroup instance.\r\n     * @param context - The context of the component.\r\n     * @returns Filtered array of FormFieldGroupDefinition instances.\r\n     */\r\n    transform(func: any, ...args: any[]): any {\r\n        if (args) {\r\n            console.log('args', args);\r\n        }\r\n    }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormFieldGroupDefinition } from '../models/form-field-group-definition';\r\n\r\n@Pipe({\r\n    name: 'groupFilter'\r\n})\r\nexport class GroupFilterPipe implements PipeTransform {\r\n    /**\r\n     * Filters an array of FormFieldGroupDefinition instances based on a provided condition.\r\n     * @param groups - Array of FormFieldGroupDefinition instances to filter.\r\n     * @param formValue - The current value of the form.\r\n     * @param form - The FormGroup instance.\r\n     * @param context - The context of the component.\r\n     * @returns Filtered array of FormFieldGroupDefinition instances.\r\n     */\r\n    transform(groups?: FormFieldGroupDefinition<any>[], formValue?: any, form?: FormGroup, context?: any): FormFieldGroupDefinition<any>[] {\r\n        /* Return an empty array if groups is null or undefined */\r\n        if (!groups) return [];\r\n\r\n        /* Filter the groups array based on the condition */\r\n        return groups.filter(group => {\r\n            /* Check if the group has a hide function */\r\n            if (group.hide) {\r\n                /* If hide function exists, return true if it evaluates to false (i.e., group should be shown) */\r\n                return !group.hide(formValue, form, context);\r\n            }\r\n            /* If hide function doesn't exist, return true (i.e., group should be shown) */\r\n            return true;\r\n        });\r\n    }\r\n}","import { Directive, forwardRef } from \"@angular/core\";\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from \"@angular/forms\";\r\n\r\n@Directive({\r\n    selector: '[ngModel],[formControlName],[formControl]',\r\n    providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EmptyStringResetDirective), multi: true }]\r\n})\r\nexport class EmptyStringResetDirective implements Validator {\r\n\r\n    /**\r\n     * Method that performs synchronous validation against the provided control.\r\n     * @param control \r\n     */\r\n    validate(control: AbstractControl): { [key: string]: any } | null {\r\n        if (typeof control?.value === 'string' && control?.value == \"\") {\r\n            control.setValue(null);\r\n        }\r\n\r\n        return null;\r\n    }\r\n}","import { Attribute, Directive, forwardRef } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\n@Directive({\r\n\tselector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',\r\n\tproviders: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true }]\r\n})\r\nexport class EqualValidator implements Validator {\r\n\t/*\r\n\t * Constructor\r\n\t * @param validateEqual \r\n\t * @param reverse \r\n\t */\r\n\tconstructor(@Attribute('validateEqual') public validateEqual: string, @Attribute('reverse') public reverse: string) { }\r\n\r\n\t/**\r\n\t * Is reverse\r\n\t */\r\n\tprivate get isReverse() {\r\n\t\tif (!this.reverse) return false;\r\n\t\treturn this.reverse === 'true' ? true : false;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks the equality of the values\r\n\t * @param c \r\n\t */\r\n\tvalidate(c: AbstractControl): { [key: string]: any } | null {\r\n\t\t/* Self value (e.g. retype password) */\r\n\t\tlet v = c.value;\r\n\r\n\t\t/* Control value (e.g. password) */\r\n\t\tlet e = c.root.get(this.validateEqual);\r\n\r\n\t\t/* Value not equal */\r\n\t\tif (e && v !== e.value && !this.isReverse) {\r\n\t\t\treturn {\r\n\t\t\t\tvalidateEqual: false\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* Value equal and reverse */\r\n\t\tif (e && v === e.value && this.isReverse) {\r\n\t\t\tdelete e.errors!['validateEqual'];\r\n\t\t\tif (!Object.keys(e.errors!).length) e.setErrors(null);\r\n\t\t}\r\n\r\n\t\t/* Value not equal and reverse */\r\n\t\tif (e && v !== e.value && this.isReverse) {\r\n\t\t\te.setErrors({\r\n\t\t\t\tvalidateEqual: false\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Attribute, Directive, Input } from \"@angular/core\";\r\nimport { AbstractControl, NG_ASYNC_VALIDATORS, Validator } from \"@angular/forms\";\r\nimport { map } from \"rxjs/operators\";\r\nimport { Utils } from \"../../common/functions/utils\";\r\n\r\n@Directive({\r\n    selector: '[unique]',\r\n    providers: [{ provide: NG_ASYNC_VALIDATORS, useExisting: UniqueValidatorDirective, multi: true }]\r\n})\r\nexport class UniqueValidatorDirective implements Validator {\r\n\r\n    /**\r\n     * uniqueProperty: string\r\n     */\r\n    @Input()\r\n    public uniqueProperty?: string;\r\n\r\n    /**\r\n     * uniqueId: number\r\n     */\r\n    @Input()\r\n    public uniqueId?: number;\r\n\r\n    /**\r\n     * uniqueParams: any\r\n     */\r\n    @Input()\r\n    public uniqueParams: any = {};\r\n\r\n    /**\r\n     * invert: number\r\n     */\r\n    @Input()\r\n    public invert?: boolean;\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(private http: HttpClient, @Attribute('unique') public unique: string) { }\r\n\r\n    /**\r\n     * Method that performs synchronous validation against the provided control.\r\n     * @param control \r\n     */\r\n    validate(control: AbstractControl): { [key: string]: any } | null {\r\n        if (!control.value || !control.dirty) {\r\n            return new Promise(resolve => resolve(null));\r\n        }\r\n\r\n        /* Init params */\r\n        this.uniqueParams ||= {};\r\n        this.uniqueParams.id ||= this.uniqueId;\r\n        this.uniqueParams[this.uniqueProperty!] = control.value;\r\n\r\n        return new Promise(resolve =>\r\n            this.http.get(this.unique, { params: Utils.cleanObject(this.uniqueParams) })\r\n                .pipe(map((x: any) => x.value))\r\n                .subscribe((value: boolean) => {\r\n                    if (!this.invert) {\r\n                        if (value) {\r\n                            resolve(null);\r\n                        } else {\r\n                            resolve({ notUnique: true });\r\n                        }\r\n                    } else {\r\n                        if (!value) {\r\n                            resolve(null);\r\n                        } else {\r\n                            resolve({ notUnique: true });\r\n                        }\r\n                    }\r\n                }));\r\n    }\r\n}","/** \r\n * Represents the structure of an API response, including content types, formatters, and status code.\r\n * \r\n * @typeparam TEntity - The type of the object that may be contained in the response.\r\n */\r\nexport class ApiResponse<TEntity = any> {\r\n\r\n    /** \r\n     * An object of type `TEntity` that may contain various properties based on the response.\r\n     */\r\n    public value?: TEntity;\r\n\r\n    /**\r\n     * A list of formatters associated with the content types in the response.\r\n     */\r\n    public formatters?: any[];\r\n\r\n    /**\r\n     * A list of content types supported by the API in this response.\r\n     */\r\n    public contentTypes?: string[];\r\n\r\n    /**\r\n     * The HTTP status code indicating the outcome of the API request.\r\n     */\r\n    public statusCode?: number;\r\n}","/**\r\n * Represents the possible target destinations for a menu item.\r\n */\r\nexport enum MenuItemTarget {\r\n    /**\r\n     * Opens the link in the same window or tab.\r\n     */\r\n    Self,\r\n\r\n    /**\r\n     * Opens the link in a new window or tab.\r\n     */\r\n    Blank,\r\n\r\n    /**\r\n     * Opens the link in the parent frame.\r\n     */\r\n    Parent,\r\n\r\n    /**\r\n     * Opens the link in the full body of the window.\r\n     */\r\n    Top\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FuncPipe, VdDelayedHoverDirective } from '../../common/public_api';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { MenuItemTarget } from '../enums/menu-item-target';\r\nimport { MenuItem } from '../models/menu-item';\r\n\r\n@Component({\r\n    selector: 'vd-menu',\r\n    templateUrl: './menu.html',\r\n    styleUrls: ['./menu.scss'],\r\n    imports: [\r\n        CommonModule,\r\n        RouterModule,\r\n        MatListModule,\r\n        MatExpansionModule,\r\n        MatIconModule,\r\n        MatDividerModule,\r\n        MatBadgeModule,\r\n        VdDelayedHoverDirective,\r\n        FuncPipe\r\n    ],\r\n})\r\nexport class VdMenuComponent {\r\n\r\n    /**\r\n     * Menu items\r\n     */\r\n    @Input()\r\n    public items: MenuItem[] = [];\r\n\r\n    /**\r\n     * This will add the classes only when the url matches the link exactly.\r\n     */\r\n    @Input()\r\n    public activeExact: boolean = false;\r\n\r\n    /**\r\n     * Icons font set\r\n     */\r\n    @Input()\r\n    public fontSet: string = 'material-symbols-outlined';\r\n\r\n    /**\r\n     * Items with avatars\r\n     */\r\n    @Input()\r\n    public avatar: boolean = false;\r\n\r\n    /**\r\n     * Mini variant\r\n     */\r\n    @Input()\r\n    public mobile: boolean = false;\r\n\r\n    /**\r\n     * Type of enum MenuItemTarget\r\n     */\r\n    public MenuItemTarget: typeof MenuItemTarget = MenuItemTarget;\r\n\r\n    /**\r\n     * click?: function\r\n     * Event emitted when a menu item is clicked.\r\n     */\r\n    @Output('click')\r\n    public onClick: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * mouseEnter?: function\r\n     * Event emitted when a the mouse is initially moved so that its hotspot is \r\n     * within the element at which the event was fired.\r\n     */\r\n    @Output('over')\r\n    public onMouseEnter: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * mouseEnter?: function\r\n     * Event emitted when the cursor of the mouse is moved out of it.\r\n     */\r\n    @Output('out')\r\n    public onMouseLeave: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * Constructor\r\n     */\r\n    constructor(private media: VdMediaService) { }\r\n\r\n    /**\r\n     * Called after the constructor, initializing input properties, and the first call to ngOnChanges.\r\n     * Add 'implements OnInit' to the class.\r\n     */\r\n    public ngOnInit(): void {\r\n        this.media.registerQuery(`gt-sm`).subscribe((x: boolean) => { this.mobile = !x });\r\n\r\n        // if (this.items.length > 0) {\r\n        //     var testMenuItem = this.items.find((x: MenuItem) => x.id === 9);\r\n        //     if (testMenuItem) {\r\n        //         this.itemMouseEnter({ type: 'mouseenter' }, testMenuItem);\r\n        //     }\r\n        // }\r\n    }\r\n\r\n    /**\r\n     * Event emitted when a meni item is clicked.\r\n     */\r\n    public itemClicked($event: any, item: MenuItem): void {\r\n        $event.stopPropagation();\r\n        if (item.event instanceof Function) {\r\n            (<Function>item.event)({ event: $event, item: item });\r\n        } else if ((<any>item.event) instanceof EventEmitter) {\r\n            (<any>item.event).emit({ event: $event, item: item });\r\n        } else {\r\n            this.onClick.emit({ event: $event, item: item });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event emitted when a the mouse is initially moved so that its hotspot is \r\n     * within the element at which the event was fired.\r\n     */\r\n    public itemMouseEnter($event: any, item: MenuItem): void {\r\n        this.onMouseEnter.emit({ event: $event, item: item });\r\n    }\r\n\r\n    /**\r\n     * Event emitted when the cursor of the mouse is moved out of it.\r\n     */\r\n    public itemMouseLeave($event: any, item: MenuItem): void {\r\n        // this.onMouseLeave.emit({ event: $event, item: item });\r\n    }\r\n}","<mat-nav-list>\r\n    <!-- #region main-menu-accordion -->\r\n    <mat-accordion displayMode=\"flat\">\r\n        @for (item of items; track item; let last = $last) {\r\n            <!-- #region mobile-item-with-submenu -->\r\n            @if ((item?.items?.length ?? 0) > 0 && mobile) {\r\n                <mat-expansion-panel class=\"mat-elevation-z raw\"\r\n                                     (click)=\"$event.stopPropagation();\"\r\n                                     [disabled]=\"!mobile\"\r\n                                     [hideToggle]=\"!mobile || !item?.items?.length\"\r\n                                     [ngClass]=\"{'icon-only': !item.title, 'mobile': mobile}\"\r\n                                     (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\"\r\n                                     (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\"\r\n                                     [routerLinkActive]=\"['active']\"\r\n                                     [routerLinkActiveOptions]=\"{exact:false}\">\r\n                    <!-- #region mobile-parent-item-header -->\r\n                    <mat-expansion-panel-header [expandedHeight]=\"'48px'\">\r\n                        <mat-panel-title>\r\n                            <!-- #region parent-item-icon-and-title -->\r\n                            @if (!avatar) {\r\n                                <mat-icon [fontSet]=\"fontSet\"\r\n                                          [style.color]=\"item.iconColor\"\r\n                                          [matBadge]=\"item.badge ? item.badge() : null\"\r\n                                          [matBadgeHidden]=\"!item.badge || item.badge() === 0\"\r\n                                          aria-hidden=\"false\">\r\n                                    {{(item.icon | func:item) || 'radio_button_unchecked'}}\r\n                                </mat-icon>\r\n                            }\r\n                            @if (!avatar && item.title) {\r\n                                <span [style.color]=\"item.textColor\">{{item.title}}</span>\r\n                            }\r\n                            @if (avatar) {\r\n                                <mat-icon [fontSet]=\"fontSet\">{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n                            }\r\n                            @if (avatar) {\r\n                                <h3>{{item.title}}</h3>\r\n                            }\r\n                            <!-- #endregion -->\r\n                        </mat-panel-title>\r\n                    </mat-expansion-panel-header>\r\n                    <!-- #endregion -->\r\n\r\n                    <!-- #region mobile-submenu-items -->\r\n                    <mat-nav-list>\r\n                        @for (subItem of item.items; track subItem; let subLast = $last) {\r\n                            <!-- #region visible-submenu-link -->\r\n                            @if (subItem.enabled) {\r\n                                <a mat-list-item\r\n                                   [style.backgroundColor]=\"subItem.backgroundColor\"\r\n                                   [routerLink]=\"subItem.path\"\r\n                                   target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\"\r\n                                   [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !subItem.title}\"\r\n                                   [routerLinkActiveOptions]=\"{exact:subItem.activeExact??false}\"\r\n                                   [fragment]=\"subItem.fragment\"\r\n                                   (click)=\"itemClicked($event, subItem)\">\r\n                                    <!-- #region submenu-icon-and-text -->\r\n                                    @if (!avatar) {\r\n                                        <mat-icon [fontSet]=\"fontSet\" [style.color]=\"subItem.iconColor\" aria-hidden=\"false\">\r\n                                            {{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}\r\n                                        </mat-icon>\r\n                                    }\r\n\r\n                                    @if (!avatar && subItem.title) {\r\n                                        <span [style.color]=\"subItem.textColor\">{{subItem.title}}</span>\r\n                                    }\r\n\r\n                                    @if (avatar) {\r\n                                        <mat-icon [fontSet]=\"fontSet\">{{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}</mat-icon>\r\n                                    }\r\n\r\n                                    @if (avatar) {\r\n                                        <h3>{{subItem.title}}</h3>\r\n                                    }\r\n\r\n                                    @if (avatar && subItem.description) {\r\n                                        <p>{{subItem.description}}</p>\r\n                                    }\r\n\r\n                                    @if (subItem.badge && subItem.badge() !== 0) {\r\n                                        <span matListItemMeta\r\n                                              [matBadge]=\"subItem.badge()\"\r\n                                              matBadgeOverlap=\"false\"\r\n                                              matBadgePosition=\"above before\"\r\n                                              class=\"menu-badge-align\">\r\n                                        </span>\r\n                                    }\r\n                                    <!-- #endregion -->\r\n                                </a>\r\n                            }\r\n                            <!-- #endregion -->\r\n\r\n                            <!-- #region submenu-divider-lines -->\r\n                            @if (subItem.divider && !avatar) {\r\n                                <mat-divider></mat-divider>\r\n                            }\r\n                            @if (!subItem.divider && avatar && !subLast) {\r\n                                <mat-divider [inset]=\"avatar\"></mat-divider>\r\n                            }\r\n                            <!-- #endregion -->\r\n                        }\r\n                    </mat-nav-list>\r\n                    <!-- #endregion -->\r\n                </mat-expansion-panel>\r\n                <!-- #endregion -->\r\n\r\n                <!-- #region regular-menu-item -->\r\n            } @else {\r\n                <!-- #region regular-item-link -->\r\n                @if (item.enabled) {\r\n                    <a mat-list-item [style.backgroundColor]=\"item.backgroundColor\" [routerLink]=\"item.path\" target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\" [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !item.title}\" [routerLinkActiveOptions]=\"{exact:item.activeExact??false}\" [fragment]=\"item.fragment\" (click)=\"itemClicked($event, item)\" (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\" (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\">\r\n                        @if (!avatar) {\r\n                            <mat-icon [fontSet]=\"fontSet\"\r\n                                      [style.color]=\"item.iconColor\"\r\n                                      aria-hidden=\"false\"\r\n                                      matListItemIcon>\r\n                                {{(item.icon | func:item) || 'radio_button_unchecked'}}\r\n                            </mat-icon>\r\n                        }\r\n\r\n                        @if (!avatar && item.title) {\r\n                            <span [style.color]=\"item.textColor\" matListItemTitle>{{item.title}}</span>\r\n                        }\r\n\r\n                        @if (avatar) {\r\n                            <mat-icon [fontSet]=\"fontSet\" matListAvatar>{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n                        }\r\n\r\n                        @if (avatar) {\r\n                            <h3 matLine>{{item.title}}</h3>\r\n                        }\r\n\r\n                        @if (avatar && item.description) {\r\n                            <p matLine>{{item.description}}</p>\r\n                        }\r\n\r\n                        @if (item.badge && item.badge() !== 0) {\r\n                            <span matListItemMeta\r\n                                  [matBadge]=\"item.badge()\"\r\n                                  matBadgeOverlap=\"false\"\r\n                                  matBadgePosition=\"above before\"\r\n                                  class=\"menu-badge-align\">\r\n                            </span>\r\n                        }\r\n                    </a>\r\n                }\r\n                <!-- #endregion -->\r\n\r\n                <!-- #region regular-item-divider-lines -->\r\n                @if (item.divider && !avatar) {\r\n                    <mat-divider></mat-divider>\r\n                }\r\n                @if (!item.divider && avatar && !last) {\r\n                    <mat-divider [inset]=\"avatar\"></mat-divider>\r\n                }\r\n                <!-- #endregion -->\r\n            }\r\n            <!-- #endregion -->\r\n        }\r\n    </mat-accordion>\r\n    <!-- #endregion -->\r\n</mat-nav-list>","export enum MenuScope {\r\n\tSite,\r\n\tAdmin\r\n}","import { prop, required } from '../../form-validators/decorators';\r\n\r\n/**\r\n * @class\r\n */\r\nexport class MenuClient {\r\n    /**\r\n     * @property\r\n     */\r\n    @prop()\r\n    public menuId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @required()\r\n    public clientId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public client?: any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public clientName?: string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<MenuClient>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { prop, required } from '../../form-validators/decorators';\r\n\r\n/**\r\n * @class\r\n */\r\nexport class MenuDepartment {\r\n    /**\r\n     * @property\r\n     */\r\n    @prop()\r\n    public menuId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @required()\r\n    public departmentId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public department?: any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public departmentName?: string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<MenuDepartment>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { prop, required } from '../../form-validators/decorators';\r\n\r\n/**\r\n * @class\r\n */\r\nexport class MenuItemClient {\r\n    /**\r\n     * @property\r\n     */\r\n    @prop()\r\n    public menuItemId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @required()\r\n    public clientId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public client?: any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public clientName?: string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<MenuItemClient>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { prop, required } from '../../form-validators/decorators';\r\n\r\n/**\r\n * @class\r\n */\r\nexport class MenuItemDepartment {\r\n    /**\r\n     * @property\r\n     */\r\n    @prop()\r\n    public menuItemId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @required()\r\n    public departmentId?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public department?: any;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    public departmentName?: string;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<MenuItemDepartment>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { EventEmitter } from '@angular/core';\r\nimport { Api, Display } from '../../common/functions/decorators';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { AuditEntity } from '../../common/models/audit-entity';\r\nimport { TitleProjection } from '../../common/models/title-projection';\r\nimport { Templates } from '../../common/templates/templates';\r\nimport { prop, required } from '../../form-validators/decorators';\r\nimport { FormFieldType } from '../../forms/enums/form-field-type';\r\nimport { FormField } from '../../forms/functions/decorators';\r\nimport { Grid } from '../../table/enums/grid';\r\nimport { Column, Table } from '../../table/functions/decorators';\r\nimport { MenuItemTarget } from '../enums/menu-item-target';\r\nimport { MenuScope } from '../enums/menu-scope';\r\nimport { Menu } from './menu';\r\nimport { MenuItemClient } from './menu-item-client';\r\nimport { MenuItemDepartment } from './menu-item-department';\r\n\r\n@Api('menuitem')\r\n@Table({\r\n    endpoint: 'menuitem',\r\n    projection: ['id', 'createdDate', 'name', 'title', 'scope', 'menu(title)', 'parent(title)', 'path', 'enabled']\r\n})\r\nexport class MenuItem extends AuditEntity {\r\n    /**\r\n     * The scope of the menu item.\r\n     */\r\n    @prop()\r\n    public scope?: MenuScope;\r\n\r\n    /**\r\n     * The name of the menu item.\r\n     */\r\n    @prop()\r\n    public name?: string;\r\n\r\n    /**\r\n     * The title of the menu item.\r\n     */\r\n    @required()\r\n    @FormField<MenuItem>({ row: 10 })\r\n    @Column({ index: 1 })\r\n    @Display($localize`:@@title:Title`)\r\n    public title?: string;\r\n\r\n    /**\r\n     * The path of the menu item.\r\n     */\r\n    @required()\r\n    @FormField<MenuItem>({ row: 15 })\r\n    @Column({\r\n        index: 4,\r\n        maxWidth: 150,\r\n        display: Grid.Lg\r\n    })\r\n    @Display($localize`:@@path:Path`)\r\n    public path?: string;\r\n\r\n    /**\r\n     * The target destination of the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({ enumType: MenuItemTarget, row: 15 })\r\n    @Display($localize`:@@target:Target`)\r\n    public target?: MenuItemTarget;\r\n\r\n    /**\r\n     * The icon of the menu item.\r\n     */\r\n    @required()\r\n    @FormField<MenuItem>({ row: 20 })\r\n    @Display('Icon')\r\n    public icon: string | Function = 'radio_button_unchecked';\r\n\r\n    /**\r\n     * The ordering index of the menu item.\r\n     */\r\n    @required()\r\n    @FormField<MenuItem>({ row: 20 })\r\n    @Display($localize`:@@ordering:Ordering`)\r\n    public ordering?: number;\r\n\r\n    /**\r\n     * The background color of the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 25,\r\n        type: FormFieldType.Color,\r\n        pattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n    })\r\n    @Display($localize`:@@backgroundColor:Background color`)\r\n    public backgroundColor?: string;\r\n\r\n    /**\r\n     * The text color of the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 25,\r\n        type: FormFieldType.Color,\r\n        pattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n    })\r\n    @Display($localize`:@@textColor:Text color`)\r\n    public textColor?: string;\r\n\r\n    /**\r\n     * The icon color of the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 25,\r\n        type: FormFieldType.Color,\r\n        pattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n    })\r\n    @Display($localize`:@@iconColor:Icon color`)\r\n    public iconColor?: string;\r\n\r\n    /**\r\n     * The ID of the associated menu.\r\n     */\r\n    @prop()\r\n    @Column<MenuItem>({\r\n        index: 2,\r\n        name: 'menu.title',\r\n        maxWidth: 210,\r\n        display: Grid.Lg,\r\n        content: (row) => row?.menu?.title\r\n    })\r\n    @FormField<MenuItem>({\r\n        row: 30,\r\n        type: FormFieldType.VdChips,\r\n        endpoint: 'menu',\r\n        classType: TitleProjection,\r\n        params: { projection: 'id,title', enabled: true },\r\n        chipTemplate: (x) => Templates.idTitleTemplate(x),\r\n        hide: (x) => x.parentId\r\n    })\r\n    @Display($localize`:@@menu:Menu`)\r\n    public menuId?: number;\r\n\r\n    /**\r\n     * The associated menu object.\r\n     */\r\n    public menu?: Menu;\r\n\r\n    /**\r\n     * The ID of the parent menu item.\r\n     */\r\n    @prop()\r\n    @Column<MenuItem>({\r\n        index: 3,\r\n        name: 'parent.title',\r\n        maxWidth: 210,\r\n        display: Grid.Lg,\r\n        content: (row) => row?.parent?.title\r\n    })\r\n    @FormField<MenuItem>({\r\n        row: 40,\r\n        type: FormFieldType.VdChips,\r\n        endpoint: 'menuitem',\r\n        classType: TitleProjection,\r\n        chipTemplate: (x) => Templates.idTitleTemplate(x),\r\n        params: { projection: 'id,title', enabled: true }\r\n    })\r\n    @Display($localize`:@@parentMenu:Parent menu`)\r\n    public parentId?: number;\r\n\r\n    /**\r\n     * The parent menu item object.\r\n     */\r\n    public parent?: MenuItem;\r\n\r\n    /**\r\n     * The IDs of the roles associated with the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 50,\r\n        endpoint: 'role',\r\n        params: { projection: 'id,name', enabled: true },\r\n        multiple: true\r\n    })\r\n    @Display($localize`:@@roles:Roles`)\r\n    public roleIds?: number[];\r\n\r\n    /**\r\n     * The categories associated with the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 60,\r\n        type: FormFieldType.Chips\r\n    })\r\n    @Display($localize`:@@categories:Categories`)\r\n    public categories?: string[] = [];\r\n\r\n    /**\r\n     * The description of the menu item.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({\r\n        row: 100,\r\n        type: FormFieldType.TextArea\r\n    })\r\n    @Display($localize`:@@description:Description`)\r\n    public description?: string;\r\n\r\n    /**\r\n     * The layout type of the menu item.\r\n     */\r\n    @prop()\r\n    public layout?: string;\r\n\r\n    /**\r\n     * Additional parameters for the menu item.\r\n     */\r\n    @prop()\r\n    public params: any;\r\n\r\n    /**\r\n     * The fragment of the URL for the menu item.\r\n     */\r\n    @prop()\r\n    @Display($localize`:@@fragment:Fragment`)\r\n    public fragment?: string;\r\n\r\n    /**\r\n     * Indicates whether the menu item is enabled.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({ row: 200 })\r\n    @Column({ index: 10, event: 'toggle' })\r\n    @Display($localize`:@@enabled:Enabled`)\r\n    public enabled?: boolean;\r\n\r\n    /**\r\n     * Indicates whether the menu item is a divider.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({ row: 210 })\r\n    @Display($localize`:@@divider:Divider`)\r\n    public divider?: boolean;\r\n\r\n    /**\r\n     * Indicates whether the menu item should match the exact active URL.\r\n     */\r\n    @prop()\r\n    @FormField<MenuItem>({ row: 220 })\r\n    @Display($localize`:@@activeExact:Active exact`)\r\n    public activeExact?: boolean;\r\n\r\n    /**\r\n     * The event associated with the menu item.\r\n     */\r\n    public event?: EventEmitter<any> | Function;\r\n\r\n    /**\r\n     * The clients associated with the menu item.\r\n     */\r\n    @required({ conditionalExpression: (x: MenuItem) => true })\r\n    @Column<MenuItem>({\r\n        index: 5,\r\n        filter: 'clientJoins.client.displayName',\r\n        sortBy: 'clientJoins.Min(client.displayName)',\r\n        content: (x) => Utils.joinArray(x?.clientJoins?.map(y => y.client?.displayName ?? '') ?? []),\r\n        display: Grid.Lg,\r\n        maxWidth: 200,\r\n        hide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n    })\r\n    @FormField<MenuItem, MenuItemClient>({\r\n        row: 1,\r\n        endpoint: 'client',\r\n        params: () => {\r\n            return {\r\n                enabled: true,\r\n                projection: 'id,displayName',\r\n                sortBy: 'id'\r\n            }\r\n        },\r\n        multiple: true,\r\n        hide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n        compareWith: (o, v) => o.clientId === v.clientId,\r\n        mapper: (x: { id: number, displayName: string }[]) => x.map(y => new MenuItemClient({ clientId: y.id, clientName: y.displayName })),\r\n        optionTemplate: (x) => x?.clientName,\r\n        triggerMapper: (x) => x?.clientName\r\n    })\r\n    @Display($localize`:@@projects:Projects`)\r\n    public clientJoins?: MenuItemClient[];\r\n\r\n    /**\r\n     * The departments associated with the menu item.\r\n     */\r\n    @prop()\r\n    @Column<MenuItem>({\r\n        index: 5,\r\n        filter: 'departmentJoins.department.displayName',\r\n        sortBy: 'departmentJoins.Min(department.displayName)',\r\n        content: (x) => Utils.joinArray(x?.departmentJoins?.map(y => y.department?.displayName ?? '') ?? []),\r\n        display: Grid.Lg,\r\n        maxWidth: 200,\r\n        hide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n    })\r\n    @FormField<MenuItem, MenuItemDepartment>({\r\n        row: 2,\r\n        endpoint: 'department',\r\n        params: (x) => {\r\n            return {\r\n                enabled: true,\r\n                projection: 'id,displayName',\r\n                sortBy: 'id',\r\n                clientId: x.clientJoins?.map(y => y.clientId)\r\n            }\r\n        },\r\n        multiple: true,\r\n        hide: (_, __, ctx: any) => (!ctx.isAdmin && !ctx.isClientAdmin) || (!ctx.settings?.multitenantable && !ctx.settings?.multiDepartments),\r\n        compareWith: (o, v) => o.departmentId === v.departmentId,\r\n        mapper: (x: { id: number, displayName: string }[]) => x.map(y => new MenuItemDepartment({ departmentId: y.id, departmentName: y.displayName })),\r\n        optionTemplate: (x) => x?.departmentName,\r\n        triggerMapper: (x) => x?.departmentName\r\n    })\r\n    @Display($localize`:@@departments:Departments`)\r\n    public departmentJoins?: MenuItemDepartment[];\r\n\r\n    /**\r\n     * The child menu items.\r\n     */\r\n    public items?: MenuItem[];\r\n\r\n    /**\r\n     * A function that returns the badge count for the menu item.\r\n     */\r\n    public badge?: () => number;\r\n}","import { Api, Display } from '../../common/functions/decorators';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { AuditEntity } from '../../common/models/audit-entity';\r\nimport { prop, propArray, required } from '../../form-validators/decorators';\r\nimport { FormFieldType } from '../../forms/enums/form-field-type';\r\nimport { FormField } from '../../forms/functions/decorators';\r\nimport { Grid } from '../../table/enums/grid';\r\nimport { Column, Table } from '../../table/functions/decorators';\r\nimport { MenuScope } from '../enums/menu-scope';\r\nimport { MenuClient } from './menu-client';\r\nimport { MenuDepartment } from './menu-department';\r\nimport { MenuItem } from './menu-item';\r\n\r\n@Api('menu')\r\n@Table({\r\n\tprojection: ['id', 'createdDate', 'name', 'title', 'scope', 'enabled']\r\n})\r\nexport class Menu extends AuditEntity {\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@required()\r\n\t@FormField({ row: 20 })\r\n\t@Column({})\r\n\t@Display($localize`:@@name:Name`)\r\n\tpublic name?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@required()\r\n\t@FormField({ row: 20 })\r\n\t@Column({ display: Grid.Md })\r\n\t@Display($localize`:@@title:Title`)\r\n\tpublic title?: string;\r\n\r\n\r\n\t/**\r\n\t * The background color of the menu item.\r\n\t */\r\n\t@prop()\r\n\t@FormField<MenuItem>({\r\n\t\trow: 25,\r\n\t\ttype: FormFieldType.Color,\r\n\t\tpattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n\t})\r\n\t@Display($localize`:@@backgroundColor:Background color`)\r\n\tpublic backgroundColor?: string;\r\n\r\n\t/**\r\n\t * The text color of the menu item.\r\n\t */\r\n\t@prop()\r\n\t@FormField<MenuItem>({\r\n\t\trow: 25,\r\n\t\ttype: FormFieldType.Color,\r\n\t\tpattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n\t})\r\n\t@Display($localize`:@@textColor:Text color`)\r\n\tpublic textColor?: string;\r\n\r\n\t/**\r\n\t * The icon color of the menu item.\r\n\t */\r\n\t@prop()\r\n\t@FormField<MenuItem>({\r\n\t\trow: 25,\r\n\t\ttype: FormFieldType.Color,\r\n\t\tpattern: /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/\r\n\t})\r\n\t@Display($localize`:@@iconColor:Icon color`)\r\n\tpublic iconColor?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@required()\r\n\t@FormField({ row: 10, enumType: MenuScope })\r\n\t@Column({ enumType: MenuScope, maxWidth: 150, display: Grid.Lg })\r\n\t@Display($localize`:@@scope:Scope`)\r\n\tpublic scope?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\tpublic language?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\t@FormField({ row: 100, rows: 2 })\r\n\t@Display($localize`:@@description:Description`)\r\n\tpublic description?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\tpublic icon?: string;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@propArray(MenuItem)\r\n\tpublic items?: MenuItem[];\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\tpublic roleIds?: number[];\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\t@FormField({ row: 200 })\r\n\t@Column({ event: 'toggle' })\r\n\t@Display($localize`:@@enabled:Enabled`)\r\n\tpublic enabled?: boolean;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@required({ conditionalExpression: (x: Menu) => true })\r\n\t@Column<Menu>({\r\n\t\tindex: 5,\r\n\t\tfilter: 'clientJoins.client.displayName',\r\n\t\tsortBy: 'clientJoins.Min(client.displayName)',\r\n\t\tcontent: (x) => Utils.joinArray(x?.clientJoins?.map(y => y.client?.displayName ?? '') ?? []),\r\n\t\tdisplay: Grid.Lg,\r\n\t\tmaxWidth: 200,\r\n\t\thide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n\t})\r\n\t@FormField<Menu, MenuClient>({\r\n\t\trow: 1,\r\n\t\tendpoint: 'client',\r\n\t\tparams: () => {\r\n\t\t\treturn {\r\n\t\t\t\tenabled: true,\r\n\t\t\t\tprojection: 'id,displayName',\r\n\t\t\t\tsortBy: 'id'\r\n\t\t\t}\r\n\t\t},\r\n\t\tmultiple: true,\r\n\t\ttriggerMode: 'chip',\r\n\t\thide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n\t\tcompareWith: (o, v) => o.clientId === v.clientId,\r\n\t\tmapper: (x: { id: number, displayName: string }[]) => x.map(y => new MenuClient({ clientId: y.id, clientName: y.displayName })),\r\n\t\toptionTemplate: (x) => x?.clientName,\r\n\t\ttriggerMapper: (x) => x?.clientName\r\n\t})\r\n\t@Display($localize`:@@projects:Projects`)\r\n\tpublic clientJoins?: MenuClient[];\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@prop()\r\n\t@Column<Menu>({\r\n\t\tindex: 5,\r\n\t\tfilter: 'departmentJoins.department.displayName',\r\n\t\tsortBy: 'departmentJoins.Min(department.displayName)',\r\n\t\tcontent: (x) => Utils.joinArray(x?.departmentJoins?.map(y => y.department?.displayName ?? '') ?? []),\r\n\t\tdisplay: Grid.Lg,\r\n\t\tmaxWidth: 200,\r\n\t\thide: (_, __, ctx: any) => !ctx.isAdmin || (!ctx.settings?.multitenantable && !ctx.settings?.multiClients),\r\n\t})\r\n\t@FormField<Menu, MenuDepartment>({\r\n\t\trow: 2,\r\n\t\tendpoint: 'department',\r\n\t\tparams: (x) => {\r\n\t\t\treturn {\r\n\t\t\t\tenabled: true,\r\n\t\t\t\tprojection: 'id,displayName',\r\n\t\t\t\tsortBy: 'id',\r\n\t\t\t\tclientId: x.clientJoins?.map(y => y.clientId)\r\n\t\t\t}\r\n\t\t},\r\n\t\tmultiple: true,\r\n\t\ttriggerMode: 'chip',\r\n\t\thide: (_, __, ctx: any) => (!ctx.isAdmin && !ctx.isClientAdmin) || (!ctx.settings?.multitenantable && !ctx.settings?.multiDepartments),\r\n\t\tcompareWith: (o, v) => o.departmentId === v.departmentId,\r\n\t\tmapper: (x: { id: number, displayName: string }[]) => x.map(y => new MenuDepartment({ departmentId: y.id, departmentName: y.displayName })),\r\n\t\toptionTemplate: (x) => x?.departmentName,\r\n\t\ttriggerMapper: (x) => x?.departmentName\r\n\t})\r\n\t@Display($localize`:@@departments:Departments`)\r\n\tpublic departmentJoins?: MenuDepartment[];\r\n}","\r\nexport class MenuSettings {\r\n    multiClients?: boolean = false;\r\n    multiDepartments?: boolean = false;\r\n    multitenantable?: boolean = false;\r\n\r\n    /**\r\n     * constructor\r\n     * @param init \r\n     */\r\n    public constructor(init?: Partial<MenuSettings>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot } from \"@angular/router\";\r\nimport { OidcSecurityService } from \"angular-auth-oidc-client\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { AuthHelper } from \"../../base/helpers/auth-helper\";\r\nimport { MenuSettings } from \"../models/menu-settings\";\r\n\r\n/**\r\n * Includes resolve service\r\n */\r\n@Injectable()\r\nexport class MenuFormIncludesResolve {\r\n    /* \r\n     * Injects the MenuSettings service directly using the `inject()` function.\r\n     * This is typically used in standalone components or when constructor injection is not ideal.\r\n     */\r\n    private settings: MenuSettings = inject(MenuSettings);\r\n\r\n    /**\r\n     * Constructor\r\n     * @param oidcSecurityService \r\n     */\r\n    constructor(private oidcSecurityService: OidcSecurityService,) { }\r\n\r\n    /**\r\n     * Resolves includes\r\n     */\r\n    resolve(route: ActivatedRouteSnapshot): Observable<string[]> {\r\n        var includes: string[] = [];\r\n\r\n        return this.oidcSecurityService.checkAuth().pipe(map(x => {\r\n            AuthHelper.user.isAuthenticated = x.isAuthenticated;\r\n            if (x.userData) {\r\n                AuthHelper.user = Object.assign(x.userData, {\r\n                    id: x.userData.sub,\r\n                    isAuthenticated: x.isAuthenticated\r\n                });\r\n\r\n                if (this.settings?.multitenantable || this.settings?.multiClients) {\r\n                    includes.push('ClientJoins');\r\n                }\r\n\r\n                if (this.settings?.multitenantable || this.settings?.multiDepartments) {\r\n                    includes.push('DepartmentJoins');\r\n                }\r\n            }\r\n\r\n            return includes;\r\n        }));\r\n    }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot } from \"@angular/router\";\r\nimport { OidcSecurityService } from \"angular-auth-oidc-client\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { AuthHelper } from \"../../base/helpers/auth-helper\";\r\nimport { MenuSettings } from \"../models/menu-settings\";\r\n\r\n/**\r\n * Includes resolve service\r\n */\r\n@Injectable()\r\nexport class MenuItemFormIncludesResolve {\r\n    /* \r\n     * Injects the MenuSettings service directly using the `inject()` function.\r\n     * This is typically used in standalone components or when constructor injection is not ideal.\r\n     */\r\n    private settings: MenuSettings = inject(MenuSettings);\r\n\r\n    /**\r\n     * Constructor\r\n     * @param oidcSecurityService \r\n     */\r\n    constructor(private oidcSecurityService: OidcSecurityService,) { }\r\n\r\n    /**\r\n     * Resolves includes\r\n     */\r\n    resolve(route: ActivatedRouteSnapshot): Observable<string[]> {\r\n        var includes = ['roles'];\r\n\r\n        return this.oidcSecurityService.checkAuth().pipe(map(x => {\r\n            AuthHelper.user.isAuthenticated = x.isAuthenticated;\r\n            if (x.userData) {\r\n                AuthHelper.user = Object.assign(x.userData, {\r\n                    id: x.userData.sub,\r\n                    isAuthenticated: x.isAuthenticated\r\n                });\r\n\r\n                if (this.settings?.multitenantable || this.settings?.multiClients) {\r\n                    includes.push('ClientJoins');\r\n                }\r\n\r\n                if (this.settings?.multitenantable || this.settings?.multiDepartments) {\r\n                    includes.push('DepartmentJoins');\r\n                }\r\n            }\r\n\r\n            return includes;\r\n        }));\r\n    }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\n\r\nimport { OidcSecurityService } from \"angular-auth-oidc-client\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { GlobalRoles } from \"../../base/constants/global-roles\";\r\nimport { AuthHelper } from \"../../base/helpers/auth-helper\";\r\nimport { MenuSettings } from \"../models/menu-settings\";\r\n\r\n\r\n/**\r\n * Includes resolve service\r\n */\r\n@Injectable()\r\nexport class MenuListProjectionResolve {\r\n    /* \r\n      * Injects the MenuSettings service directly using the `inject()` function.\r\n      * This is typically used in standalone components or when constructor injection is not ideal.\r\n      */\r\n    private settings: MenuSettings = inject(MenuSettings);\r\n\r\n    /**\r\n     * Constructor\r\n     * @param oidcSecurityService \r\n     */\r\n    constructor(private oidcSecurityService: OidcSecurityService,) { }\r\n\r\n    /**\r\n     * Resolves includes\r\n     */\r\n    resolve(): Observable<string[]> {\r\n        var projection: string[] = [];\r\n\r\n        return this.oidcSecurityService.checkAuth().pipe(map(x => {\r\n            AuthHelper.user.isAuthenticated = x.isAuthenticated;\r\n            if (x.userData) {\r\n                AuthHelper.user = Object.assign(x.userData, {\r\n                    id: x.userData.sub,\r\n                    isAuthenticated: x.isAuthenticated\r\n                });\r\n\r\n                if (AuthHelper.hasRole(GlobalRoles.Administrator) && (this.settings?.multitenantable || this.settings?.multiClients)) {\r\n                    projection.push('clientJoins(client(displayName))');\r\n                }\r\n\r\n                if ((AuthHelper.hasRole(GlobalRoles.Administrator) || AuthHelper.hasRole(GlobalRoles.ClientAdministrator)) && (this.settings?.multitenantable || this.settings?.multiDepartments)) {\r\n                    projection.push('departmentJoins(department(displayName))');\r\n                }\r\n            }\r\n\r\n            return projection;\r\n        }));\r\n    }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot } from \"@angular/router\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { MenuSettings } from \"../models/menu-settings\";\r\n\r\n\r\n/**\r\n * Settings resolve service\r\n */\r\n@Injectable()\r\nexport class MenuSettingsResolve {\r\n\r\n    /**\r\n     * Resolves settings\r\n     */\r\n    resolve(route: ActivatedRouteSnapshot): Observable<MenuSettings> {\r\n        let settings = new MenuSettings({ multitenantable: true });\r\n        // ServiceLocator.create([{ provide: MenuSettings, useValue: settings }]);\r\n        return of(settings);\r\n    }\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { MenuItem } from '../models/menu-item';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuItemService extends GenericService<MenuItem> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _http \r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('menuitem');\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '../../http/services/generic';\r\nimport { Menu } from '../models/menu';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuService extends GenericService<Menu> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _http \r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('menu');\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { MenuItem } from '../models/menu-item';\r\nimport { MenuService } from './menu';\r\n\r\n/**\r\n * Menu resolve service\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuResolve {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param menuService \r\n\t */\r\n\tconstructor(private menuService: MenuService) { }\r\n\r\n\t/**\r\n\t * Resolves menu items\r\n\t * @param route \r\n\t */\r\n\tresolve(route: ActivatedRouteSnapshot): Observable<Menu> {\r\n\t\treturn this.menuService.getList(route.data || {}, undefined, { cache: 'yes' });\r\n\t}\r\n}\r\n\r\n/**\r\n * Submenu resolve service\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class SubMenuResolve {\r\n\r\n\tconstructor(private router: Router, private route3: ActivatedRoute) { }\r\n\r\n\t/**\r\n\t * Resolves menu items\r\n\t * @param route \r\n\t * @param state \r\n\t */\r\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MenuItem | undefined {\r\n\t\t/* Get menu from route data */\r\n\t\tlet menu: Menu[] = route?.parent?.data[\"menu\"] || state?.root?.firstChild?.data[\"menu\"];\r\n\r\n\t\t/* Check menu items in route data */\r\n\t\tif (menu) {\r\n\t\t\tvar adminMenu = menu[0];\r\n\t\t\tif (adminMenu && adminMenu.items) {\r\n\t\t\t\t/* Append a trailing slash if the route URL doesn't end with one */\r\n\t\t\t\tlet routePath = route.url[0].path.endsWith('/') ? route.url[0].path.slice(0, -1) : route.url[0].path;\r\n\r\n\t\t\t\t/* Filter the menu items based on the modified route path */\r\n\t\t\t\treturn adminMenu.items.filter((x: any) => x.path === `/${routePath}`)[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDrawer, MatDrawerToggleResult, MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { VdMediaService } from '../media/services/media';\r\nimport { MenuItem } from '../menu/models/menu-item';\r\nimport { VdMenuComponent } from '../menu/public_api';\r\nimport { ILayoutTogglable } from './layout-toggle.class';\r\n\r\n@Component({\r\n\tselector: 'vd-layout',\r\n\tstyleUrls: ['./layout.scss'],\r\n\ttemplateUrl: './layout.html',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatSidenavModule,\r\n\t\tMatToolbarModule,\r\n\t\tMatCardModule,\r\n\t\tVdMenuComponent\r\n\t]\r\n})\r\nexport class VdLayoutComponent implements ILayoutTogglable {\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _sidenavWidth: string = '320px';\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _subMenuWidth: string = '270px';\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _mini: boolean = false;\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _mobile: boolean = false;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@ViewChild(MatSidenav, { static: true })\r\n\tpublic sidenav?: MatSidenav;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@ViewChild('subMenuDrawer', { static: true })\r\n\tpublic subMenuDrawer?: MatDrawer;\r\n\r\n\t/**\r\n\t * menuItems: MenuItem[]\r\n\t */\r\n\t@Input()\r\n\tpublic menuItems: MenuItem[] = [];\r\n\r\n\t/** \r\n\t * Flag to control the visibility of the debug banner. \r\n\t * If set to true, the debug banner will be displayed; \r\n\t * otherwise, it will be hidden. \r\n\t */\r\n\t@Input()\r\n\tpublic showDebugBanner: boolean = false;\r\n\r\n\t/**\r\n\t * mode?: 'side', 'push' or 'over'\r\n\t *\r\n\t * The mode or styling of the sidenav.\r\n\t * Defaults to \"over\".\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic mode: 'side' | 'push' | 'over' = 'over';\r\n\r\n\t/**\r\n\t * color?: 'accent' | 'primary' | 'warn'\r\n\t *\r\n\t * toolbar color option: primary | accent | warn.\r\n\t * If [color] is not set, default is used.\r\n\t */\r\n\t@Input()\r\n\tpublic color?: 'accent' | 'primary' | 'warn';\r\n\r\n\t/**\r\n\t * opened?: boolean\r\n\t *\r\n\t * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\r\n\t * Defaults to \"false\".\r\n\t *\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic opened: boolean = false;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@Input()\r\n\tpublic get mini(): boolean { return this._mini && !this._mobile; };\r\n\tpublic set mini(mini) {\r\n\t\tthis._mini = mini;\r\n\t\tif (this._mini === true) {\r\n\t\t\tthis.mode = 'side';\r\n\t\t\tthis.opened = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic get mobile(): boolean { return this._mobile; };\r\n\r\n\t/**\r\n\t * overGt?: string\r\n\t */\r\n\t@Input()\r\n\tpublic sideGt: string = 'sm';\r\n\r\n\t/** \r\n\t * Event emitted when the drawer expand state is changed.\r\n\t */\r\n\t@Output()\r\n\tpublic expandedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\t/**\r\n\t * sidenavWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"320px\".\r\n\t */\r\n\t@Input()\r\n\tpublic set sidenavWidth(sidenavWidth) { this._sidenavWidth = sidenavWidth; };\r\n\tpublic get sidenavWidth(): string { return this.mini ? '88px' : this._sidenavWidth; };\r\n\r\n\t/**\r\n\t * subMenuWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"320px\".\r\n\t */\r\n\t@Input()\r\n\tpublic set subMenuWidth(subMenuWidth) { this._subMenuWidth = subMenuWidth; };\r\n\tpublic get subMenuWidth(): string { return this._subMenuWidth; };\r\n\r\n\t/**\r\n\t * Checks if `ESC` should close the sidenav\r\n\t * Should only close it for `push` and `over` modes\r\n\t */\r\n\tpublic get disableClose(): boolean { return this.mode === 'side'; }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(private media: VdMediaService) { }\r\n\r\n\t/**\r\n\t * Called after the constructor, initializing input properties, and the first call to ngOnChanges.\r\n\t * Add 'implements OnInit' to the class.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.sidenav?.closedStart?.subscribe(x => {\r\n\t\t\tif (this.mini) {\r\n\t\t\t\tthis.colapse();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.sideGt) {\r\n\t\t\tthis.media.registerQuery(`gt-${this.sideGt}`).subscribe((x: boolean) => {\r\n\t\t\t\tthis._mobile = !x;\r\n\t\t\t\tthis.mode = this._mobile ? 'over' : (this._mini ? 'side' : 'over');\r\n\t\t\t\tthis.opened = this._mobile ? false : this._mini;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy toggle method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic toggle(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.toggle(!this.sidenav.opened)!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy open method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic open(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.open()!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic close(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.close()!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy expand method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic colapse(): Promise<MatDrawerToggleResult> {\r\n\t\tthis.mode = 'side';\r\n\t\tthis.expandedChange.emit(false);\r\n\t\treturn this.sidenav?.open()!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy expand method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic openMenu($event: any): void {\r\n\t\tif (this._mini) {\r\n\t\t\tthis.menuItems = $event?.item?.items;\r\n\t\t\tif (this.menuItems?.length) {\r\n\t\t\t\tthis.subMenuDrawer?.open();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted when the cursor of the mouse is moved out of it.\r\n\t */\r\n\tpublic closeMenu(_: any): void {\r\n\t\tif (this.subMenuDrawer?.opened) {\r\n\t\t\tthis.subMenuDrawer?.close();\r\n\t\t}\r\n\r\n\t\tif (!this.mini) {\r\n\t\t\tthis.sidenav?.close();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted when the cursor of the mouse is moved out of it.\r\n\t */\r\n\tpublic onSubMenuMouseOut($event: any): void {\r\n\t\tthis.closeMenu($event);\r\n\t}\r\n}\r\n","<mat-sidenav-container fullscreen [ngClass]=\"{'sidenav-container-mini': mini}\">\r\n  <mat-sidenav #sidenav class=\"vd-layout-sidenav\" [mode]=\"mode\" [opened]=\"opened\" [ngClass]=\"{'sidenav-mini': mini}\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n    <ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n    <ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n  </mat-sidenav>\r\n  <mat-drawer-container fullscreen>\r\n    <mat-drawer #subMenuDrawer mode=\"over\" class=\"mat-drawer-submenu\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n      <vd-menu [items]=\"menuItems\" [activeExact]=\"false\" [mobile]=\"mobile\" (click)=\"closeMenu($event)\"></vd-menu>\r\n    </mat-drawer>\r\n    @if (showDebugBanner) {\r\n      <div class=\"debug-banner\">DEBUG</div>\r\n    }\r\n    <ng-content></ng-content>\r\n  </mat-drawer-container>\r\n</mat-sidenav-container>","\r\nimport { Component, Input } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\n\r\n@Component({\r\n\tselector: 'vd-layout-card-over',\r\n\tstyleUrls: ['./layout-card-over.scss'],\r\n\ttemplateUrl: './layout-card-over.html',\r\n\timports: [\r\n    MatToolbarModule,\r\n    MatCardModule,\r\n    MatDivider\r\n]\r\n})\r\nexport class VdLayoutCardOverComponent {\r\n\r\n\t/**\r\n\t * cardTitle?: string\r\n\t *\r\n\t * Title set in card.\r\n\t */\r\n\t@Input()\r\n\tpublic cardTitle?: string;\r\n\r\n\t/**\r\n\t * cardSubtitle?: string\r\n\t *\r\n\t * Subtitle set in card.\r\n\t */\r\n\t@Input()\r\n\tpublic cardSubtitle?: string;\r\n\r\n\t/**\r\n\t * cardWidth?: string\r\n\t *\r\n\t * Card flex width in %.\r\n\t * Defaults to 70%.\r\n\t */\r\n\t@Input()\r\n\tpublic cardWidth: string = \"70\";\r\n\r\n\t/**\r\n\t * color?: string\r\n\t *\r\n\t * toolbar color option: primary | accent | warn.\r\n\t * If [color] is not set, primary is used.\r\n\t */\r\n\t@Input()\r\n\tpublic color: string = 'primary';\r\n}\r\n","<mat-toolbar [color]=\"color\"></mat-toolbar>\r\n<div class=\"vd-layout-card-over-wrapper\">\r\n  <div class=\"vd-layout-card-over\" [style.max-width.%]=\"cardWidth\" [style.flex]=\"'1 1 ' + cardWidth + '%'\" [style.-ms-flex]=\"'1 1 ' + cardWidth + '%'\" [style.-webkit-box-flex]=\"1\">\r\n    <mat-card>\r\n      @if (cardTitle) {\r\n        <mat-card-title>{{cardTitle}}</mat-card-title>\r\n      }\r\n      @if (cardSubtitle) {\r\n        <mat-card-subtitle>{{cardSubtitle}}</mat-card-subtitle>\r\n      }\r\n      @if (cardTitle || cardSubtitle) {\r\n        <mat-divider></mat-divider>\r\n      }\r\n      <ng-content></ng-content>\r\n    </mat-card>\r\n    <ng-content select=\"[vd-after-card]\"></ng-content>\r\n  </div>\r\n</div>","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { MatDrawer, MatDrawerToggleResult, MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { MenuItem } from '../../menu/models/menu-item';\r\nimport { VdMenuComponent } from '../../menu/public_api';\r\nimport { ILayoutTogglable } from '../layout-toggle.class';\r\n\r\n@Component({\r\n\tselector: 'vd-layout-compact',\r\n\tstyleUrls: ['./layout-compact.scss'],\r\n\ttemplateUrl: './layout-compact.html',\r\n\timports: [\r\n\t\tMatSidenavModule,\r\n\t\tVdMenuComponent\r\n\t]\r\n})\r\nexport class VdLayoutCompactComponent implements ILayoutTogglable {\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _sidenavWidth: string = '88px';\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _subMenuWidth: string = '230px';\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _mobile: boolean = false;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@ViewChild(MatSidenav, { static: true })\r\n\tpublic sidenav?: MatSidenav;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\t@ViewChild('subMenuDrawer', { static: true })\r\n\tpublic subMenuDrawer?: MatDrawer;\r\n\r\n\t/**\r\n\t * menuItems: MenuItem[]\r\n\t */\r\n\t@Input()\r\n\tpublic menuItems: MenuItem[] = [];\r\n\r\n\t/**\r\n\t * mode?: 'side', 'push' or 'over'\r\n\t *\r\n\t * The mode or styling of the sidenav.\r\n\t * Defaults to \"over\".\r\n\t */\r\n\t@Input()\r\n\tpublic mode: 'side' | 'push' | 'over' = 'side';\r\n\r\n\t/**\r\n\t * opened?: boolean\r\n\t *\r\n\t * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\r\n\t * Defaults to \"false\".\r\n\t */\r\n\t@Input()\r\n\tpublic opened: boolean = true;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic get mobile(): boolean { return this._mobile; };\r\n\r\n\t/**\r\n\t * Expands the mini menu\r\n\t */\r\n\t@Input()\r\n\tpublic expanded: boolean = false;\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic subMenuHovered: boolean = false;\r\n\r\n\t/**\r\n\t * overGt?: string\r\n\t */\r\n\t@Input()\r\n\tpublic sideGt: string = 'sm';\r\n\r\n\t/** \r\n\t * Event emitted when the drawer expand state is changed.\r\n\t */\r\n\t@Output()\r\n\tpublic expandedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\t/**\r\n\t * sidenavWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"320px\".\r\n\t */\r\n\t@Input()\r\n\tpublic set sidenavWidth(sidenavWidth) { this._sidenavWidth = sidenavWidth; };\r\n\tpublic get sidenavWidth(): string { return this._sidenavWidth; };\r\n\r\n\t/**\r\n\t * subMenuWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"320px\".\r\n\t */\r\n\t@Input()\r\n\tpublic set subMenuWidth(subMenuWidth) { this._subMenuWidth = subMenuWidth; };\r\n\tpublic get subMenuWidth(): string { return this._subMenuWidth; };\r\n\r\n\t/**\r\n\t * Checks if `ESC` should close the sidenav\r\n\t * Should only close it for `push` and `over` modes\r\n\t */\r\n\tpublic get disableClose(): boolean { return this.mode === 'side'; }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(private media: VdMediaService) { }\r\n\r\n\t/**\r\n\t * Called after the constructor, initializing input properties, and the first call to ngOnChanges.\r\n\t * Add 'implements OnInit' to the class.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis.sidenav?.closedStart?.subscribe(x => {\r\n\t\t\t// this.colapse();\r\n\t\t});\r\n\r\n\t\tif (this.sideGt) {\r\n\t\t\t// this.media.registerQuery(`gt-${this.sideGt}`).subscribe((x: boolean) => {\r\n\t\t\t// \tthis._mobile = !x;\r\n\t\t\t// \tthis.mode = this._mobile ? 'over' : (this._mini ? 'side' : 'over');\r\n\t\t\t// \tthis.opened = this._mobile ? false : this._mini;\r\n\t\t\t// \tthis.expanded = false;\r\n\t\t\t// });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy toggle method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic toggle(): Promise<MatDrawerToggleResult> | undefined {\r\n\t\treturn this.sidenav?.toggle(!this.sidenav.opened);\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy open method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic open(): Promise<MatDrawerToggleResult> | undefined {\r\n\t\treturn this.sidenav?.open();\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic close(): Promise<MatDrawerToggleResult> | undefined {\r\n\t\treturn this.sidenav?.close();\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic colapseMenu($event: any): void { }\r\n\r\n\t/**\r\n\t * Proxy expand method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic expandMenu($event: any): void {\r\n\t\tthis.menuItems = $event?.item?.items;\r\n\t\tif (this.menuItems?.length) {\r\n\t\t\tthis.subMenuDrawer?.open();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted when a the mouse is initially moved so that its hotspot is \r\n\t * within the element at which the event was fired.\r\n\t */\r\n\tpublic onSubMenuMouseOver($event: any): void {\r\n\t\tthis.subMenuHovered = true;\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted when the cursor of the mouse is moved out of it.\r\n\t */\r\n\tpublic onSubMenuMouseOut($event: any): void {\r\n\t\tthis.subMenuHovered = false;\r\n\t\tif (this.subMenuDrawer?.opened) {\r\n\t\t\tthis.subMenuDrawer?.close();\r\n\t\t}\r\n\t}\r\n}\r\n","<mat-sidenav-container class=\"sidenav-container-mini\" fullscreen>\r\n\t<mat-sidenav #sidenav class=\"vd-layout-sidenav sidenav-mini\" [mode]=\"mode\" [opened]=\"opened\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n\t\t<ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t</mat-sidenav>\r\n\t<mat-drawer-container fullscreen>\r\n\t\t<mat-drawer #subMenuDrawer mode=\"over\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseenter)=\"onSubMenuMouseOver($event)\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n\t\t\t<vd-menu [items]=\"menuItems\" [activeExact]=\"false\"></vd-menu>\r\n\t\t</mat-drawer>\r\n\t\t<ng-content></ng-content>\r\n\t</mat-drawer-container>\r\n</mat-sidenav-container>","import { Component, ElementRef, Input, Renderer2 } from '@angular/core';\r\n\r\n@Component({\r\n\t/* tslint:disable-next-line */\r\n\tselector: 'vd-layout-footer,vd-layout-footer-inner',\r\n\tstyleUrls: ['./layout-footer.scss'],\r\n\ttemplateUrl: './layout-footer.html'\r\n})\r\nexport class VdLayoutFooterComponent {\r\n\r\n\tprivate _color?: 'primary' | 'accent' | 'warn';\r\n\r\n\t/**\r\n\t * color?: string\r\n\t *\r\n\t * Optional color option: primary | accent | warn.\r\n\t */\r\n\t@Input('color')\r\n\tset color(color: 'primary' | 'accent' | 'warn') {\r\n\t\tif (color) {\r\n\t\t\tthis._renderer.removeClass(this._elementRef.nativeElement, 'mat-' + this._color);\r\n\t\t\tthis._color = color;\r\n\t\t\tthis._renderer.addClass(this._elementRef.nativeElement, 'mat-' + this._color);\r\n\t\t}\r\n\t}\r\n\tget color(): 'primary' | 'accent' | 'warn' | undefined {\r\n\t\treturn this._color;\r\n\t}\r\n\r\n\tconstructor(private _renderer: Renderer2,\r\n\t\tprivate _elementRef: ElementRef) {\r\n\t\tthis._renderer.addClass(this._elementRef.nativeElement, 'vd-layout-footer');\r\n\t}\r\n\r\n}\r\n","<ng-content></ng-content>","\r\nimport { Component, forwardRef, Inject, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDrawerToggleResult, MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { MenuItem } from '../../menu/models/menu-item';\r\nimport { VdMenuComponent } from '../../menu/public_api';\r\nimport { VdLayoutComponent } from '../layout';\r\nimport { ILayoutTogglable } from '../layout-toggle.class';\r\n\r\n@Component({\r\n\tselector: 'vd-layout-manage-list',\r\n\tstyleUrls: ['./layout-manage-list.scss'],\r\n\ttemplateUrl: './layout-manage-list.html',\r\n\timports: [\r\n    MatSidenavModule,\r\n    MatToolbarModule,\r\n    MatCardModule,\r\n    MatIconModule,\r\n    MatIconButton,\r\n    VdMenuComponent\r\n]\r\n})\r\nexport class VdLayoutManageListComponent implements ILayoutTogglable, OnInit {\r\n\r\n\t/**\r\n\t * sidenav: MatSidenav\r\n\t */\r\n\t@ViewChild(MatSidenav, { static: true })\r\n\tpublic sidenav?: MatSidenav;\r\n\r\n\t/**\r\n\t * title: string\r\n\t * Content title\r\n\t */\r\n\t@Input()\r\n\tpublic title?: string;\r\n\r\n\t/**\r\n\t * closable: boolean\r\n\t * If false, hide close button\r\n\t */\r\n\t@Input()\r\n\tpublic closable: boolean = true;\r\n\r\n\t/**\r\n\t * menuItems: MenuItem[]\r\n\t */\r\n\t@Input()\r\n\tpublic menuItems?: MenuItem[];\r\n\r\n\t/**\r\n\t * mode?: 'side', 'push' or 'over'\r\n\t *\r\n\t * The mode or styling of the sidenav.\r\n\t * Defaults to \"side\".\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic mode: 'side' | 'push' | 'over' = 'side';\r\n\r\n\t/**\r\n\t * overGt?: string\r\n\t */\r\n\t@Input()\r\n\tpublic sideGt: string = 'sm';\r\n\r\n\t/**\r\n\t * opened?: boolean\r\n\t *\r\n\t * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\r\n\t * Defaults to \"true\".\r\n\t *\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic opened: boolean = false;\r\n\r\n\t/**\r\n\t * opened?: string\r\n\t *\r\n\t * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\r\n\t * Defaults to \"true\".\r\n\t */\r\n\t@Input()\r\n\tpublic openedGt: string = 'sm';\r\n\r\n\t/**\r\n\t * sidenavWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"257px\".\r\n\t */\r\n\t@Input()\r\n\tpublic sidenavWidth: string = '270px';\r\n\r\n\t/**\r\n\t * sidenavGtXsWidth?: number\r\n\t */\r\n\t@Input()\r\n\tpublic sidenavGtXsWidth: number = 230;\r\n\r\n\t/**\r\n\t * Checks if `ESC` should close the sidenav\r\n\t * Should only close it for `push` and `over` modes\r\n\t */\r\n\tget disableClose(): boolean { return this.mode === 'side'; }\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic get mini(): boolean { return this._layout?.mini };\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(\r\n\t\t@Inject(forwardRef(() => VdLayoutComponent))\r\n\t\tprivate _layout: VdLayoutComponent,\r\n\t\tprivate media: VdMediaService\r\n\t) { }\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called after data-bound properties \r\n\t * of a directive are initialized.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tif (this.openedGt) {\r\n\t\t\tthis.media.registerQuery(`gt-${this.openedGt}`).subscribe((x: boolean) => this.opened = x);\r\n\t\t}\r\n\r\n\t\tif (this.sideGt) {\r\n\t\t\tthis.media.registerQuery(`gt-${this.sideGt}`).subscribe((x: boolean) => this.mode = x ? 'side' : 'over');\r\n\t\t}\r\n\r\n\t\tif (this.sidenavGtXsWidth > 0) {\r\n\t\t\tthis.media.registerQuery(`gt-xs`).subscribe((x: boolean) => this.sidenavWidth = x ? `${this.sidenavGtXsWidth}px` : '100%');\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy toggle method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic toggle(): Promise<MatDrawerToggleResult> | undefined { return this.sidenav?.toggle(!this.sidenav.opened); }\r\n\r\n\t/**\r\n\t * Proxy open method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic open(): Promise<MatDrawerToggleResult> | undefined { return this.sidenav?.open(); }\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic close(): Promise<MatDrawerToggleResult> | undefined { return this.sidenav?.close(); }\r\n}","<mat-sidenav-container fullscreen class=\"vd-layout-manage-list\">\r\n  <!-- #region Side nav -->\r\n  <mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened && !mini\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n    <!-- #region Nav list toolbar -->\r\n    @if (title) {\r\n      <mat-toolbar dense>\r\n        <span>{{title}}</span>\r\n        <span flex></span>\r\n        @if (closable) {\r\n          <button mat-icon-button (click)=\"close()\">\r\n            <mat-icon fontSet=\"material-symbols-outlined\">menu_open</mat-icon>\r\n          </button>\r\n        }\r\n      </mat-toolbar>\r\n    }\r\n    <!-- #endregion -->\r\n\r\n    <!-- #region Custom title toolbar -->\r\n    <ng-content select=\"mat-toolbar[vd-sidenav-content]\"></ng-content>\r\n    <!-- #endregion -->\r\n\r\n    <div class=\"vd-layout-manage-list-sidenav\" cdkScrollable>\r\n      <ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n      <ng-content select=\"vd-menu\"></ng-content>\r\n      @if (menuItems) {\r\n        <vd-menu [items]=\"menuItems!\"></vd-menu>\r\n      }\r\n    </div>\r\n  </mat-sidenav>\r\n  <!-- #endregion -->\r\n\r\n  <!-- #region Main content -->\r\n  <div class=\"vd-layout-manage-list-main\">\r\n    <!-- #region Toolbar projection -->\r\n    <ng-content select=\"mat-toolbar\"></ng-content>\r\n    <!-- <ng-content select=\"vd-list-toolbar\"></ng-content> -->\r\n    <!-- #endregion -->\r\n\r\n    <!-- #region Scrollable content -->\r\n    <div class=\"vd-layout-manage-list-content\" cdkScrollable>\r\n      <ng-content></ng-content>\r\n    </div>\r\n    <!-- #endregion -->\r\n\r\n    <!-- #region Footer content -->\r\n    <ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n    <!-- #endregion -->\r\n  </div>\r\n  <!-- #endregion -->\r\n</mat-sidenav-container>","import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy, Renderer2 } from '@angular/core';\r\nimport { MatDrawerToggleResult, MatSidenav } from '@angular/material/sidenav';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * Interface for components that can be toggled in a layout.\r\n */\r\nexport interface ILayoutTogglable {\r\n\topened: boolean;\r\n\tsidenav?: MatSidenav;\r\n\ttoggle(): Promise<MatDrawerToggleResult> | undefined;\r\n\topen(): Promise<MatDrawerToggleResult> | undefined;\r\n\tclose(): Promise<MatDrawerToggleResult> | undefined;\r\n}\r\n\r\n/**\r\n * Abstract class providing common functionality for layout toggles.\r\n */\r\n@Directive()\r\nexport abstract class LayoutToggle implements AfterViewInit, OnDestroy {\r\n\r\n\t/* Subscription to handle toggle events */\r\n\tprivate _toggleSubs?: Subscription;\r\n\r\n\t/* Flag indicating whether the directive has been initialized */\r\n\tprivate _initialized: boolean = false;\r\n\r\n\t/* Flag indicating whether the directive is disabled */\r\n\tprivate _disabled: boolean = false;\r\n\r\n\t/* Flag to hide the host when the sidenav is opened. Default is false. */\r\n\tprivate _hideWhenOpened: boolean = false;\r\n\r\n\t/**\r\n\t * Flag to disable the host. When set to true, the host will be disabled.\r\n\t */\r\n\t@Input()\r\n\tset disabled(disabled: boolean) { this._disabled = disabled; }\r\n\r\n\t/**\r\n\t * Flag to hide the host when the sidenav is opened.\r\n\t * When set to true, the host will be hidden when the sidenav is opened.\r\n\t */\r\n\t@Input('hideWhenOpened')\r\n\tset hideWhenOpened(hideWhenOpened: boolean) {\r\n\t\tthis._hideWhenOpened = hideWhenOpened;\r\n\t\tif (this._initialized) {\r\n\t\t\tthis._toggleVisibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/* Constructor to set up initial styles and classes */\r\n\tconstructor(protected _layout: ILayoutTogglable,\r\n\t\tprivate _renderer: Renderer2,\r\n\t\tprivate _elementRef: ElementRef) {\r\n\t\tthis._renderer.addClass(this._elementRef.nativeElement, 'vd-layout-menu-button');\r\n\t}\r\n\r\n\t/* Lifecycle hook - AfterViewInit */\r\n\tngAfterViewInit(): void {\r\n\t\tthis._initialized = true;\r\n\t\tthis._toggleSubs = this._layout.sidenav?._animationStarted.subscribe(() => {\r\n\t\t\tthis._toggleVisibility();\r\n\t\t});\r\n\t\t// Execute toggleVisibility since the onOpenStart and onCloseStart\r\n\t\t// methods might not be executed always when the element is rendered\r\n\t\tthis._toggleVisibility();\r\n\t}\r\n\r\n\t/* Lifecycle hook - OnDestroy */\r\n\tngOnDestroy(): void {\r\n\t\tif (this._toggleSubs) {\r\n\t\t\tthis._toggleSubs.unsubscribe();\r\n\t\t\tthis._toggleSubs = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Listens to host click event to trigger the layout toggle.\r\n\t * @param event The click event\r\n\t */\r\n\t@HostListener('click', ['$event'])\r\n\tclickListener(event: Event): void {\r\n\t\tevent.preventDefault();\r\n\t\tif (!this._disabled) {\r\n\t\t\tthis.onClick();\r\n\t\t}\r\n\t}\r\n\r\n\t/* Abstract method to be implemented by subclasses */\r\n\tabstract onClick(): void;\r\n\r\n\t/* Private method to toggle the visibility of the host element */\r\n\tprivate _toggleVisibility(): void {\r\n\t\tif (this._layout.sidenav?.opened && this._hideWhenOpened) {\r\n\t\t\tthis._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none');\r\n\t\t} else {\r\n\t\t\tthis._renderer.setStyle(this._elementRef.nativeElement, 'display', '');\r\n\t\t}\r\n\t}\r\n\r\n}\r\n","import { Directive, ElementRef, forwardRef, Inject, Input, Renderer2 } from '@angular/core';\r\nimport { LayoutToggle } from '../layout-toggle.class';\r\nimport { VdLayoutManageListComponent } from './layout-manage-list';\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutManageListToggle]'\r\n})\r\nexport class VdLayoutManageListToggleDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Sets vdLayoutManageListToggle\r\n\t */\r\n\t@Input()\r\n\tset vdLayoutManageListToggle(vdLayoutManageListToggle: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutManageListToggle === '' || vdLayoutManageListToggle);\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(\r\n\t\t@Inject(forwardRef(() => VdLayoutManageListComponent)) layout: VdLayoutManageListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef\r\n\t) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the list\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.toggle();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutManageListClose]'\r\n})\r\nexport class VdLayoutManageListCloseDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Sets vdLayoutManageListClose\r\n\t */\r\n\t@Input()\r\n\tset vdLayoutManageListClose(vdLayoutManageListClose: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutManageListClose === '' || vdLayoutManageListClose);\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(\r\n\t\t@Inject(forwardRef(() => VdLayoutManageListComponent)) layout: VdLayoutManageListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef\r\n\t) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the list\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.close();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutManageListOpen]'\r\n})\r\nexport class VdLayoutManageListOpenDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Sets vdLayoutManageListOpen\r\n\t */\r\n\t@Input()\r\n\tset vdLayoutManageListOpen(vdLayoutManageListOpen: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutManageListOpen === '' || vdLayoutManageListOpen);\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(\r\n\t\t@Inject(forwardRef(() => VdLayoutManageListComponent)) layout: VdLayoutManageListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef\r\n\t) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the list\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.open();\r\n\t}\r\n}\r\n","\r\nimport { Component, Input, Optional, ViewChild } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDrawerToggleResult, MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { Router } from '@angular/router';\r\nimport { ILayoutTogglable } from '../layout-toggle.class';\r\n\r\n@Component({\r\n\tselector: 'vd-layout-nav-list',\r\n\tstyleUrls: ['./layout-nav-list.scss'],\r\n\ttemplateUrl: './layout-nav-list.html',\r\n\timports: [\r\n    MatSidenavModule,\r\n    MatToolbarModule,\r\n    MatIconModule\r\n],\r\n})\r\nexport class VdLayoutNavListComponent implements ILayoutTogglable {\r\n\r\n\t/**\r\n\t * sidenav: MatSidenav\r\n\t */\r\n\t@ViewChild(MatSidenav, { static: true })\r\n\tpublic sidenav?: MatSidenav;\r\n\r\n\t/**\r\n\t * toolbarTitle?: string\r\n\t *\r\n\t * Title set in toolbar.\r\n\t */\r\n\t@Input()\r\n\tpublic toolbarTitle?: string;\r\n\r\n\t/**\r\n\t * icon?: string\r\n\t * icon name to be displayed before the title\r\n\t */\r\n\t@Input()\r\n\tpublic icon?: string;\r\n\r\n\t/**\r\n\t * logo?: string\r\n\t *\r\n\t * logo icon name to be displayed before the title.\r\n\t * If [icon] is set, then this will not be shown.\r\n\t */\r\n\t@Input()\r\n\tpublic logo?: string;\r\n\r\n\t/**\r\n\t * color?: string\r\n\t *\r\n\t * toolbar color option: primary | accent | warn.\r\n\t * If [color] is not set, primary is used.\r\n\t */\r\n\t@Input()\r\n\tpublic color: string = 'primary';\r\n\r\n\t/**\r\n\t * mode?: 'side', 'push' or 'over'\r\n\t *\r\n\t * The mode or styling of the sidenav.\r\n\t * Defaults to \"side\".\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic mode: 'side' | 'push' | 'over' = 'side';\r\n\r\n\t/**\r\n\t * opened?: boolean\r\n\t * Whether or not the sidenav is opened. Use this binding to open/close the sidenav.\r\n\t * Defaults to \"true\".\r\n\t *\r\n\t * See \"MatSidenav\" documentation for more info.\r\n\t */\r\n\t@Input()\r\n\tpublic opened: boolean = true;\r\n\r\n\t/**\r\n\t * sidenavWidth?: string\r\n\t *\r\n\t * Sets the \"width\" of the sidenav in either \"px\" or \"%\"\r\n\t * Defaults to \"350px\".\r\n\t */\r\n\t@Input()\r\n\tpublic sidenavWidth: string = '350px';\r\n\r\n\t/**\r\n\t * navigationRoute?: string\r\n\t *\r\n\t * option to set the combined route for the icon, logo, and toolbarTitle.\r\n\t */\r\n\t@Input()\r\n\tpublic navigationRoute?: string;\r\n\r\n\t/**\r\n\t * Checks if `ESC` should close the sidenav\r\n\t * Should only close it for `push` and `over` modes\r\n\t */\r\n\tget disableClose(): boolean { return this.mode === 'side'; }\r\n\r\n\t/**\r\n\t * Checks if router was injected.\r\n\t */\r\n\tget routerEnabled(): boolean { return !!this._router && !!this.navigationRoute; }\r\n\r\n\t/**\r\n\t * constructor\r\n\t * @param _router \r\n\t */\r\n\tconstructor(@Optional() private _router: Router) { }\r\n\r\n\t/**\r\n\t * Handles navigation click\r\n\t */\r\n\tpublic handleNavigationClick(): void {\r\n\t\tif (this.routerEnabled && this.navigationRoute) {\r\n\t\t\tthis._router.navigateByUrl(this.navigationRoute);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy toggle method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic toggle(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.toggle(!this.sidenav.opened)!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy open method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic open(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.open()!;\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from vd-layout template).\r\n\t */\r\n\tpublic close(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this.sidenav?.close()!;\r\n\t}\r\n}\r\n","<div class=\"vd-layout-nav-list-wrapper\">\r\n  <mat-sidenav-container fullscreen class=\"vd-layout-nav-list\">\r\n    <!-- #region Sidenav -->\r\n    <mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n      <!-- #region Sidenav toolbar -->\r\n      <mat-toolbar [color]=\"color\">\r\n        <ng-content select=\"[vd-menu-button]\"></ng-content>\r\n        @if (icon || logo || toolbarTitle) {\r\n          <span class=\"vd-layout-nav-list-toolbar-content\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\">\r\n            @if (icon) {\r\n              <mat-icon>{{icon}}</mat-icon>\r\n            }\r\n            @if (logo && !icon) {\r\n              <mat-icon class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n            }\r\n            @if (toolbarTitle) {\r\n              <span>{{toolbarTitle}}</span>\r\n            }\r\n          </span>\r\n        }\r\n        <ng-content select=\"[vd-sidenav-toolbar-content]\"></ng-content>\r\n      </mat-toolbar>\r\n      <!-- #endregion -->\r\n\r\n      <!-- #region Sidenav content -->\r\n      <div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n        <ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n      </div>\r\n      <!-- #endregion -->\r\n    </mat-sidenav>\r\n    <!-- #endregion -->\r\n\r\n    <div class=\"vd-layout-nav-list-main\">\r\n      <!-- #region Toolbar projection -->\r\n      <ng-content select=\"mat-toolbar\"></ng-content>\r\n      <ng-content select=\"vd-toolbar-content\"></ng-content>\r\n      <!-- #endregion -->\r\n\r\n      <!-- #region Scrollable content -->\r\n      <div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n        <ng-content></ng-content>\r\n      </div>\r\n      <!-- #endregion -->\r\n\r\n      <!-- #region Footer content -->\r\n      <ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n      <!-- #endregion -->\r\n    </div>\r\n  </mat-sidenav-container>\r\n</div>\r\n<ng-content select=\"vd-layout-footer\"></ng-content>","import { Directive, ElementRef, forwardRef, Inject, Input, Renderer2 } from '@angular/core';\r\nimport { LayoutToggle } from '../layout-toggle.class';\r\nimport { VdLayoutNavListComponent } from './layout-nav-list';\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutNavListToggle]'\r\n})\r\nexport class VdLayoutNavListToggleDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Disables the navbar\r\n\t */\r\n\t@Input('vdLayoutNavListToggle')\r\n\tset vdLayoutNavListToggle(vdLayoutNavListToggle: boolean) { this.disabled = !(<any>vdLayoutNavListToggle === '' || vdLayoutNavListToggle); }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutNavListComponent)) layout: VdLayoutNavListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the navbar\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.toggle();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutNavListClose]'\r\n})\r\nexport class VdLayoutNavListCloseDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Disables the navbar\r\n\t */\r\n\t@Input('vdLayoutNavListClose')\r\n\tset vdLayoutNavListClose(vdLayoutNavListClose: boolean) { this.disabled = !(<any>vdLayoutNavListClose === '' || vdLayoutNavListClose); }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutNavListComponent)) layout: VdLayoutNavListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the navbar\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.close();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutNavListOpen]'\r\n})\r\nexport class VdLayoutNavListOpenDirective extends LayoutToggle {\r\n\r\n\t/**\r\n\t * Disables the navbar\r\n\t */\r\n\t@Input('vdLayoutNavListOpen')\r\n\tset vdLayoutNavListOpen(vdLayoutNavListOpen: boolean) { this.disabled = !(<any>vdLayoutNavListOpen === '' || vdLayoutNavListOpen); }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param layout \r\n\t * @param renderer \r\n\t * @param elementRef \r\n\t */\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutNavListComponent)) layout: VdLayoutNavListComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\t/**\r\n\t * Opens the navbar\r\n\t */\r\n\tpublic onClick(): void {\r\n\t\tthis._layout.open();\r\n\t}\r\n}\r\n","import { Directive, ElementRef, Inject, Input, Renderer2, forwardRef } from '@angular/core';\r\nimport { VdLayoutComponent } from './layout';\r\nimport { LayoutToggle } from './layout-toggle.class';\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutToggle]'\r\n})\r\nexport class VdLayoutToggleDirective extends LayoutToggle {\r\n\r\n\t@Input('vdLayoutToggle')\r\n\tset vdLayoutToggle(vdLayoutToggle: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutToggle === '' || vdLayoutToggle);\r\n\t}\r\n\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutComponent)) layout: VdLayoutComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\tonClick(): void {\r\n\t\tthis._layout.toggle();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutClose]'\r\n})\r\nexport class VdLayoutCloseDirective extends LayoutToggle {\r\n\r\n\t@Input('vdLayoutClose')\r\n\tset vdLayoutClose(vdLayoutClose: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutClose === '' || vdLayoutClose);\r\n\t}\r\n\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutComponent)) layout: VdLayoutComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\tonClick(): void {\r\n\t\tthis._layout.close();\r\n\t}\r\n}\r\n\r\n@Directive({\r\n\tselector: '[vdLayoutOpen]'\r\n})\r\nexport class VdLayoutOpenDirective extends LayoutToggle {\r\n\r\n\t@Input('vdLayoutOpen')\r\n\tset vdLayoutClose(vdLayoutOpen: boolean) {\r\n\t\tthis.disabled = !(<any>vdLayoutOpen === '' || vdLayoutOpen);\r\n\t}\r\n\r\n\tconstructor(@Inject(forwardRef(() => VdLayoutComponent)) layout: VdLayoutComponent,\r\n\t\trenderer: Renderer2,\r\n\t\telementRef: ElementRef) {\r\n\t\tsuper(layout, renderer, elementRef);\r\n\t}\r\n\r\n\tonClick(): void {\r\n\t\tthis._layout.open();\r\n\t}\r\n}\r\n","\r\nimport { Component, EventEmitter, Input, Optional, Output } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Utils } from '../../common/functions/utils';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { VdDynamicMenuComponent } from '../dynamic-menu/dynamic-menu';\r\nimport { VdLayoutToggleDirective } from '../layouts';\r\n\r\n@Component({\r\n\tselector: 'vd-layout-nav',\r\n\tstyleUrls: ['./layout-nav.scss'],\r\n\ttemplateUrl: './layout-nav.html',\r\n\timports: [\r\n    MatToolbarModule,\r\n    MatIconModule,\r\n    MatIconButton,\r\n    VdLayoutToggleDirective,\r\n    VdDynamicMenuComponent\r\n]\r\n})\r\nexport class VdLayoutNavComponent {\r\n\r\n\t/**\r\n\t * toolbarTitle?: string\r\n\t *\r\n\t * Title set in toolbar.\r\n\t */\r\n\t@Input()\r\n\tpublic toolbarTitle?: string;\r\n\r\n\t/**\r\n\t * editMode?: boolean\r\n\t */\r\n\t@Input()\r\n\tpublic editMode?: boolean;\r\n\r\n\t/**\r\n\t * actions: MenuItem[]\r\n\t */\r\n\t@Input()\r\n\tpublic actions?: ActionItem[];\r\n\r\n\t/**\r\n\t * item: any\r\n\t */\r\n\t@Input()\r\n\tpublic data: any;\r\n\r\n\t/**\r\n\t * context: any\r\n\t */\r\n\t@Input()\r\n\tpublic context: any;\r\n\r\n\t/**\r\n\t * hideToolbar?: boolean\r\n\t *\r\n\t * Whether to hide the toolbar or not.\r\n\t */\r\n\t@Input()\r\n\tpublic hideToolbar: boolean = true;\r\n\r\n\t/**\r\n\t * reload: EventEmitter<any>\r\n\t */\r\n\t@Output()\r\n\tpublic reload: EventEmitter<any> = new EventEmitter<any>()\r\n\r\n\t/**\r\n\t * icon?: string\r\n\t *\r\n\t * icon name to be displayed before the title\r\n\t */\r\n\t@Input()\r\n\tpublic icon?: string;\r\n\r\n\t/**\r\n\t * logo?: string\r\n\t *\r\n\t * logo icon name to be displayed before the title.\r\n\t * If [icon] is set, then this will not be shown.\r\n\t */\r\n\t@Input()\r\n\tpublic logo?: string;\r\n\r\n\t/**\r\n\t * color?: string\r\n\t *\r\n\t * toolbar color option: primary | accent | warn.\r\n\t * If [color] is not set, primary is used.\r\n\t */\r\n\t@Input()\r\n\tpublic color: string = 'primary';\r\n\r\n\t/**\r\n\t * hideToggle?: boolean\r\n\t *\r\n\t * Hides toggle button\r\n\t */\r\n\t@Input()\r\n\tpublic hideToggle: boolean = false;\r\n\r\n\t/**\r\n\t * backNavigationRoute?: string\r\n\t */\r\n\t@Input()\r\n\tpublic backNavigationRoute?: string;\r\n\r\n\t/**\r\n\t * Checks if router was injected.\r\n\t */\r\n\tget backNavigationRouteEnabled(): boolean { return !!this.router && !!this.backNavigationRoute; }\r\n\r\n\t/**\r\n\t * navigationRoute?: string\r\n\t *\r\n\t * option to set the combined route for the icon, logo, and toolbarTitle.\r\n\t */\r\n\t@Input()\r\n\tpublic navigationRoute?: string;\r\n\r\n\t/**\r\n\t * Checks if router was injected.\r\n\t */\r\n\tget routerEnabled(): boolean { return !!this.router && !!this.navigationRoute; }\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param router \r\n\t */\r\n\tconstructor(@Optional() private router: Router, @Optional() protected route: ActivatedRoute) { }\r\n\r\n\t/**\r\n\t * Handles click event on back navigation title\r\n\t */\r\n\tpublic handleBackNavigationClick(): void {\r\n\t\tif (this.backNavigationRouteEnabled && this.backNavigationRoute) {\r\n\t\t\tvar urlParts = Utils.getUrlParts(this.backNavigationRoute);\r\n\t\t\tthis.router.navigate([urlParts.url], { queryParams: urlParts.params, fragment: urlParts.hash, relativeTo: this.route });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles click event on navigation title\r\n\t */\r\n\tpublic handleNavigationClick(): void {\r\n\t\tif (this.routerEnabled && this.navigationRoute) {\r\n\t\t\tthis.router.navigateByUrl(this.navigationRoute);\r\n\t\t}\r\n\t}\r\n}","<div class=\"vd-layout-nav-wrapper\">\r\n  @if (!hideToolbar || editMode) {\r\n    <mat-toolbar [color]=\"color\" class=\"primary-color\" dense>\r\n      <!-- #region Toggle buton -->\r\n      @if (!hideToggle) {\r\n        <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\">\r\n          <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n        </button>\r\n      }\r\n      <!-- #endregion -->\r\n      <!-- #region Back button -->\r\n      @if (backNavigationRouteEnabled) {\r\n        <button mat-icon-button vd-menu-button (click)=\"handleBackNavigationClick()\">\r\n          <mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n        </button>\r\n      }\r\n      <!-- #endregion -->\r\n      <!-- #region Custom buttons -->\r\n      <ng-content select=\"[vd-menu-button]\"></ng-content>\r\n      <!-- #endregion -->\r\n      <!-- #region Logo with home link -->\r\n      @if (icon || logo || toolbarTitle) {\r\n        <span [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\" class=\"vd-layout-nav-toolbar-content\">\r\n          @if (icon) {\r\n            <mat-icon>{{icon}}</mat-icon>\r\n          }\r\n          @if (logo && !icon) {\r\n            <mat-icon class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n          }\r\n          @if (toolbarTitle) {\r\n            <span>{{toolbarTitle}}</span>\r\n            }&nbsp;\r\n            @if (editMode == false) {\r\n              <span>[<span i18n=\"@@add\">Add</span>]</span>\r\n            }\r\n            @if (editMode == true) {\r\n              <span>[@if (editMode == true) {\r\n                <span i18n=\"@@edit\">Edit</span>\r\n              }]</span>\r\n            }\r\n          </span>\r\n        }\r\n        <!-- #endregion -->\r\n        <!-- #region Custom content -->\r\n        <ng-content select=\"[vd-toolbar-content]\"></ng-content>\r\n        <!-- #endregion -->\r\n        <span flex></span>\r\n        <!-- #region Actions -->\r\n        @if (editMode==true) {\r\n          <vd-dynamic-menu [items]=\"actions\" [data]=\"data\" [context]=\"context\"></vd-dynamic-menu>\r\n        }\r\n        <!-- #endregion-->\r\n        <!-- #region Custom right content -->\r\n        <ng-content select=\"[vd-toolbar-content-right]\"></ng-content>\r\n        <!-- #endregion -->\r\n      </mat-toolbar>\r\n    }\r\n    <div class=\"vd-layout-nav-content scrollbar-primary\" cdkScrollable>\r\n      <ng-content></ng-content>\r\n    </div>\r\n    <ng-content select=\"vd-layout-footer\"></ng-content>\r\n  </div>","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { ActionItem } from '../../common/models/action-item';\r\nimport { VdDynamicMenuComponent } from '../dynamic-menu/dynamic-menu';\r\nimport { VdLayoutToggleDirective } from '../layouts';\r\n\r\n@Component({\r\n    selector: 'vd-list-toolbar',\r\n    templateUrl: './list-toolbar.html',\r\n    imports: [\r\n    MatToolbar,\r\n    MatIcon,\r\n    MatButtonModule,\r\n    VdDynamicMenuComponent,\r\n    VdLayoutToggleDirective\r\n]\r\n})\r\nexport class VdListToolbarComponent {\r\n    /**\r\n     * Toolbar title\r\n     */\r\n    @Input()\r\n    public subtitle?: string;\r\n\r\n    /**\r\n     * mini: boolean\r\n     */\r\n    @Input()\r\n    public mini: boolean = false;\r\n\r\n    /**\r\n     * backButton: boolean\r\n     */\r\n    @Input()\r\n    public backButton: boolean = false;\r\n\r\n    /**\r\n     * back: EventEmitter<any>\r\n     */\r\n    @Output()\r\n    public back: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    /**\r\n     * actions: ActionItem[]\r\n     */\r\n    @Input()\r\n    public actions: ActionItem[] = [];\r\n}","<mat-toolbar dense>\r\n  <div layout=\"row\" layout-align=\"start center\" flex>\r\n    <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" [hideWhenOpened]=\"true\">\r\n      <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n    </button>\r\n    @if (backButton) {\r\n      <button mat-icon-button (click)=\"back.emit()\">\r\n        <mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n      </button>\r\n    }\r\n    <span>{{subtitle}}</span>\r\n    <span flex></span>\r\n    <vd-dynamic-menu [items]=\"actions\"></vd-dynamic-menu>\r\n  </div>\r\n</mat-toolbar>","import { CommonModule } from '@angular/common';\r\nimport type { QueryList } from '@angular/core';\r\nimport { Component, ContentChildren, Directive, forwardRef, Inject, Input, OnDestroy, OnInit, Optional, SecurityContext } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatDrawerToggleResult } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { vdCollapseAnimation } from '../../common/animations/collapse/collapse.animation';\r\nimport { VdMediaService } from '../../media/services/media';\r\nimport { VdLayoutComponent } from '../layout';\r\n\r\n@Directive({\r\n\tselector: '[vd-navigation-drawer-menu]'\r\n})\r\nexport class VdNavigationDrawerMenuDirective { }\r\n\r\n@Directive({\r\n\tselector: '[vd-navigation-drawer-toolbar]'\r\n})\r\nexport class VdNavigationDrawerToolbarDirective { }\r\n\r\n@Component({\r\n\tselector: 'vd-navigation-drawer',\r\n\tstyleUrls: ['./navigation-drawer.scss'],\r\n\ttemplateUrl: './navigation-drawer.html',\r\n\tanimations: [vdCollapseAnimation],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tMatToolbarModule,\r\n\t\tMatIcon,\r\n\t\tMatIconButton\r\n\t]\r\n})\r\nexport class VdNavigationDrawerComponent implements OnInit, OnDestroy {\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _closeSubscription?: Subscription;\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _menuToggled = false;\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\tprivate _backgroundImage!: SafeStyle | null;\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\t@ContentChildren(VdNavigationDrawerMenuDirective, { descendants: true })\r\n\tprivate _drawerMenu!: QueryList<VdNavigationDrawerMenuDirective>;\r\n\r\n\t/**\r\n\t * @field\r\n\t */\r\n\t@ContentChildren(VdNavigationDrawerToolbarDirective, { descendants: true })\r\n\tprivate _toolbar!: QueryList<VdNavigationDrawerToolbarDirective>;\r\n\r\n\t/**\r\n\t * Checks if there is a [TdNavigationDrawerMenuDirective] has content.\r\n\t */\r\n\tpublic get isMenuAvailable(): boolean { return this._drawerMenu ? this._drawerMenu.length > 0 : false; }\r\n\r\n\t/**\r\n\t * Checks if there is a [TdNavigationDrawerToolbarDirective] has content.\r\n\t */\r\n\tpublic get isCustomToolbar(): boolean { return this._toolbar ? this._toolbar.length > 0 : false; }\r\n\r\n\t/**\r\n\t * Checks if there is a background image for the toolbar.\r\n\t */\r\n\tpublic get isBackgroundAvailable(): boolean { return !!this._backgroundImage; }\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic get menuToggled(): boolean { return this._menuToggled; }\r\n\r\n\t/**\r\n\t * sidenavTitle?: string\r\n\t * Title set in sideNav.\r\n\t */\r\n\t@Input()\r\n\tpublic sidenavTitle?: string;\r\n\r\n\t/**\r\n\t * icon?: string\r\n\t *\r\n\t * icon name to be displayed before the title\r\n\t */\r\n\t@Input()\r\n\tpublic icon?: string;\r\n\r\n\t/**\r\n\t * logo?: string\r\n\t *\r\n\t * logo icon name to be displayed before the title.\r\n\t * If [icon] is set, then this will not be shown.\r\n\t */\r\n\t@Input()\r\n\tpublic logo?: string;\r\n\r\n\t/**\r\n\t * avatar?: string\r\n\t *\r\n\t * avatar url to be displayed before the title\r\n\t * If [icon] or [logo] are set, then this will not be shown.\r\n\t */\r\n\t@Input()\r\n\tpublic avatar?: string;\r\n\r\n\t/**\r\n\t * color?: 'accent' | 'primary' | 'warn'\r\n\t *\r\n\t * toolbar color option: primary | accent | warn.\r\n\t * If [color] is not set, default is used.\r\n\t */\r\n\t@Input()\r\n\tpublic color?: 'accent' | 'primary' | 'warn';\r\n\r\n\t/**\r\n\t * navigationRoute?: string\r\n\t *\r\n\t * option to set the combined route for the icon, logo, and sidenavTitle.\r\n\t */\r\n\t@Input()\r\n\tpublic navigationRoute?: string;\r\n\r\n\t/**\r\n\t * backgroundUrl?: SafeResourceUrl\r\n\t *\r\n\t * image to be displayed as the background of the toolbar.\r\n\t * URL used will be sanitized, but it should be always from a trusted source to avoid XSS.\r\n\t */\r\n\t@Input()\r\n\t// TODO Angular complains with warnings if this is type [SafeResourceUrl].. so we will make it <any> until its fixed.\r\n\t// https://github.com/webpack/webpack/issues/2977\r\n\tpublic set backgroundUrl(backgroundUrl: any) {\r\n\t\tif (backgroundUrl) {\r\n\t\t\tconst sanitizedUrl = this._sanitize.sanitize(\r\n\t\t\t\tSecurityContext.RESOURCE_URL,\r\n\t\t\t\tbackgroundUrl\r\n\t\t\t);\r\n\t\t\tthis._backgroundImage = this._sanitize.sanitize(\r\n\t\t\t\tSecurityContext.STYLE,\r\n\t\t\t\t'url(' + sanitizedUrl + ')'\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tpublic get backgroundImage(): SafeStyle | null {\r\n\t\treturn this._backgroundImage;\r\n\t}\r\n\r\n\t/**\r\n\t * @property\r\n\t */\r\n\tpublic get mini(): boolean { return this._layout?.mini };\r\n\r\n\t/**\r\n\t * Expands the mini menu\r\n\t */\r\n\tpublic expanded: boolean = false;\r\n\r\n\t/**\r\n\t * overGt?: string\r\n\t */\r\n\t@Input()\r\n\tpublic sideGt: string = 'sm';\r\n\r\n\t/**\r\n\t * name?: string\r\n\t *\r\n\t * string to be displayed as part of the navigation drawer sublabel.\r\n\t * if [email] is not set, then [name] will be the toggle menu text.\r\n\t */\r\n\t@Input()\r\n\tpublic name?: string;\r\n\r\n\t/**\r\n\t * email?: string\r\n\t *\r\n\t * string to be displayed as part of the navigation drawer sublabel in the [toggle] menu text.\r\n\t * if [email] and [name] are not set, then the toggle menu is not rendered.\r\n\t */\r\n\t@Input()\r\n\tpublic email?: string;\r\n\r\n\t/**\r\n\t * Checks if router was injected.\r\n\t */\r\n\tpublic get routerEnabled(): boolean {\r\n\t\treturn !!this._router && !!this.navigationRoute;\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param _layout \r\n\t * @param _router \r\n\t * @param _sanitize \r\n\t */\r\n\tconstructor(\r\n\t\t@Inject(forwardRef(() => VdLayoutComponent))\r\n\t\tprivate _layout: VdLayoutComponent,\r\n\t\t@Optional() private _router: Router,\r\n\t\tprivate _sanitize: DomSanitizer,\r\n\t\tprivate media: VdMediaService\r\n\t) { }\r\n\r\n\t/**\r\n\t * @description\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tthis._closeSubscription = this._layout.sidenav?.openedChange.subscribe((opened: boolean) => {\r\n\t\t\tif (!opened) {\r\n\t\t\t\tthis._menuToggled = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._layout.expandedChange.subscribe((expanded: boolean) => {\r\n\t\t\tthis.expanded = expanded;\r\n\t\t\tif (!this.expanded) {\r\n\t\t\t\t(async () => {\r\n\t\t\t\t\tawait new Promise(y => setTimeout(y, 100));\r\n\t\t\t\t\tthis._menuToggled = false;\r\n\t\t\t\t})();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.sideGt) {\r\n\t\t\tthis.media.registerQuery(`gt-${this.sideGt}`).subscribe((x: boolean) => this.expanded = !x);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @description\r\n\t */\r\n\tpublic toggleMenu(): void {\r\n\t\tif (this.isMenuAvailable) {\r\n\t\t\tthis._menuToggled = !this._menuToggled;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @description\r\n\t */\r\n\tpublic handleNavigationClick(): void {\r\n\t\tif (this.routerEnabled && this.navigationRoute) {\r\n\t\t\tthis._router.navigateByUrl(this.navigationRoute);\r\n\t\t\tthis.close();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy toggle method to access sidenav from outside (from td-layout template).\r\n\t */\r\n\tpublic toggle(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this._layout.toggle();\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy open method to access sidenav from outside (from td-layout template).\r\n\t */\r\n\tpublic open(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this._layout.open();\r\n\t}\r\n\r\n\t/**\r\n\t * Proxy close method to access sidenav from outside (from td-layout template).\r\n\t */\r\n\tpublic close(): Promise<MatDrawerToggleResult> {\r\n\t\treturn this._layout.close();\r\n\t}\r\n\r\n\t/**\r\n\t * @description\r\n\t */\r\n\tngOnDestroy(): void {\r\n\t\tif (this._closeSubscription) {\r\n\t\t\tthis._closeSubscription.unsubscribe();\r\n\t\t\tthis._closeSubscription = undefined;\r\n\t\t}\r\n\t}\r\n}\r\n","<mat-toolbar [color]=\"color\" [style.background-image]=\"backgroundImage\" [class.vd-toolbar-background]=\"!!isBackgroundAvailable\" class=\"vd-nagivation-drawer-toolbar\" [ngClass]=\"{'drawer-mini': mini && !expanded}\" dense flex layout=\"column\">\r\n  <ng-content select=\"[vd-navigation-drawer-toolbar]\"></ng-content>\r\n  @if (!isCustomToolbar && !mini) {\r\n    @if (email && name) {\r\n      <div class=\"vd-navigation-drawer-name\">{{name}}</div>\r\n    }\r\n    @if (email || name) {\r\n      <div class=\"vd-navigation-drawer-menu-toggle\" href (click)=\"toggleMenu()\">\r\n        <span class=\"vd-navigation-drawer-label\">{{ email || name }}</span>\r\n        @if (isMenuAvailable) {\r\n          <button mat-icon-button class=\"vd-navigation-drawer-menu-button\">\r\n            @if (!menuToggled) {\r\n              <mat-icon>arrow_drop_down</mat-icon>\r\n            }\r\n            @if (menuToggled) {\r\n              <mat-icon>arrow_drop_up</mat-icon>\r\n            }\r\n          </button>\r\n        }\r\n      </div>\r\n    }\r\n  }\r\n  @if (mini && !expanded) {\r\n    <div layout=\"column\" layout-align=\"center center\" flex>\r\n      <button mat-icon-button (click)=\"toggleMenu()\">\r\n        <mat-icon fontSet=\"material-symbols-outlined\">format_list_bulleted</mat-icon>\r\n      </button>\r\n    </div>\r\n  }\r\n</mat-toolbar>\r\n\r\n<div class=\"vd-navigation-drawer-content scrollbar-primary\" [@vdCollapse]=\"menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<div class=\"vd-navigation-drawer-menu-content\" [@vdCollapse]=\"!menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n  <ng-content select=\"[vd-navigation-drawer-menu]\"></ng-content>\r\n</div>","import { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { VdMediaService } from '../services/media';\r\n\r\n/**\r\n * Directive to conditionally toggle attributes, classes, and styles based on media queries.\r\n */\r\n@Directive({\r\n\tselector: '[vdMediaToggle]'\r\n})\r\nexport class VdMediaToggleDirective implements OnInit, OnDestroy {\r\n\r\n\t/* Subscription to handle the media query changes */\r\n\tprivate _subscription?: Subscription;\r\n\r\n\t/* Media query used to evaluate screen/window size. */\r\n\tprivate _query?: string;\r\n\r\n\t/* Flag indicating whether the media query is currently matched or not */\r\n\tprivate _matches: boolean = false;\r\n\r\n\t/* Attributes to be toggled when the media query matches. */\r\n\tprivate _attributes: { [key: string]: string } = {};\r\n\r\n\t/* CSS styles to be toggled when the media query matches. */\r\n\tprivate _styles: { [key: string]: string } = {};\r\n\r\n\t/* CSS classes to be toggled when the media query matches. */\r\n\tprivate _classes: string[] = [];\r\n\r\n\t/**\r\n\t * vdMediaToggle: string\r\n\t * Media query used to evaluate screen/window size.\r\n\t * Toggles attributes, classes, and styles if media query is matched.\r\n\t */\r\n\t@Input('vdMediaToggle')\r\n\tset query(query: string) {\r\n\t\tif (!query) {\r\n\t\t\tthrow new Error('Query needed for [vdMediaToggle] directive.');\r\n\t\t}\r\n\t\tthis._query = query;\r\n\t}\r\n\r\n\t/**\r\n\t * mediaAttributes: {[key: string]: string}\r\n\t * Attributes to be toggled when media query matches.\r\n\t */\r\n\t@Input('mediaAttributes')\r\n\tset attributes(attributes: any) {\r\n\t\tthis._attributes = attributes;\r\n\t}\r\n\r\n\t/**\r\n\t * mediaClasses: string[]\r\n\t * CSS Classes to be toggled when media query matches.\r\n\t */\r\n\t@Input('mediaClasses')\r\n\tset classes(classes: string[]) {\r\n\t\tthis._classes = classes;\r\n\t}\r\n\r\n\t/**\r\n\t * mediaStyles: {[key: string]: string}\r\n\t * CSS Styles to be toggled when media query matches.\r\n\t */\r\n\t@Input('mediaStyles')\r\n\tset styles(styles: any) {\r\n\t\tthis._styles = styles;\r\n\t}\r\n\r\n\tconstructor(private _renderer: Renderer2, private _elementRef: ElementRef, private _mediaService: VdMediaService) { }\r\n\r\n\t/**\r\n\t * Lifecycle hook - ngOnInit\r\n\t */\r\n\tngOnInit(): void {\r\n\t\tif (this._query) {\r\n\t\t\t/* Initial check and setup based on the current media query state */\r\n\t\t\tthis._mediaChange(this._mediaService.query(this._query));\r\n\r\n\t\t\t/* Subscribe to media query changes */\r\n\t\t\tthis._subscription = this._mediaService.registerQuery(this._query).subscribe((matches: boolean) => {\r\n\t\t\t\tthis._mediaChange(matches);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook - ngOnDestroy\r\n\t */\r\n\tngOnDestroy(): void {\r\n\t\t/* Unsubscribe from media query changes to prevent memory leaks */\r\n\t\tif (this._subscription) {\r\n\t\t\tthis._subscription.unsubscribe();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles changes in media query matching state\r\n\t * @param matches \r\n\t */\r\n\tprivate _mediaChange(matches: boolean): void {\r\n\t\t/* Update the internal state and apply changes based on media query matching */\r\n\t\tthis._matches = matches;\r\n\t\tthis._changeAttributes();\r\n\t\tthis._changeClasses();\r\n\t\tthis._changeStyles();\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles attributes based on media query matching\r\n\t */\r\n\tprivate _changeAttributes(): void {\r\n\t\tfor (let attr in this._attributes) {\r\n\t\t\tif (this._matches) {\r\n\t\t\t\tthis._renderer.setAttribute(this._elementRef.nativeElement, attr, this._attributes[attr]);\r\n\t\t\t} else {\r\n\t\t\t\tthis._renderer.removeAttribute(this._elementRef.nativeElement, attr);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles classes based on media query matching\r\n\t */\r\n\tprivate _changeClasses(): void {\r\n\t\tthis._classes.forEach((className: string) => {\r\n\t\t\tif (this._matches) {\r\n\t\t\t\tthis._renderer.addClass(this._elementRef.nativeElement, className);\r\n\t\t\t} else {\r\n\t\t\t\tthis._renderer.removeClass(this._elementRef.nativeElement, className);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles styles based on media query matching\r\n\t */\r\n\tprivate _changeStyles(): void {\r\n\t\tfor (let style in this._styles) {\r\n\t\t\tif (this._matches) {\r\n\t\t\t\tthis._renderer.setStyle(this._elementRef.nativeElement, style, this._styles[style]);\r\n\t\t\t} else {\r\n\t\t\t\tthis._renderer.removeStyle(this._elementRef.nativeElement, style);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { CdkPortal } from \"@angular/cdk/portal\";\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\r\n\r\n/**\r\n * VdTableFieldDirective class\r\n */\r\n@Directive({\r\n    selector: '[vd-table-field]ng-template'\r\n})\r\nexport class VdTableFieldDirective extends CdkPortal {\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Input()\r\n    public row?: number;\r\n\r\n    /**\r\n     * @property\r\n     */\r\n    @Input()\r\n    public inline: boolean = false;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param templateRef \r\n     * @param viewContainerRef \r\n     */\r\n    constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef) {\r\n        super(templateRef, viewContainerRef);\r\n    }\r\n}","import { prop } from \"../../form-validators/decorators\";\r\n\r\n/**\r\n * Represents a value within a facet, with an ID, value, count, and selection status.\r\n */\r\nexport class FacetValue {\r\n    /**\r\n     * The ID of the facet value.\r\n     */\r\n    @prop()\r\n    public id?: string;\r\n\r\n    /**\r\n     * The display value of the facet.\r\n     */\r\n    @prop()\r\n    public value?: string;\r\n\r\n    /**\r\n     * The count of items matching this facet value.\r\n     */\r\n    @prop()\r\n    public count?: number;\r\n\r\n    /**\r\n     * Whether this facet value is selected.\r\n     */\r\n    @prop()\r\n    public selected?: boolean;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<FacetValue>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","import { prop, propArray } from \"../../form-validators/decorators\";\r\nimport { FacetValue } from \"./facet-value\";\r\n\r\n/**\r\n * Represents a facet with a key, name, values, and a flag indicating if multiple values can be selected.\r\n */\r\nexport class Facet {\r\n    /**\r\n     * The key identifying the facet.\r\n     */\r\n    @prop()\r\n    public key?: string;\r\n\r\n    /**\r\n     * The display name of the facet.\r\n     */\r\n    @prop()\r\n    public name?: string;\r\n\r\n    /**\r\n     * The list of values within this facet.\r\n     */\r\n    @propArray(FacetValue)\r\n    public values?: FacetValue[] = [];\r\n\r\n    /**\r\n     * Whether multiple values can be selected for this facet.\r\n     */\r\n    @prop()\r\n    public multiple?: boolean;\r\n\r\n    /**\r\n     * Constructor\r\n     * @param init\r\n     */\r\n    public constructor(init?: Partial<Facet>) {\r\n        Object.assign(this, init);\r\n    }\r\n}","/**\r\n * Pagination class to represent paginated data.\r\n * @template TModel - The type of items in the pagination.\r\n */\r\nexport class Pagination<TModel> {\r\n\t/**\r\n\t * Current page number.\r\n\t */\r\n\tpage: number = 1;\r\n\r\n\t/**\r\n\t * Number of items per page.\r\n\t */\r\n\tpageSize: number = 10;\r\n\r\n\t/**\r\n\t * Total number of pages.\r\n\t */\r\n\tpageCount: number = 0;\r\n\r\n\t/**\r\n\t * Total number of items across all pages.\r\n\t */\r\n\ttotal: number = 0;\r\n\r\n\t/**\r\n\t * Array of items for the current page.\r\n\t */\r\n\titems: TModel[] = [];\r\n}","import { Injectable } from '@angular/core';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\n\r\n/**\r\n * To modify the labels and text displayed, create a new instance of MdPaginatorIntl and\r\n * include it in a custom provider\r\n */\r\n@Injectable()\r\nexport class PaginatorIntl extends MatPaginatorIntl {\r\n\t/** \r\n\t * A label for the page size selector\r\n\t */\r\n\tpublic override itemsPerPageLabel = '';\r\n\r\n\t/** \r\n\t * A label for the button that increments the current page\r\n\t */\r\n\tpublic override nextPageLabel = '';\r\n\r\n\t/** \r\n\t * A label for the button that decrements the current page\r\n\t */\r\n\tpublic override previousPageLabel = '';\r\n\r\n\t/** \r\n\t * A label for the range of items within the current page \r\n\t * and the length of the whole list\r\n\t */\r\n\toverride getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n\t\tif (length == 0 || pageSize == 0) {\r\n\t\t\treturn `0 / ${length}`;\r\n\t\t}\r\n\r\n\t\tlength = Math.max(length, 0);\r\n\t\tconst startIndex = page * pageSize;\r\n\r\n\t\t/* If the start index exceeds the list length, do not try and fix the end index to the end */\r\n\t\tconst endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\r\n\r\n\t\treturn `${startIndex + 1} - ${endIndex} / ${length}`;\r\n\t}\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i3","i4","takeUntil","merge","i1","i2","BOOLEAN","VALIDATOR_CONFIG","trim","ltrim","rtrim","blacklist","stripLow","toBoolean","toFloat","toDouble","toInt","toString","whitelist","toDate","escape","prefix","suffix","sanitize","runCondition","isValid","map","i1.DecimalProvider","i6","switchMap","observableOf","i5","i7","i8","debounceTime","distinctUntilChanged","i1.DynamicBuilder","i9","i11","i14","i15","i3.RxFormBuilder","i5.AsyncValidationDirective","i6.RxwebFormDirective","i7.RxFormControlDirective","tap","i1.AppSetting","i1.LoadingScreenService","i1.VdMediaService","nextUniqueId","i12","i1.MenuService","i3.VdMediaService"],"mappings":"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"}