@sdcorejs/angular 21.0.1 → 21.0.4

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 (142) hide show
  1. package/README.md +22 -4
  2. package/assets/scss/core/_inline-edit.scss +105 -0
  3. package/assets/scss/core/form.scss +15 -0
  4. package/fesm2022/sdcorejs-angular-components-anchor.mjs +9 -9
  5. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +111 -24
  6. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  7. package/fesm2022/sdcorejs-angular-components-avatar.mjs +4 -4
  8. package/fesm2022/sdcorejs-angular-components-avatar.mjs.map +1 -1
  9. package/fesm2022/sdcorejs-angular-components-badge.mjs +3 -3
  10. package/fesm2022/sdcorejs-angular-components-base.mjs +3 -3
  11. package/fesm2022/sdcorejs-angular-components-button.mjs +5 -7
  12. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  13. package/fesm2022/sdcorejs-angular-components-chart.mjs +12 -12
  14. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +3 -3
  15. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  16. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +6 -6
  17. package/fesm2022/sdcorejs-angular-components-editor.mjs +3 -3
  18. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +291 -382
  19. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  20. package/fesm2022/sdcorejs-angular-components-history.mjs +7 -7
  21. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +10 -10
  22. package/fesm2022/sdcorejs-angular-components-inform.mjs +6 -6
  23. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +3 -3
  24. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +158 -0
  25. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -0
  26. package/fesm2022/sdcorejs-angular-components-modal.mjs +3 -3
  27. package/fesm2022/sdcorejs-angular-components-operator.mjs +6 -4
  28. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-components-preview.mjs +8 -8
  30. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  31. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +60 -106
  32. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  33. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +671 -59
  34. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  35. package/fesm2022/sdcorejs-angular-components-quick-action.mjs +3 -3
  36. package/fesm2022/sdcorejs-angular-components-section.mjs +7 -9
  37. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  38. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +5 -7
  39. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  40. package/fesm2022/sdcorejs-angular-components-splitter.mjs +12 -12
  41. package/fesm2022/sdcorejs-angular-components-stepper.mjs +7 -9
  42. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  43. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +18 -18
  44. package/fesm2022/sdcorejs-angular-components-tab.mjs +7 -9
  45. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  46. package/fesm2022/sdcorejs-angular-components-table.mjs +336 -211
  47. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  48. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +29 -18
  49. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  50. package/fesm2022/sdcorejs-angular-components-view.mjs +45 -13
  51. package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
  52. package/fesm2022/sdcorejs-angular-components.mjs +1 -0
  53. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  54. package/fesm2022/sdcorejs-angular-directives.mjs +21 -21
  55. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +35 -10
  56. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  57. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +11 -6
  58. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  59. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +15 -10
  60. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  61. package/fesm2022/sdcorejs-angular-forms-chip.mjs +15 -10
  62. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  63. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +21 -12
  64. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  65. package/fesm2022/sdcorejs-angular-forms-date.mjs +29 -17
  66. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  67. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +34 -22
  68. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  69. package/fesm2022/sdcorejs-angular-forms-directives.mjs +12 -12
  70. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs +167 -0
  71. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs.map +1 -0
  72. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +7 -5
  73. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  74. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +44 -11
  75. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  76. package/fesm2022/sdcorejs-angular-forms-input.mjs +38 -12
  77. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  78. package/fesm2022/sdcorejs-angular-forms-label.mjs +3 -3
  79. package/fesm2022/sdcorejs-angular-forms-models.mjs +32 -2
  80. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  81. package/fesm2022/sdcorejs-angular-forms-radio.mjs +11 -6
  82. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  83. package/fesm2022/sdcorejs-angular-forms-select.mjs +36 -12
  84. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  85. package/fesm2022/sdcorejs-angular-forms-switch.mjs +11 -6
  86. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  87. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +17 -7
  88. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  89. package/fesm2022/sdcorejs-angular-forms.mjs +4 -4
  90. package/fesm2022/sdcorejs-angular-handlers.mjs +3 -3
  91. package/fesm2022/sdcorejs-angular-i18n.mjs +26 -6
  92. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-interceptors.mjs +6 -6
  94. package/fesm2022/sdcorejs-angular-modules-auth.mjs +9 -9
  95. package/fesm2022/sdcorejs-angular-modules-authom.mjs +7 -7
  96. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +7 -7
  97. package/fesm2022/sdcorejs-angular-modules-layout.mjs +73 -73
  98. package/fesm2022/sdcorejs-angular-modules-permission.mjs +9 -9
  99. package/fesm2022/sdcorejs-angular-pipes.mjs +14 -14
  100. package/fesm2022/sdcorejs-angular-services-api.mjs +10 -10
  101. package/fesm2022/sdcorejs-angular-services-cache.mjs +3 -3
  102. package/fesm2022/sdcorejs-angular-services-confirm.mjs +6 -6
  103. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-services-docx.mjs +3 -3
  105. package/fesm2022/sdcorejs-angular-services-excel.mjs +3 -3
  106. package/fesm2022/sdcorejs-angular-services-license.mjs +3 -3
  107. package/fesm2022/sdcorejs-angular-services-loading.mjs +3 -3
  108. package/fesm2022/sdcorejs-angular-services-notify.mjs +47 -16
  109. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-services-storage.mjs +3 -3
  111. package/package.json +9 -1
  112. package/types/sdcorejs-angular-components-autoid-inspector.d.ts +53 -4
  113. package/types/sdcorejs-angular-components-button.d.ts +1 -2
  114. package/types/sdcorejs-angular-components-form-generic.d.ts +15 -17
  115. package/types/sdcorejs-angular-components-modal-resizable.d.ts +32 -0
  116. package/types/sdcorejs-angular-components-query-builder.d.ts +247 -23
  117. package/types/sdcorejs-angular-components-section.d.ts +1 -2
  118. package/types/sdcorejs-angular-components-side-drawer.d.ts +1 -2
  119. package/types/sdcorejs-angular-components-stepper.d.ts +1 -2
  120. package/types/sdcorejs-angular-components-tab.d.ts +1 -2
  121. package/types/sdcorejs-angular-components-table.d.ts +100 -12
  122. package/types/sdcorejs-angular-components-upload-file.d.ts +2 -0
  123. package/types/sdcorejs-angular-components-view.d.ts +33 -0
  124. package/types/sdcorejs-angular-components.d.ts +1 -0
  125. package/types/sdcorejs-angular-forms-autocomplete.d.ts +16 -3
  126. package/types/sdcorejs-angular-forms-checkbox.d.ts +5 -1
  127. package/types/sdcorejs-angular-forms-chip-calendar.d.ts +5 -2
  128. package/types/sdcorejs-angular-forms-chip.d.ts +5 -2
  129. package/types/sdcorejs-angular-forms-date-range.d.ts +12 -5
  130. package/types/sdcorejs-angular-forms-date.d.ts +14 -5
  131. package/types/sdcorejs-angular-forms-datetime.d.ts +14 -5
  132. package/types/sdcorejs-angular-forms-inline-text.d.ts +80 -0
  133. package/types/sdcorejs-angular-forms-input-color.d.ts +3 -1
  134. package/types/sdcorejs-angular-forms-input-number.d.ts +14 -2
  135. package/types/sdcorejs-angular-forms-input.d.ts +14 -2
  136. package/types/sdcorejs-angular-forms-models.d.ts +40 -2
  137. package/types/sdcorejs-angular-forms-radio.d.ts +5 -2
  138. package/types/sdcorejs-angular-forms-select.d.ts +23 -5
  139. package/types/sdcorejs-angular-forms-switch.d.ts +5 -2
  140. package/types/sdcorejs-angular-forms-textarea.d.ts +9 -2
  141. package/types/sdcorejs-angular-i18n.d.ts +4 -0
  142. package/types/sdcorejs-angular-services-notify.d.ts +17 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-forms-datetime.mjs","sources":["../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-time-spinner.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-time-spinner.component.html","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-datetime-picker.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-datetime-picker.component.html","../../../projects/sdcorejs-angular/forms/datetime/src/datetime.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/datetime.component.html","../../../projects/sdcorejs-angular/forms/datetime/sdcorejs-angular-forms-datetime.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, booleanAttribute, input, model } from '@angular/core';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n/**\n * Time spinner — UI chọn giờ/phút/(giây) compact, modern.\n *\n * - Format 24h\n * - Mặc định hiển thị HH:MM, bật `showSeconds` để hiện thêm cột giây\n * - Hỗ trợ: click ▲▼, gõ trực tiếp, lăn chuột, mũi tên bàn phím\n * - Wrap vòng (23 → ▲ → 00)\n */\n@Component({\n selector: 'sd-time-spinner',\n standalone: true,\n imports: [CommonModule, TranslatePipe],\n templateUrl: './sd-time-spinner.component.html',\n styleUrls: ['./sd-time-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdTimeSpinner {\n // Hai-chiều: cha có thể đọc/ghi từng đơn vị qua signal model.\n hours = model<number>(0);\n minutes = model<number>(0);\n seconds = model<number>(0);\n\n showSeconds = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n\n // Cache hiển thị 2 chữ số — pad-left \"0\".\n pad(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n }\n\n // Bước nhảy ±1, wrap vòng quanh max.\n step(unit: 'h' | 'm' | 's', delta: number) {\n if (this.disabled()) return;\n if (unit === 'h') {\n const next = (this.hours() + delta + 24) % 24;\n this.hours.set(next);\n } else if (unit === 'm') {\n const next = (this.minutes() + delta + 60) % 60;\n this.minutes.set(next);\n } else {\n const next = (this.seconds() + delta + 60) % 60;\n this.seconds.set(next);\n }\n }\n\n /**\n * Buffer tích lũy chữ số đang gõ cho từng đơn vị.\n * Được reset khi: focus, commit (2 chữ số / auto-commit), blur.\n */\n private _buf: Record<'h' | 'm' | 's', string> = { h: '', m: '', s: '' };\n\n private _commitUnit(unit: 'h' | 'm' | 's', num: number) {\n if (unit === 'h') this.hours.set(num);\n else if (unit === 'm') this.minutes.set(num);\n else this.seconds.set(num);\n }\n\n /**\n * onInput chỉ xử lý các trường hợp không qua keydown:\n * paste, drag-drop, mobile soft-keyboard (không fire keydown).\n */\n onInput(unit: 'h' | 'm' | 's', event: Event) {\n if (this.disabled()) return;\n const raw = (event.target as HTMLInputElement).value.replace(/[^0-9]/g, '');\n if (!raw) {\n this._buf[unit] = '';\n return;\n }\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(raw.slice(-2), 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n\n // Lăn chuột trên input — cuộn lên = tăng.\n onWheel(unit: 'h' | 'm' | 's', event: WheelEvent) {\n if (this.disabled()) return;\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, event.deltaY < 0 ? 1 : -1);\n }\n\n /**\n * Xử lý gõ phím:\n * - Chữ số: buffer 2 ký tự, auto-commit khi đủ hoặc chữ số đầu vượt ngưỡng\n * - Arrow: ±1, reset buffer\n * - Tab/Enter: commit buffer dở (nếu có)\n */\n onKeyDown(unit: 'h' | 'm' | 's', event: KeyboardEvent) {\n if (this.disabled()) return;\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, 1);\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, -1);\n return;\n }\n\n if (/^\\d$/.test(event.key)) {\n event.preventDefault(); // Ta tự kiểm soát hiển thị\n const max = unit === 'h' ? 23 : 59;\n // Chữ số đầu tối đa để còn có thể nhập chữ số 2 hợp lệ:\n // giờ → max first digit = 2 (vd '3x' không hợp lệ vì max 23)\n // phút/giây → max first digit = 5\n const maxFirstDigit = unit === 'h' ? 2 : 5;\n const buf = this._buf[unit] + event.key;\n const el = event.target as HTMLInputElement;\n\n if (buf.length === 1) {\n const d = parseInt(event.key, 10);\n if (d > maxFirstDigit) {\n // Chữ số đầu không thể là hàng chục hợp lệ → commit ngay dạng 0X\n const num = Math.min(d, max);\n this._commitUnit(unit, num);\n el.value = this.pad(num);\n this._buf[unit] = '';\n } else {\n // Chờ chữ số thứ 2 — hiển thị ký tự đơn tạm thời\n this._buf[unit] = event.key;\n el.value = event.key;\n }\n } else {\n // Đã có 2 chữ số → commit\n const num = Math.min(parseInt(buf, 10), max);\n this._commitUnit(unit, num);\n el.value = this.pad(num);\n this._buf[unit] = '';\n }\n return;\n }\n\n if (event.key === 'Backspace' || event.key === 'Delete') {\n this._buf[unit] = '';\n return; // browser tự xử lý xóa ký tự\n }\n\n if (event.key === 'Tab' || event.key === 'Enter') {\n // Commit nếu còn buffer chữ số đơn\n if (this._buf[unit]) {\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(this._buf[unit], 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n }\n }\n\n // Khi blur: commit buffer dở (nếu có) + chuẩn hóa hiển thị.\n onBlur(unit: 'h' | 'm' | 's', event: FocusEvent) {\n if (this._buf[unit]) {\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(this._buf[unit], 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n const el = event.target as HTMLInputElement;\n if (unit === 'h') el.value = this.pad(this.hours());\n else if (unit === 'm') el.value = this.pad(this.minutes());\n else el.value = this.pad(this.seconds());\n }\n\n // Chọn toàn bộ text khi focus + reset buffer.\n onFocus(unit: 'h' | 'm' | 's', event: FocusEvent) {\n this._buf[unit] = '';\n (event.target as HTMLInputElement).select();\n }\n}\n","<div class=\"sd-time-spinner\" [class.disabled]=\"disabled()\">\n <!-- HOURS -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('h', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-hour' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(hours())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('h', $event)\"\n (wheel)=\"onWheel('h', $event)\"\n (keydown)=\"onKeyDown('h', $event)\"\n (focus)=\"onFocus('h', $event)\"\n (blur)=\"onBlur('h', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.hour' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('h', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-hour' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n\n <span class=\"sep\">:</span>\n\n <!-- MINUTES -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('m', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-minute' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(minutes())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('m', $event)\"\n (wheel)=\"onWheel('m', $event)\"\n (keydown)=\"onKeyDown('m', $event)\"\n (focus)=\"onFocus('m', $event)\"\n (blur)=\"onBlur('m', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.minute' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('m', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-minute' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (showSeconds()) {\n <span class=\"sep\">:</span>\n <!-- SECONDS -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('s', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-second' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(seconds())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('s', $event)\"\n (wheel)=\"onWheel('s', $event)\"\n (keydown)=\"onKeyDown('s', $event)\"\n (focus)=\"onFocus('s', $event)\"\n (blur)=\"onBlur('s', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.second' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('s', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-second' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Output,\n booleanAttribute,\n input,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { isValid as isValidDate } from 'date-fns';\nimport { SdTimeSpinner } from './sd-time-spinner.component';\n\n/**\n * Datetime picker popup — Calendar (Angular Material) + Time Spinner + Footer.\n *\n * Component này được render trong CDK Overlay từ `sd-datetime`.\n * Phát event `confirmed`/`cancelled` khi user thao tác trên footer.\n */\n@Component({\n selector: 'sd-datetime-picker',\n standalone: true,\n imports: [CommonModule, MatDatepickerModule, MatButtonModule, SdTimeSpinner, TranslatePipe],\n templateUrl: './sd-datetime-picker.component.html',\n styleUrls: ['./sd-datetime-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdDatetimePicker {\n // ==========================================\n // INPUTS\n // ==========================================\n /** Giá trị khởi tạo của picker (native Date, có thể null). */\n initialValue = input<Date | null>(null);\n /** Min/max boundary (Date hoặc bất kỳ giá trị nào hợp lệ cho `new Date(...)`). */\n minDate = input<Date | string | number | null>(null);\n maxDate = input<Date | string | number | null>(null);\n /** Hiển thị thêm cột giây (mặc định ẩn — chỉ HH:MM). */\n showSeconds = input(false, { transform: booleanAttribute });\n /** Disabled state. */\n disabled = input(false, { transform: booleanAttribute });\n\n // ==========================================\n // OUTPUTS (legacy EventEmitter để tương thích Overlay subscription)\n // ==========================================\n @Output() confirmed = new EventEmitter<Date>();\n @Output() cancelled = new EventEmitter<void>();\n\n // ==========================================\n // STATE — signals nội bộ\n // ==========================================\n // date-fns là immutable — luôn cấp Date mới, không mutate.\n selectedDate = signal<Date>(new Date());\n hours = signal<number>(0);\n minutes = signal<number>(0);\n seconds = signal<number>(0);\n\n constructor() {\n // Khởi tạo từ initialValue khi component được tạo.\n // Effect không cần thiết vì input chỉ set một lần lúc mở popup.\n queueMicrotask(() => this.#hydrateFromInput());\n }\n\n #hydrateFromInput() {\n const init = this.initialValue();\n // Clone bằng new Date(getTime()) để không chia sẻ reference với caller.\n const d = init instanceof Date && isValidDate(init) ? new Date(init.getTime()) : new Date();\n this.selectedDate.set(d);\n this.hours.set(d.getHours());\n this.minutes.set(d.getMinutes());\n this.seconds.set(d.getSeconds());\n }\n\n // ==========================================\n // EVENT HANDLERS\n // ==========================================\n\n /** Khi user chọn ngày trên MatCalendar. */\n onDateSelected(date: Date | null) {\n if (!date) return;\n // Giữ nguyên giờ/phút/giây hiện tại, chỉ thay đổi ngày.\n const next = new Date(date.getTime());\n next.setHours(this.hours(), this.minutes(), this.seconds(), 0);\n this.selectedDate.set(next);\n }\n\n onConfirm() {\n if (this.disabled()) return;\n // Tạo Date mới từ selectedDate + hours/minutes/seconds hiện tại.\n const base = this.selectedDate();\n const result = new Date(base.getTime());\n result.setHours(\n this.hours(),\n this.minutes(),\n this.showSeconds() ? this.seconds() : 0,\n 0,\n );\n this.confirmed.emit(result);\n }\n\n onCancel() {\n this.cancelled.emit();\n }\n\n /** Đặt nhanh thời gian \"Bây giờ\". */\n onNow() {\n if (this.disabled()) return;\n const now = new Date();\n this.selectedDate.set(now);\n this.hours.set(now.getHours());\n this.minutes.set(now.getMinutes());\n this.seconds.set(now.getSeconds());\n }\n\n // Min/Max — chuyển về Date cho MatCalendar (date-fns adapter dùng native Date).\n get _minDate(): Date | null {\n const v = this.minDate();\n if (v === null || v === undefined) return null;\n if (v instanceof Date) return isValidDate(v) ? v : null;\n const d = new Date(v);\n return isValidDate(d) ? d : null;\n }\n get _maxDate(): Date | null {\n const v = this.maxDate();\n if (v === null || v === undefined) return null;\n if (v instanceof Date) return isValidDate(v) ? v : null;\n const d = new Date(v);\n return isValidDate(d) ? d : null;\n }\n}\n","<div class=\"sd-datetime-picker\">\n <!-- Calendar -->\n <div class=\"picker-calendar\">\n <mat-calendar\n [selected]=\"selectedDate()\"\n [minDate]=\"_minDate\"\n [maxDate]=\"_maxDate\"\n (selectedChange)=\"onDateSelected($event)\">\n </mat-calendar>\n </div>\n\n <!-- Divider mảnh -->\n <div class=\"picker-divider\"></div>\n\n <!-- Time Spinner -->\n <div class=\"picker-time\">\n <sd-time-spinner\n [(hours)]=\"hours\"\n [(minutes)]=\"minutes\"\n [(seconds)]=\"seconds\"\n [showSeconds]=\"showSeconds()\"\n [disabled]=\"disabled()\">\n </sd-time-spinner>\n </div>\n\n <!-- Footer: Bây giờ | Hủy | Xác nhận -->\n <div class=\"picker-footer\">\n <button type=\"button\" class=\"btn btn-ghost\" (click)=\"onNow()\" [disabled]=\"disabled()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\n <polyline points=\"12 7 12 12 15 14\"></polyline>\n </svg>\n <span>{{ 'core.form.datetime.now' | translate }}</span>\n </button>\n\n <div class=\"footer-actions\">\n <button type=\"button\" class=\"btn btn-text\" (click)=\"onCancel()\">{{ 'core.common.cancel' | translate }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onConfirm()\" [disabled]=\"disabled()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n <span>{{ 'core.form.datetime.confirm' | translate }}</span>\n </button>\n </div>\n </div>\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @angular-eslint/no-input-rename */\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n OnDestroy,\n OnInit,\n output,\n TemplateRef,\n viewChild,\n contentChild,\n signal,\n Injector,\n} from '@angular/core';\nimport { AbstractControl, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { SD_FORM_CONFIGURATION, SdFormControl, SdInlineErrorValidator, sdFormControlState } from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { Size } from '@sdcorejs/utils/models';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { isValid as isValidDate, parse as parseDate } from 'date-fns';\nimport { enUS as dfEnUS } from 'date-fns/locale';\nimport { Subscription } from 'rxjs';\nimport * as uuid from 'uuid';\nimport { SdDatetimePicker } from './popup/sd-datetime-picker.component';\n\n/**\n * Format parse/display dùng cho MatDateAdapter (date-fns).\n * Note: format input là `dd/MM/yyyy HH:mm` (không có giây mặc định) —\n * giây chỉ được render khi `showSeconds` = true.\n * Token date-fns dùng chữ thường: `yyyy` (năm), `dd` (ngày), `HH` (giờ 24h).\n */\nconst SD_DATETIME_FORMATS = {\n parse: { dateInput: 'dd/MM/yyyy HH:mm' },\n display: {\n dateInput: 'dd/MM/yyyy HH:mm',\n monthYearLabel: 'MMM yyyy',\n dateA11yLabel: 'PP',\n monthYearA11yLabel: 'MMMM yyyy',\n },\n};\n\n/**\n * Thử parse `value` theo lần lượt nhiều format; trả về Date đầu tiên hợp lệ.\n * date-fns không hỗ trợ multi-format parse như moment(value, [fmt1, fmt2], true).\n */\nfunction parseFirstValid(value: string, formats: string[]): Date | null {\n for (const fmt of formats) {\n const d = parseDate(value, fmt, new Date());\n if (isValidDate(d)) return d;\n }\n return null;\n}\n\n@Component({\n selector: 'sd-datetime',\n templateUrl: './datetime.component.html',\n styleUrls: ['./datetime.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.sd-bare]': 'bare()', '[class.sd-viewed]': 'viewed()', '[class.sd-has-label]': '!!label()' },\n providers: [\n // DateFnsAdapter inject MAT_DATE_LOCALE; cấp default en-US để parse/format hoạt động.\n { provide: MAT_DATE_LOCALE, useValue: dfEnUS },\n provideDateFnsAdapter(SD_DATETIME_FORMATS),\n ],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatFormFieldModule,\n SdLabel,\n SdView,\n ],\n})\nexport class SdDatetime implements OnDestroy, OnInit {\n id = `I${uuid.v4()}`;\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\n sdViewDef = contentChild(SdViewDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n private ref = inject(ChangeDetectorRef);\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private injector = inject(Injector);\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => this.autoIdInput() ? `forms-datetime-${this.autoIdInput()}` : undefined);\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(uuid.v4());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n placeholder = input<string | undefined>();\n\n hideInlineError = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n viewed = input(false, { transform: booleanAttribute });\n /** Hiển thị thêm cột giây trong picker. Mặc định: chỉ HH:MM. */\n showSeconds = input(false, { transform: booleanAttribute });\n\n /** Flatten the field chrome to a chip-friendly trigger (value + caret only). */\n bare = input(false, { transform: booleanAttribute });\n\n inlineError = input<string | undefined>();\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n void this.#state();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.datetime.required');\n if (errors['matDatepickerMin']) { const d = this.resolvedMin(); return this.#i18n.t('core.form.datetime.min-date', { date: d ? new Date(d).toLocaleDateString('vi-VN') : '' }); }\n if (errors['matDatepickerMax']) { const d = this.resolvedMax(); return this.#i18n.t('core.form.datetime.max-date', { date: d ? new Date(d).toLocaleDateString('vi-VN') : '' }); }\n if (errors['date']) return errors['date'] as string;\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n hyperlink = input<string | null | undefined>();\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n // Min/max — chấp nhận 'TODAY', Date, hoặc string ISO\n minInput = input<any>(undefined, { alias: 'min' });\n minDateInput = input<any>(undefined, { alias: 'minDate' });\n resolvedMin = computed(() => this.#parseDateBoundary(this.minInput() ?? this.minDateInput()));\n\n maxInput = input<any>(undefined, { alias: 'max' });\n maxDateInput = input<any>(undefined, { alias: 'maxDate' });\n resolvedMax = computed(() => this.#parseDateBoundary(this.maxInput() ?? this.maxDateInput()));\n\n valueModel = model<string | number | Date | undefined | null>(undefined, { alias: 'model' });\n\n // viewed-mode: formControl.value là chuỗi display (dd/MM/yyyy HH:mm) nên DatePipe không parse được.\n // Lấy thẳng từ valueModel (nguồn dữ liệu thật) rồi convert sang Date cho DatePipe.\n viewedDate = computed<Date | null>(() => {\n const v = this.valueModel();\n if (v == null || !DateUtilities.isDate(v)) return null;\n const iso = DateUtilities.toFormat(v as any, 'yyyy/MM/dd HH:mm:ss');\n if (!iso) return null;\n const d = parseDate(iso, 'yyyy/MM/dd HH:mm:ss', new Date());\n return isValidDate(d) ? d : null;\n });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<any>();\n sdFocus = output<void>();\n\n // ==========================================\n // 5. INTERNAL STATE\n // ==========================================\n isMobileOrTablet = BrowserUtilities.isMobile();\n formControl = new SdFormControl();\n isFocused = false;\n isValid?: boolean;\n\n /** State popup — true khi đang mở. */\n pickerOpened = signal(false);\n\n #date: string | undefined | null;\n #subscription = new Subscription();\n #overlayRef: OverlayRef | null = null;\n\n constructor() {\n // EFFECT 1: Sync model thay đổi từ bên ngoài → cập nhật hiển thị\n effect(() => {\n let val = this.valueModel();\n untracked(() => {\n if (!DateUtilities.isDate(val)) {\n val = null;\n }\n val = DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm');\n if (this.#date !== val) {\n this.#date = val;\n // Cập nhật formControl với chuỗi hiển thị dd/MM/yyyy HH:mm\n const fmt = this.showSeconds() ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm';\n const displayStr = DateUtilities.isDate(this.#date)\n ? DateUtilities.toFormat(this.#date, fmt)\n : null;\n this.formControl.setValue(displayStr, { emitEvent: false });\n }\n });\n });\n\n // EFFECT 2: Sync Disable\n effect(() => {\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\n else this.formControl.enable({ emitEvent: false });\n });\n\n // EFFECT 3: Update Validators\n effect(() => {\n const req = this.required();\n const inl = this.inlineError();\n\n untracked(() => {\n const validators: ValidatorFn[] = [];\n if (req) validators.push(Validators.required);\n if (inl) validators.push(SdInlineErrorValidator);\n\n this.formControl.setValidators(validators.length ? validators : null);\n this.formControl.updateValueAndValidity({ emitEvent: false });\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.formControl.sdChanges.subscribe(() => {\n this.ref.markForCheck();\n })\n );\n const formGroup = this.form();\n formGroup?.addControl(this.name(), this.formControl);\n }\n\n ngOnDestroy() {\n const formGroup = this.form();\n formGroup?.removeControl(this.name());\n this.#subscription.unsubscribe();\n this.#closeOverlay();\n }\n\n // ==========================================\n // 6. POPUP MANAGEMENT — CDK Overlay\n // ==========================================\n\n /** Mở popup chọn datetime, neo vào input. */\n open() {\n if (this.formControl.disabled || this.pickerOpened()) return;\n\n const origin = this.elementRef.nativeElement as HTMLElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const overlayConfig = new OverlayConfig({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'sd-datetime-backdrop',\n panelClass: 'sd-datetime-overlay-panel',\n });\n\n this.#overlayRef = this.overlay.create(overlayConfig);\n const portal = new ComponentPortal(SdDatetimePicker, null, this.injector);\n const ref = this.#overlayRef.attach(portal);\n\n // Đẩy state hiện tại vào popup\n ref.setInput('initialValue', this.#currentValueAsDate());\n ref.setInput('minDate', this.resolvedMin());\n ref.setInput('maxDate', this.resolvedMax());\n ref.setInput('showSeconds', this.showSeconds());\n\n // Subscribe events từ popup\n ref.instance.confirmed.subscribe((value: Date) => this.#onPickerConfirm(value));\n ref.instance.cancelled.subscribe(() => this.#onPickerCancel());\n\n // Đóng khi click backdrop\n this.#overlayRef.backdropClick().subscribe(() => this.#onPickerCancel());\n\n this.pickerOpened.set(true);\n this.ref.markForCheck();\n }\n\n /** Đóng popup (public — gọi từ template nếu cần). */\n close() {\n this.#closeOverlay();\n }\n\n #closeOverlay() {\n if (this.#overlayRef) {\n this.#overlayRef.dispose();\n this.#overlayRef = null;\n }\n if (this.pickerOpened()) {\n this.pickerOpened.set(false);\n this.ref.markForCheck();\n }\n }\n\n #onPickerConfirm(value: Date) {\n const fmt = this.showSeconds() ? 'yyyy/MM/dd HH:mm:ss' : 'yyyy/MM/dd HH:mm:00';\n // value giờ là native Date (date-fns), không cần .toDate() như Moment.\n const stored = DateUtilities.toFormat(value, fmt);\n if (this.#date !== stored) {\n this.valueModel.set(stored);\n this.sdChange.emit(stored);\n }\n this.#closeOverlay();\n }\n\n #onPickerCancel() {\n this.#closeOverlay();\n }\n\n /** Lấy giá trị hiện tại dưới dạng native Date để truyền vào popup. */\n #currentValueAsDate(): Date | null {\n const v = this.valueModel();\n if (!v || !DateUtilities.isDate(v)) return null;\n const fmtted = DateUtilities.toFormat(v as any, 'yyyy/MM/dd HH:mm:ss');\n if (!fmtted) return null;\n const parsed = parseDate(fmtted, 'yyyy/MM/dd HH:mm:ss', new Date());\n return isValidDate(parsed) ? parsed : null;\n }\n\n // ==========================================\n // 7. PARSE/VALIDATE HELPERS\n // ==========================================\n #parseDateBoundary(val: any): Date | null {\n if (val === 'TODAY') return new Date();\n if (val && DateUtilities.isDate(val)) return new Date(val);\n return null;\n }\n\n // ==========================================\n // 8. INPUT EVENT HANDLERS\n // ==========================================\n onFocus = () => {\n this.isFocused = true;\n this.sdFocus.emit();\n };\n\n onBlur = () => {\n this.isFocused = false;\n };\n\n onClick = () => {\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.inputRef()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n setTimeout(() => {\n this.inputRef()?.nativeElement?.focus();\n this.open();\n }, 100);\n };\n\n focusInputElement() {\n this.inputRef()?.nativeElement?.focus();\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n const key = event.keyCode || event.charCode;\n const isShift = key === 16;\n\n if (event.ctrlKey && (key === 67 || key === 86)) return true;\n\n if (\n ((key >= 48 && key <= 57) ||\n key === 8 ||\n key <= 37 ||\n key <= 39 ||\n (key >= 96 && key <= 105) ||\n key === 191 ||\n key === 186 ||\n key === 59) &&\n !isShift\n ) {\n return true;\n }\n return false;\n };\n\n /**\n * Khi user gõ trực tiếp vào input và rời focus → validate format dd/MM/yyyy HH:mm\n * Hỗ trợ cả format có giây.\n */\n onConfirmInput = (event: any) => {\n const currentVal: string = event.target.value;\n const formControl: AbstractControl = this.formControl;\n const regexToMinutes = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\n const regexToSecond = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/g;\n\n if (currentVal && !(regexToMinutes.test(currentVal) || regexToSecond.test(currentVal))) {\n setTimeout(() => {\n formControl.markAsDirty();\n formControl.markAsTouched();\n formControl.setErrors({ ...formControl.errors, date: this.#i18n.t('core.form.datetime.invalid-format') });\n }, 0);\n return;\n }\n\n setTimeout(() => {\n formControl.setErrors({ ...formControl.errors, date: null });\n this.formControl.updateValueAndValidity();\n }, 0);\n\n // Đồng bộ ngược về model nếu hợp lệ.\n // date-fns không có multi-format strict parse như moment, dùng helper parseFirstValid.\n if (currentVal) {\n const parsed = parseFirstValid(currentVal, ['dd/MM/yyyy HH:mm:ss', 'dd/MM/yyyy HH:mm']);\n if (parsed) {\n const fmt = this.showSeconds() ? 'yyyy/MM/dd HH:mm:ss' : 'yyyy/MM/dd HH:mm:00';\n const stored = DateUtilities.toFormat(parsed, fmt);\n if (this.#date !== stored) {\n this.valueModel.set(stored);\n this.sdChange.emit(stored);\n }\n }\n } else if (this.valueModel()) {\n this.valueModel.set(null);\n this.sdChange.emit(null);\n }\n };\n\n clear = ($event: any) => {\n $event?.stopPropagation();\n if (this.formControl.value) {\n this.formControl.setValue(null);\n this.valueModel.set(null);\n this.sdChange.emit(null);\n }\n };\n}\n","@let lbl = label();\n@let app = appearance();\n@let hideErr = hideInlineError();\n@let errMsg = errorMessage();\n@let viewDef = sdViewDef();\n@let hText = helperText();\n@let req = required();\n\n@let minD = resolvedMin();\n@let maxD = resolvedMax();\n\n@let vDate = viewedDate();\n@if (viewed()) {\n <sd-view\n [label]=\"lbl\"\n [labelTemplate]=\"sdLabelTemplate()\"\n [value]=\"vDate\"\n [display]=\"vDate | date: (showSeconds() ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm')\"\n [hyperlink]=\"hyperlink()\"\n [valueTemplate]=\"sdValueTemplate()\">\n </sd-view>\n} @else {\n @if (!app) {\n <ng-content select=\"[sdLabel]\">\n @if (lbl) {\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\n }\n </ng-content>\n }\n\n <div\n class=\"d-flex align-items-center\"\n [class.sd-view]=\"viewDef?.templateRef\"\n [class.c-focused]=\"isFocused\"\n [class.c-disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n aria-hidden=\"true\">\n @if (viewDef?.templateRef && !isFocused && !pickerOpened()) {\n <ng-container *ngTemplateOutlet=\"viewDef!.templateRef; context: { value: formControl.value }\"> </ng-container>\n } @else {\n <mat-form-field\n class=\"c-form-field-datetime-input\"\n [class.sd-md]=\"size() === 'md'\"\n [class.sd-sm]=\"size() === 'sm'\"\n [class.hide-inline-error]=\"hideErr\"\n [appearance]=\"app || 'outline'\"\n [floatLabel]=\"floatLabel()\">\n @if (app && lbl) {\n <mat-label style=\"display: inline-block\">\n <div class=\"d-flex align-items-center gap-4\">\n <span>{{ lbl }}</span>\n @if (hText) {\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"below\">info_outline</mat-icon>\n }\n </div>\n </mat-label>\n }\n\n <input\n aria-hidden=\"true\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-error-message]=\"dataErrorMessage()\"\n [id]=\"id\"\n (blur)=\"onConfirmInput($event)\"\n (keyup.enter)=\"onConfirmInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n [autocomplete]=\"id\"\n autocorrect=\"off\"\n [formControl]=\"formControl\"\n [required]=\"req\"\n [placeholder]=\"placeholder() || lbl || ''\"\n [min]=\"minD\"\n [max]=\"maxD\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n #input\n matInput />\n\n @if (hideErr && errMsg && formControl.touched) {\n <mat-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\"> error </mat-icon>\n }\n\n @if (!hideErr && errMsg && formControl.touched) {\n <mat-error>{{ errMsg }}</mat-error>\n }\n\n @if (formControl.value && !req && !formControl.disabled) {\n <button\n type=\"button\"\n class=\"sd-clear-btn sd-hover\"\n matSuffix\n (click)=\"clear($event)\"\n title=\"Xóa\"\n aria-label=\"Xóa\">\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <span class=\"cursor-pointer sd-suffix-icon\" (click)=\"!formControl.disabled && open()\" matSuffix\n ><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\"></path></svg\n ></span>\n </mat-form-field>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isValidDate","parseDate","dfEnUS","i1"],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-forms-datetime.mjs","sources":["../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-time-spinner.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-time-spinner.component.html","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-datetime-picker.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/popup/sd-datetime-picker.component.html","../../../projects/sdcorejs-angular/forms/datetime/src/datetime.component.ts","../../../projects/sdcorejs-angular/forms/datetime/src/datetime.component.html","../../../projects/sdcorejs-angular/forms/datetime/sdcorejs-angular-forms-datetime.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, booleanAttribute, input, model } from '@angular/core';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n/**\n * Time spinner — UI chọn giờ/phút/(giây) compact, modern.\n *\n * - Format 24h\n * - Mặc định hiển thị HH:MM, bật `showSeconds` để hiện thêm cột giây\n * - Hỗ trợ: click ▲▼, gõ trực tiếp, lăn chuột, mũi tên bàn phím\n * - Wrap vòng (23 → ▲ → 00)\n */\n@Component({\n selector: 'sd-time-spinner',\n standalone: true,\n imports: [CommonModule, TranslatePipe],\n templateUrl: './sd-time-spinner.component.html',\n styleUrls: ['./sd-time-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdTimeSpinner {\n // Hai-chiều: cha có thể đọc/ghi từng đơn vị qua signal model.\n hours = model<number>(0);\n minutes = model<number>(0);\n seconds = model<number>(0);\n\n showSeconds = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n\n // Cache hiển thị 2 chữ số — pad-left \"0\".\n pad(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n }\n\n // Bước nhảy ±1, wrap vòng quanh max.\n step(unit: 'h' | 'm' | 's', delta: number) {\n if (this.disabled()) return;\n if (unit === 'h') {\n const next = (this.hours() + delta + 24) % 24;\n this.hours.set(next);\n } else if (unit === 'm') {\n const next = (this.minutes() + delta + 60) % 60;\n this.minutes.set(next);\n } else {\n const next = (this.seconds() + delta + 60) % 60;\n this.seconds.set(next);\n }\n }\n\n /**\n * Buffer tích lũy chữ số đang gõ cho từng đơn vị.\n * Được reset khi: focus, commit (2 chữ số / auto-commit), blur.\n */\n private _buf: Record<'h' | 'm' | 's', string> = { h: '', m: '', s: '' };\n\n private _commitUnit(unit: 'h' | 'm' | 's', num: number) {\n if (unit === 'h') this.hours.set(num);\n else if (unit === 'm') this.minutes.set(num);\n else this.seconds.set(num);\n }\n\n /**\n * onInput chỉ xử lý các trường hợp không qua keydown:\n * paste, drag-drop, mobile soft-keyboard (không fire keydown).\n */\n onInput(unit: 'h' | 'm' | 's', event: Event) {\n if (this.disabled()) return;\n const raw = (event.target as HTMLInputElement).value.replace(/[^0-9]/g, '');\n if (!raw) {\n this._buf[unit] = '';\n return;\n }\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(raw.slice(-2), 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n\n // Lăn chuột trên input — cuộn lên = tăng.\n onWheel(unit: 'h' | 'm' | 's', event: WheelEvent) {\n if (this.disabled()) return;\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, event.deltaY < 0 ? 1 : -1);\n }\n\n /**\n * Xử lý gõ phím:\n * - Chữ số: buffer 2 ký tự, auto-commit khi đủ hoặc chữ số đầu vượt ngưỡng\n * - Arrow: ±1, reset buffer\n * - Tab/Enter: commit buffer dở (nếu có)\n */\n onKeyDown(unit: 'h' | 'm' | 's', event: KeyboardEvent) {\n if (this.disabled()) return;\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, 1);\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this._buf[unit] = '';\n this.step(unit, -1);\n return;\n }\n\n if (/^\\d$/.test(event.key)) {\n event.preventDefault(); // Ta tự kiểm soát hiển thị\n const max = unit === 'h' ? 23 : 59;\n // Chữ số đầu tối đa để còn có thể nhập chữ số 2 hợp lệ:\n // giờ → max first digit = 2 (vd '3x' không hợp lệ vì max 23)\n // phút/giây → max first digit = 5\n const maxFirstDigit = unit === 'h' ? 2 : 5;\n const buf = this._buf[unit] + event.key;\n const el = event.target as HTMLInputElement;\n\n if (buf.length === 1) {\n const d = parseInt(event.key, 10);\n if (d > maxFirstDigit) {\n // Chữ số đầu không thể là hàng chục hợp lệ → commit ngay dạng 0X\n const num = Math.min(d, max);\n this._commitUnit(unit, num);\n el.value = this.pad(num);\n this._buf[unit] = '';\n } else {\n // Chờ chữ số thứ 2 — hiển thị ký tự đơn tạm thời\n this._buf[unit] = event.key;\n el.value = event.key;\n }\n } else {\n // Đã có 2 chữ số → commit\n const num = Math.min(parseInt(buf, 10), max);\n this._commitUnit(unit, num);\n el.value = this.pad(num);\n this._buf[unit] = '';\n }\n return;\n }\n\n if (event.key === 'Backspace' || event.key === 'Delete') {\n this._buf[unit] = '';\n return; // browser tự xử lý xóa ký tự\n }\n\n if (event.key === 'Tab' || event.key === 'Enter') {\n // Commit nếu còn buffer chữ số đơn\n if (this._buf[unit]) {\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(this._buf[unit], 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n }\n }\n\n // Khi blur: commit buffer dở (nếu có) + chuẩn hóa hiển thị.\n onBlur(unit: 'h' | 'm' | 's', event: FocusEvent) {\n if (this._buf[unit]) {\n const max = unit === 'h' ? 23 : 59;\n const num = Math.min(parseInt(this._buf[unit], 10), max);\n this._commitUnit(unit, num);\n this._buf[unit] = '';\n }\n const el = event.target as HTMLInputElement;\n if (unit === 'h') el.value = this.pad(this.hours());\n else if (unit === 'm') el.value = this.pad(this.minutes());\n else el.value = this.pad(this.seconds());\n }\n\n // Chọn toàn bộ text khi focus + reset buffer.\n onFocus(unit: 'h' | 'm' | 's', event: FocusEvent) {\n this._buf[unit] = '';\n (event.target as HTMLInputElement).select();\n }\n}\n","<div class=\"sd-time-spinner\" [class.disabled]=\"disabled()\">\n <!-- HOURS -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('h', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-hour' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(hours())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('h', $event)\"\n (wheel)=\"onWheel('h', $event)\"\n (keydown)=\"onKeyDown('h', $event)\"\n (focus)=\"onFocus('h', $event)\"\n (blur)=\"onBlur('h', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.hour' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('h', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-hour' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n\n <span class=\"sep\">:</span>\n\n <!-- MINUTES -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('m', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-minute' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(minutes())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('m', $event)\"\n (wheel)=\"onWheel('m', $event)\"\n (keydown)=\"onKeyDown('m', $event)\"\n (focus)=\"onFocus('m', $event)\"\n (blur)=\"onBlur('m', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.minute' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('m', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-minute' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (showSeconds()) {\n <span class=\"sep\">:</span>\n <!-- SECONDS -->\n <div class=\"unit\">\n <button type=\"button\" class=\"step\" (click)=\"step('s', 1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.increase-second' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"18 15 12 9 6 15\"></polyline>\n </svg>\n </button>\n <input\n class=\"value\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [value]=\"pad(seconds())\"\n [disabled]=\"disabled()\"\n (input)=\"onInput('s', $event)\"\n (wheel)=\"onWheel('s', $event)\"\n (keydown)=\"onKeyDown('s', $event)\"\n (focus)=\"onFocus('s', $event)\"\n (blur)=\"onBlur('s', $event)\"\n [attr.aria-label]=\"'core.form.time-spinner.second' | translate\" />\n <button type=\"button\" class=\"step\" (click)=\"step('s', -1)\" tabindex=\"-1\" [attr.aria-label]=\"'core.form.time-spinner.decrease-second' | translate\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Output,\n booleanAttribute,\n input,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { isValid as isValidDate } from 'date-fns';\nimport { SdTimeSpinner } from './sd-time-spinner.component';\n\n/**\n * Datetime picker popup — Calendar (Angular Material) + Time Spinner + Footer.\n *\n * Component này được render trong CDK Overlay từ `sd-datetime`.\n * Phát event `confirmed`/`cancelled` khi user thao tác trên footer.\n */\n@Component({\n selector: 'sd-datetime-picker',\n standalone: true,\n imports: [CommonModule, MatDatepickerModule, MatButtonModule, SdTimeSpinner, TranslatePipe],\n templateUrl: './sd-datetime-picker.component.html',\n styleUrls: ['./sd-datetime-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdDatetimePicker {\n // ==========================================\n // INPUTS\n // ==========================================\n /** Giá trị khởi tạo của picker (native Date, có thể null). */\n initialValue = input<Date | null>(null);\n /** Min/max boundary (Date hoặc bất kỳ giá trị nào hợp lệ cho `new Date(...)`). */\n minDate = input<Date | string | number | null>(null);\n maxDate = input<Date | string | number | null>(null);\n /** Hiển thị thêm cột giây (mặc định ẩn — chỉ HH:MM). */\n showSeconds = input(false, { transform: booleanAttribute });\n /** Disabled state. */\n disabled = input(false, { transform: booleanAttribute });\n\n // ==========================================\n // OUTPUTS (legacy EventEmitter để tương thích Overlay subscription)\n // ==========================================\n @Output() confirmed = new EventEmitter<Date>();\n @Output() cancelled = new EventEmitter<void>();\n\n // ==========================================\n // STATE — signals nội bộ\n // ==========================================\n // date-fns là immutable — luôn cấp Date mới, không mutate.\n selectedDate = signal<Date>(new Date());\n hours = signal<number>(0);\n minutes = signal<number>(0);\n seconds = signal<number>(0);\n\n constructor() {\n // Khởi tạo từ initialValue khi component được tạo.\n // Effect không cần thiết vì input chỉ set một lần lúc mở popup.\n queueMicrotask(() => this.#hydrateFromInput());\n }\n\n #hydrateFromInput() {\n const init = this.initialValue();\n // Clone bằng new Date(getTime()) để không chia sẻ reference với caller.\n const d = init instanceof Date && isValidDate(init) ? new Date(init.getTime()) : new Date();\n this.selectedDate.set(d);\n this.hours.set(d.getHours());\n this.minutes.set(d.getMinutes());\n this.seconds.set(d.getSeconds());\n }\n\n // ==========================================\n // EVENT HANDLERS\n // ==========================================\n\n /** Khi user chọn ngày trên MatCalendar. */\n onDateSelected(date: Date | null) {\n if (!date) return;\n // Giữ nguyên giờ/phút/giây hiện tại, chỉ thay đổi ngày.\n const next = new Date(date.getTime());\n next.setHours(this.hours(), this.minutes(), this.seconds(), 0);\n this.selectedDate.set(next);\n }\n\n onConfirm() {\n if (this.disabled()) return;\n // Tạo Date mới từ selectedDate + hours/minutes/seconds hiện tại.\n const base = this.selectedDate();\n const result = new Date(base.getTime());\n result.setHours(\n this.hours(),\n this.minutes(),\n this.showSeconds() ? this.seconds() : 0,\n 0,\n );\n this.confirmed.emit(result);\n }\n\n onCancel() {\n this.cancelled.emit();\n }\n\n /** Đặt nhanh thời gian \"Bây giờ\". */\n onNow() {\n if (this.disabled()) return;\n const now = new Date();\n this.selectedDate.set(now);\n this.hours.set(now.getHours());\n this.minutes.set(now.getMinutes());\n this.seconds.set(now.getSeconds());\n }\n\n // Min/Max — chuyển về Date cho MatCalendar (date-fns adapter dùng native Date).\n get _minDate(): Date | null {\n const v = this.minDate();\n if (v === null || v === undefined) return null;\n if (v instanceof Date) return isValidDate(v) ? v : null;\n const d = new Date(v);\n return isValidDate(d) ? d : null;\n }\n get _maxDate(): Date | null {\n const v = this.maxDate();\n if (v === null || v === undefined) return null;\n if (v instanceof Date) return isValidDate(v) ? v : null;\n const d = new Date(v);\n return isValidDate(d) ? d : null;\n }\n}\n","<div class=\"sd-datetime-picker\">\n <!-- Calendar -->\n <div class=\"picker-calendar\">\n <mat-calendar\n [selected]=\"selectedDate()\"\n [minDate]=\"_minDate\"\n [maxDate]=\"_maxDate\"\n (selectedChange)=\"onDateSelected($event)\">\n </mat-calendar>\n </div>\n\n <!-- Divider mảnh -->\n <div class=\"picker-divider\"></div>\n\n <!-- Time Spinner -->\n <div class=\"picker-time\">\n <sd-time-spinner\n [(hours)]=\"hours\"\n [(minutes)]=\"minutes\"\n [(seconds)]=\"seconds\"\n [showSeconds]=\"showSeconds()\"\n [disabled]=\"disabled()\">\n </sd-time-spinner>\n </div>\n\n <!-- Footer: Bây giờ | Hủy | Xác nhận -->\n <div class=\"picker-footer\">\n <button type=\"button\" class=\"btn btn-ghost\" (click)=\"onNow()\" [disabled]=\"disabled()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"9\"></circle>\n <polyline points=\"12 7 12 12 15 14\"></polyline>\n </svg>\n <span>{{ 'core.form.datetime.now' | translate }}</span>\n </button>\n\n <div class=\"footer-actions\">\n <button type=\"button\" class=\"btn btn-text\" (click)=\"onCancel()\">{{ 'core.common.cancel' | translate }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onConfirm()\" [disabled]=\"disabled()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n <span>{{ 'core.form.datetime.confirm' | translate }}</span>\n </button>\n </div>\n </div>\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @angular-eslint/no-input-rename */\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n OnDestroy,\n OnInit,\n output,\n TemplateRef,\n viewChild,\n contentChild,\n signal,\n Injector,\n} from '@angular/core';\nimport { AbstractControl, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { provideDateFnsAdapter } from '@angular/material-date-fns-adapter';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { SD_FORM_CONFIGURATION, SdFormControl, SdInlineErrorValidator, sdFormControlState, SdViewed, SdViewedInput, sdViewedInline, sdViewedTransform } from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { Size } from '@sdcorejs/utils/models';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { isValid as isValidDate, parse as parseDate } from 'date-fns';\nimport { enUS as dfEnUS } from 'date-fns/locale';\nimport { Subscription } from 'rxjs';\nimport * as uuid from 'uuid';\nimport { SdDatetimePicker } from './popup/sd-datetime-picker.component';\n\n/**\n * Format parse/display dùng cho MatDateAdapter (date-fns).\n * Note: format input là `dd/MM/yyyy HH:mm` (không có giây mặc định) —\n * giây chỉ được render khi `showSeconds` = true.\n * Token date-fns dùng chữ thường: `yyyy` (năm), `dd` (ngày), `HH` (giờ 24h).\n */\nconst SD_DATETIME_FORMATS = {\n parse: { dateInput: 'dd/MM/yyyy HH:mm' },\n display: {\n dateInput: 'dd/MM/yyyy HH:mm',\n monthYearLabel: 'MMM yyyy',\n dateA11yLabel: 'PP',\n monthYearA11yLabel: 'MMMM yyyy',\n },\n};\n\n/**\n * Thử parse `value` theo lần lượt nhiều format; trả về Date đầu tiên hợp lệ.\n * date-fns không hỗ trợ multi-format parse như moment(value, [fmt1, fmt2], true).\n */\nfunction parseFirstValid(value: string, formats: string[]): Date | null {\n for (const fmt of formats) {\n const d = parseDate(value, fmt, new Date());\n if (isValidDate(d)) return d;\n }\n return null;\n}\n\n@Component({\n selector: 'sd-datetime',\n templateUrl: './datetime.component.html',\n styleUrls: ['./datetime.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.sd-bare]': 'isInline()', '[class.sd-viewed]': 'isViewed() || isInline()', '[class.sd-has-label]': '!!label()' },\n providers: [\n // DateFnsAdapter inject MAT_DATE_LOCALE; cấp default en-US để parse/format hoạt động.\n { provide: MAT_DATE_LOCALE, useValue: dfEnUS },\n provideDateFnsAdapter(SD_DATETIME_FORMATS),\n ],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatFormFieldModule,\n SdLabel,\n SdView,\n ],\n})\nexport class SdDatetime implements OnDestroy, OnInit {\n id = `I${uuid.v4()}`;\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n inputRef = viewChild<ElementRef<HTMLInputElement>>('input');\n\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\n sdViewDef = contentChild(SdViewDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n private ref = inject(ChangeDetectorRef);\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private injector = inject(Injector);\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => this.autoIdInput() ? `forms-datetime-${this.autoIdInput()}` : undefined);\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(uuid.v4());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n placeholder = input<string | undefined>();\n\n hideInlineError = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n /** Display mode: `false` edit · `true` static view · `'inline'` view + click-to-edit (datetime overlay). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n /** Hiển thị thêm cột giây trong picker. Mặc định: chỉ HH:MM. */\n showSeconds = input(false, { transform: booleanAttribute });\n\n /** In `viewed='inline'`, show a hover clear-× on the text face. Set `false` when the host owns removal (chips). */\n clearable = input(true, { transform: booleanAttribute });\n\n // Tri-state `viewed` — shared primitive. In `'inline'` the datetime editor is always mounted\n // (chrome hidden via CSS); the sd-view text face opens the overlay on click.\n readonly #viewedState = sdViewedInline(this.viewed, () => this.open(), this.disabled);\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no editor). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Open the datetime overlay from the inline text face. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n /** View display template: `sdViewDef` overrides the projected `#sdValue` (unified). */\n readonly viewTemplate = computed<TemplateRef<any> | undefined>(() => this.sdViewDef()?.templateRef ?? this.sdValueTemplate());\n\n inlineError = input<string | undefined>();\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n void this.#state();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.datetime.required');\n if (errors['matDatepickerMin']) { const d = this.resolvedMin(); return this.#i18n.t('core.form.datetime.min-date', { date: d ? new Date(d).toLocaleDateString('vi-VN') : '' }); }\n if (errors['matDatepickerMax']) { const d = this.resolvedMax(); return this.#i18n.t('core.form.datetime.max-date', { date: d ? new Date(d).toLocaleDateString('vi-VN') : '' }); }\n if (errors['date']) return errors['date'] as string;\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n hyperlink = input<string | null | undefined>();\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n // Min/max — chấp nhận 'TODAY', Date, hoặc string ISO\n minInput = input<any>(undefined, { alias: 'min' });\n minDateInput = input<any>(undefined, { alias: 'minDate' });\n resolvedMin = computed(() => this.#parseDateBoundary(this.minInput() ?? this.minDateInput()));\n\n maxInput = input<any>(undefined, { alias: 'max' });\n maxDateInput = input<any>(undefined, { alias: 'maxDate' });\n resolvedMax = computed(() => this.#parseDateBoundary(this.maxInput() ?? this.maxDateInput()));\n\n valueModel = model<string | number | Date | undefined | null>(undefined, { alias: 'model' });\n\n // viewed-mode: formControl.value là chuỗi display (dd/MM/yyyy HH:mm) nên DatePipe không parse được.\n // Lấy thẳng từ valueModel (nguồn dữ liệu thật) rồi convert sang Date cho DatePipe.\n viewedDate = computed<Date | null>(() => {\n const v = this.valueModel();\n if (v == null || !DateUtilities.isDate(v)) return null;\n const iso = DateUtilities.toFormat(v as any, 'yyyy/MM/dd HH:mm:ss');\n if (!iso) return null;\n const d = parseDate(iso, 'yyyy/MM/dd HH:mm:ss', new Date());\n return isValidDate(d) ? d : null;\n });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<any>();\n sdFocus = output<void>();\n\n // ==========================================\n // 5. INTERNAL STATE\n // ==========================================\n isMobileOrTablet = BrowserUtilities.isMobile();\n formControl = new SdFormControl();\n isFocused = false;\n isValid?: boolean;\n\n /** State popup — true khi đang mở. */\n pickerOpened = signal(false);\n\n #date: string | undefined | null;\n #subscription = new Subscription();\n #overlayRef: OverlayRef | null = null;\n\n constructor() {\n // EFFECT 1: Sync model thay đổi từ bên ngoài → cập nhật hiển thị\n effect(() => {\n let val = this.valueModel();\n untracked(() => {\n if (!DateUtilities.isDate(val)) {\n val = null;\n }\n val = DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm');\n if (this.#date !== val) {\n this.#date = val;\n // Cập nhật formControl với chuỗi hiển thị dd/MM/yyyy HH:mm\n const fmt = this.showSeconds() ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm';\n const displayStr = DateUtilities.isDate(this.#date)\n ? DateUtilities.toFormat(this.#date, fmt)\n : null;\n this.formControl.setValue(displayStr, { emitEvent: false });\n }\n });\n });\n\n // EFFECT 2: Sync Disable\n effect(() => {\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\n else this.formControl.enable({ emitEvent: false });\n });\n\n // EFFECT 3: Update Validators\n effect(() => {\n const req = this.required();\n const inl = this.inlineError();\n\n untracked(() => {\n const validators: ValidatorFn[] = [];\n if (req) validators.push(Validators.required);\n if (inl) validators.push(SdInlineErrorValidator);\n\n this.formControl.setValidators(validators.length ? validators : null);\n this.formControl.updateValueAndValidity({ emitEvent: false });\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.formControl.sdChanges.subscribe(() => {\n this.ref.markForCheck();\n })\n );\n const formGroup = this.form();\n formGroup?.addControl(this.name(), this.formControl);\n }\n\n ngOnDestroy() {\n const formGroup = this.form();\n formGroup?.removeControl(this.name());\n this.#subscription.unsubscribe();\n this.#closeOverlay();\n }\n\n // ==========================================\n // 6. POPUP MANAGEMENT — CDK Overlay\n // ==========================================\n\n /** Mở popup chọn datetime, neo vào input. */\n open() {\n if (this.formControl.disabled || this.pickerOpened()) return;\n\n const origin = this.elementRef.nativeElement as HTMLElement;\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\n ])\n .withFlexibleDimensions(false)\n .withPush(true);\n\n const overlayConfig = new OverlayConfig({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'sd-datetime-backdrop',\n panelClass: 'sd-datetime-overlay-panel',\n });\n\n this.#overlayRef = this.overlay.create(overlayConfig);\n const portal = new ComponentPortal(SdDatetimePicker, null, this.injector);\n const ref = this.#overlayRef.attach(portal);\n\n // Đẩy state hiện tại vào popup\n ref.setInput('initialValue', this.#currentValueAsDate());\n ref.setInput('minDate', this.resolvedMin());\n ref.setInput('maxDate', this.resolvedMax());\n ref.setInput('showSeconds', this.showSeconds());\n\n // Subscribe events từ popup\n ref.instance.confirmed.subscribe((value: Date) => this.#onPickerConfirm(value));\n ref.instance.cancelled.subscribe(() => this.#onPickerCancel());\n\n // Đóng khi click backdrop\n this.#overlayRef.backdropClick().subscribe(() => this.#onPickerCancel());\n\n this.pickerOpened.set(true);\n this.ref.markForCheck();\n }\n\n /** Đóng popup (public — gọi từ template nếu cần). */\n close() {\n this.#closeOverlay();\n }\n\n #closeOverlay() {\n if (this.#overlayRef) {\n this.#overlayRef.dispose();\n this.#overlayRef = null;\n }\n if (this.pickerOpened()) {\n this.pickerOpened.set(false);\n this.ref.markForCheck();\n }\n }\n\n #onPickerConfirm(value: Date) {\n const fmt = this.showSeconds() ? 'yyyy/MM/dd HH:mm:ss' : 'yyyy/MM/dd HH:mm:00';\n // value giờ là native Date (date-fns), không cần .toDate() như Moment.\n const stored = DateUtilities.toFormat(value, fmt);\n if (this.#date !== stored) {\n this.valueModel.set(stored);\n this.sdChange.emit(stored);\n }\n this.#closeOverlay();\n }\n\n #onPickerCancel() {\n this.#closeOverlay();\n }\n\n /** Lấy giá trị hiện tại dưới dạng native Date để truyền vào popup. */\n #currentValueAsDate(): Date | null {\n const v = this.valueModel();\n if (!v || !DateUtilities.isDate(v)) return null;\n const fmtted = DateUtilities.toFormat(v as any, 'yyyy/MM/dd HH:mm:ss');\n if (!fmtted) return null;\n const parsed = parseDate(fmtted, 'yyyy/MM/dd HH:mm:ss', new Date());\n return isValidDate(parsed) ? parsed : null;\n }\n\n // ==========================================\n // 7. PARSE/VALIDATE HELPERS\n // ==========================================\n #parseDateBoundary(val: any): Date | null {\n if (val === 'TODAY') return new Date();\n if (val && DateUtilities.isDate(val)) return new Date(val);\n return null;\n }\n\n // ==========================================\n // 8. INPUT EVENT HANDLERS\n // ==========================================\n onFocus = () => {\n this.isFocused = true;\n this.sdFocus.emit();\n };\n\n onBlur = () => {\n this.isFocused = false;\n };\n\n onClick = () => {\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.inputRef()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n setTimeout(() => {\n this.inputRef()?.nativeElement?.focus();\n this.open();\n }, 100);\n };\n\n focusInputElement() {\n this.inputRef()?.nativeElement?.focus();\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n const key = event.keyCode || event.charCode;\n const isShift = key === 16;\n\n if (event.ctrlKey && (key === 67 || key === 86)) return true;\n\n if (\n ((key >= 48 && key <= 57) ||\n key === 8 ||\n key <= 37 ||\n key <= 39 ||\n (key >= 96 && key <= 105) ||\n key === 191 ||\n key === 186 ||\n key === 59) &&\n !isShift\n ) {\n return true;\n }\n return false;\n };\n\n /**\n * Khi user gõ trực tiếp vào input và rời focus → validate format dd/MM/yyyy HH:mm\n * Hỗ trợ cả format có giây.\n */\n onConfirmInput = (event: any) => {\n const currentVal: string = event.target.value;\n const formControl: AbstractControl = this.formControl;\n const regexToMinutes = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\n const regexToSecond = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/g;\n\n if (currentVal && !(regexToMinutes.test(currentVal) || regexToSecond.test(currentVal))) {\n setTimeout(() => {\n formControl.markAsDirty();\n formControl.markAsTouched();\n formControl.setErrors({ ...formControl.errors, date: this.#i18n.t('core.form.datetime.invalid-format') });\n }, 0);\n return;\n }\n\n setTimeout(() => {\n formControl.setErrors({ ...formControl.errors, date: null });\n this.formControl.updateValueAndValidity();\n }, 0);\n\n // Đồng bộ ngược về model nếu hợp lệ.\n // date-fns không có multi-format strict parse như moment, dùng helper parseFirstValid.\n if (currentVal) {\n const parsed = parseFirstValid(currentVal, ['dd/MM/yyyy HH:mm:ss', 'dd/MM/yyyy HH:mm']);\n if (parsed) {\n const fmt = this.showSeconds() ? 'yyyy/MM/dd HH:mm:ss' : 'yyyy/MM/dd HH:mm:00';\n const stored = DateUtilities.toFormat(parsed, fmt);\n if (this.#date !== stored) {\n this.valueModel.set(stored);\n this.sdChange.emit(stored);\n }\n }\n } else if (this.valueModel()) {\n this.valueModel.set(null);\n this.sdChange.emit(null);\n }\n };\n\n clear = ($event: any) => {\n $event?.stopPropagation();\n if (this.formControl.value) {\n this.formControl.setValue(null);\n this.valueModel.set(null);\n this.sdChange.emit(null);\n }\n };\n}\n","@let lbl = label();\n@let app = appearance();\n@let hideErr = hideInlineError();\n@let errMsg = errorMessage();\n@let hText = helperText();\n@let req = required();\n@let _isInline = isInline();\n@let _bare = _isInline;\n@let _hasValue = !!formControl.value;\n\n@let minD = resolvedMin();\n@let maxD = resolvedMax();\n\n@let vDate = viewedDate();\n@if (isViewed()) {\n <sd-view\n [label]=\"lbl\"\n [labelTemplate]=\"sdLabelTemplate()\"\n [value]=\"vDate\"\n [display]=\"vDate | date: (showSeconds() ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm')\"\n [hyperlink]=\"hyperlink()\"\n [valueTemplate]=\"viewTemplate()\">\n </sd-view>\n} @else {\n @if (_isInline) {\n <!-- why: inline — sd-view là \"mặt\" + trigger; datetime editor render ẩn (.sd-inline-editor) chỉ để mở overlay. -->\n <span class=\"sd-inline-view\" role=\"button\" tabindex=\"0\" (click)=\"enterInlineEdit()\" (keydown.enter)=\"enterInlineEdit()\">\n <sd-view\n [label]=\"lbl\"\n [labelTemplate]=\"sdLabelTemplate()\"\n [value]=\"vDate\"\n [display]=\"vDate | date: (showSeconds() ? 'dd/MM/yyyy HH:mm:ss' : 'dd/MM/yyyy HH:mm')\"\n [hyperlink]=\"hyperlink()\"\n [valueTemplate]=\"viewTemplate()\">\n </sd-view>\n @if (clearable() && _hasValue && !req && !formControl.disabled) {\n <button type=\"button\" class=\"sd-inline-clear\" (click)=\"clear($event)\" title=\"Xóa\" aria-label=\"Xóa\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </span>\n }\n @if (!app) {\n <ng-content select=\"[sdLabel]\">\n @if (lbl) {\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\n }\n </ng-content>\n }\n\n <div\n class=\"d-flex align-items-center\"\n [class.sd-inline-editor]=\"_isInline\"\n [class.c-focused]=\"isFocused\"\n [class.c-disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n aria-hidden=\"true\">\n <mat-form-field\n class=\"c-form-field-datetime-input\"\n [class.sd-md]=\"size() === 'md'\"\n [class.sd-sm]=\"size() === 'sm'\"\n [class.hide-inline-error]=\"hideErr\"\n [appearance]=\"app || 'outline'\"\n [floatLabel]=\"floatLabel()\">\n @if (app && lbl) {\n <mat-label style=\"display: inline-block\">\n <div class=\"d-flex align-items-center gap-4\">\n <span>{{ lbl }}</span>\n @if (hText) {\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"below\">info_outline</mat-icon>\n }\n </div>\n </mat-label>\n }\n\n <input\n aria-hidden=\"true\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-error-message]=\"dataErrorMessage()\"\n [id]=\"id\"\n (blur)=\"onConfirmInput($event)\"\n (keyup.enter)=\"onConfirmInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n [autocomplete]=\"id\"\n autocorrect=\"off\"\n [formControl]=\"formControl\"\n [required]=\"req\"\n [placeholder]=\"placeholder() || lbl || ''\"\n [min]=\"minD\"\n [max]=\"maxD\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n #input\n matInput />\n\n @if (hideErr && errMsg && formControl.touched) {\n <mat-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"errMsg\" matTooltipPosition=\"above\"> error </mat-icon>\n }\n\n @if (!hideErr && errMsg && formControl.touched) {\n <mat-error>{{ errMsg }}</mat-error>\n }\n\n @if (formControl.value && !req && !formControl.disabled && !_bare) {\n <button\n type=\"button\"\n class=\"sd-clear-btn sd-hover\"\n matSuffix\n (click)=\"clear($event)\"\n title=\"Xóa\"\n aria-label=\"Xóa\">\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <span class=\"cursor-pointer sd-suffix-icon\" (click)=\"!formControl.disabled && open()\" matSuffix\n ><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\"></path></svg\n ></span>\n </mat-form-field>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isValidDate","parseDate","dfEnUS","i1"],"mappings":"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"}
@@ -3,10 +3,10 @@ import { inject, TemplateRef, Directive } from '@angular/core';
3
3
 
4
4
  class SdSuffixDefDirective {
5
5
  templateRef = inject(TemplateRef);
6
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdSuffixDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: SdSuffixDefDirective, isStandalone: true, selector: "[sdSuffixDef]", ngImport: i0 });
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdSuffixDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: SdSuffixDefDirective, isStandalone: true, selector: "[sdSuffixDef]", ngImport: i0 });
8
8
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdSuffixDefDirective, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdSuffixDefDirective, decorators: [{
10
10
  type: Directive,
11
11
  args: [{
12
12
  selector: '[sdSuffixDef]',
@@ -16,10 +16,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
16
16
 
17
17
  class SdLabelDefDirective {
18
18
  templateRef = inject(TemplateRef);
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdLabelDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: SdLabelDefDirective, isStandalone: true, selector: "[sdLabelDef]", ngImport: i0 });
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdLabelDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: SdLabelDefDirective, isStandalone: true, selector: "[sdLabelDef]", ngImport: i0 });
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdLabelDefDirective, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdLabelDefDirective, decorators: [{
23
23
  type: Directive,
24
24
  args: [{
25
25
  selector: '[sdLabelDef]',
@@ -32,10 +32,10 @@ class SdViewDefDirective {
32
32
  return true;
33
33
  }
34
34
  templateRef = inject(TemplateRef);
35
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdViewDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
36
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: SdViewDefDirective, isStandalone: true, selector: "[sdViewDef]", ngImport: i0 });
35
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdViewDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
36
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: SdViewDefDirective, isStandalone: true, selector: "[sdViewDef]", ngImport: i0 });
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdViewDefDirective, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdViewDefDirective, decorators: [{
39
39
  type: Directive,
40
40
  args: [{
41
41
  selector: '[sdViewDef]',
@@ -48,10 +48,10 @@ class SdItemDefDefDirective {
48
48
  return true;
49
49
  }
50
50
  templateRef = inject(TemplateRef);
51
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdItemDefDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
52
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: SdItemDefDefDirective, isStandalone: true, selector: "[sdItemDef]", ngImport: i0 });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdItemDefDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
52
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: SdItemDefDefDirective, isStandalone: true, selector: "[sdItemDef]", ngImport: i0 });
53
53
  }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: SdItemDefDefDirective, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SdItemDefDefDirective, decorators: [{
55
55
  type: Directive,
56
56
  args: [{
57
57
  selector: '[sdItemDef]',