@acorex/cdk 20.3.36 → 20.3.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,8 +43,32 @@ class AXInputMaskDirective {
43
43
  * @default 0
44
44
  */
45
45
  this.decimal = input(0, ...(ngDevMode ? [{ debugName: "decimal" }] : []));
46
+ /**
47
+ * Custom mask pattern for 'mask' mode.
48
+ * Use the following tokens:
49
+ * - `#`: Required digit (0-9)
50
+ * - `^`: Required letter (a-z, A-Z)
51
+ * - `@`: Required alphanumeric (0-9, a-z, A-Z)
52
+ *
53
+ * Use ! before token to escape symbol. For example !# will render # instead of a digit.
54
+ * Any other character is treated as a literal separator.
55
+ * @example '(###) ###-####' for phone numbers
56
+ * @example 'AA-####' for license plates
57
+ * @example '##/##/####' for dates
58
+ */
59
+ this.maskPattern = input(null, ...(ngDevMode ? [{ debugName: "maskPattern" }] : []));
60
+ /**
61
+ * Custom token definitions to extend or override default mask tokens.
62
+ * Each token maps to a pattern regex and optional transformation.
63
+ * @example { 'P': { pattern: /[1-9]/, transform: (c) => c.toUpperCase() } }
64
+ */
65
+ this.customTokens = input({}, ...(ngDevMode ? [{ debugName: "customTokens" }] : []));
46
66
  this.#eff = effect(() => {
47
- void this.initializeMask();
67
+ if (this.maskMode() === null)
68
+ return;
69
+ if (this.maskMode() === 'mask' && !this.maskPattern())
70
+ return;
71
+ this.initializeMask();
48
72
  }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
49
73
  }
50
74
  #eff;
@@ -52,29 +76,48 @@ class AXInputMaskDirective {
52
76
  if (this.maskaJs)
53
77
  this.maskaJs.destroy();
54
78
  let mask;
79
+ let tokens;
80
+ // Default tokens for built-in modes
81
+ const defaultTokens = {
82
+ D: { pattern: /-/, optional: true },
83
+ F: { pattern: /[0-9]/, repeated: true },
84
+ X: { pattern: /[0-9.]/, repeated: true },
85
+ U: { pattern: /[-0-9.]/, repeated: true },
86
+ };
87
+ // Tokens for custom mask mode
88
+ const maskModeTokens = {
89
+ '#': { pattern: /[0-9]/ },
90
+ '^': { pattern: /[a-zA-Z]/ },
91
+ '@': { pattern: /[a-zA-Z0-9]/ },
92
+ ...this.customTokens(),
93
+ };
55
94
  switch (this.maskMode()) {
56
95
  case 'hijriDate':
57
96
  mask = [`1###${this.separator()}##${this.separator()}##`];
97
+ tokens = defaultTokens;
58
98
  break;
59
99
  case 'digits':
60
100
  mask = ['DF'];
101
+ tokens = defaultTokens;
61
102
  break;
62
103
  case 'decimal':
63
104
  mask = [`DX`];
105
+ tokens = defaultTokens;
64
106
  break;
65
107
  case 'thousandsSeparator':
66
108
  mask = [`U`];
109
+ tokens = defaultTokens;
110
+ break;
111
+ case 'mask':
112
+ mask = [this.maskPattern()];
113
+ tokens = maskModeTokens;
114
+ break;
67
115
  }
68
116
  const { MaskInput } = await import('maska');
69
117
  this.maskaJs = new MaskInput(this.elm.nativeElement, {
70
118
  mask,
71
119
  reversed: this.maskMode() === 'thousandsSeparator' ? true : false,
72
- tokens: {
73
- D: { pattern: /-/, optional: true },
74
- F: { pattern: /[0-9]/, repeated: true },
75
- X: { pattern: /[0-9.]/, repeated: true },
76
- U: { pattern: /[-0-9.]/, repeated: true },
77
- },
120
+ tokens,
78
121
  postProcess: (value) => {
79
122
  switch (this.maskMode()) {
80
123
  case 'hijriDate':
@@ -85,6 +128,8 @@ class AXInputMaskDirective {
85
128
  return this.decimalMaskHandler(value);
86
129
  case 'thousandsSeparator':
87
130
  return this.thousandsSeparatorHandler(value);
131
+ case 'mask':
132
+ return value;
88
133
  default:
89
134
  return value;
90
135
  }
@@ -99,6 +144,8 @@ class AXInputMaskDirective {
99
144
  return this.decimalMaskHandler(value);
100
145
  case 'thousandsSeparator':
101
146
  return this.thousandsSeparatorHandler(value);
147
+ case 'mask':
148
+ return value;
102
149
  default:
103
150
  return value;
104
151
  }
@@ -217,7 +264,7 @@ class AXInputMaskDirective {
217
264
  return this.rangeValueLimit(finalValue);
218
265
  }
219
266
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXInputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
220
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: AXInputMaskDirective, isStandalone: true, selector: "[axInputMask]", inputs: { maskMode: { classPropertyName: "maskMode", publicName: "maskMode", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: "eager", publicName: "eager", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: "decimal", publicName: "decimal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: "onMaskChanged" }, exportAs: ["axInputMask"], ngImport: i0 }); }
267
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: AXInputMaskDirective, isStandalone: true, selector: "[axInputMask]", inputs: { maskMode: { classPropertyName: "maskMode", publicName: "maskMode", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: "eager", publicName: "eager", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: "decimal", publicName: "decimal", isSignal: true, isRequired: false, transformFunction: null }, maskPattern: { classPropertyName: "maskPattern", publicName: "maskPattern", isSignal: true, isRequired: false, transformFunction: null }, customTokens: { classPropertyName: "customTokens", publicName: "customTokens", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: "onMaskChanged" }, exportAs: ["axInputMask"], ngImport: i0 }); }
221
268
  }
222
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXInputMaskDirective, decorators: [{
223
270
  type: Directive,
@@ -225,7 +272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
225
272
  selector: '[axInputMask]',
226
273
  exportAs: 'axInputMask',
227
274
  }]
228
- }], propDecorators: { maskMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "maskMode", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], eager: [{ type: i0.Input, args: [{ isSignal: true, alias: "eager", required: false }] }], onMaskChanged: [{ type: i0.Output, args: ["onMaskChanged"] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "minValue", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxValue", required: false }] }], decimal: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimal", required: false }] }] } });
275
+ }], propDecorators: { maskMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "maskMode", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], eager: [{ type: i0.Input, args: [{ isSignal: true, alias: "eager", required: false }] }], onMaskChanged: [{ type: i0.Output, args: ["onMaskChanged"] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "minValue", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxValue", required: false }] }], decimal: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimal", required: false }] }], maskPattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "maskPattern", required: false }] }], customTokens: [{ type: i0.Input, args: [{ isSignal: true, alias: "customTokens", required: false }] }] } });
229
276
 
230
277
  /**
231
278
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-input-mask.mjs","sources":["../tmp-esm2022/input-mask/lib/input-mask.directive.js","../tmp-esm2022/input-mask/acorex-cdk-input-mask.js"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Directive that provides input masking functionality for various data types including\n * Hijri dates, digits, decimal numbers, and thousands-separated numbers.\n * Built on top of the Maska.js library for robust input validation and formatting.\n */\nexport class AXInputMaskDirective {\n constructor() {\n this.elm = inject(ElementRef);\n /**\n * The mode of input masking to apply.\n * @default 'digits'\n */\n this.maskMode = input('digits', ...(ngDevMode ? [{ debugName: \"maskMode\" }] : []));\n /**\n * The separator character used in the mask (e.g., '/' for dates, ',' for thousands).\n * @default '/'\n */\n this.separator = input('/', ...(ngDevMode ? [{ debugName: \"separator\" }] : []));\n /**\n * Whether to apply the mask eagerly (as user types) or on blur.\n * @default false\n */\n this.eager = input(false, ...(ngDevMode ? [{ debugName: \"eager\" }] : []));\n /**\n * Event emitted when the masked value changes.\n */\n this.onMaskChanged = output();\n /**\n * Minimum allowed value for numeric inputs.\n * @default null\n */\n this.minValue = input(null, ...(ngDevMode ? [{ debugName: \"minValue\" }] : []));\n /**\n * Maximum allowed value for numeric inputs.\n * @default null\n */\n this.maxValue = input(null, ...(ngDevMode ? [{ debugName: \"maxValue\" }] : []));\n /**\n * Number of decimal places allowed for decimal inputs.\n * @default 0\n */\n this.decimal = input(0, ...(ngDevMode ? [{ debugName: \"decimal\" }] : []));\n this.#eff = effect(() => {\n void this.initializeMask();\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n #eff;\n async initializeMask() {\n if (this.maskaJs)\n this.maskaJs.destroy();\n let mask;\n switch (this.maskMode()) {\n case 'hijriDate':\n mask = [`1###${this.separator()}##${this.separator()}##`];\n break;\n case 'digits':\n mask = ['DF'];\n break;\n case 'decimal':\n mask = [`DX`];\n break;\n case 'thousandsSeparator':\n mask = [`U`];\n }\n const { MaskInput } = await import('maska');\n this.maskaJs = new MaskInput(this.elm.nativeElement, {\n mask,\n reversed: this.maskMode() === 'thousandsSeparator' ? true : false,\n tokens: {\n D: { pattern: /-/, optional: true },\n F: { pattern: /[0-9]/, repeated: true },\n X: { pattern: /[0-9.]/, repeated: true },\n U: { pattern: /[-0-9.]/, repeated: true },\n },\n postProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n default:\n return value;\n }\n },\n preProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n default:\n return value;\n }\n },\n onMaska: (details) => {\n this.onMaskChanged.emit(details);\n },\n eager: this.eager(),\n });\n }\n thousandsSeparatorHandler(value) {\n let thousandsSeparator = this.separator();\n switch (this.separator()) {\n case '-':\n thousandsSeparator = '_';\n break;\n case '.':\n thousandsSeparator = ',';\n break;\n }\n let clearValue;\n const firstChar = value.charAt(0);\n const restOfString = value.slice(1);\n if (firstChar === '-') {\n clearValue = '-' + restOfString.replace(/-/g, '');\n }\n else {\n clearValue = value.replace(/-/g, '');\n }\n // Ensure only one decimal point\n const decimalParts = clearValue.split('.');\n if (decimalParts.length > 2) {\n clearValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Apply range limits to the cleaned value\n clearValue = this.rangeValueLimit(clearValue);\n const addSeparator = clearValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator);\n return addSeparator;\n }\n hijriMaskHandler(value) {\n const [yearStr, monthStr, dayStr] = value.split(this.separator());\n const year = +yearStr;\n const month = +monthStr;\n const day = +dayStr;\n //Month Logics\n if (!month || !year)\n return value;\n if (month > 12) {\n return `${yearStr}${this.separator()}12`;\n }\n if (month < 1) {\n return `${yearStr}${this.separator()}01`;\n }\n //Day Logics\n if (!day)\n return value;\n if (day < 1) {\n return `${yearStr}-${monthStr}${this.separator()}01`;\n }\n let maxDay = 30;\n if (month <= 6) {\n maxDay = 31;\n }\n else if (month === 12) {\n // Hijri leap year rule: (11 * year + 14) % 30 < 11\n const isKabise = (11 * year + 14) % 30 < 11;\n maxDay = isKabise ? 30 : 29;\n }\n if (day > maxDay) {\n return `${yearStr}${this.separator()}${monthStr}${this.separator()}${maxDay}`;\n }\n return value;\n }\n rangeValueLimit(value) {\n let convertedValue;\n if (this.separator()) {\n convertedValue = +value.split(this.separator()).join('');\n }\n else {\n convertedValue = +value;\n }\n if (this.minValue() && convertedValue < this.minValue()) {\n return this.minValue().toString();\n }\n if (this.maxValue() && convertedValue > this.maxValue()) {\n return this.maxValue().toString();\n }\n return value;\n }\n decimalMaskHandler(value) {\n // Remove any non-digit and non-decimal characters except the first decimal point\n let cleanValue = value;\n let finalValue;\n // Ensure only one decimal point\n const decimalParts = cleanValue.split('.');\n if (decimalParts.length > 2) {\n cleanValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Split into integer and decimal parts\n const parts = cleanValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n // Limit decimal part to the specified number of digits\n const limitedDecimalPart = decimalPart.slice(0, this.decimal());\n // Reconstruct the value\n if (limitedDecimalPart.length > 0) {\n finalValue = integerPart + '.' + limitedDecimalPart;\n }\n else if (cleanValue.includes('.')) {\n // If there's a decimal point but no decimal part, keep the decimal point\n finalValue = integerPart + '.';\n }\n else {\n finalValue = integerPart;\n }\n return this.rangeValueLimit(finalValue);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXInputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.16\", type: AXInputMaskDirective, isStandalone: true, selector: \"[axInputMask]\", inputs: { maskMode: { classPropertyName: \"maskMode\", publicName: \"maskMode\", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: \"separator\", publicName: \"separator\", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: \"eager\", publicName: \"eager\", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: \"minValue\", publicName: \"minValue\", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: \"maxValue\", publicName: \"maxValue\", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: \"decimal\", publicName: \"decimal\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: \"onMaskChanged\" }, exportAs: [\"axInputMask\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXInputMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axInputMask]',\n exportAs: 'axInputMask',\n }]\n }], propDecorators: { maskMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maskMode\", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: \"separator\", required: false }] }], eager: [{ type: i0.Input, args: [{ isSignal: true, alias: \"eager\", required: false }] }], onMaskChanged: [{ type: i0.Output, args: [\"onMaskChanged\"] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"minValue\", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maxValue\", required: false }] }], decimal: [{ type: i0.Input, args: [{ isSignal: true, alias: \"decimal\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtbWFzay9zcmMvbGliL2lucHV0LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQnJGOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS1UsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUdqQzs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFtQixRQUFRLG9EQUFDLENBQUM7UUFFN0M7OztXQUdHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FBUyxHQUFHLHFEQUFDLENBQUM7UUFFL0I7OztXQUdHO1FBQ0gsVUFBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLGlEQUFDLENBQUM7UUFFckI7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLE1BQU0sRUFBb0IsQ0FBQztRQUUzQzs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUUvQjs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUUvQjs7O1dBR0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsbURBQUMsQ0FBQztRQUVuQixTQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QixDQUFDLGdEQUFDLENBQUM7S0FrTUo7SUFwTUMsSUFBSSxDQUVEO0lBRUssS0FBSyxDQUFDLGNBQWM7UUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLENB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Q0FBQzsrR0FoUFUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTWFza0lucHV0IH0gZnJvbSAnbWFza2EnO1xuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGlucHV0IG1hc2sgdmFsdWUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhJbnB1dE1hc2tFdmVudCA9IHtcbiAgbWFza2VkOiBzdHJpbmc7XG4gIHVubWFza2VkOiBzdHJpbmc7XG4gIGNvbXBsZXRlZDogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQXZhaWxhYmxlIGlucHV0IG1hc2sgbW9kZXMgZm9yIGRpZmZlcmVudCBkYXRhIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBBWElucHV0TWFza01vZGVzID0gJ2hpanJpRGF0ZScgfCAnZGlnaXRzJyB8ICd0aG91c2FuZHNTZXBhcmF0b3InIHwgJ2RlY2ltYWwnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0aGF0IHByb3ZpZGVzIGlucHV0IG1hc2tpbmcgZnVuY3Rpb25hbGl0eSBmb3IgdmFyaW91cyBkYXRhIHR5cGVzIGluY2x1ZGluZ1xuICogSGlqcmkgZGF0ZXMsIGRpZ2l0cywgZGVjaW1hbCBudW1iZXJzLCBhbmQgdGhvdXNhbmRzLXNlcGFyYXRlZCBudW1iZXJzLlxuICogQnVpbHQgb24gdG9wIG9mIHRoZSBNYXNrYS5qcyBsaWJyYXJ5IGZvciByb2J1c3QgaW5wdXQgdmFsaWRhdGlvbiBhbmQgZm9ybWF0dGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2F4SW5wdXRNYXNrXScsXG4gIGV4cG9ydEFzOiAnYXhJbnB1dE1hc2snLFxufSlcbmV4cG9ydCBjbGFzcyBBWElucHV0TWFza0RpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZWxtID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIG1hc2thSnM6IE1hc2tJbnB1dDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgb2YgaW5wdXQgbWFza2luZyB0byBhcHBseS5cbiAgICogQGRlZmF1bHQgJ2RpZ2l0cydcbiAgICovXG4gIG1hc2tNb2RlID0gaW5wdXQ8QVhJbnB1dE1hc2tNb2Rlcz4oJ2RpZ2l0cycpO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIGluIHRoZSBtYXNrIChlLmcuLCAnLycgZm9yIGRhdGVzLCAnLCcgZm9yIHRob3VzYW5kcykuXG4gICAqIEBkZWZhdWx0ICcvJ1xuICAgKi9cbiAgc2VwYXJhdG9yID0gaW5wdXQ8c3RyaW5nPignLycpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFwcGx5IHRoZSBtYXNrIGVhZ2VybHkgKGFzIHVzZXIgdHlwZXMpIG9yIG9uIGJsdXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlYWdlciA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBtYXNrZWQgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIG9uTWFza0NoYW5nZWQgPSBvdXRwdXQ8QVhJbnB1dE1hc2tFdmVudD4oKTtcblxuICAvKipcbiAgICogTWluaW11bSBhbGxvd2VkIHZhbHVlIGZvciBudW1lcmljIGlucHV0cy5cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgbWluVmFsdWUgPSBpbnB1dDxudW1iZXI+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIG51bWVyaWMgaW5wdXRzLlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBtYXhWYWx1ZSA9IGlucHV0PG51bWJlcj4obnVsbCk7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBhbGxvd2VkIGZvciBkZWNpbWFsIGlucHV0cy5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZGVjaW1hbCA9IGlucHV0KDApO1xuXG4gICNlZmYgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHZvaWQgdGhpcy5pbml0aWFsaXplTWFzaygpO1xuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVNYXNrKCkge1xuICAgIGlmICh0aGlzLm1hc2thSnMpIHRoaXMubWFza2FKcy5kZXN0cm95KCk7XG5cbiAgICBsZXQgbWFzazogc3RyaW5nW107XG5cbiAgICBzd2l0Y2ggKHRoaXMubWFza01vZGUoKSkge1xuICAgICAgY2FzZSAnaGlqcmlEYXRlJzpcbiAgICAgICAgbWFzayA9IFtgMSMjIyR7dGhpcy5zZXBhcmF0b3IoKX0jIyR7dGhpcy5zZXBhcmF0b3IoKX0jI2BdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RpZ2l0cyc6XG4gICAgICAgIG1hc2sgPSBbJ0RGJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgIG1hc2sgPSBbYERYYF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGhvdXNhbmRzU2VwYXJhdG9yJzpcbiAgICAgICAgbWFzayA9IFtgVWBdO1xuICAgIH1cblxuICAgIGNvbnN0IHsgTWFza0lucHV0IH0gPSBhd2FpdCBpbXBvcnQoJ21hc2thJyk7XG5cbiAgICB0aGlzLm1hc2thSnMgPSBuZXcgTWFza0lucHV0KHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIG1hc2ssXG4gICAgICByZXZlcnNlZDogdGhpcy5tYXNrTW9kZSgpID09PSAndGhvdXNhbmRzU2VwYXJhdG9yJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRva2Vuczoge1xuICAgICAgICBEOiB7IHBhdHRlcm46IC8tLywgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgRjogeyBwYXR0ZXJuOiAvWzAtOV0vLCByZXBlYXRlZDogdHJ1ZSB9LFxuICAgICAgICBYOiB7IHBhdHRlcm46IC9bMC05Ll0vLCByZXBlYXRlZDogdHJ1ZSB9LFxuICAgICAgICBVOiB7IHBhdHRlcm46IC9bLTAtOS5dLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgICBwb3N0UHJvY2VzczogKHZhbHVlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5tYXNrTW9kZSgpKSB7XG4gICAgICAgICAgY2FzZSAnaGlqcmlEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpanJpTWFza0hhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RpZ2l0cyc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZVZhbHVlTGltaXQodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbE1hc2tIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBjYXNlICd0aG91c2FuZHNTZXBhcmF0b3InOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhvdXNhbmRzU2VwYXJhdG9ySGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByZVByb2Nlc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRoaXMubWFza01vZGUoKSkge1xuICAgICAgICAgIGNhc2UgJ2hpanJpRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWpyaU1hc2tIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBjYXNlICdkaWdpdHMnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VWYWx1ZUxpbWl0KHZhbHVlKTtcbiAgICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxNYXNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAndGhvdXNhbmRzU2VwYXJhdG9yJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRob3VzYW5kc1NlcGFyYXRvckhhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbk1hc2thOiAoZGV0YWlscykgPT4ge1xuICAgICAgICB0aGlzLm9uTWFza0NoYW5nZWQuZW1pdChkZXRhaWxzKTtcbiAgICAgIH0sXG4gICAgICBlYWdlcjogdGhpcy5lYWdlcigpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0aG91c2FuZHNTZXBhcmF0b3JIYW5kbGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGhvdXNhbmRzU2VwYXJhdG9yID0gdGhpcy5zZXBhcmF0b3IoKTtcblxuICAgIHN3aXRjaCAodGhpcy5zZXBhcmF0b3IoKSkge1xuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHRob3VzYW5kc1NlcGFyYXRvciA9ICdfJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuJzpcbiAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yID0gJywnO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgY2xlYXJWYWx1ZTogc3RyaW5nO1xuXG4gICAgY29uc3QgZmlyc3RDaGFyID0gdmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IHJlc3RPZlN0cmluZyA9IHZhbHVlLnNsaWNlKDEpO1xuXG4gICAgaWYgKGZpcnN0Q2hhciA9PT0gJy0nKSB7XG4gICAgICBjbGVhclZhbHVlID0gJy0nICsgcmVzdE9mU3RyaW5nLnJlcGxhY2UoLy0vZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclZhbHVlID0gdmFsdWUucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIG9ubHkgb25lIGRlY2ltYWwgcG9pbnRcbiAgICBjb25zdCBkZWNpbWFsUGFydHMgPSBjbGVhclZhbHVlLnNwbGl0KCcuJyk7XG4gICAgaWYgKGRlY2ltYWxQYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICBjbGVhclZhbHVlID0gZGVjaW1hbFBhcnRzWzBdICsgJy4nICsgZGVjaW1hbFBhcnRzLnNsaWNlKDEpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHJhbmdlIGxpbWl0cyB0byB0aGUgY2xlYW5lZCB2YWx1ZVxuICAgIGNsZWFyVmFsdWUgPSB0aGlzLnJhbmdlVmFsdWVMaW1pdChjbGVhclZhbHVlKTtcblxuICAgIGNvbnN0IGFkZFNlcGFyYXRvciA9IGNsZWFyVmFsdWUucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgdGhvdXNhbmRzU2VwYXJhdG9yKTtcblxuICAgIHJldHVybiBhZGRTZXBhcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIGhpanJpTWFza0hhbmRsZXIodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IFt5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyXSA9IHZhbHVlLnNwbGl0KHRoaXMuc2VwYXJhdG9yKCkpO1xuXG4gICAgY29uc3QgeWVhciA9ICt5ZWFyU3RyO1xuICAgIGNvbnN0IG1vbnRoID0gK21vbnRoU3RyO1xuICAgIGNvbnN0IGRheSA9ICtkYXlTdHI7XG5cbiAgICAvL01vbnRoIExvZ2ljc1xuICAgIGlmICghbW9udGggfHwgIXllYXIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAobW9udGggPiAxMikge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfTEyYDtcbiAgICB9XG4gICAgaWYgKG1vbnRoIDwgMSkge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfTAxYDtcbiAgICB9XG5cbiAgICAvL0RheSBMb2dpY3NcbiAgICBpZiAoIWRheSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgaWYgKGRheSA8IDEpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfS0ke21vbnRoU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0wMWA7XG4gICAgfVxuXG4gICAgbGV0IG1heERheSA9IDMwO1xuICAgIGlmIChtb250aCA8PSA2KSB7XG4gICAgICBtYXhEYXkgPSAzMTtcbiAgICB9IGVsc2UgaWYgKG1vbnRoID09PSAxMikge1xuICAgICAgLy8gSGlqcmkgbGVhcCB5ZWFyIHJ1bGU6ICgxMSAqIHllYXIgKyAxNCkgJSAzMCA8IDExXG4gICAgICBjb25zdCBpc0thYmlzZSA9ICgxMSAqIHllYXIgKyAxNCkgJSAzMCA8IDExO1xuICAgICAgbWF4RGF5ID0gaXNLYWJpc2UgPyAzMCA6IDI5O1xuICAgIH1cblxuICAgIGlmIChkYXkgPiBtYXhEYXkpIHtcbiAgICAgIHJldHVybiBgJHt5ZWFyU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0ke21vbnRoU3RyfSR7dGhpcy5zZXBhcmF0b3IoKX0ke21heERheX1gO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VWYWx1ZUxpbWl0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgY29udmVydGVkVmFsdWU6IG51bWJlcjtcblxuICAgIGlmICh0aGlzLnNlcGFyYXRvcigpKSB7XG4gICAgICBjb252ZXJ0ZWRWYWx1ZSA9ICt2YWx1ZS5zcGxpdCh0aGlzLnNlcGFyYXRvcigpKS5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udmVydGVkVmFsdWUgPSArdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluVmFsdWUoKSAmJiBjb252ZXJ0ZWRWYWx1ZSA8IHRoaXMubWluVmFsdWUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWluVmFsdWUoKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heFZhbHVlKCkgJiYgY29udmVydGVkVmFsdWUgPiB0aGlzLm1heFZhbHVlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heFZhbHVlKCkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGRlY2ltYWxNYXNrSGFuZGxlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgLy8gUmVtb3ZlIGFueSBub24tZGlnaXQgYW5kIG5vbi1kZWNpbWFsIGNoYXJhY3RlcnMgZXhjZXB0IHRoZSBmaXJzdCBkZWNpbWFsIHBvaW50XG4gICAgbGV0IGNsZWFuVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgZmluYWxWYWx1ZTogc3RyaW5nO1xuXG4gICAgLy8gRW5zdXJlIG9ubHkgb25lIGRlY2ltYWwgcG9pbnRcbiAgICBjb25zdCBkZWNpbWFsUGFydHMgPSBjbGVhblZhbHVlLnNwbGl0KCcuJyk7XG4gICAgaWYgKGRlY2ltYWxQYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICBjbGVhblZhbHVlID0gZGVjaW1hbFBhcnRzWzBdICsgJy4nICsgZGVjaW1hbFBhcnRzLnNsaWNlKDEpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8vIFNwbGl0IGludG8gaW50ZWdlciBhbmQgZGVjaW1hbCBwYXJ0c1xuICAgIGNvbnN0IHBhcnRzID0gY2xlYW5WYWx1ZS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGludGVnZXJQYXJ0ID0gcGFydHNbMF0gfHwgJyc7XG4gICAgY29uc3QgZGVjaW1hbFBhcnQgPSBwYXJ0c1sxXSB8fCAnJztcblxuICAgIC8vIExpbWl0IGRlY2ltYWwgcGFydCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkaWdpdHNcbiAgICBjb25zdCBsaW1pdGVkRGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zbGljZSgwLCB0aGlzLmRlY2ltYWwoKSk7XG5cbiAgICAvLyBSZWNvbnN0cnVjdCB0aGUgdmFsdWVcbiAgICBpZiAobGltaXRlZERlY2ltYWxQYXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGZpbmFsVmFsdWUgPSBpbnRlZ2VyUGFydCArICcuJyArIGxpbWl0ZWREZWNpbWFsUGFydDtcbiAgICB9IGVsc2UgaWYgKGNsZWFuVmFsdWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBhIGRlY2ltYWwgcG9pbnQgYnV0IG5vIGRlY2ltYWwgcGFydCwga2VlcCB0aGUgZGVjaW1hbCBwb2ludFxuICAgICAgZmluYWxWYWx1ZSA9IGludGVnZXJQYXJ0ICsgJy4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFZhbHVlID0gaW50ZWdlclBhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VWYWx1ZUxpbWl0KGZpbmFsVmFsdWUpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1pbnB1dC1tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2lucHV0LW1hc2svc3JjL2Fjb3JleC1jZGstaW5wdXQtbWFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-cdk-input-mask.mjs","sources":["../tmp-esm2022/input-mask/lib/input-mask.directive.js","../tmp-esm2022/input-mask/acorex-cdk-input-mask.js"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Directive that provides input masking functionality for various data types including\n * Hijri dates, digits, decimal numbers, and thousands-separated numbers.\n * Built on top of the Maska.js library for robust input validation and formatting.\n */\nexport class AXInputMaskDirective {\n constructor() {\n this.elm = inject(ElementRef);\n /**\n * The mode of input masking to apply.\n * @default 'digits'\n */\n this.maskMode = input('digits', ...(ngDevMode ? [{ debugName: \"maskMode\" }] : []));\n /**\n * The separator character used in the mask (e.g., '/' for dates, ',' for thousands).\n * @default '/'\n */\n this.separator = input('/', ...(ngDevMode ? [{ debugName: \"separator\" }] : []));\n /**\n * Whether to apply the mask eagerly (as user types) or on blur.\n * @default false\n */\n this.eager = input(false, ...(ngDevMode ? [{ debugName: \"eager\" }] : []));\n /**\n * Event emitted when the masked value changes.\n */\n this.onMaskChanged = output();\n /**\n * Minimum allowed value for numeric inputs.\n * @default null\n */\n this.minValue = input(null, ...(ngDevMode ? [{ debugName: \"minValue\" }] : []));\n /**\n * Maximum allowed value for numeric inputs.\n * @default null\n */\n this.maxValue = input(null, ...(ngDevMode ? [{ debugName: \"maxValue\" }] : []));\n /**\n * Number of decimal places allowed for decimal inputs.\n * @default 0\n */\n this.decimal = input(0, ...(ngDevMode ? [{ debugName: \"decimal\" }] : []));\n /**\n * Custom mask pattern for 'mask' mode.\n * Use the following tokens:\n * - `#`: Required digit (0-9)\n * - `^`: Required letter (a-z, A-Z)\n * - `@`: Required alphanumeric (0-9, a-z, A-Z)\n *\n * Use ! before token to escape symbol. For example !# will render # instead of a digit.\n * Any other character is treated as a literal separator.\n * @example '(###) ###-####' for phone numbers\n * @example 'AA-####' for license plates\n * @example '##/##/####' for dates\n */\n this.maskPattern = input(null, ...(ngDevMode ? [{ debugName: \"maskPattern\" }] : []));\n /**\n * Custom token definitions to extend or override default mask tokens.\n * Each token maps to a pattern regex and optional transformation.\n * @example { 'P': { pattern: /[1-9]/, transform: (c) => c.toUpperCase() } }\n */\n this.customTokens = input({}, ...(ngDevMode ? [{ debugName: \"customTokens\" }] : []));\n this.#eff = effect(() => {\n if (this.maskMode() === null)\n return;\n if (this.maskMode() === 'mask' && !this.maskPattern())\n return;\n this.initializeMask();\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n #eff;\n async initializeMask() {\n if (this.maskaJs)\n this.maskaJs.destroy();\n let mask;\n let tokens;\n // Default tokens for built-in modes\n const defaultTokens = {\n D: { pattern: /-/, optional: true },\n F: { pattern: /[0-9]/, repeated: true },\n X: { pattern: /[0-9.]/, repeated: true },\n U: { pattern: /[-0-9.]/, repeated: true },\n };\n // Tokens for custom mask mode\n const maskModeTokens = {\n '#': { pattern: /[0-9]/ },\n '^': { pattern: /[a-zA-Z]/ },\n '@': { pattern: /[a-zA-Z0-9]/ },\n ...this.customTokens(),\n };\n switch (this.maskMode()) {\n case 'hijriDate':\n mask = [`1###${this.separator()}##${this.separator()}##`];\n tokens = defaultTokens;\n break;\n case 'digits':\n mask = ['DF'];\n tokens = defaultTokens;\n break;\n case 'decimal':\n mask = [`DX`];\n tokens = defaultTokens;\n break;\n case 'thousandsSeparator':\n mask = [`U`];\n tokens = defaultTokens;\n break;\n case 'mask':\n mask = [this.maskPattern()];\n tokens = maskModeTokens;\n break;\n }\n const { MaskInput } = await import('maska');\n this.maskaJs = new MaskInput(this.elm.nativeElement, {\n mask,\n reversed: this.maskMode() === 'thousandsSeparator' ? true : false,\n tokens,\n postProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n case 'mask':\n return value;\n default:\n return value;\n }\n },\n preProcess: (value) => {\n switch (this.maskMode()) {\n case 'hijriDate':\n return this.hijriMaskHandler(value);\n case 'digits':\n return this.rangeValueLimit(value);\n case 'decimal':\n return this.decimalMaskHandler(value);\n case 'thousandsSeparator':\n return this.thousandsSeparatorHandler(value);\n case 'mask':\n return value;\n default:\n return value;\n }\n },\n onMaska: (details) => {\n this.onMaskChanged.emit(details);\n },\n eager: this.eager(),\n });\n }\n thousandsSeparatorHandler(value) {\n let thousandsSeparator = this.separator();\n switch (this.separator()) {\n case '-':\n thousandsSeparator = '_';\n break;\n case '.':\n thousandsSeparator = ',';\n break;\n }\n let clearValue;\n const firstChar = value.charAt(0);\n const restOfString = value.slice(1);\n if (firstChar === '-') {\n clearValue = '-' + restOfString.replace(/-/g, '');\n }\n else {\n clearValue = value.replace(/-/g, '');\n }\n // Ensure only one decimal point\n const decimalParts = clearValue.split('.');\n if (decimalParts.length > 2) {\n clearValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Apply range limits to the cleaned value\n clearValue = this.rangeValueLimit(clearValue);\n const addSeparator = clearValue.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator);\n return addSeparator;\n }\n hijriMaskHandler(value) {\n const [yearStr, monthStr, dayStr] = value.split(this.separator());\n const year = +yearStr;\n const month = +monthStr;\n const day = +dayStr;\n //Month Logics\n if (!month || !year)\n return value;\n if (month > 12) {\n return `${yearStr}${this.separator()}12`;\n }\n if (month < 1) {\n return `${yearStr}${this.separator()}01`;\n }\n //Day Logics\n if (!day)\n return value;\n if (day < 1) {\n return `${yearStr}-${monthStr}${this.separator()}01`;\n }\n let maxDay = 30;\n if (month <= 6) {\n maxDay = 31;\n }\n else if (month === 12) {\n // Hijri leap year rule: (11 * year + 14) % 30 < 11\n const isKabise = (11 * year + 14) % 30 < 11;\n maxDay = isKabise ? 30 : 29;\n }\n if (day > maxDay) {\n return `${yearStr}${this.separator()}${monthStr}${this.separator()}${maxDay}`;\n }\n return value;\n }\n rangeValueLimit(value) {\n let convertedValue;\n if (this.separator()) {\n convertedValue = +value.split(this.separator()).join('');\n }\n else {\n convertedValue = +value;\n }\n if (this.minValue() && convertedValue < this.minValue()) {\n return this.minValue().toString();\n }\n if (this.maxValue() && convertedValue > this.maxValue()) {\n return this.maxValue().toString();\n }\n return value;\n }\n decimalMaskHandler(value) {\n // Remove any non-digit and non-decimal characters except the first decimal point\n let cleanValue = value;\n let finalValue;\n // Ensure only one decimal point\n const decimalParts = cleanValue.split('.');\n if (decimalParts.length > 2) {\n cleanValue = decimalParts[0] + '.' + decimalParts.slice(1).join('');\n }\n // Split into integer and decimal parts\n const parts = cleanValue.split('.');\n const integerPart = parts[0] || '';\n const decimalPart = parts[1] || '';\n // Limit decimal part to the specified number of digits\n const limitedDecimalPart = decimalPart.slice(0, this.decimal());\n // Reconstruct the value\n if (limitedDecimalPart.length > 0) {\n finalValue = integerPart + '.' + limitedDecimalPart;\n }\n else if (cleanValue.includes('.')) {\n // If there's a decimal point but no decimal part, keep the decimal point\n finalValue = integerPart + '.';\n }\n else {\n finalValue = integerPart;\n }\n return this.rangeValueLimit(finalValue);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXInputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.16\", type: AXInputMaskDirective, isStandalone: true, selector: \"[axInputMask]\", inputs: { maskMode: { classPropertyName: \"maskMode\", publicName: \"maskMode\", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: \"separator\", publicName: \"separator\", isSignal: true, isRequired: false, transformFunction: null }, eager: { classPropertyName: \"eager\", publicName: \"eager\", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: \"minValue\", publicName: \"minValue\", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: \"maxValue\", publicName: \"maxValue\", isSignal: true, isRequired: false, transformFunction: null }, decimal: { classPropertyName: \"decimal\", publicName: \"decimal\", isSignal: true, isRequired: false, transformFunction: null }, maskPattern: { classPropertyName: \"maskPattern\", publicName: \"maskPattern\", isSignal: true, isRequired: false, transformFunction: null }, customTokens: { classPropertyName: \"customTokens\", publicName: \"customTokens\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMaskChanged: \"onMaskChanged\" }, exportAs: [\"axInputMask\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXInputMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axInputMask]',\n exportAs: 'axInputMask',\n }]\n }], propDecorators: { maskMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maskMode\", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: \"separator\", required: false }] }], eager: [{ type: i0.Input, args: [{ isSignal: true, alias: \"eager\", required: false }] }], onMaskChanged: [{ type: i0.Output, args: [\"onMaskChanged\"] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"minValue\", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maxValue\", required: false }] }], decimal: [{ type: i0.Input, args: [{ isSignal: true, alias: \"decimal\", required: false }] }], maskPattern: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maskPattern\", required: false }] }], customTokens: [{ type: i0.Input, args: [{ isSignal: true, alias: \"customTokens\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvaW5wdXQtbWFzay9zcmMvbGliL2lucHV0LW1hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQ3JGOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS1UsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUdqQzs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFtQixRQUFRLG9EQUFDLENBQUM7UUFFN0M7OztXQUdHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FBUyxHQUFHLHFEQUFDLENBQUM7UUFFL0I7OztXQUdHO1FBQ0gsVUFBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLGlEQUFDLENBQUM7UUFFckI7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLE1BQU0sRUFBb0IsQ0FBQztRQUUzQzs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUUvQjs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFTLElBQUksb0RBQUMsQ0FBQztRQUUvQjs7O1dBR0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsbURBQUMsQ0FBQztRQUVuQjs7Ozs7Ozs7Ozs7O1dBWUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBUyxJQUFJLHVEQUFDLENBQUM7UUFFbEM7Ozs7V0FJRztRQUNILGlCQUFZLEdBQUcsS0FBSyxDQUFlLEVBQUUsd0RBQUMsQ0FBQztRQUV2QyxTQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLEVB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YUFBYTtpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCB9IGZyb20gJ21hc2thJztcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBpbnB1dCBtYXNrIHZhbHVlIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFYSW5wdXRNYXNrRXZlbnQgPSB7XG4gIG1hc2tlZDogc3RyaW5nO1xuICB1bm1hc2tlZDogc3RyaW5nO1xuICBjb21wbGV0ZWQ6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEF2YWlsYWJsZSBpbnB1dCBtYXNrIG1vZGVzIGZvciBkaWZmZXJlbnQgZGF0YSB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQVhJbnB1dE1hc2tNb2RlcyA9ICdoaWpyaURhdGUnIHwgJ2RpZ2l0cycgfCAndGhvdXNhbmRzU2VwYXJhdG9yJyB8ICdkZWNpbWFsJyB8ICdtYXNrJztcblxuLyoqXG4gKiBUb2tlbiBkZWZpbml0aW9ucyBmb3IgY3VzdG9tIG1hc2sgcGF0dGVybnMuXG4gKiAtIGAjYDogRGlnaXQgKDAtOSlcbiAqIC0gYF5gOiBMZXR0ZXIgKGEteiwgQS1aKVxuICogLSBgQGA6IEFscGhhbnVtZXJpYyAoMC05LCBhLXosIEEtWilcbiAqL1xuZXhwb3J0IHR5cGUgQVhNYXNrVG9rZW5zID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICB0cmFuc2Zvcm0/OiAoY2hhcjogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgcmVwZWF0ZWQ/OiBib29sZWFuO1xuICAgIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgfTtcbn07XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgcHJvdmlkZXMgaW5wdXQgbWFza2luZyBmdW5jdGlvbmFsaXR5IGZvciB2YXJpb3VzIGRhdGEgdHlwZXMgaW5jbHVkaW5nXG4gKiBIaWpyaSBkYXRlcywgZGlnaXRzLCBkZWNpbWFsIG51bWJlcnMsIGFuZCB0aG91c2FuZHMtc2VwYXJhdGVkIG51bWJlcnMuXG4gKiBCdWlsdCBvbiB0b3Agb2YgdGhlIE1hc2thLmpzIGxpYnJhcnkgZm9yIHJvYnVzdCBpbnB1dCB2YWxpZGF0aW9uIGFuZCBmb3JtYXR0aW5nLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhJbnB1dE1hc2tdJyxcbiAgZXhwb3J0QXM6ICdheElucHV0TWFzaycsXG59KVxuZXhwb3J0IGNsYXNzIEFYSW5wdXRNYXNrRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBlbG0gPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgbWFza2FKczogTWFza0lucHV0O1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBvZiBpbnB1dCBtYXNraW5nIHRvIGFwcGx5LlxuICAgKiBAZGVmYXVsdCAnZGlnaXRzJ1xuICAgKi9cbiAgbWFza01vZGUgPSBpbnB1dDxBWElucHV0TWFza01vZGVzPignZGlnaXRzJyk7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHVzZWQgaW4gdGhlIG1hc2sgKGUuZy4sICcvJyBmb3IgZGF0ZXMsICcsJyBmb3IgdGhvdXNhbmRzKS5cbiAgICogQGRlZmF1bHQgJy8nXG4gICAqL1xuICBzZXBhcmF0b3IgPSBpbnB1dDxzdHJpbmc+KCcvJyk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXBwbHkgdGhlIG1hc2sgZWFnZXJseSAoYXMgdXNlciB0eXBlcykgb3Igb24gYmx1ci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVhZ2VyID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG1hc2tlZCB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgb25NYXNrQ2hhbmdlZCA9IG91dHB1dDxBWElucHV0TWFza0V2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGFsbG93ZWQgdmFsdWUgZm9yIG51bWVyaWMgaW5wdXRzLlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBtaW5WYWx1ZSA9IGlucHV0PG51bWJlcj4obnVsbCk7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgbnVtZXJpYyBpbnB1dHMuXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIG1heFZhbHVlID0gaW5wdXQ8bnVtYmVyPihudWxsKTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGFsbG93ZWQgZm9yIGRlY2ltYWwgaW5wdXRzLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBkZWNpbWFsID0gaW5wdXQoMCk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBtYXNrIHBhdHRlcm4gZm9yICdtYXNrJyBtb2RlLlxuICAgKiBVc2UgdGhlIGZvbGxvd2luZyB0b2tlbnM6XG4gICAqIC0gYCNgOiBSZXF1aXJlZCBkaWdpdCAoMC05KVxuICAgKiAtIGBeYDogUmVxdWlyZWQgbGV0dGVyIChhLXosIEEtWilcbiAgICogLSBgQGA6IFJlcXVpcmVkIGFscGhhbnVtZXJpYyAoMC05LCBhLXosIEEtWilcbiAgICpcbiAgICogVXNlICEgYmVmb3JlIHRva2VuIHRvIGVzY2FwZSBzeW1ib2wuIEZvciBleGFtcGxlICEjIHdpbGwgcmVuZGVyICMgaW5zdGVhZCBvZiBhIGRpZ2l0LlxuICAgKiBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIHRyZWF0ZWQgYXMgYSBsaXRlcmFsIHNlcGFyYXRvci5cbiAgICogQGV4YW1wbGUgJygjIyMpICMjIy0jIyMjJyBmb3IgcGhvbmUgbnVtYmVyc1xuICAgKiBAZXhhbXBsZSAnQUEtIyMjIycgZm9yIGxpY2Vuc2UgcGxhdGVzXG4gICAqIEBleGFtcGxlICcjIy8jIy8jIyMjJyBmb3IgZGF0ZXNcbiAgICovXG4gIG1hc2tQYXR0ZXJuID0gaW5wdXQ8c3RyaW5nPihudWxsKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHRva2VuIGRlZmluaXRpb25zIHRvIGV4dGVuZCBvciBvdmVycmlkZSBkZWZhdWx0IG1hc2sgdG9rZW5zLlxuICAgKiBFYWNoIHRva2VuIG1hcHMgdG8gYSBwYXR0ZXJuIHJlZ2V4IGFuZCBvcHRpb25hbCB0cmFuc2Zvcm1hdGlvbi5cbiAgICogQGV4YW1wbGUgeyAnUCc6IHsgcGF0dGVybjogL1sxLTldLywgdHJhbnNmb3JtOiAoYykgPT4gYy50b1VwcGVyQ2FzZSgpIH0gfVxuICAgKi9cbiAgY3VzdG9tVG9rZW5zID0gaW5wdXQ8QVhNYXNrVG9rZW5zPih7fSk7XG5cbiAgI2VmZiA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMubWFza01vZGUoKSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm1hc2tNb2RlKCkgPT09ICdtYXNrJyAmJiAhdGhpcy5tYXNrUGF0dGVybigpKSByZXR1cm47XG4gICAgdGhpcy5pbml0aWFsaXplTWFzaygpO1xuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVNYXNrKCkge1xuICAgIGlmICh0aGlzLm1hc2thSnMpIHRoaXMubWFza2FKcy5kZXN0cm95KCk7XG5cbiAgICBsZXQgbWFzazogc3RyaW5nW107XG4gICAgbGV0IHRva2VuczogUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgeyBwYXR0ZXJuOiBSZWdFeHA7IG9wdGlvbmFsPzogYm9vbGVhbjsgcmVwZWF0ZWQ/OiBib29sZWFuOyB0cmFuc2Zvcm0/OiAoY2hhcjogc3RyaW5nKSA9PiBzdHJpbmcgfVxuICAgID47XG5cbiAgICAvLyBEZWZhdWx0IHRva2VucyBmb3IgYnVpbHQtaW4gbW9kZXNcbiAgICBjb25zdCBkZWZhdWx0VG9rZW5zOiBBWE1hc2tUb2tlbnMgPSB7XG4gICAgICBEOiB7IHBhdHRlcm46IC8tLywgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgIEY6IHsgcGF0dGVybjogL1swLTldLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICAgIFg6IHsgcGF0dGVybjogL1swLTkuXS8sIHJlcGVhdGVkOiB0cnVlIH0sXG4gICAgICBVOiB7IHBhdHRlcm46IC9bLTAtOS5dLywgcmVwZWF0ZWQ6IHRydWUgfSxcbiAgICB9O1xuXG4gICAgLy8gVG9rZW5zIGZvciBjdXN0b20gbWFzayBtb2RlXG4gICAgY29uc3QgbWFza01vZGVUb2tlbnM6IEFYTWFza1Rva2VucyA9IHtcbiAgICAgICcjJzogeyBwYXR0ZXJuOiAvWzAtOV0vIH0sXG4gICAgICAnXic6IHsgcGF0dGVybjogL1thLXpBLVpdLyB9LFxuICAgICAgJ0AnOiB7IHBhdHRlcm46IC9bYS16QS1aMC05XS8gfSxcbiAgICAgIC4uLnRoaXMuY3VzdG9tVG9rZW5zKCksXG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy5tYXNrTW9kZSgpKSB7XG4gICAgICBjYXNlICdoaWpyaURhdGUnOlxuICAgICAgICBtYXNrID0gW2AxIyMjJHt0aGlzLnNlcGFyYXRvcigpfSMjJHt0aGlzLnNlcGFyYXRvcigpfSMjYF07XG4gICAgICAgIHRva2VucyA9IGRlZmF1bHRUb2tlbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGlnaXRzJzpcbiAgICAgICAgbWFzayA9IFsnREYnXTtcbiAgICAgICAgdG9rZW5zID0gZGVmYXVsdFRva2VucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgbWFzayA9IFtgRFhgXTtcbiAgICAgICAgdG9rZW5zID0gZGVmYXVsdFRva2VucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aG91c2FuZHNTZXBhcmF0b3InOlxuICAgICAgICBtYXNrID0gW2BVYF07XG4gICAgICAgIHRva2VucyA9IGRlZmF1bHRUb2tlbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWFzayc6XG4gICAgICAgIG1hc2sgPSBbdGhpcy5tYXNrUGF0dGVybigpXTtcbiAgICAgICAgdG9rZW5zID0gbWFza01vZGVUb2tlbnM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IHsgTWFza0lucHV0IH0gPSBhd2FpdCBpbXBvcnQoJ21hc2thJyk7XG5cbiAgICB0aGlzLm1hc2thSnMgPSBuZXcgTWFza0lucHV0KHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIG1hc2ssXG4gICAgICByZXZlcnNlZDogdGhpcy5tYXNrTW9kZSgpID09PSAndGhvdXNhbmRzU2VwYXJhdG9yJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRva2VucyxcbiAgICAgIHBvc3RQcm9jZXNzOiAodmFsdWUpID0+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLm1hc2tNb2RlKCkpIHtcbiAgICAgICAgICBjYXNlICdoaWpyaURhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlqcmlNYXNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAnZGlnaXRzJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlVmFsdWVMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsTWFza0hhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ3Rob3VzYW5kc1NlcGFyYXRvcic6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aG91c2FuZHNTZXBhcmF0b3JIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBjYXNlICdtYXNrJzpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJlUHJvY2VzczogKHZhbHVlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5tYXNrTW9kZSgpKSB7XG4gICAgICAgICAgY2FzZSAnaGlqcmlEYXRlJzpcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpanJpTWFza0hhbmRsZXIodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RpZ2l0cyc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZVZhbHVlTGltaXQodmFsdWUpO1xuICAgICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbE1hc2tIYW5kbGVyKHZhbHVlKTtcbiAgICAgICAgICBjYXNlICd0aG91c2FuZHNTZXBhcmF0b3InOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhvdXNhbmRzU2VwYXJhdG9ySGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgY2FzZSAnbWFzayc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTWFza2E6IChkZXRhaWxzKSA9PiB7XG4gICAgICAgIHRoaXMub25NYXNrQ2hhbmdlZC5lbWl0KGRldGFpbHMpO1xuICAgICAgfSxcbiAgICAgIGVhZ2VyOiB0aGlzLmVhZ2VyKCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRob3VzYW5kc1NlcGFyYXRvckhhbmRsZXIodmFsdWU6IHN0cmluZykge1xuICAgIGxldCB0aG91c2FuZHNTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvcigpO1xuXG4gICAgc3dpdGNoICh0aGlzLnNlcGFyYXRvcigpKSB7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yID0gJ18nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy4nOlxuICAgICAgICB0aG91c2FuZHNTZXBhcmF0b3IgPSAnLCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBjbGVhclZhbHVlOiBzdHJpbmc7XG5cbiAgICBjb25zdCBmaXJzdENoYXIgPSB2YWx1ZS5jaGFyQXQoMCk7XG4gICAgY29uc3QgcmVzdE9mU3RyaW5nID0gdmFsdWUuc2xpY2UoMSk7XG5cbiAgICBpZiAoZmlyc3RDaGFyID09PSAnLScpIHtcbiAgICAgIGNsZWFyVmFsdWUgPSAnLScgKyByZXN0T2ZTdHJpbmcucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8tL2csICcnKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgb25seSBvbmUgZGVjaW1hbCBwb2ludFxuICAgIGNvbnN0IGRlY2ltYWxQYXJ0cyA9IGNsZWFyVmFsdWUuc3BsaXQoJy4nKTtcbiAgICBpZiAoZGVjaW1hbFBhcnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGNsZWFyVmFsdWUgPSBkZWNpbWFsUGFydHNbMF0gKyAnLicgKyBkZWNpbWFsUGFydHMuc2xpY2UoMSkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcmFuZ2UgbGltaXRzIHRvIHRoZSBjbGVhbmVkIHZhbHVlXG4gICAgY2xlYXJWYWx1ZSA9IHRoaXMucmFuZ2VWYWx1ZUxpbWl0KGNsZWFyVmFsdWUpO1xuXG4gICAgY29uc3QgYWRkU2VwYXJhdG9yID0gY2xlYXJWYWx1ZS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCB0aG91c2FuZHNTZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuIGFkZFNlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgaGlqcmlNYXNrSGFuZGxlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgW3llYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHJdID0gdmFsdWUuc3BsaXQodGhpcy5zZXBhcmF0b3IoKSk7XG5cbiAgICBjb25zdCB5ZWFyID0gK3llYXJTdHI7XG4gICAgY29uc3QgbW9udGggPSArbW9udGhTdHI7XG4gICAgY29uc3QgZGF5ID0gK2RheVN0cjtcblxuICAgIC8vTW9udGggTG9naWNzXG4gICAgaWYgKCFtb250aCB8fCAheWVhcikgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChtb250aCA+IDEyKSB7XG4gICAgICByZXR1cm4gYCR7eWVhclN0cn0ke3RoaXMuc2VwYXJhdG9yKCl9MTJgO1xuICAgIH1cbiAgICBpZiAobW9udGggPCAxKSB7XG4gICAgICByZXR1cm4gYCR7eWVhclN0cn0ke3RoaXMuc2VwYXJhdG9yKCl9MDFgO1xuICAgIH1cblxuICAgIC8vRGF5IExvZ2ljc1xuICAgIGlmICghZGF5KSByZXR1cm4gdmFsdWU7XG5cbiAgICBpZiAoZGF5IDwgMSkge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9LSR7bW9udGhTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfTAxYDtcbiAgICB9XG5cbiAgICBsZXQgbWF4RGF5ID0gMzA7XG4gICAgaWYgKG1vbnRoIDw9IDYpIHtcbiAgICAgIG1heERheSA9IDMxO1xuICAgIH0gZWxzZSBpZiAobW9udGggPT09IDEyKSB7XG4gICAgICAvLyBIaWpyaSBsZWFwIHllYXIgcnVsZTogKDExICogeWVhciArIDE0KSAlIDMwIDwgMTFcbiAgICAgIGNvbnN0IGlzS2FiaXNlID0gKDExICogeWVhciArIDE0KSAlIDMwIDwgMTE7XG4gICAgICBtYXhEYXkgPSBpc0thYmlzZSA/IDMwIDogMjk7XG4gICAgfVxuXG4gICAgaWYgKGRheSA+IG1heERheSkge1xuICAgICAgcmV0dXJuIGAke3llYXJTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfSR7bW9udGhTdHJ9JHt0aGlzLnNlcGFyYXRvcigpfSR7bWF4RGF5fWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByYW5nZVZhbHVlTGltaXQodmFsdWU6IHN0cmluZykge1xuICAgIGxldCBjb252ZXJ0ZWRWYWx1ZTogbnVtYmVyO1xuXG4gICAgaWYgKHRoaXMuc2VwYXJhdG9yKCkpIHtcbiAgICAgIGNvbnZlcnRlZFZhbHVlID0gK3ZhbHVlLnNwbGl0KHRoaXMuc2VwYXJhdG9yKCkpLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb252ZXJ0ZWRWYWx1ZSA9ICt2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5taW5WYWx1ZSgpICYmIGNvbnZlcnRlZFZhbHVlIDwgdGhpcy5taW5WYWx1ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5taW5WYWx1ZSgpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4VmFsdWUoKSAmJiBjb252ZXJ0ZWRWYWx1ZSA+IHRoaXMubWF4VmFsdWUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWF4VmFsdWUoKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjaW1hbE1hc2tIYW5kbGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBSZW1vdmUgYW55IG5vbi1kaWdpdCBhbmQgbm9uLWRlY2ltYWwgY2hhcmFjdGVycyBleGNlcHQgdGhlIGZpcnN0IGRlY2ltYWwgcG9pbnRcbiAgICBsZXQgY2xlYW5WYWx1ZSA9IHZhbHVlO1xuICAgIGxldCBmaW5hbFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvLyBFbnN1cmUgb25seSBvbmUgZGVjaW1hbCBwb2ludFxuICAgIGNvbnN0IGRlY2ltYWxQYXJ0cyA9IGNsZWFuVmFsdWUuc3BsaXQoJy4nKTtcbiAgICBpZiAoZGVjaW1hbFBhcnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGNsZWFuVmFsdWUgPSBkZWNpbWFsUGFydHNbMF0gKyAnLicgKyBkZWNpbWFsUGFydHMuc2xpY2UoMSkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLy8gU3BsaXQgaW50byBpbnRlZ2VyIGFuZCBkZWNpbWFsIHBhcnRzXG4gICAgY29uc3QgcGFydHMgPSBjbGVhblZhbHVlLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgaW50ZWdlclBhcnQgPSBwYXJ0c1swXSB8fCAnJztcbiAgICBjb25zdCBkZWNpbWFsUGFydCA9IHBhcnRzWzFdIHx8ICcnO1xuXG4gICAgLy8gTGltaXQgZGVjaW1hbCBwYXJ0IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRpZ2l0c1xuICAgIGNvbnN0IGxpbWl0ZWREZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIHRoaXMuZGVjaW1hbCgpKTtcblxuICAgIC8vIFJlY29uc3RydWN0IHRoZSB2YWx1ZVxuICAgIGlmIChsaW1pdGVkRGVjaW1hbFBhcnQubGVuZ3RoID4gMCkge1xuICAgICAgZmluYWxWYWx1ZSA9IGludGVnZXJQYXJ0ICsgJy4nICsgbGltaXRlZERlY2ltYWxQYXJ0O1xuICAgIH0gZWxzZSBpZiAoY2xlYW5WYWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIGEgZGVjaW1hbCBwb2ludCBidXQgbm8gZGVjaW1hbCBwYXJ0LCBrZWVwIHRoZSBkZWNpbWFsIHBvaW50XG4gICAgICBmaW5hbFZhbHVlID0gaW50ZWdlclBhcnQgKyAnLic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsVmFsdWUgPSBpbnRlZ2VyUGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yYW5nZVZhbHVlTGltaXQoZmluYWxWYWx1ZSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1pbnB1dC1tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL2lucHV0LW1hc2svc3JjL2Fjb3JleC1jZGstaW5wdXQtbWFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -11,7 +11,22 @@ type AXInputMaskEvent = {
11
11
  /**
12
12
  * Available input mask modes for different data types.
13
13
  */
14
- type AXInputMaskModes = 'hijriDate' | 'digits' | 'thousandsSeparator' | 'decimal';
14
+ type AXInputMaskModes = 'hijriDate' | 'digits' | 'thousandsSeparator' | 'decimal' | 'mask';
15
+ /**
16
+ * Token definitions for custom mask patterns.
17
+ * - `#`: Digit (0-9)
18
+ * - `^`: Letter (a-z, A-Z)
19
+ * - `@`: Alphanumeric (0-9, a-z, A-Z)
20
+ */
21
+ type AXMaskTokens = {
22
+ [key: string]: {
23
+ pattern: RegExp;
24
+ optional?: boolean;
25
+ transform?: (char: string) => string;
26
+ repeated?: boolean;
27
+ multiple?: boolean;
28
+ };
29
+ };
15
30
  /**
16
31
  * Directive that provides input masking functionality for various data types including
17
32
  * Hijri dates, digits, decimal numbers, and thousands-separated numbers.
@@ -55,14 +70,34 @@ declare class AXInputMaskDirective {
55
70
  * @default 0
56
71
  */
57
72
  decimal: _angular_core.InputSignal<number>;
73
+ /**
74
+ * Custom mask pattern for 'mask' mode.
75
+ * Use the following tokens:
76
+ * - `#`: Required digit (0-9)
77
+ * - `^`: Required letter (a-z, A-Z)
78
+ * - `@`: Required alphanumeric (0-9, a-z, A-Z)
79
+ *
80
+ * Use ! before token to escape symbol. For example !# will render # instead of a digit.
81
+ * Any other character is treated as a literal separator.
82
+ * @example '(###) ###-####' for phone numbers
83
+ * @example 'AA-####' for license plates
84
+ * @example '##/##/####' for dates
85
+ */
86
+ maskPattern: _angular_core.InputSignal<string>;
87
+ /**
88
+ * Custom token definitions to extend or override default mask tokens.
89
+ * Each token maps to a pattern regex and optional transformation.
90
+ * @example { 'P': { pattern: /[1-9]/, transform: (c) => c.toUpperCase() } }
91
+ */
92
+ customTokens: _angular_core.InputSignal<AXMaskTokens>;
58
93
  private initializeMask;
59
94
  private thousandsSeparatorHandler;
60
95
  private hijriMaskHandler;
61
96
  private rangeValueLimit;
62
97
  private decimalMaskHandler;
63
98
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInputMaskDirective, never>;
64
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInputMaskDirective, "[axInputMask]", ["axInputMask"], { "maskMode": { "alias": "maskMode"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "eager": { "alias": "eager"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "decimal": { "alias": "decimal"; "required": false; "isSignal": true; }; }, { "onMaskChanged": "onMaskChanged"; }, never, never, true, never>;
99
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInputMaskDirective, "[axInputMask]", ["axInputMask"], { "maskMode": { "alias": "maskMode"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "eager": { "alias": "eager"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "decimal": { "alias": "decimal"; "required": false; "isSignal": true; }; "maskPattern": { "alias": "maskPattern"; "required": false; "isSignal": true; }; "customTokens": { "alias": "customTokens"; "required": false; "isSignal": true; }; }, { "onMaskChanged": "onMaskChanged"; }, never, never, true, never>;
65
100
  }
66
101
 
67
102
  export { AXInputMaskDirective };
68
- export type { AXInputMaskEvent, AXInputMaskModes };
103
+ export type { AXInputMaskEvent, AXInputMaskModes, AXMaskTokens };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@acorex/cdk",
3
- "version": "20.3.36",
3
+ "version": "20.3.38",
4
4
  "peerDependencies": {
5
- "@acorex/core": "20.3.36",
5
+ "@acorex/core": "20.3.38",
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "quill": ">=2.0.2",
@@ -69,14 +69,14 @@
69
69
  "types": "./list-navigation/index.d.ts",
70
70
  "default": "./fesm2022/acorex-cdk-list-navigation.mjs"
71
71
  },
72
- "./overlay": {
73
- "types": "./overlay/index.d.ts",
74
- "default": "./fesm2022/acorex-cdk-overlay.mjs"
75
- },
76
72
  "./outline": {
77
73
  "types": "./outline/index.d.ts",
78
74
  "default": "./fesm2022/acorex-cdk-outline.mjs"
79
75
  },
76
+ "./overlay": {
77
+ "types": "./overlay/index.d.ts",
78
+ "default": "./fesm2022/acorex-cdk-overlay.mjs"
79
+ },
80
80
  "./pan-view": {
81
81
  "types": "./pan-view/index.d.ts",
82
82
  "default": "./fesm2022/acorex-cdk-pan-view.mjs"