cmat 0.0.79 → 0.0.81

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.
Files changed (137) hide show
  1. package/fesm2022/cmat-components-adapter.mjs +9 -9
  2. package/fesm2022/cmat-components-breadcrumb.mjs +9 -9
  3. package/fesm2022/cmat-components-card.mjs +3 -3
  4. package/fesm2022/cmat-components-carousel.mjs +55 -30
  5. package/fesm2022/cmat-components-carousel.mjs.map +1 -1
  6. package/fesm2022/cmat-components-cascade.mjs +14 -14
  7. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  8. package/fesm2022/cmat-components-chip-input.mjs +3 -3
  9. package/fesm2022/cmat-components-code-editor.mjs +3 -3
  10. package/fesm2022/cmat-components-custom-formly.mjs +119 -116
  11. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  12. package/fesm2022/cmat-components-date-range.mjs +12 -12
  13. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  14. package/fesm2022/cmat-components-date-time-display.mjs +3 -3
  15. package/fesm2022/cmat-components-drawer.mjs +59 -24
  16. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  17. package/fesm2022/cmat-components-empty-state.mjs +3 -3
  18. package/fesm2022/cmat-components-file-preview.mjs +3 -3
  19. package/fesm2022/cmat-components-filter-toolbar.mjs +3 -3
  20. package/fesm2022/cmat-components-form-actions.mjs +3 -3
  21. package/fesm2022/cmat-components-fullscreen.mjs +3 -3
  22. package/fesm2022/cmat-components-highlight.mjs +6 -7
  23. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  24. package/fesm2022/cmat-components-image-viewer.mjs +12 -15
  25. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
  26. package/fesm2022/cmat-components-inline-loading.mjs +3 -3
  27. package/fesm2022/cmat-components-json-editor.mjs +4 -6
  28. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  29. package/fesm2022/cmat-components-knob-input.mjs +11 -11
  30. package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
  31. package/fesm2022/cmat-components-masonry.mjs +8 -11
  32. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  33. package/fesm2022/cmat-components-material-color-picker.mjs +13 -14
  34. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  35. package/fesm2022/cmat-components-material-datetimepicker.mjs +122 -108
  36. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  37. package/fesm2022/cmat-components-navigation.mjs +182 -210
  38. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  39. package/fesm2022/cmat-components-opt-input.mjs +75 -65
  40. package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
  41. package/fesm2022/cmat-components-org-chart.mjs +9 -9
  42. package/fesm2022/cmat-components-page-header.mjs +3 -3
  43. package/fesm2022/cmat-components-pagination.mjs +34 -32
  44. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  45. package/fesm2022/cmat-components-password-strength.mjs +13 -15
  46. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  47. package/fesm2022/cmat-components-popover.mjs +35 -26
  48. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  49. package/fesm2022/cmat-components-progress-bar.mjs +11 -14
  50. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  51. package/fesm2022/cmat-components-qrcode.mjs +3 -3
  52. package/fesm2022/cmat-components-rating.mjs +14 -14
  53. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  54. package/fesm2022/cmat-components-rich-text-editor.mjs +3 -3
  55. package/fesm2022/cmat-components-select-search.mjs +25 -37
  56. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  57. package/fesm2022/cmat-components-select-table.mjs +19 -20
  58. package/fesm2022/cmat-components-select-table.mjs.map +1 -1
  59. package/fesm2022/cmat-components-select-tree.mjs +31 -32
  60. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  61. package/fesm2022/cmat-components-skeleton.mjs +3 -3
  62. package/fesm2022/cmat-components-speed-dial.mjs +57 -20
  63. package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
  64. package/fesm2022/cmat-components-status-tag.mjs +3 -3
  65. package/fesm2022/cmat-components-table-toolbar.mjs +3 -3
  66. package/fesm2022/cmat-components-timeline.mjs +12 -12
  67. package/fesm2022/cmat-components-toast.mjs +77 -28
  68. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  69. package/fesm2022/cmat-components-transfer-picker.mjs +103 -90
  70. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  71. package/fesm2022/cmat-components-treetable.mjs +17 -19
  72. package/fesm2022/cmat-components-treetable.mjs.map +1 -1
  73. package/fesm2022/cmat-components-upload.mjs +24 -31
  74. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  75. package/fesm2022/cmat-components-x6-angular-shape.mjs +0 -3
  76. package/fesm2022/cmat-components-x6-angular-shape.mjs.map +1 -1
  77. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
  78. package/fesm2022/cmat-directives-arrow-cursor.mjs +69 -46
  79. package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -1
  80. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  81. package/fesm2022/cmat-directives-data-exporter.mjs +21 -21
  82. package/fesm2022/cmat-directives-debounce.mjs +9 -9
  83. package/fesm2022/cmat-directives-digit-only.mjs +6 -6
  84. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  85. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +3 -3
  86. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  87. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  88. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  89. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  90. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  91. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  92. package/fesm2022/cmat-pipes-secure.mjs +3 -3
  93. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  94. package/fesm2022/cmat-services-alert.mjs +3 -3
  95. package/fesm2022/cmat-services-config.mjs +6 -6
  96. package/fesm2022/cmat-services-confirmation.mjs +6 -6
  97. package/fesm2022/cmat-services-data.mjs +3 -3
  98. package/fesm2022/cmat-services-export-as.mjs +3 -3
  99. package/fesm2022/cmat-services-loading.mjs +6 -6
  100. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  101. package/fesm2022/cmat-services-media-watcher.mjs +3 -3
  102. package/fesm2022/cmat-services-platform.mjs +3 -3
  103. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  104. package/fesm2022/cmat-services-title.mjs +3 -3
  105. package/fesm2022/cmat-services-translation.mjs +3 -3
  106. package/fesm2022/cmat-services-utils.mjs +3 -3
  107. package/fesm2022/cmat.mjs +1395 -1246
  108. package/fesm2022/cmat.mjs.map +1 -1
  109. package/package.json +1 -1
  110. package/types/cmat-components-carousel.d.ts +18 -11
  111. package/types/cmat-components-cascade.d.ts +3 -3
  112. package/types/cmat-components-custom-formly.d.ts +8 -9
  113. package/types/cmat-components-date-range.d.ts +1 -1
  114. package/types/cmat-components-drawer.d.ts +8 -2
  115. package/types/cmat-components-image-viewer.d.ts +5 -6
  116. package/types/cmat-components-json-editor.d.ts +0 -1
  117. package/types/cmat-components-knob-input.d.ts +2 -2
  118. package/types/cmat-components-masonry.d.ts +1 -2
  119. package/types/cmat-components-material-color-picker.d.ts +1 -2
  120. package/types/cmat-components-material-datetimepicker.d.ts +16 -16
  121. package/types/cmat-components-navigation.d.ts +16 -8
  122. package/types/cmat-components-opt-input.d.ts +11 -8
  123. package/types/cmat-components-pagination.d.ts +5 -4
  124. package/types/cmat-components-password-strength.d.ts +1 -2
  125. package/types/cmat-components-popover.d.ts +3 -4
  126. package/types/cmat-components-progress-bar.d.ts +6 -7
  127. package/types/cmat-components-rating.d.ts +6 -7
  128. package/types/cmat-components-select-search.d.ts +2 -2
  129. package/types/cmat-components-select-table.d.ts +7 -8
  130. package/types/cmat-components-select-tree.d.ts +10 -11
  131. package/types/cmat-components-speed-dial.d.ts +6 -3
  132. package/types/cmat-components-toast.d.ts +13 -4
  133. package/types/cmat-components-transfer-picker.d.ts +21 -11
  134. package/types/cmat-components-treetable.d.ts +3 -4
  135. package/types/cmat-components-upload.d.ts +5 -7
  136. package/types/cmat-directives-arrow-cursor.d.ts +9 -4
  137. package/types/cmat.d.ts +160 -122
@@ -2,7 +2,7 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import * as i1 from '@angular/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { inject, DOCUMENT, DestroyRef, Input, Output, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
5
+ import { EventEmitter, inject, DOCUMENT, DestroyRef, Input, Output, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import * as i2 from '@angular/forms';
8
8
  import { NgControl, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';
@@ -35,33 +35,25 @@ class KeyboardUtil {
35
35
  }
36
36
  }
37
37
 
38
- class ObjectUtil {
39
- static keys(obj) {
40
- if (!obj)
41
- return [];
42
- return Object.keys(obj);
43
- }
44
- }
45
-
46
38
  /* eslint-disable @angular-eslint/no-output-on-prefix */
47
39
  /* eslint-disable @typescript-eslint/member-ordering */
48
- let NEXT_ID = 0;
40
+ let NEXT_ID = 1;
49
41
  class CmatOtpInputComponent {
50
42
  constructor() {
51
- this.id = `cmat-otp-input-${NEXT_ID++}`;
52
- this.onBlur = new Subject();
53
- this.onInputChange = new Subject();
43
+ this.id = `cmat-otp-input-${NEXT_ID}`;
44
+ this.onBlur = new EventEmitter();
45
+ this.onInputChange = new EventEmitter();
54
46
  this.config = { length: 4 };
55
- this.componentKey = Math.random()
56
- .toString(36)
57
- .substring(2) + new Date().getTime().toString(36);
47
+ this.componentKey = (NEXT_ID++).toString(36);
58
48
  this.stateChanges = new Subject();
59
49
  this.focused = false;
60
50
  this.ngControl = inject(NgControl, { optional: true, self: true });
61
51
  this._document = inject(DOCUMENT);
62
52
  this._formBuilder = inject(FormBuilder);
63
53
  this._destroyRef = inject(DestroyRef);
54
+ this._valueChangesSub = null;
64
55
  this._activeFocusCount = 0;
56
+ this._pendingTimeouts = [];
65
57
  this._placeholder = '';
66
58
  this._required = false;
67
59
  this._disabled = false;
@@ -81,7 +73,7 @@ class CmatOtpInputComponent {
81
73
  ? 'tel'
82
74
  : 'text';
83
75
  }
84
- get controlKeys() { return ObjectUtil.keys(this.otpForm?.controls); }
76
+ get controlKeys() { return Object.keys(this.otpForm?.controls ?? {}); }
85
77
  ;
86
78
  get errorState() {
87
79
  if (this.ngControl == null)
@@ -90,14 +82,16 @@ class CmatOtpInputComponent {
90
82
  }
91
83
  ngOnChanges(changes) {
92
84
  if (changes.config) {
93
- if (this.config.length !== ((this.otpForm?.controls).length ?? 0)) {
85
+ if (this.config.length !== Object.keys(this.otpForm?.controls ?? {}).length) {
86
+ this._valueChangesSub?.unsubscribe();
87
+ this._valueChangesSub = null;
94
88
  this.otpForm = this._formBuilder.group({});
95
89
  for (let index = 0; index < this.config.length; index++) {
96
90
  this.otpForm.addControl(this._getControlName(index), new FormControl());
97
91
  }
98
- this.otpForm.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
99
- ObjectUtil.keys(this.otpForm.controls).forEach((k) => {
100
- var val = this.otpForm.controls[k].value;
92
+ this._valueChangesSub = this.otpForm.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
93
+ Object.keys(this.otpForm.controls).forEach((k) => {
94
+ const val = this.otpForm.controls[k].value;
101
95
  if (val && val.length > 1) {
102
96
  if (val.length >= this.config.length) {
103
97
  this.setValue(val);
@@ -142,7 +136,8 @@ class CmatOtpInputComponent {
142
136
  }
143
137
  }
144
138
  onFocusOut() {
145
- setTimeout(() => {
139
+ const timeoutId = setTimeout(() => {
140
+ this._removePendingTimeout(timeoutId);
146
141
  this._activeFocusCount--;
147
142
  if (this._activeFocusCount === 0) {
148
143
  this.focused = false;
@@ -151,6 +146,7 @@ class CmatOtpInputComponent {
151
146
  this.stateChanges.next();
152
147
  }
153
148
  }, 0);
149
+ this._pendingTimeouts.push(timeoutId);
154
150
  }
155
151
  ngAfterViewInit() {
156
152
  if (!this.config.disableAutoFocus) {
@@ -164,7 +160,12 @@ class CmatOtpInputComponent {
164
160
  }
165
161
  }
166
162
  ngOnDestroy() {
163
+ this._pendingTimeouts.forEach(id => clearTimeout(id));
164
+ this._pendingTimeouts = [];
165
+ this._valueChangesSub?.unsubscribe();
166
+ this._valueChangesSub = null;
167
167
  this.stateChanges.complete();
168
+ this.otpForm.reset();
168
169
  }
169
170
  get placeholder() {
170
171
  return this._placeholder;
@@ -226,15 +227,16 @@ class CmatOtpInputComponent {
226
227
  }
227
228
  }
228
229
  onKeyDown($event, inputIdx) {
230
+ const inputTarget = $event.target;
229
231
  const prevInputId = this.getBoxId(inputIdx - 1);
230
232
  const currentInputId = this.getBoxId(inputIdx);
231
233
  const nextInputId = this.getBoxId(inputIdx + 1);
232
234
  if (KeyboardUtil.ifSpacebar($event)) {
233
235
  $event.preventDefault();
234
- return false;
236
+ return;
235
237
  }
236
238
  if (KeyboardUtil.ifBackspace($event)) {
237
- if (!$event.target.value) {
239
+ if (!inputTarget.value) {
238
240
  this._clearInput(prevInputId, inputIdx - 1);
239
241
  this._setSelected(prevInputId);
240
242
  }
@@ -245,7 +247,7 @@ class CmatOtpInputComponent {
245
247
  return;
246
248
  }
247
249
  if (KeyboardUtil.ifDelete($event)) {
248
- if (!$event.target.value) {
250
+ if (!inputTarget.value) {
249
251
  this._clearInput(prevInputId, inputIdx - 1);
250
252
  this._setSelected(prevInputId);
251
253
  }
@@ -256,8 +258,8 @@ class CmatOtpInputComponent {
256
258
  return;
257
259
  }
258
260
  if (this.ifValidKeyCode($event)) {
259
- $event.target.value = $event.key;
260
- let ctrlName = this._getControlName(inputIdx);
261
+ inputTarget.value = $event.key;
262
+ const ctrlName = this._getControlName(inputIdx);
261
263
  this.otpForm.controls[ctrlName]?.setValue($event.key);
262
264
  $event.preventDefault();
263
265
  this._setSelected(nextInputId);
@@ -265,12 +267,13 @@ class CmatOtpInputComponent {
265
267
  }
266
268
  }
267
269
  onInput($event, inputIdx) {
268
- let newVal = this.currentVal ? `${this.currentVal}${$event.target.value}` : $event.target.value;
270
+ const inputTarget = $event.target;
271
+ const newVal = this.currentVal ? `${this.currentVal}${inputTarget.value}` : inputTarget.value;
269
272
  if (this.config.allowNumbersOnly && !this.validateNumber(newVal)) {
270
- $event.target.value = null;
273
+ inputTarget.value = '';
271
274
  $event.stopPropagation();
272
- $event.preventDefault();
273
275
  this._clearInput(null, inputIdx);
276
+ this._rebuildValue();
274
277
  }
275
278
  }
276
279
  onKeyUp($event, inputIdx) {
@@ -289,12 +292,12 @@ class CmatOtpInputComponent {
289
292
  this._setSelected(prevInputId);
290
293
  return;
291
294
  }
292
- if (!$event.target.value) {
295
+ if (!$event.target?.value) {
293
296
  return;
294
297
  }
295
298
  }
296
299
  validateNumber(val) {
297
- return val && /^[0-9]+$/.test(val);
300
+ return !!val && /^[0-9]+$/.test(val);
298
301
  }
299
302
  getBoxId(idx) {
300
303
  return `otp_${idx}_${this.componentKey}`;
@@ -321,23 +324,30 @@ class CmatOtpInputComponent {
321
324
  }
322
325
  });
323
326
  if (!this.config.disableAutoFocus) {
324
- setTimeout(() => {
327
+ const outerTimeoutId = setTimeout(() => {
328
+ this._removePendingTimeout(outerTimeoutId);
325
329
  const containerItem = this._document.getElementById(`c_${this.componentKey}`);
326
- var indexOfElementToFocus = value.length < this.config.length ? value.length : (this.config.length - 1);
327
- let ele = containerItem.getElementsByClassName('cmat-otp-input')[indexOfElementToFocus];
328
- if (ele?.focus) {
329
- setTimeout(() => {
330
+ if (!containerItem)
331
+ return;
332
+ const indexOfElementToFocus = value.length < this.config.length ? value.length : (this.config.length - 1);
333
+ const ele = containerItem.getElementsByClassName('cmat-otp-input')[indexOfElementToFocus];
334
+ if (ele) {
335
+ const innerTimeoutId = setTimeout(() => {
336
+ this._removePendingTimeout(innerTimeoutId);
330
337
  ele.focus();
331
338
  }, 1);
339
+ this._pendingTimeouts.push(innerTimeoutId);
332
340
  }
333
341
  }, 0);
342
+ this._pendingTimeouts.push(outerTimeoutId);
334
343
  }
335
344
  this._rebuildValue();
336
345
  }
337
346
  handlePaste(e) {
338
- let clipboardData = e.clipboardData ?? window['clipboardData'];
347
+ const clipboardData = e.clipboardData ?? window.clipboardData;
348
+ let pastedData = '';
339
349
  if (clipboardData) {
340
- var pastedData = clipboardData.getData('Text');
350
+ pastedData = clipboardData.getData('Text');
341
351
  }
342
352
  e.stopPropagation();
343
353
  e.preventDefault();
@@ -349,11 +359,17 @@ class CmatOtpInputComponent {
349
359
  getFormControl(key) {
350
360
  return this.otpForm.controls[key];
351
361
  }
362
+ _removePendingTimeout(timeoutId) {
363
+ const idx = this._pendingTimeouts.indexOf(timeoutId);
364
+ if (idx !== -1) {
365
+ this._pendingTimeouts.splice(idx, 1);
366
+ }
367
+ }
352
368
  _getControlName(idx) {
353
369
  return `ctrl_${idx}`;
354
370
  }
355
371
  _clearInput(eleId, inputIdx) {
356
- let ctrlName = this._getControlName(inputIdx);
372
+ const ctrlName = this._getControlName(inputIdx);
357
373
  this.otpForm.controls[ctrlName]?.setValue(null);
358
374
  if (eleId) {
359
375
  const ele = this._document.getElementById(eleId);
@@ -365,10 +381,12 @@ class CmatOtpInputComponent {
365
381
  _setSelected(eleId) {
366
382
  this.focusTo(eleId);
367
383
  const ele = this._document.getElementById(eleId);
368
- if (ele?.setSelectionRange) {
369
- setTimeout(() => {
384
+ if (ele instanceof HTMLInputElement) {
385
+ const timeoutId = setTimeout(() => {
386
+ this._removePendingTimeout(timeoutId);
370
387
  ele.setSelectionRange(0, 1);
371
388
  }, 0);
389
+ this._pendingTimeouts.push(timeoutId);
372
390
  }
373
391
  }
374
392
  ifValidKeyCode(event) {
@@ -377,47 +395,39 @@ class CmatOtpInputComponent {
377
395
  return this.validateNumber(inp);
378
396
  }
379
397
  const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
380
- return isMobile ||
381
- (/^[a-zA-Z0-9%*_\-@#$!]$/.test(inp) && inp.length == 1);
398
+ return isMobile || (/^[a-zA-Z0-9%*_\-@#$!]$/.test(inp) && inp.length === 1);
382
399
  }
383
400
  _rebuildValue() {
384
401
  let val = null;
385
- ObjectUtil.keys(this.otpForm.controls).forEach((k) => {
402
+ Object.keys(this.otpForm.controls).forEach((k) => {
386
403
  let ctrlVal = this.otpForm.controls[k].value;
387
404
  if (ctrlVal) {
388
- let isLengthExceed = ctrlVal.length > 1;
389
- let isCaseTransformEnabled = !this.config.allowNumbersOnly && this.config.letterCase && (this.config.letterCase.toLocaleLowerCase() == 'upper' || this.config.letterCase.toLocaleLowerCase() == 'lower');
405
+ const isLengthExceed = ctrlVal.length > 1;
390
406
  ctrlVal = ctrlVal[0];
391
- let transformedVal = isCaseTransformEnabled ? this.config.letterCase?.toLocaleLowerCase() == 'upper' ? ctrlVal.toUpperCase() : ctrlVal.toLowerCase() : ctrlVal;
392
- if (isCaseTransformEnabled && transformedVal == ctrlVal) {
393
- isCaseTransformEnabled = false;
394
- }
395
- else {
396
- ctrlVal = transformedVal;
397
- }
398
- if (val == null) {
399
- val = ctrlVal;
400
- }
401
- else {
402
- val += ctrlVal;
407
+ const letterCase = this.config.letterCase?.toLocaleLowerCase();
408
+ const isCaseTransformEnabled = !this.config.allowNumbersOnly && (letterCase === 'upper' || letterCase === 'lower');
409
+ if (isCaseTransformEnabled) {
410
+ ctrlVal = letterCase === 'upper' ? ctrlVal.toUpperCase() : ctrlVal.toLowerCase();
411
+ this.otpForm.controls[k].setValue(ctrlVal);
403
412
  }
404
- if (isLengthExceed || isCaseTransformEnabled) {
413
+ else if (isLengthExceed) {
405
414
  this.otpForm.controls[k].setValue(ctrlVal);
406
415
  }
416
+ val = val === null ? ctrlVal : val + ctrlVal;
407
417
  }
408
418
  });
409
419
  if (this.currentVal != val) {
410
420
  this.currentVal = val;
411
421
  this._onModelChange(val);
412
- this.onInputChange.next(val);
422
+ this.onInputChange.emit(val);
413
423
  }
414
424
  }
415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatOtpInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
416
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CmatOtpInputComponent, isStandalone: true, selector: "cmat-otp-input", inputs: { id: "id", config: "config", placeholder: "placeholder", value: "value", required: "required", disabled: "disabled" }, outputs: { onBlur: "onBlur", onInputChange: "onInputChange" }, host: { properties: { "attr.id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }], exportAs: ["cmatOtpInput"], usesOnChanges: true, ngImport: i0, template: "@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track $index) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".cmat-otp-input{width:50px;height:50px;border-radius:4px;border:solid 1px;border-color:rgba(var(--cmat-text-hint-rgb),.5);text-align:center;font-size:32px}.cmat-otp-input:focus{background-color:var(--cmat-divider);border:solid 2px var(--cmat-primary)}.cmat-otp-input-wrapper .cmat-otp-input{margin:0 .51rem}.cmat-otp-input-wrapper .cmat-otp-input:first-child{margin-left:0}.cmat-otp-input-wrapper .cmat-otp-input:last-child{margin-right:0}.n-o-c{display:flex;align-items:center}.error-input{border-color:var(--cmat-warn)}@media screen and (max-width:767px){.cmat-otp-input{width:40px;font-size:24px;height:40px}}@media screen and (max-width:420px){.cmat-otp-input{width:30px;font-size:18px;height:30px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
425
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatOtpInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
426
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatOtpInputComponent, isStandalone: true, selector: "cmat-otp-input", inputs: { id: "id", config: "config", placeholder: "placeholder", value: "value", required: "required", disabled: "disabled" }, outputs: { onBlur: "onBlur", onInputChange: "onInputChange" }, host: { properties: { "attr.id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }], exportAs: ["cmatOtpInput"], usesOnChanges: true, ngImport: i0, template: "@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track item) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".cmat-otp-input{width:50px;height:50px;border-radius:4px;border:solid 1px;border-color:rgba(var(--cmat-text-hint-rgb),.5);text-align:center;font-size:32px}.cmat-otp-input:focus{background-color:var(--cmat-divider);border:solid 2px var(--cmat-primary)}.cmat-otp-input-wrapper .cmat-otp-input{margin:0 .51rem}.cmat-otp-input-wrapper .cmat-otp-input:first-child{margin-left:0}.cmat-otp-input-wrapper .cmat-otp-input:last-child{margin-right:0}.n-o-c{display:flex;align-items:center}.error-input{border-color:var(--cmat-warn)}@media screen and (max-width:767px){.cmat-otp-input{width:40px;font-size:24px;height:40px}}@media screen and (max-width:420px){.cmat-otp-input{width:30px;font-size:18px;height:30px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
417
427
  }
418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatOtpInputComponent, decorators: [{
428
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatOtpInputComponent, decorators: [{
419
429
  type: Component,
420
- args: [{ selector: 'cmat-otp-input', exportAs: 'cmatOtpInput', imports: [CommonModule, ReactiveFormsModule], providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track $index) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".cmat-otp-input{width:50px;height:50px;border-radius:4px;border:solid 1px;border-color:rgba(var(--cmat-text-hint-rgb),.5);text-align:center;font-size:32px}.cmat-otp-input:focus{background-color:var(--cmat-divider);border:solid 2px var(--cmat-primary)}.cmat-otp-input-wrapper .cmat-otp-input{margin:0 .51rem}.cmat-otp-input-wrapper .cmat-otp-input:first-child{margin-left:0}.cmat-otp-input-wrapper .cmat-otp-input:last-child{margin-right:0}.n-o-c{display:flex;align-items:center}.error-input{border-color:var(--cmat-warn)}@media screen and (max-width:767px){.cmat-otp-input{width:40px;font-size:24px;height:40px}}@media screen and (max-width:420px){.cmat-otp-input{width:30px;font-size:18px;height:30px}}\n"] }]
430
+ args: [{ selector: 'cmat-otp-input', exportAs: 'cmatOtpInput', imports: [CommonModule, ReactiveFormsModule], providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track item) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}", styles: [".cmat-otp-input{width:50px;height:50px;border-radius:4px;border:solid 1px;border-color:rgba(var(--cmat-text-hint-rgb),.5);text-align:center;font-size:32px}.cmat-otp-input:focus{background-color:var(--cmat-divider);border:solid 2px var(--cmat-primary)}.cmat-otp-input-wrapper .cmat-otp-input{margin:0 .51rem}.cmat-otp-input-wrapper .cmat-otp-input:first-child{margin-left:0}.cmat-otp-input-wrapper .cmat-otp-input:last-child{margin-right:0}.n-o-c{display:flex;align-items:center}.error-input{border-color:var(--cmat-warn)}@media screen and (max-width:767px){.cmat-otp-input{width:40px;font-size:24px;height:40px}}@media screen and (max-width:420px){.cmat-otp-input{width:30px;font-size:18px;height:30px}}\n"] }]
421
431
  }], ctorParameters: () => [], propDecorators: { id: [{
422
432
  type: HostBinding,
423
433
  args: ['attr.id']
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-opt-input.mjs","sources":["../../../projects/cmat/components/opt-input/utils/keyboard-util.ts","../../../projects/cmat/components/opt-input/utils/object-util.ts","../../../projects/cmat/components/opt-input/otp-input.component.ts","../../../projects/cmat/components/opt-input/otp-input.component.html","../../../projects/cmat/components/opt-input/cmat-components-opt-input.ts"],"sourcesContent":["export class KeyboardUtil {\r\n static ifTab(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Tab');\r\n }\r\n static ifDelete(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Delete;Del');\r\n }\r\n static ifBackspace(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Backspace');\r\n }\r\n static ifRightArrow(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'ArrowRight;Right')\r\n }\r\n static ifLeftArrow(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'ArrowLeft;Left')\r\n }\r\n static ifSpacebar(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Spacebar; ')//don't remove the space after ; as this will check for space key\r\n }\r\n static ifKey(event: KeyboardEvent, keys: string): boolean {\r\n let keysToCheck = keys.split(';');\r\n return keysToCheck.some(k => k === event.key);\r\n }\r\n}\r\n","export class ObjectUtil{\r\n static keys(obj:any):string[]{\r\n if(!obj) return [];\r\n return Object.keys(obj);\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-output-on-prefix */\r\n/* eslint-disable @typescript-eslint/member-ordering */\r\nimport { coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, AfterViewInit, OnDestroy, OnChanges, SimpleChanges, ChangeDetectionStrategy, ViewEncapsulation, HostBinding, DOCUMENT, inject, DestroyRef } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule, ControlValueAccessor, FormBuilder, UntypedFormGroup, NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { isNil } from 'lodash';\r\nimport { Subject } from 'rxjs';\r\nimport { OptInputConfig } from './models/config';\r\nimport { KeyboardUtil } from './utils/keyboard-util';\r\nimport { ObjectUtil } from './utils/object-util';\r\n\r\nlet NEXT_ID = 0;\r\n\r\n@Component({\r\n selector: 'cmat-otp-input',\r\n templateUrl: './otp-input.component.html',\r\n styleUrls: ['./otp-input.component.scss'],\r\n exportAs: 'cmatOtpInput',\r\n imports: [CommonModule, ReactiveFormsModule],\r\n providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CmatOtpInputComponent implements MatFormFieldControl<any>, AfterViewInit, OnDestroy, OnChanges, ControlValueAccessor {\r\n @HostBinding('attr.id')\r\n @Input()\r\n public id = `cmat-otp-input-${NEXT_ID++}`;\r\n\r\n @Output() onBlur = new Subject<void>();\r\n @Output() onInputChange = new Subject<string | null>();\r\n @Input() config: OptInputConfig = { length: 4 };\r\n\r\n otpForm: UntypedFormGroup;\r\n currentVal: string | null;\r\n\r\n componentKey = Math.random()\r\n .toString(36)\r\n .substring(2) + new Date().getTime().toString(36);\r\n\r\n readonly stateChanges: Subject<void> = new Subject<void>();\r\n focused: boolean = false;\r\n\r\n ngControl = inject(NgControl, { optional: true, self: true })!;\r\n private _document = inject<Document>(DOCUMENT);\r\n private _formBuilder = inject(FormBuilder);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _activeFocusCount = 0;\r\n\r\n constructor() {\r\n this.otpForm = this._formBuilder.group({});\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n get inputType(): string {\r\n return this.config?.isPasswordInput\r\n ? 'password'\r\n : this.config?.allowNumbersOnly\r\n ? 'tel'\r\n : 'text';\r\n }\r\n get controlKeys(): string[] { return ObjectUtil.keys(this.otpForm?.controls) };\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl == null)\r\n return false;\r\n\r\n return (this.ngControl.invalid && ((this.ngControl.dirty ?? false) || this.ngControl.touched)) ?? false;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.config) {\r\n if (this.config.length !== ((this.otpForm?.controls as any).length ?? 0)) {\r\n this.otpForm = this._formBuilder.group({});\r\n for (let index = 0; index < this.config.length; index++) {\r\n this.otpForm.addControl(this._getControlName(index), new FormControl());\r\n }\r\n this.otpForm.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n ObjectUtil.keys(this.otpForm.controls).forEach((k) => {\r\n var val = this.otpForm.controls[k].value;\r\n if (val && val.length > 1) {\r\n if (val.length >= this.config.length) {\r\n this.setValue(val);\r\n } else {\r\n this._rebuildValue();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.otpForm) {\r\n if (isDisabled) {\r\n this.otpForm.disable({ emitEvent: false });\r\n } else {\r\n this.otpForm.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n writeValue(value: string): void {\r\n this.currentVal = value || null;\r\n if (this.otpForm && this.currentVal) {\r\n this.setValue(this.currentVal);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onTouchedChange = fn;\r\n }\r\n\r\n onFocusIn(): void {\r\n this._onTouchedChange();\r\n this._activeFocusCount++;\r\n\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(): void {\r\n setTimeout(() => {\r\n this._activeFocusCount--;\r\n if (this._activeFocusCount === 0) {\r\n this.focused = false;\r\n this._onTouchedChange();\r\n this.onBlur.next();\r\n this.stateChanges.next();\r\n }\r\n }, 0);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.config.disableAutoFocus) {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n if (containerItem) {\r\n const ele: any = containerItem.getElementsByClassName('cmat-otp-input')[0];\r\n if (ele?.focus) {\r\n ele.focus();\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @Input()\r\n get value(): any {\r\n return this._value;\r\n }\r\n set value(value: any) {\r\n if (value !== this.value) {\r\n this._value = value;\r\n\r\n this.stateChanges.next();\r\n\r\n this._onModelChange(value);\r\n }\r\n }\r\n protected _value: any;\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: any) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n protected _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (!isNil(this.ngControl?.disabled)) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n this.setDisabledState(this._disabled);\r\n\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n protected _disabled = false;\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n\r\n if (containerItem) {\r\n if (ids.length) {\r\n containerItem.setAttribute('aria-describedby', ids.join(' '));\r\n } else {\r\n containerItem.removeAttribute('aria-describedby');\r\n }\r\n }\r\n }\r\n\r\n onContainerClick(): void {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n\r\n if (!this.focused && containerItem) {\r\n containerItem.focus();\r\n }\r\n }\r\n\r\n onKeyDown($event: any, inputIdx: number): any {\r\n const prevInputId = this.getBoxId(inputIdx - 1);\r\n const currentInputId = this.getBoxId(inputIdx);\r\n const nextInputId = this.getBoxId(inputIdx + 1);\r\n if (KeyboardUtil.ifSpacebar($event)) {\r\n $event.preventDefault();\r\n return false;\r\n }\r\n if (KeyboardUtil.ifBackspace($event)) {\r\n if (!$event.target.value) {\r\n this._clearInput(prevInputId, inputIdx - 1);\r\n this._setSelected(prevInputId);\r\n } else {\r\n this._clearInput(currentInputId, inputIdx);\r\n }\r\n this._rebuildValue();\r\n return;\r\n }\r\n if (KeyboardUtil.ifDelete($event)) {\r\n if (!$event.target.value) {\r\n this._clearInput(prevInputId, inputIdx - 1);\r\n this._setSelected(prevInputId);\r\n } else {\r\n this._clearInput(currentInputId, inputIdx);\r\n }\r\n this._rebuildValue();\r\n return;\r\n }\r\n if (this.ifValidKeyCode($event)) {\r\n $event.target.value = $event.key;\r\n let ctrlName = this._getControlName(inputIdx);\r\n this.otpForm.controls[ctrlName]?.setValue($event.key);\r\n $event.preventDefault();\r\n this._setSelected(nextInputId);\r\n this._rebuildValue();\r\n }\r\n }\r\n onInput($event: any, inputIdx: number): void {\r\n let newVal = this.currentVal ? `${this.currentVal}${$event.target.value}` : $event.target.value;\r\n if (this.config.allowNumbersOnly && !this.validateNumber(newVal)) {\r\n $event.target.value = null;\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n this._clearInput(null, inputIdx);\r\n }\r\n }\r\n\r\n\r\n onKeyUp($event: any, inputIdx: number): void {\r\n if (KeyboardUtil.ifTab($event)) {\r\n inputIdx -= 1;\r\n }\r\n const nextInputId = this.getBoxId(inputIdx + 1);\r\n const prevInputId = this.getBoxId(inputIdx - 1);\r\n if (KeyboardUtil.ifRightArrow($event)) {\r\n $event.preventDefault();\r\n this._setSelected(nextInputId);\r\n return;\r\n }\r\n if (KeyboardUtil.ifLeftArrow($event)) {\r\n $event.preventDefault();\r\n this._setSelected(prevInputId);\r\n return;\r\n }\r\n\r\n if (!$event.target.value) {\r\n return;\r\n }\r\n }\r\n\r\n validateNumber(val: string): boolean | string {\r\n return val && /^[0-9]+$/.test(val);\r\n }\r\n\r\n getBoxId(idx: string | number): string {\r\n return `otp_${idx}_${this.componentKey}`;\r\n }\r\n\r\n focusTo(eleId: string): void {\r\n const ele: any = this._document.getElementById(eleId);\r\n if (ele) {\r\n ele.focus();\r\n }\r\n }\r\n\r\n setValue(value: any): void {\r\n if (this.config.allowNumbersOnly && isNaN(value)) {\r\n return;\r\n }\r\n this.otpForm.reset();\r\n if (!value) {\r\n this._rebuildValue();\r\n return;\r\n }\r\n value = value.toString().replace(/\\s/g, ''); // remove whitespace\r\n Array.from(value).forEach((c, idx) => {\r\n if (this.otpForm.get(this._getControlName(idx))) {\r\n this.otpForm.get(this._getControlName(idx))!.setValue(c);\r\n }\r\n });\r\n if (!this.config.disableAutoFocus) {\r\n setTimeout(() => {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n var indexOfElementToFocus = value.length < this.config.length ? value.length : (this.config.length - 1);\r\n let ele: any = containerItem!.getElementsByClassName('cmat-otp-input')[indexOfElementToFocus];\r\n if (ele?.focus) {\r\n setTimeout(() => {\r\n ele.focus();\r\n }, 1);\r\n }\r\n }, 0);\r\n\r\n }\r\n this._rebuildValue();\r\n }\r\n\r\n handlePaste(e: any): void {\r\n let clipboardData = e.clipboardData ?? (window as any)['clipboardData'];\r\n if (clipboardData) {\r\n var pastedData = clipboardData.getData('Text');\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (!pastedData || (this.config.allowNumbersOnly && !this.validateNumber(pastedData))) {\r\n return;\r\n }\r\n this.setValue(pastedData);\r\n }\r\n\r\n getFormControl(key: string): FormControl {\r\n return this.otpForm.controls[key] as FormControl;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onModelChange: (value: any) => void = () => { };\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onTouchedChange: () => any = () => { };\r\n\r\n private _getControlName(idx: number): string {\r\n return `ctrl_${idx}`;\r\n }\r\n\r\n private _clearInput(eleId: string | null, inputIdx: number): void {\r\n let ctrlName = this._getControlName(inputIdx);\r\n this.otpForm.controls[ctrlName]?.setValue(null);\r\n if (eleId) {\r\n const ele = this._document.getElementById(eleId);\r\n if (ele && ele instanceof HTMLInputElement) {\r\n ele.value = '';\r\n }\r\n }\r\n }\r\n\r\n private _setSelected(eleId: string): void {\r\n this.focusTo(eleId);\r\n const ele: any = this._document.getElementById(eleId);\r\n if (ele?.setSelectionRange) {\r\n setTimeout(() => {\r\n ele.setSelectionRange(0, 1);\r\n }, 0);\r\n }\r\n }\r\n\r\n private ifValidKeyCode(event: any): boolean | string {\r\n const inp = event.key;\r\n if (this.config?.allowNumbersOnly) {\r\n return this.validateNumber(inp);\r\n }\r\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n return isMobile ||\r\n (/^[a-zA-Z0-9%*_\\-@#$!]$/.test(inp) && inp.length == 1);\r\n }\r\n\r\n\r\n private _rebuildValue(): void {\r\n let val: string | null = null;\r\n ObjectUtil.keys(this.otpForm.controls).forEach((k) => {\r\n let ctrlVal = this.otpForm.controls[k].value;\r\n if (ctrlVal) {\r\n let isLengthExceed = ctrlVal.length > 1;\r\n let isCaseTransformEnabled = !this.config.allowNumbersOnly && this.config.letterCase && (this.config.letterCase.toLocaleLowerCase() == 'upper' || this.config.letterCase.toLocaleLowerCase() == 'lower');\r\n ctrlVal = ctrlVal[0];\r\n let transformedVal = isCaseTransformEnabled ? this.config.letterCase?.toLocaleLowerCase() == 'upper' ? ctrlVal.toUpperCase() : ctrlVal.toLowerCase() : ctrlVal;\r\n if (isCaseTransformEnabled && transformedVal == ctrlVal) {\r\n isCaseTransformEnabled = false;\r\n } else {\r\n ctrlVal = transformedVal;\r\n }\r\n if (val == null) {\r\n val = ctrlVal;\r\n } else {\r\n val += ctrlVal;\r\n }\r\n if (isLengthExceed || isCaseTransformEnabled) {\r\n this.otpForm.controls[k].setValue(ctrlVal);\r\n }\r\n }\r\n });\r\n if (this.currentVal != val) {\r\n this.currentVal = val;\r\n this._onModelChange(val);\r\n\r\n this.onInputChange.next(val);\r\n }\r\n }\r\n}\r\n\r\n","@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track $index) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmat-components-opt-input.mjs","sources":["../../../projects/cmat/components/opt-input/utils/keyboard-util.ts","../../../projects/cmat/components/opt-input/otp-input.component.ts","../../../projects/cmat/components/opt-input/otp-input.component.html","../../../projects/cmat/components/opt-input/cmat-components-opt-input.ts"],"sourcesContent":["export class KeyboardUtil {\r\n static ifTab(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Tab');\r\n }\r\n static ifDelete(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Delete;Del');\r\n }\r\n static ifBackspace(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Backspace');\r\n }\r\n static ifRightArrow(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'ArrowRight;Right')\r\n }\r\n static ifLeftArrow(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'ArrowLeft;Left')\r\n }\r\n static ifSpacebar(event: KeyboardEvent): boolean {\r\n return this.ifKey(event, 'Spacebar; ')//don't remove the space after ; as this will check for space key\r\n }\r\n static ifKey(event: KeyboardEvent, keys: string): boolean {\r\n let keysToCheck = keys.split(';');\r\n return keysToCheck.some(k => k === event.key);\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-output-on-prefix */\r\n/* eslint-disable @typescript-eslint/member-ordering */\r\nimport { coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, AfterViewInit, OnDestroy, OnChanges, SimpleChanges, ChangeDetectionStrategy, ViewEncapsulation, HostBinding, DOCUMENT, inject, DestroyRef } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule, ControlValueAccessor, FormBuilder, UntypedFormGroup, NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { isNil } from 'lodash';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { OptInputConfig } from './models/config';\r\nimport { KeyboardUtil } from './utils/keyboard-util';\r\n\r\nlet NEXT_ID = 1;\r\n\r\n@Component({\r\n selector: 'cmat-otp-input',\r\n templateUrl: './otp-input.component.html',\r\n styleUrls: ['./otp-input.component.scss'],\r\n exportAs: 'cmatOtpInput',\r\n imports: [CommonModule, ReactiveFormsModule],\r\n providers: [{ provide: MatFormFieldControl, useExisting: CmatOtpInputComponent }],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CmatOtpInputComponent implements MatFormFieldControl<any>, AfterViewInit, OnDestroy, OnChanges, ControlValueAccessor {\r\n @HostBinding('attr.id')\r\n @Input()\r\n public id = `cmat-otp-input-${NEXT_ID}`;\r\n\r\n @Output() onBlur = new EventEmitter<void>();\r\n @Output() onInputChange = new EventEmitter<string | null>();\r\n @Input() config: OptInputConfig = { length: 4 };\r\n\r\n otpForm: UntypedFormGroup;\r\n currentVal: string | null;\r\n\r\n componentKey = (NEXT_ID++).toString(36);\r\n\r\n readonly stateChanges: Subject<void> = new Subject<void>();\r\n focused: boolean = false;\r\n\r\n ngControl = inject(NgControl, { optional: true, self: true })!;\r\n private _document = inject<Document>(DOCUMENT);\r\n private _formBuilder = inject(FormBuilder);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n private _valueChangesSub: Subscription | null = null;\r\n private _activeFocusCount = 0;\r\n private _pendingTimeouts: ReturnType<typeof setTimeout>[] = [];\r\n\r\n constructor() {\r\n this.otpForm = this._formBuilder.group({});\r\n\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n get inputType(): string {\r\n return this.config?.isPasswordInput\r\n ? 'password'\r\n : this.config?.allowNumbersOnly\r\n ? 'tel'\r\n : 'text';\r\n }\r\n get controlKeys(): string[] { return Object.keys(this.otpForm?.controls ?? {}) };\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl == null)\r\n return false;\r\n\r\n return (this.ngControl.invalid && ((this.ngControl.dirty ?? false) || this.ngControl.touched)) ?? false;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.config) {\r\n if (this.config.length !== Object.keys(this.otpForm?.controls ?? {}).length) {\r\n this._valueChangesSub?.unsubscribe();\r\n this._valueChangesSub = null;\r\n this.otpForm = this._formBuilder.group({});\r\n for (let index = 0; index < this.config.length; index++) {\r\n this.otpForm.addControl(this._getControlName(index), new FormControl());\r\n }\r\n this._valueChangesSub = this.otpForm.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\r\n Object.keys(this.otpForm.controls).forEach((k) => {\r\n const val = this.otpForm.controls[k].value;\r\n if (val && val.length > 1) {\r\n if (val.length >= this.config.length) {\r\n this.setValue(val);\r\n } else {\r\n this._rebuildValue();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.otpForm) {\r\n if (isDisabled) {\r\n this.otpForm.disable({ emitEvent: false });\r\n } else {\r\n this.otpForm.enable({ emitEvent: false });\r\n }\r\n }\r\n }\r\n writeValue(value: string): void {\r\n this.currentVal = value || null;\r\n if (this.otpForm && this.currentVal) {\r\n this.setValue(this.currentVal);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onTouchedChange = fn;\r\n }\r\n\r\n onFocusIn(): void {\r\n this._onTouchedChange();\r\n this._activeFocusCount++;\r\n\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(): void {\r\n const timeoutId = setTimeout(() => {\r\n this._removePendingTimeout(timeoutId);\r\n this._activeFocusCount--;\r\n if (this._activeFocusCount === 0) {\r\n this.focused = false;\r\n this._onTouchedChange();\r\n this.onBlur.next();\r\n this.stateChanges.next();\r\n }\r\n }, 0);\r\n this._pendingTimeouts.push(timeoutId);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.config.disableAutoFocus) {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n if (containerItem) {\r\n const ele: any = containerItem.getElementsByClassName('cmat-otp-input')[0];\r\n if (ele?.focus) {\r\n ele.focus();\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._pendingTimeouts.forEach(id => clearTimeout(id));\r\n this._pendingTimeouts = [];\r\n this._valueChangesSub?.unsubscribe();\r\n this._valueChangesSub = null;\r\n this.stateChanges.complete();\r\n this.otpForm.reset();\r\n }\r\n\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @Input()\r\n get value(): any {\r\n return this._value;\r\n }\r\n set value(value: any) {\r\n if (value !== this.value) {\r\n this._value = value;\r\n\r\n this.stateChanges.next();\r\n\r\n this._onModelChange(value);\r\n }\r\n }\r\n protected _value: any;\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: any) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n protected _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (!isNil(this.ngControl?.disabled)) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n this.setDisabledState(this._disabled);\r\n\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n protected _disabled = false;\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n\r\n if (containerItem) {\r\n if (ids.length) {\r\n containerItem.setAttribute('aria-describedby', ids.join(' '));\r\n } else {\r\n containerItem.removeAttribute('aria-describedby');\r\n }\r\n }\r\n }\r\n\r\n onContainerClick(): void {\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n\r\n if (!this.focused && containerItem) {\r\n containerItem.focus();\r\n }\r\n }\r\n\r\n onKeyDown($event: KeyboardEvent, inputIdx: number): void {\r\n const inputTarget = $event.target as HTMLInputElement;\r\n const prevInputId = this.getBoxId(inputIdx - 1);\r\n const currentInputId = this.getBoxId(inputIdx);\r\n const nextInputId = this.getBoxId(inputIdx + 1);\r\n if (KeyboardUtil.ifSpacebar($event)) {\r\n $event.preventDefault();\r\n return;\r\n }\r\n if (KeyboardUtil.ifBackspace($event)) {\r\n if (!inputTarget.value) {\r\n this._clearInput(prevInputId, inputIdx - 1);\r\n this._setSelected(prevInputId);\r\n } else {\r\n this._clearInput(currentInputId, inputIdx);\r\n }\r\n this._rebuildValue();\r\n return;\r\n }\r\n if (KeyboardUtil.ifDelete($event)) {\r\n if (!inputTarget.value) {\r\n this._clearInput(prevInputId, inputIdx - 1);\r\n this._setSelected(prevInputId);\r\n } else {\r\n this._clearInput(currentInputId, inputIdx);\r\n }\r\n this._rebuildValue();\r\n return;\r\n }\r\n if (this.ifValidKeyCode($event)) {\r\n inputTarget.value = $event.key;\r\n const ctrlName = this._getControlName(inputIdx);\r\n this.otpForm.controls[ctrlName]?.setValue($event.key);\r\n $event.preventDefault();\r\n this._setSelected(nextInputId);\r\n this._rebuildValue();\r\n }\r\n }\r\n onInput($event: Event, inputIdx: number): void {\r\n const inputTarget = $event.target as HTMLInputElement;\r\n const newVal = this.currentVal ? `${this.currentVal}${inputTarget.value}` : inputTarget.value;\r\n if (this.config.allowNumbersOnly && !this.validateNumber(newVal)) {\r\n inputTarget.value = '';\r\n $event.stopPropagation();\r\n this._clearInput(null, inputIdx);\r\n this._rebuildValue();\r\n }\r\n }\r\n\r\n\r\n onKeyUp($event: KeyboardEvent, inputIdx: number): void {\r\n if (KeyboardUtil.ifTab($event)) {\r\n inputIdx -= 1;\r\n }\r\n const nextInputId = this.getBoxId(inputIdx + 1);\r\n const prevInputId = this.getBoxId(inputIdx - 1);\r\n if (KeyboardUtil.ifRightArrow($event)) {\r\n $event.preventDefault();\r\n this._setSelected(nextInputId);\r\n return;\r\n }\r\n if (KeyboardUtil.ifLeftArrow($event)) {\r\n $event.preventDefault();\r\n this._setSelected(prevInputId);\r\n return;\r\n }\r\n\r\n if (!($event.target as HTMLInputElement)?.value) {\r\n return;\r\n }\r\n }\r\n\r\n validateNumber(val: string): boolean {\r\n return !!val && /^[0-9]+$/.test(val);\r\n }\r\n\r\n getBoxId(idx: string | number): string {\r\n return `otp_${idx}_${this.componentKey}`;\r\n }\r\n\r\n focusTo(eleId: string): void {\r\n const ele: any = this._document.getElementById(eleId);\r\n if (ele) {\r\n ele.focus();\r\n }\r\n }\r\n\r\n setValue(value: any): void {\r\n if (this.config.allowNumbersOnly && isNaN(value)) {\r\n return;\r\n }\r\n this.otpForm.reset();\r\n if (!value) {\r\n this._rebuildValue();\r\n return;\r\n }\r\n value = value.toString().replace(/\\s/g, ''); // remove whitespace\r\n Array.from(value).forEach((c, idx) => {\r\n if (this.otpForm.get(this._getControlName(idx))) {\r\n this.otpForm.get(this._getControlName(idx))!.setValue(c);\r\n }\r\n });\r\n if (!this.config.disableAutoFocus) {\r\n const outerTimeoutId = setTimeout(() => {\r\n this._removePendingTimeout(outerTimeoutId);\r\n const containerItem = this._document.getElementById(`c_${this.componentKey}`);\r\n if (!containerItem) return;\r\n const indexOfElementToFocus = value.length < this.config.length ? value.length : (this.config.length - 1);\r\n const ele: HTMLElement | null = containerItem.getElementsByClassName('cmat-otp-input')[indexOfElementToFocus] as HTMLElement | null;\r\n if (ele) {\r\n const innerTimeoutId = setTimeout(() => {\r\n this._removePendingTimeout(innerTimeoutId);\r\n ele.focus();\r\n }, 1);\r\n this._pendingTimeouts.push(innerTimeoutId);\r\n }\r\n }, 0);\r\n this._pendingTimeouts.push(outerTimeoutId);\r\n }\r\n this._rebuildValue();\r\n }\r\n\r\n handlePaste(e: ClipboardEvent): void {\r\n const clipboardData = e.clipboardData ?? (window as unknown as { clipboardData?: DataTransfer }).clipboardData;\r\n let pastedData = '';\r\n if (clipboardData) {\r\n pastedData = clipboardData.getData('Text');\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (!pastedData || (this.config.allowNumbersOnly && !this.validateNumber(pastedData))) {\r\n return;\r\n }\r\n this.setValue(pastedData);\r\n }\r\n\r\n getFormControl(key: string): FormControl {\r\n return this.otpForm.controls[key] as FormControl;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onModelChange: (value: any) => void = () => { };\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onTouchedChange: () => any = () => { };\r\n\r\n private _removePendingTimeout(timeoutId: ReturnType<typeof setTimeout>): void {\r\n const idx = this._pendingTimeouts.indexOf(timeoutId);\r\n if (idx !== -1) {\r\n this._pendingTimeouts.splice(idx, 1);\r\n }\r\n }\r\n\r\n private _getControlName(idx: number): string {\r\n return `ctrl_${idx}`;\r\n }\r\n\r\n private _clearInput(eleId: string | null, inputIdx: number): void {\r\n const ctrlName = this._getControlName(inputIdx);\r\n this.otpForm.controls[ctrlName]?.setValue(null);\r\n if (eleId) {\r\n const ele = this._document.getElementById(eleId);\r\n if (ele && ele instanceof HTMLInputElement) {\r\n ele.value = '';\r\n }\r\n }\r\n }\r\n\r\n private _setSelected(eleId: string): void {\r\n this.focusTo(eleId);\r\n const ele = this._document.getElementById(eleId);\r\n if (ele instanceof HTMLInputElement) {\r\n const timeoutId = setTimeout(() => {\r\n this._removePendingTimeout(timeoutId);\r\n ele.setSelectionRange(0, 1);\r\n }, 0);\r\n this._pendingTimeouts.push(timeoutId);\r\n }\r\n }\r\n\r\n private ifValidKeyCode(event: KeyboardEvent): boolean {\r\n const inp = event.key;\r\n if (this.config?.allowNumbersOnly) {\r\n return this.validateNumber(inp);\r\n }\r\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n return isMobile || (/^[a-zA-Z0-9%*_\\-@#$!]$/.test(inp) && inp.length === 1);\r\n }\r\n\r\n\r\n private _rebuildValue(): void {\r\n let val: string | null = null;\r\n Object.keys(this.otpForm.controls).forEach((k) => {\r\n let ctrlVal = this.otpForm.controls[k].value;\r\n if (ctrlVal) {\r\n const isLengthExceed = ctrlVal.length > 1;\r\n ctrlVal = ctrlVal[0];\r\n const letterCase = this.config.letterCase?.toLocaleLowerCase();\r\n const isCaseTransformEnabled = !this.config.allowNumbersOnly && (letterCase === 'upper' || letterCase === 'lower');\r\n if (isCaseTransformEnabled) {\r\n ctrlVal = letterCase === 'upper' ? ctrlVal.toUpperCase() : ctrlVal.toLowerCase();\r\n this.otpForm.controls[k].setValue(ctrlVal);\r\n } else if (isLengthExceed) {\r\n this.otpForm.controls[k].setValue(ctrlVal);\r\n }\r\n val = val === null ? ctrlVal : val + ctrlVal;\r\n }\r\n });\r\n if (this.currentVal != val) {\r\n this.currentVal = val;\r\n this._onModelChange(val);\r\n this.onInputChange.emit(val);\r\n }\r\n }\r\n}","@if(otpForm.controls){\r\n<div class=\"cmat-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\" [ngStyle]=\"config.containerStyles\" (focusin)=\"onFocusIn()\" (focusout)=\"onFocusOut()\">\r\n <div class=\"n-o-c\">\r\n @for (item of controlKeys; track item) {\r\n <input #inp class=\"cmat-otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n [type]=\"inputType\" [placeholder]=\"config.placeholder || ''\"\r\n [ngStyle]=\"config.inputStyles\" [id]=\"getBoxId($index)\"\r\n [ngClass]=\"{'error-input': (config.showError && errorState)}\"\r\n [formControl]=\"getFormControl(item)\" (paste)=\"handlePaste($event)\" (keyup)=\"onKeyUp($event,$index)\"\r\n (input)=\"onInput($event,$index)\" (keydown)=\"onKeyDown($event,$index)\">\r\n @if(config.separator && !$last){\r\n {{config.separator}}\r\n }\r\n }\r\n </div>\r\n</div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -26,10 +26,10 @@ class CmatChartNodeComponent {
26
26
  this.containerClass = `cmat-org-connector-${this.direction} `;
27
27
  }
28
28
  }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatChartNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CmatChartNodeComponent, isStandalone: true, selector: "cmat-org-chart-node", inputs: { node: "node", hasParent: "hasParent", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, exportAs: ["cmatOrgChartNode"], usesOnChanges: true, ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n@if(hasParent){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\" [style.height]=\"connectorToParentHeight\"></div>\r\n}\r\n<div class=\"cmat-org-box cmat-org-border cmat-org-background\" [ngClass]=\"node.cssClass\">\r\n @if(node.image!==''){\r\n <div class=\"cmat-org-image\" [style]=\"{ 'background-image': 'url(\\'' + node.image + '\\')' }\"\r\n [style.border-color]=\"node.color\"></div>\r\n }@else {\r\n <div class=\"text-center\">\r\n <mat-icon class=\"icon-size-16\" [svgIcon]=\"'heroicons_outline:user-circle'\">\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <div class=\"cmat-org-container\">\r\n <div class=\"cmat-org-title\" [innerHTML]=\"node.title\" [style.color]=\"node.color\"></div>\r\n <div class=\"cmat-org-name\" [innerHTML]=\"node.name\"></div>\r\n \r\n @if(node.showDetail){\r\n <div class=\"button-container\">\r\n <button matButton=\"filled\" class=\"cmat-org-btn cmat-org-btn-details\" color=\"primary\"\r\n (click)=\"detailsBtnClick.emit(node)\">\r\n {{ detailsBtnTitle }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n@if(node.children.length){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\"></div>\r\n}\r\n", styles: ["cmat-org-chart-node{display:flex;align-items:center}.cmat-org-box{width:16em;height:16em;box-sizing:border-box;overflow:overlay;position:relative}.cmat-org-container{display:flex;flex-direction:column;align-items:center}.cmat-org-title,.cmat-org-name,.button-container{flex:1}.cmat-org-title{margin-top:.5em}.cmat-org-name{margin:.3em 0}.button-container{display:flex;flex-direction:row;justify-content:center;align-items:center;position:absolute;bottom:1em;width:100%}.cmat-org-image{background-repeat:round;width:4em;height:4em;background-color:transparent!important;border-radius:50%;padding:.25em;border:3px solid var(--cmat-text-hint);margin:4px auto auto}.cmat-org-title{font-size:1.1rem;font-weight:700;text-align:center}.cmat-org-name{text-align:center;margin-bottom:8px!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatChartNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatChartNodeComponent, isStandalone: true, selector: "cmat-org-chart-node", inputs: { node: "node", hasParent: "hasParent", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, exportAs: ["cmatOrgChartNode"], usesOnChanges: true, ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n@if(hasParent){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\" [style.height]=\"connectorToParentHeight\"></div>\r\n}\r\n<div class=\"cmat-org-box cmat-org-border cmat-org-background\" [ngClass]=\"node.cssClass\">\r\n @if(node.image!==''){\r\n <div class=\"cmat-org-image\" [style]=\"{ 'background-image': 'url(\\'' + node.image + '\\')' }\"\r\n [style.border-color]=\"node.color\"></div>\r\n }@else {\r\n <div class=\"text-center\">\r\n <mat-icon class=\"icon-size-16\" [svgIcon]=\"'heroicons_outline:user-circle'\">\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <div class=\"cmat-org-container\">\r\n <div class=\"cmat-org-title\" [innerHTML]=\"node.title\" [style.color]=\"node.color\"></div>\r\n <div class=\"cmat-org-name\" [innerHTML]=\"node.name\"></div>\r\n \r\n @if(node.showDetail){\r\n <div class=\"button-container\">\r\n <button matButton=\"filled\" class=\"cmat-org-btn cmat-org-btn-details\" color=\"primary\"\r\n (click)=\"detailsBtnClick.emit(node)\">\r\n {{ detailsBtnTitle }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n@if(node.children.length){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\"></div>\r\n}\r\n", styles: ["cmat-org-chart-node{display:flex;align-items:center}.cmat-org-box{width:16em;height:16em;box-sizing:border-box;overflow:overlay;position:relative}.cmat-org-container{display:flex;flex-direction:column;align-items:center}.cmat-org-title,.cmat-org-name,.button-container{flex:1}.cmat-org-title{margin-top:.5em}.cmat-org-name{margin:.3em 0}.button-container{display:flex;flex-direction:row;justify-content:center;align-items:center;position:absolute;bottom:1em;width:100%}.cmat-org-image{background-repeat:round;width:4em;height:4em;background-color:transparent!important;border-radius:50%;padding:.25em;border:3px solid var(--cmat-text-hint);margin:4px auto auto}.cmat-org-title{font-size:1.1rem;font-weight:700;text-align:center}.cmat-org-name{text-align:center;margin-bottom:8px!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatChartNodeComponent, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatChartNodeComponent, decorators: [{
33
33
  type: Component,
34
34
  args: [{ selector: 'cmat-org-chart-node', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatOrgChartNode', imports: [NgClass, MatIconModule, MatButtonModule], template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n@if(hasParent){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\" [style.height]=\"connectorToParentHeight\"></div>\r\n}\r\n<div class=\"cmat-org-box cmat-org-border cmat-org-background\" [ngClass]=\"node.cssClass\">\r\n @if(node.image!==''){\r\n <div class=\"cmat-org-image\" [style]=\"{ 'background-image': 'url(\\'' + node.image + '\\')' }\"\r\n [style.border-color]=\"node.color\"></div>\r\n }@else {\r\n <div class=\"text-center\">\r\n <mat-icon class=\"icon-size-16\" [svgIcon]=\"'heroicons_outline:user-circle'\">\r\n </mat-icon>\r\n </div>\r\n }\r\n\r\n <div class=\"cmat-org-container\">\r\n <div class=\"cmat-org-title\" [innerHTML]=\"node.title\" [style.color]=\"node.color\"></div>\r\n <div class=\"cmat-org-name\" [innerHTML]=\"node.name\"></div>\r\n \r\n @if(node.showDetail){\r\n <div class=\"button-container\">\r\n <button matButton=\"filled\" class=\"cmat-org-btn cmat-org-btn-details\" color=\"primary\"\r\n (click)=\"detailsBtnClick.emit(node)\">\r\n {{ detailsBtnTitle }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n@if(node.children.length){\r\n<div class=\"cmat-org-border\" [ngClass]=\"containerClass\"></div>\r\n}\r\n", styles: ["cmat-org-chart-node{display:flex;align-items:center}.cmat-org-box{width:16em;height:16em;box-sizing:border-box;overflow:overlay;position:relative}.cmat-org-container{display:flex;flex-direction:column;align-items:center}.cmat-org-title,.cmat-org-name,.button-container{flex:1}.cmat-org-title{margin-top:.5em}.cmat-org-name{margin:.3em 0}.button-container{display:flex;flex-direction:row;justify-content:center;align-items:center;position:absolute;bottom:1em;width:100%}.cmat-org-image{background-repeat:round;width:4em;height:4em;background-color:transparent!important;border-radius:50%;padding:.25em;border:3px solid var(--cmat-text-hint);margin:4px auto auto}.cmat-org-title{font-size:1.1rem;font-weight:700;text-align:center}.cmat-org-name{text-align:center;margin-bottom:8px!important}\n"] }]
35
35
  }], propDecorators: { node: [{
@@ -63,10 +63,10 @@ class CmatChartDesignerComponent {
63
63
  this.chartNodeClass = `cmat-org-${this.direction}`;
64
64
  }
65
65
  }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatChartDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CmatChartDesignerComponent, isStandalone: true, selector: "cmat-org-chart-designer", inputs: { node: "node", hasParent: "hasParent", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, host: { properties: { "style.flex-direction": "this.hostClass", "style.width": "this.hostWidthClass" } }, exportAs: ["cmatOrgChartDesigner"], usesOnChanges: true, ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<cmat-org-chart-node [class]=\"chartNodeClass\" [node]=\"node\" [hasParent]=\"hasParent\"\r\n [enableControlHeight]=\"enableControlHeight\" [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\"\r\n (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n</cmat-org-chart-node>\r\n\r\n<div class=\"cmat-org-reports-{{ direction }} cmat-org-reports\">\r\n @for (childNode of node.children; track $index) {\r\n <div class=\"cmat-org-org-container cmat-org-org-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector-container cmat-org-connector-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$first ? 'transparent' : ''\"></div>\r\n <div class=\"cmat-org-border\"></div>\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$last ? 'transparent' : ''\"></div>\r\n </div>\r\n <cmat-org-chart-designer [node]=\"childNode\" [hasParent]=\"true\" [enableControlHeight]=\"enableControlHeight\"\r\n [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n </cmat-org-chart-designer>\r\n </div>\r\n }\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n", styles: ["cmat-org-chart-designer{display:flex;align-items:center;flex:1}.cmat-org-vertical{flex-direction:column}.cmat-org-org-container{display:flex}.cmat-org-org-container-vertical{flex-direction:column}.cmat-org-connector{flex:1}.cmat-org-connector-container{display:flex}.cmat-org-connector-container-horizontal{flex-direction:column}.cmat-org-reports{display:flex;flex:1}.cmat-org-reports-horizontal{flex-direction:column}.cmat-org-reports-vertical{width:100%}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => CmatChartDesignerComponent), selector: "cmat-org-chart-designer", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartDesigner"] }, { kind: "component", type: i0.forwardRef(() => CmatChartNodeComponent), selector: "cmat-org-chart-node", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartNode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatChartDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatChartDesignerComponent, isStandalone: true, selector: "cmat-org-chart-designer", inputs: { node: "node", hasParent: "hasParent", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, host: { properties: { "style.flex-direction": "this.hostClass", "style.width": "this.hostWidthClass" } }, exportAs: ["cmatOrgChartDesigner"], usesOnChanges: true, ngImport: i0, template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<cmat-org-chart-node [class]=\"chartNodeClass\" [node]=\"node\" [hasParent]=\"hasParent\"\r\n [enableControlHeight]=\"enableControlHeight\" [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\"\r\n (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n</cmat-org-chart-node>\r\n\r\n<div class=\"cmat-org-reports-{{ direction }} cmat-org-reports\">\r\n @for (childNode of node.children; track $index) {\r\n <div class=\"cmat-org-org-container cmat-org-org-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector-container cmat-org-connector-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$first ? 'transparent' : ''\"></div>\r\n <div class=\"cmat-org-border\"></div>\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$last ? 'transparent' : ''\"></div>\r\n </div>\r\n <cmat-org-chart-designer [node]=\"childNode\" [hasParent]=\"true\" [enableControlHeight]=\"enableControlHeight\"\r\n [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n </cmat-org-chart-designer>\r\n </div>\r\n }\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n", styles: ["cmat-org-chart-designer{display:flex;align-items:center;flex:1}.cmat-org-vertical{flex-direction:column}.cmat-org-org-container{display:flex}.cmat-org-org-container-vertical{flex-direction:column}.cmat-org-connector{flex:1}.cmat-org-connector-container{display:flex}.cmat-org-connector-container-horizontal{flex-direction:column}.cmat-org-reports{display:flex;flex:1}.cmat-org-reports-horizontal{flex-direction:column}.cmat-org-reports-vertical{width:100%}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => CmatChartDesignerComponent), selector: "cmat-org-chart-designer", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartDesigner"] }, { kind: "component", type: i0.forwardRef(() => CmatChartNodeComponent), selector: "cmat-org-chart-node", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartNode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
68
68
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatChartDesignerComponent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatChartDesignerComponent, decorators: [{
70
70
  type: Component,
71
71
  args: [{ selector: 'cmat-org-chart-designer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatOrgChartDesigner', imports: [CmatChartNodeComponent, forwardRef(() => CmatChartDesignerComponent)], template: "<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<cmat-org-chart-node [class]=\"chartNodeClass\" [node]=\"node\" [hasParent]=\"hasParent\"\r\n [enableControlHeight]=\"enableControlHeight\" [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\"\r\n (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n</cmat-org-chart-node>\r\n\r\n<div class=\"cmat-org-reports-{{ direction }} cmat-org-reports\">\r\n @for (childNode of node.children; track $index) {\r\n <div class=\"cmat-org-org-container cmat-org-org-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector-container cmat-org-connector-container-{{ direction }}\">\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$first ? 'transparent' : ''\"></div>\r\n <div class=\"cmat-org-border\"></div>\r\n <div class=\"cmat-org-connector cmat-org-border\" [style.border-color]=\"$last ? 'transparent' : ''\"></div>\r\n </div>\r\n <cmat-org-chart-designer [node]=\"childNode\" [hasParent]=\"true\" [enableControlHeight]=\"enableControlHeight\"\r\n [direction]=\"direction\" [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\">\r\n </cmat-org-chart-designer>\r\n </div>\r\n }\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n</div>\r\n", styles: ["cmat-org-chart-designer{display:flex;align-items:center;flex:1}.cmat-org-vertical{flex-direction:column}.cmat-org-org-container{display:flex}.cmat-org-org-container-vertical{flex-direction:column}.cmat-org-connector{flex:1}.cmat-org-connector-container{display:flex}.cmat-org-connector-container-horizontal{flex-direction:column}.cmat-org-reports{display:flex;flex:1}.cmat-org-reports-horizontal{flex-direction:column}.cmat-org-reports-vertical{width:100%}\n"] }]
72
72
  }], propDecorators: { node: [{
@@ -96,10 +96,10 @@ class CmatOrgChartComponent {
96
96
  this.detailsBtnTitle = '查看详细';
97
97
  this.detailsBtnClick = new EventEmitter();
98
98
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatOrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CmatOrgChartComponent, isStandalone: true, selector: "cmat-org-chart", inputs: { nodes: "nodes", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, exportAs: ["cmatOrgChart"], ngImport: i0, template: "<div class=\"cmat-org\">\r\n @for (node of nodes; track $index) {\r\n <div class=\"cmat-org-self-{{ direction }}\">\r\n <cmat-org-chart-designer [node]=\"node\" [direction]=\"direction\" [enableControlHeight]=\"enableControlHeight\"\r\n [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\"></cmat-org-chart-designer>\r\n </div>\r\n }\r\n</div>", styles: [".cmat-org-horizontal{padding:1em 0}.cmat-org-vertical{padding:0 1em}.cmat-org-border{border:.1em solid var(--cmat-divider);box-sizing:border-box}.cmat-org-box{padding:.5em 1em;border-radius:.2em;box-shadow:0 2px 8px #00000059}.cmat-org-connector-horizontal{width:1em!important;height:0!important}.cmat-org-connector-vertical{width:0!important;height:1em!important}.cmat-org .cmat-org-self-vertical{margin-bottom:2%}\n"], dependencies: [{ kind: "component", type: CmatChartDesignerComponent, selector: "cmat-org-chart-designer", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartDesigner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatOrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatOrgChartComponent, isStandalone: true, selector: "cmat-org-chart", inputs: { nodes: "nodes", enableControlHeight: "enableControlHeight", direction: "direction", detailsBtnTitle: "detailsBtnTitle" }, outputs: { detailsBtnClick: "detailsBtnClick" }, exportAs: ["cmatOrgChart"], ngImport: i0, template: "<div class=\"cmat-org\">\r\n @for (node of nodes; track $index) {\r\n <div class=\"cmat-org-self-{{ direction }}\">\r\n <cmat-org-chart-designer [node]=\"node\" [direction]=\"direction\" [enableControlHeight]=\"enableControlHeight\"\r\n [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\"></cmat-org-chart-designer>\r\n </div>\r\n }\r\n</div>", styles: [".cmat-org-horizontal{padding:1em 0}.cmat-org-vertical{padding:0 1em}.cmat-org-border{border:.1em solid var(--cmat-divider);box-sizing:border-box}.cmat-org-box{padding:.5em 1em;border-radius:.2em;box-shadow:0 2px 8px #00000059}.cmat-org-connector-horizontal{width:1em!important;height:0!important}.cmat-org-connector-vertical{width:0!important;height:1em!important}.cmat-org .cmat-org-self-vertical{margin-bottom:2%}\n"], dependencies: [{ kind: "component", type: CmatChartDesignerComponent, selector: "cmat-org-chart-designer", inputs: ["node", "hasParent", "enableControlHeight", "direction", "detailsBtnTitle"], outputs: ["detailsBtnClick"], exportAs: ["cmatOrgChartDesigner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
101
101
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CmatOrgChartComponent, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatOrgChartComponent, decorators: [{
103
103
  type: Component,
104
104
  args: [{ selector: 'cmat-org-chart', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatOrgChart', imports: [CmatChartDesignerComponent], template: "<div class=\"cmat-org\">\r\n @for (node of nodes; track $index) {\r\n <div class=\"cmat-org-self-{{ direction }}\">\r\n <cmat-org-chart-designer [node]=\"node\" [direction]=\"direction\" [enableControlHeight]=\"enableControlHeight\"\r\n [detailsBtnTitle]=\"detailsBtnTitle\" (detailsBtnClick)=\"detailsBtnClick.emit($event)\"></cmat-org-chart-designer>\r\n </div>\r\n }\r\n</div>", styles: [".cmat-org-horizontal{padding:1em 0}.cmat-org-vertical{padding:0 1em}.cmat-org-border{border:.1em solid var(--cmat-divider);box-sizing:border-box}.cmat-org-box{padding:.5em 1em;border-radius:.2em;box-shadow:0 2px 8px #00000059}.cmat-org-connector-horizontal{width:1em!important;height:0!important}.cmat-org-connector-vertical{width:0!important;height:1em!important}.cmat-org .cmat-org-self-vertical{margin-bottom:2%}\n"] }]
105
105
  }], propDecorators: { nodes: [{