@neural-ui/core 1.7.1 → 1.7.3

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 (129) hide show
  1. package/bottom-sheet/package.json +4 -0
  2. package/confirm-popup/package.json +4 -0
  3. package/data-view/package.json +4 -0
  4. package/fesm2022/neural-ui-core-alert.mjs +48 -21
  5. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  6. package/fesm2022/neural-ui-core-autocomplete.mjs +153 -71
  7. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  8. package/fesm2022/neural-ui-core-block-ui.mjs +2 -2
  9. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  10. package/fesm2022/neural-ui-core-bottom-sheet.mjs +121 -0
  11. package/fesm2022/neural-ui-core-bottom-sheet.mjs.map +1 -0
  12. package/fesm2022/neural-ui-core-breadcrumb.mjs +2 -2
  13. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  14. package/fesm2022/neural-ui-core-button.mjs +2 -2
  15. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  16. package/fesm2022/neural-ui-core-calendar.mjs +2 -2
  17. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  18. package/fesm2022/neural-ui-core-checkbox.mjs +69 -39
  19. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  20. package/fesm2022/neural-ui-core-chip.mjs +2 -2
  21. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  22. package/fesm2022/neural-ui-core-code-block.mjs +2 -2
  23. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  24. package/fesm2022/neural-ui-core-confirm-popup.mjs +105 -0
  25. package/fesm2022/neural-ui-core-confirm-popup.mjs.map +1 -0
  26. package/fesm2022/neural-ui-core-dashboard-grid.mjs +9 -3
  27. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  28. package/fesm2022/neural-ui-core-data-view.mjs +386 -0
  29. package/fesm2022/neural-ui-core-data-view.mjs.map +1 -0
  30. package/fesm2022/neural-ui-core-date-input.mjs +185 -10
  31. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  32. package/fesm2022/neural-ui-core-empty-state.mjs +19 -5
  33. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  34. package/fesm2022/neural-ui-core-form-field.mjs +81 -0
  35. package/fesm2022/neural-ui-core-form-field.mjs.map +1 -0
  36. package/fesm2022/neural-ui-core-inline-editor.mjs +428 -0
  37. package/fesm2022/neural-ui-core-inline-editor.mjs.map +1 -0
  38. package/fesm2022/neural-ui-core-input-mask.mjs +110 -0
  39. package/fesm2022/neural-ui-core-input-mask.mjs.map +1 -0
  40. package/fesm2022/neural-ui-core-input.mjs +2 -2
  41. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  42. package/fesm2022/neural-ui-core-listbox.mjs +219 -0
  43. package/fesm2022/neural-ui-core-listbox.mjs.map +1 -0
  44. package/fesm2022/neural-ui-core-menu.mjs +229 -0
  45. package/fesm2022/neural-ui-core-menu.mjs.map +1 -0
  46. package/fesm2022/neural-ui-core-modal.mjs +34 -10
  47. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  48. package/fesm2022/neural-ui-core-multiselect.mjs +170 -179
  49. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  50. package/fesm2022/neural-ui-core-number-input.mjs +2 -2
  51. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  52. package/fesm2022/neural-ui-core-panel.mjs +92 -0
  53. package/fesm2022/neural-ui-core-panel.mjs.map +1 -0
  54. package/fesm2022/neural-ui-core-password.mjs +106 -0
  55. package/fesm2022/neural-ui-core-password.mjs.map +1 -0
  56. package/fesm2022/neural-ui-core-pick-list.mjs +133 -0
  57. package/fesm2022/neural-ui-core-pick-list.mjs.map +1 -0
  58. package/fesm2022/neural-ui-core-select.mjs +128 -166
  59. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  60. package/fesm2022/neural-ui-core-sidebar.mjs +14 -3
  61. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  62. package/fesm2022/neural-ui-core-slider.mjs +2 -2
  63. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  64. package/fesm2022/neural-ui-core-spinner.mjs +19 -9
  65. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  66. package/fesm2022/neural-ui-core-split-button.mjs +2 -2
  67. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  68. package/fesm2022/neural-ui-core-table.mjs +503 -62
  69. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  70. package/fesm2022/neural-ui-core-tabs.mjs +11 -4
  71. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  72. package/fesm2022/neural-ui-core-tags.mjs +134 -0
  73. package/fesm2022/neural-ui-core-tags.mjs.map +1 -0
  74. package/fesm2022/neural-ui-core-textarea.mjs +2 -2
  75. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  76. package/fesm2022/neural-ui-core-toggle-button-group.mjs +2 -2
  77. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  78. package/fesm2022/neural-ui-core-toolbar.mjs +16 -4
  79. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  80. package/fesm2022/neural-ui-core-tree-select.mjs +259 -0
  81. package/fesm2022/neural-ui-core-tree-select.mjs.map +1 -0
  82. package/fesm2022/neural-ui-core-tree-table.mjs +267 -8
  83. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  84. package/fesm2022/neural-ui-core-tree.mjs +15 -14
  85. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  86. package/fesm2022/neural-ui-core-uploader.mjs +103 -12
  87. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  88. package/form-field/package.json +4 -0
  89. package/inline-editor/package.json +4 -0
  90. package/input-mask/package.json +4 -0
  91. package/listbox/package.json +4 -0
  92. package/menu/package.json +4 -0
  93. package/package.json +53 -1
  94. package/panel/package.json +4 -0
  95. package/password/package.json +4 -0
  96. package/pick-list/package.json +4 -0
  97. package/styles/_tokens.scss +33 -17
  98. package/tags/package.json +4 -0
  99. package/tree-select/package.json +4 -0
  100. package/types/neural-ui-core-alert.d.ts +2 -1
  101. package/types/neural-ui-core-autocomplete.d.ts +22 -2
  102. package/types/neural-ui-core-bottom-sheet.d.ts +20 -0
  103. package/types/neural-ui-core-checkbox.d.ts +6 -1
  104. package/types/neural-ui-core-confirm-popup.d.ts +38 -0
  105. package/types/neural-ui-core-dashboard-grid.d.ts +1 -0
  106. package/types/neural-ui-core-data-view.d.ts +95 -0
  107. package/types/neural-ui-core-date-input.d.ts +35 -5
  108. package/types/neural-ui-core-empty-state.d.ts +11 -1
  109. package/types/neural-ui-core-form-field.d.ts +33 -0
  110. package/types/neural-ui-core-inline-editor.d.ts +66 -0
  111. package/types/neural-ui-core-input-mask.d.ts +26 -0
  112. package/types/neural-ui-core-listbox.d.ts +54 -0
  113. package/types/neural-ui-core-menu.d.ts +49 -0
  114. package/types/neural-ui-core-modal.d.ts +10 -2
  115. package/types/neural-ui-core-multiselect.d.ts +10 -1
  116. package/types/neural-ui-core-panel.d.ts +25 -0
  117. package/types/neural-ui-core-password.d.ts +29 -0
  118. package/types/neural-ui-core-pick-list.d.ts +40 -0
  119. package/types/neural-ui-core-select.d.ts +7 -1
  120. package/types/neural-ui-core-sidebar.d.ts +5 -1
  121. package/types/neural-ui-core-spinner.d.ts +4 -2
  122. package/types/neural-ui-core-table.d.ts +89 -5
  123. package/types/neural-ui-core-tabs.d.ts +2 -0
  124. package/types/neural-ui-core-tags.d.ts +32 -0
  125. package/types/neural-ui-core-toolbar.d.ts +8 -2
  126. package/types/neural-ui-core-tree-select.d.ts +57 -0
  127. package/types/neural-ui-core-tree-table.d.ts +111 -4
  128. package/types/neural-ui-core-tree.d.ts +1 -1
  129. package/types/neural-ui-core-uploader.d.ts +26 -3
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-date-input.mjs","sources":["../../../../projects/ui-core/date-input/neu-date-input.component.ts","../../../../projects/ui-core/date-input/neural-ui-core-date-input.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// ── Exported types ───────────────────────────────────────────────────────────\n\n/** Rango de fechas seleccionado / Selected date range */\nexport interface NeuDateRange {\n start: Date | null;\n end: Date | null;\n}\n\n// ── Private helpers ──────────────────────────────────────────────────────────\n\nlet _neuDateInputIdSeq = 0;\n\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n}\n\ninterface DrumSlot {\n value: number;\n offset: number;\n label: string;\n}\n\ninterface RangeCell {\n date: Date;\n day: number;\n ts: number;\n current: boolean;\n today: boolean;\n selected: boolean;\n rangeStart: boolean;\n rangeEnd: boolean;\n inRange: boolean;\n label: string;\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction cloneDate(d: Date): Date {\n return new Date(d.getTime());\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\n/**\n * NeuralUI DateInput — campo de fecha/hora unificado con modo rango.\n * Unified date/time field with range mode.\n *\n * Uso básico / Basic usage:\n * <neu-date-input type=\"date\" [formControl]=\"dateCtrl\" />\n * <neu-date-input type=\"time\" [formControl]=\"timeCtrl\" />\n * <neu-date-input type=\"datetime-local\" [formControl]=\"dateTimeCtrl\" />\n * <neu-date-input type=\"range\" [formControl]=\"rangeCtrl\" />\n */\n@Component({\n selector: 'neu-date-input',\n imports: [OverlayModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-date-input-host',\n '[class.neu-date-input-host--sm]': 'size() === \"sm\"',\n '[class.neu-date-input-host--lg]': 'size() === \"lg\"',\n '[class.neu-drp]': '_isRange()',\n '[class.neu-drp--open]': '_isRange() && isOpen()',\n '[class.neu-drp--disabled]': '_isRange() && isDisabledFinal()',\n '(keydown.escape)': 'close()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuDateInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (_isRange()) {\n @if (label()) {\n <label class=\"neu-drp__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <button\n cdkOverlayOrigin\n #rangeOrigin=\"cdkOverlayOrigin\"\n type=\"button\"\n [id]=\"_id\"\n class=\"neu-drp__trigger\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"label() || _texts().rangeAriaLabel\"\n [disabled]=\"isDisabledFinal()\"\n (click)=\"toggle()\"\n >\n <span class=\"neu-drp__icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </span>\n <span class=\"neu-drp__value\" [class.neu-drp__value--placeholder]=\"!_hasRange()\">\n {{ _hasRange() ? _rangeDisplayValue() : _rangePlaceholderText() }}\n </span>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"rangeOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"rangeOverlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n >\n <div\n class=\"neu-drp__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"_texts().rangeAriaLabel\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"neu-drp__calendars\">\n <div class=\"neu-drp__cal\">\n <div class=\"neu-drp__cal-nav\">\n <button type=\"button\" [attr.aria-label]=\"_texts().prevMonth\" (click)=\"_prevLeft()\">\n ‹\n </button>\n <span class=\"neu-drp__cal-title\">{{ _leftTitle() }}</span>\n <button type=\"button\" [attr.aria-label]=\"_texts().nextMonth\" (click)=\"_nextLeft()\">\n ›\n </button>\n </div>\n <div class=\"neu-drp__cal-grid\">\n @for (d of _weekDayLabels(); track d) {\n <span class=\"neu-drp__day-label\">{{ d }}</span>\n }\n @for (cell of _leftDays(); track cell.ts) {\n <button\n type=\"button\"\n class=\"neu-drp__cell\"\n [class.neu-drp__cell--other-month]=\"!cell.current\"\n [class.neu-drp__cell--today]=\"cell.today\"\n [class.neu-drp__cell--selected]=\"cell.selected\"\n [class.neu-drp__cell--range-start]=\"cell.rangeStart\"\n [class.neu-drp__cell--range-end]=\"cell.rangeEnd\"\n [class.neu-drp__cell--in-range]=\"cell.inRange\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-pressed]=\"cell.selected\"\n (click)=\"_selectDay(cell.date)\"\n (mouseenter)=\"_hoverDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n <div class=\"neu-drp__cal\">\n <div class=\"neu-drp__cal-nav\">\n <button type=\"button\" [attr.aria-label]=\"_texts().prevMonth\" (click)=\"_prevRight()\">\n ‹\n </button>\n <span class=\"neu-drp__cal-title\">{{ _rightTitle() }}</span>\n <button type=\"button\" [attr.aria-label]=\"_texts().nextMonth\" (click)=\"_nextRight()\">\n ›\n </button>\n </div>\n <div class=\"neu-drp__cal-grid\">\n @for (d of _weekDayLabels(); track d) {\n <span class=\"neu-drp__day-label\">{{ d }}</span>\n }\n @for (cell of _rightDays(); track cell.ts) {\n <button\n type=\"button\"\n class=\"neu-drp__cell\"\n [class.neu-drp__cell--other-month]=\"!cell.current\"\n [class.neu-drp__cell--today]=\"cell.today\"\n [class.neu-drp__cell--selected]=\"cell.selected\"\n [class.neu-drp__cell--range-start]=\"cell.rangeStart\"\n [class.neu-drp__cell--range-end]=\"cell.rangeEnd\"\n [class.neu-drp__cell--in-range]=\"cell.inRange\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-pressed]=\"cell.selected\"\n (click)=\"_selectDay(cell.date)\"\n (mouseenter)=\"_hoverDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n </div>\n <div class=\"neu-drp__footer\">\n <button type=\"button\" class=\"neu-drp__clear\" (click)=\"_clearRange()\">\n {{ _texts().clear }}\n </button>\n <button\n type=\"button\"\n class=\"neu-drp__apply\"\n [disabled]=\"!_canApply()\"\n (click)=\"_applyRange()\"\n >\n {{ _texts().apply }}\n </button>\n </div>\n </div>\n </ng-template>\n } @else {\n @if (!floatingLabel() && label()) {\n <label class=\"neu-date-input__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <div\n class=\"neu-date-input\"\n [class.neu-date-input--open]=\"isOpen()\"\n [class.neu-date-input--disabled]=\"isDisabledFinal()\"\n [class.neu-date-input--error]=\"hasError()\"\n [class.neu-date-input--has-value]=\"_value()\"\n [class.neu-date-input--float]=\"floatingLabel()\"\n >\n <button\n cdkOverlayOrigin\n #singleOrigin=\"cdkOverlayOrigin\"\n class=\"neu-date-input__trigger\"\n type=\"button\"\n [id]=\"_id\"\n [disabled]=\"isDisabledFinal() || readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n <span class=\"neu-date-input__icon\" aria-hidden=\"true\">\n @if (type() === 'time') {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n }\n </span>\n <span\n class=\"neu-date-input__display\"\n [class.neu-date-input__display--placeholder]=\"!_value()\"\n >\n {{ displayValue() || (floatingLabel() ? '' : placeholderText()) }}\n </span>\n </button>\n @if (floatingLabel() && label()) {\n <label class=\"neu-date-input__float-label\" [for]=\"_id\">{{ label() }}</label>\n }\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"singleOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"singleOverlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n >\n <div\n class=\"neu-date-input__panel\"\n [class.neu-date-input__panel--time-only]=\"type() === 'time'\"\n role=\"dialog\"\n [attr.aria-label]=\"_texts().chooseDate + (monthLabel() ? ': ' + monthLabel() : '')\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (type() !== 'time') {\n <div class=\"neu-date-input__calendar\">\n <div class=\"neu-date-input__cal-nav\">\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"prevMonth()\"\n [attr.aria-label]=\"_texts().prevMonth\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n <span class=\"neu-date-input__cal-title\">{{ monthLabel() }}</span>\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"_texts().nextMonth\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n <div class=\"neu-date-input__cal-weekdays\">\n @for (d of weekdays(); track d) {\n <span>{{ d }}</span>\n }\n </div>\n <div class=\"neu-date-input__cal-grid\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n class=\"neu-date-input__cal-day\"\n type=\"button\"\n [class.neu-date-input__cal-day--other]=\"!day.inMonth\"\n [class.neu-date-input__cal-day--today]=\"day.isToday\"\n [class.neu-date-input__cal-day--selected]=\"day.isSelected\"\n [attr.aria-label]=\"formatDayLabel(day.date)\"\n [attr.aria-pressed]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n <div class=\"neu-date-input__cal-footer\">\n <button class=\"neu-date-input__cal-footer-btn\" type=\"button\" (click)=\"clear()\">\n {{ _texts().delete }}\n </button>\n <button\n class=\"neu-date-input__cal-footer-btn neu-date-input__cal-footer-btn--today\"\n type=\"button\"\n (click)=\"today()\"\n >\n {{ _texts().today }}\n </button>\n </div>\n </div>\n }\n @if (type() === 'datetime-local') {\n <div class=\"neu-date-input__sep\"></div>\n }\n @if (type() !== 'date') {\n <div class=\"neu-date-input__time\">\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(-1)\"\n [attr.aria-label]=\"_texts().prevHour\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onHourWheel($event)\">\n @for (slot of hourSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeHour(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(1)\"\n [attr.aria-label]=\"_texts().nextHour\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n <span class=\"neu-date-input__time-colon\">:</span>\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(-1)\"\n [attr.aria-label]=\"_texts().prevMinute\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onMinuteWheel($event)\">\n @for (slot of minuteSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeMinute(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(1)\"\n [attr.aria-label]=\"_texts().nextMinute\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </div>\n @if (hasError()) {\n <p class=\"neu-date-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n } @else if (hint()) {\n <p class=\"neu-date-input__hint\">{{ hint() }}</p>\n }\n }\n `,\n styleUrl: './neu-date-input.component.scss',\n})\nexport class NeuDateInputComponent implements ControlValueAccessor, OnDestroy {\n private readonly doc = inject(DOCUMENT);\n private readonly overlay = inject(Overlay);\n private _langObserver?: MutationObserver;\n\n /** Tipo del campo / Field type */\n type = input<'date' | 'time' | 'datetime-local' | 'range'>('date');\n /** Etiqueta / Label */\n label = input<string>('');\n /** Texto de ayuda / Help text */\n hint = input<string>('');\n /** Mensaje de error / Error message */\n errorMessage = input<string>('');\n /** Deshabilita / Disabled */\n disabled = input<boolean>(false);\n /** Tamaño del campo: 'sm' = 36px | 'md' = 48px | 'lg' = 56px / Field size */\n size = input<'sm' | 'md' | 'lg'>('md');\n /** Solo lectura / Read only */\n readonly = input<boolean>(false);\n /** Nombre / Field name */\n name = input<string>('');\n /** ID accesible / Accessible ID */\n inputId = input<string>('');\n /** Requerido / Required */\n required = input<boolean>(false);\n /** Mínimo / Minimum */\n min = input<string | null>(null);\n /** Máximo / Maximum */\n max = input<string | null>(null);\n /** Paso / Step */\n step = input<number | null>(null);\n /** Locale explícito opcional / Optional explicit locale */\n locale = input<string | null>(null);\n\n // ── Range-mode inputs ────────────────────────────────────────────\n /** Placeholder del trigger de rango / Range trigger placeholder */\n placeholder = input<string>('');\n /** Formato de fecha en modo rango / Date display format in range mode */\n dateFormat = input<'short' | 'medium' | 'long' | 'full' | 'numeric'>('short');\n /** Etiqueta flotante / Floating label */\n floatingLabel = input<boolean>(false);\n\n // ── Outputs ──────────────────────────────────────────────────────\n /** Emitido al confirmar el rango / Emitted when range is confirmed */\n readonly rangeChange = output<NeuDateRange>();\n\n // ── Estado interno / Internal state ──────────────────────────────\n protected readonly _id = `neu-date-input-${++_neuDateInputIdSeq}`;\n readonly isOpen = signal(false);\n readonly _viewportMargin = 16;\n readonly singleOverlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n readonly rangeOverlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n readonly overlayScrollStrategy = this.overlay.scrollStrategies.reposition();\n readonly _isRange = computed(() => this.type() === 'range');\n private readonly _cvaDisabled = signal(false);\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n readonly hasError = computed(() => !!this.errorMessage());\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onChange: (v: any) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── State — single ────────────────────────────────────────────────\n protected readonly _value = signal<string>('');\n protected readonly _viewYear = signal(new Date().getFullYear());\n protected readonly _viewMonth = signal(new Date().getMonth());\n protected readonly _selYear = signal<number | null>(null);\n protected readonly _selMonth = signal<number | null>(null);\n protected readonly _selDay = signal<number | null>(null);\n protected readonly _selHour = signal(0);\n protected readonly _selMinute = signal(0);\n\n // ── State — range ─────────────────────────────────────────────────\n private readonly _today = new Date();\n private readonly _documentLang = signal(\n this.#normalizedLocale(this.doc.documentElement.lang) || 'es',\n );\n private readonly _pickStart = signal<Date | null>(null);\n private readonly _pickEnd = signal<Date | null>(null);\n private readonly _hoverDate = signal<Date | null>(null);\n readonly _leftCursor = signal<Date>(\n new Date(this._today.getFullYear(), this._today.getMonth(), 1),\n );\n readonly _rightCursor = computed(() => {\n const l = this._leftCursor();\n return new Date(l.getFullYear(), l.getMonth() + 1, 1);\n });\n readonly _hasRange = computed(() => !!this._pickStart());\n readonly _canApply = computed(() => this._pickStart() !== null && this._pickEnd() !== null);\n readonly _resolvedLocale = computed(\n () => this.#normalizedLocale(this.locale()) || this._documentLang() || 'es',\n );\n readonly _texts = computed(() => {\n const spanish = this._resolvedLocale().toLowerCase().startsWith('es');\n return spanish\n ? {\n rangeAriaLabel: 'Seleccionar rango de fechas',\n prevMonth: 'Mes anterior',\n nextMonth: 'Mes siguiente',\n clear: 'Limpiar',\n apply: 'Aplicar',\n chooseDate: 'Seleccionar fecha',\n delete: 'Borrar',\n today: 'Hoy',\n prevHour: 'Hora anterior',\n nextHour: 'Hora siguiente',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Minuto siguiente',\n rangePlaceholder: 'Seleccionar fechas',\n timePlaceholder: 'hh:mm',\n datePlaceholder: 'dd/mm/aaaa',\n dateTimePlaceholder: 'dd/mm/aaaa, hh:mm',\n }\n : {\n rangeAriaLabel: 'Select date range',\n prevMonth: 'Previous month',\n nextMonth: 'Next month',\n clear: 'Clear',\n apply: 'Apply',\n chooseDate: 'Choose date',\n delete: 'Clear',\n today: 'Today',\n prevHour: 'Previous hour',\n nextHour: 'Next hour',\n prevMinute: 'Previous minute',\n nextMinute: 'Next minute',\n rangePlaceholder: 'Select dates',\n timePlaceholder: 'hh:mm',\n datePlaceholder: 'mm/dd/yyyy',\n dateTimePlaceholder: 'mm/dd/yyyy, hh:mm',\n };\n });\n\n readonly _weekDayLabels = computed(() => this.#buildWeekdayLabels('short'));\n readonly _leftTitle = computed(() => this._monthTitle(this._leftCursor()));\n readonly _rightTitle = computed(() => this._monthTitle(this._rightCursor()));\n readonly _leftDays = computed(() => this._buildRangeMonth(this._leftCursor()));\n readonly _rightDays = computed(() => this._buildRangeMonth(this._rightCursor()));\n readonly _rangePlaceholderText = computed(\n () => this.placeholder() || this._texts().rangePlaceholder,\n );\n\n constructor() {\n if (typeof MutationObserver !== 'undefined') {\n this._langObserver = new MutationObserver(() => {\n this._documentLang.set(this.#normalizedLocale(this.doc.documentElement.lang) || 'es');\n });\n this._langObserver.observe(this.doc.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n });\n }\n }\n\n ngOnDestroy(): void {\n this._langObserver?.disconnect();\n }\n\n private _monthTitle(d: Date): string {\n return this.#capitalize(\n new Intl.DateTimeFormat(this._resolvedLocale(), { month: 'long', year: 'numeric' }).format(d),\n );\n }\n\n readonly _rangeDisplayValue = computed(() => {\n const s = this._pickStart();\n const e = this._pickEnd();\n if (!s) return this.placeholder();\n if (!e) return this._fmtDate(s);\n return `${this._fmtDate(s)} – ${this._fmtDate(e)}`;\n });\n\n private _fmtDate(d: Date): string {\n const fmt = this.dateFormat();\n const opts: Record<string, Intl.DateTimeFormatOptions> = {\n short: { day: '2-digit', month: '2-digit', year: 'numeric' },\n medium: { day: '2-digit', month: 'short', year: 'numeric' },\n long: { day: 'numeric', month: 'long', year: 'numeric' },\n full: { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' },\n numeric: { day: 'numeric', month: 'numeric', year: '2-digit' },\n };\n return d.toLocaleDateString(this._resolvedLocale(), opts[fmt] ?? opts['short']);\n }\n\n private _buildRangeMonth(cursor: Date): RangeCell[] {\n const year = cursor.getFullYear();\n const month = cursor.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startOffset = (firstDay.getDay() + 6) % 7;\n const cells: RangeCell[] = [];\n for (let i = startOffset - 1; i >= 0; i--) {\n cells.push(this._rangeCell(new Date(year, month, -i), false));\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n cells.push(this._rangeCell(new Date(year, month, d), true));\n }\n while (cells.length % 7 !== 0 || cells.length < 42) {\n cells.push(\n this._rangeCell(\n new Date(year, month + 1, cells.length - startOffset - lastDay.getDate() + 1),\n false,\n ),\n );\n }\n return cells;\n }\n\n private _rangeCell(date: Date, current: boolean): RangeCell {\n const s = this._pickStart();\n const e = this._pickEnd();\n const h = this._hoverDate();\n const rangeEnd = e ?? h;\n const inRange =\n s && rangeEnd\n ? (date > s && date < rangeEnd) || (rangeEnd < s && date > rangeEnd && date < s)\n : false;\n return {\n date,\n day: date.getDate(),\n ts: date.getTime(),\n current,\n today: sameDay(date, this._today),\n selected: (s && sameDay(date, s)) || (e && sameDay(date, e)) || false,\n rangeStart: s ? sameDay(date, s) : false,\n rangeEnd: e ? sameDay(date, e) : false,\n inRange: !!inRange,\n label: date.toLocaleDateString(this._resolvedLocale()),\n };\n }\n\n // ── Range actions ─────────────────────────────────────────────────\n _prevLeft(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() - 1, 1));\n }\n _nextLeft(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() + 1, 1));\n }\n _prevRight(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() - 1, 1));\n }\n _nextRight(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() + 1, 1));\n }\n\n _selectDay(date: Date): void {\n const s = this._pickStart();\n if (!s || this._pickEnd()) {\n this._pickStart.set(cloneDate(date));\n this._pickEnd.set(null);\n this._hoverDate.set(null);\n } else {\n if (date < s) {\n this._pickEnd.set(cloneDate(s));\n this._pickStart.set(cloneDate(date));\n } else {\n this._pickEnd.set(cloneDate(date));\n }\n this._hoverDate.set(null);\n }\n }\n\n _hoverDay(date: Date): void {\n if (this._pickStart() && !this._pickEnd()) this._hoverDate.set(date);\n }\n\n _applyRange(): void {\n const range: NeuDateRange = { start: this._pickStart(), end: this._pickEnd() };\n this._onChange(range);\n this.rangeChange.emit(range);\n this._onTouched();\n this.isOpen.set(false);\n }\n\n _clearRange(): void {\n this._pickStart.set(null);\n this._pickEnd.set(null);\n this._hoverDate.set(null);\n const range: NeuDateRange = { start: null, end: null };\n this._onChange(range);\n this.rangeChange.emit(range);\n }\n\n // ── Single computed ───────────────────────────────────────────────\n readonly displayValue = computed(() => {\n const v = this._value();\n if (!v) return '';\n const t = this.type();\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n return isNaN(d.getTime())\n ? v\n : d.toLocaleDateString(this._resolvedLocale(), {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n });\n }\n if (t === 'time') return v;\n const [datePart, timePart] = v.split('T');\n const d = new Date(datePart + 'T00:00:00');\n return (\n (isNaN(d.getTime())\n ? datePart\n : d.toLocaleDateString(this._resolvedLocale(), {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n })) +\n ', ' +\n (timePart?.slice(0, 5) ?? '')\n );\n });\n\n readonly placeholderText = computed(() => {\n switch (this.type()) {\n case 'time':\n return this._texts().timePlaceholder;\n case 'datetime-local':\n return this._texts().dateTimePlaceholder;\n default:\n return this._texts().datePlaceholder;\n }\n });\n\n readonly monthLabel = computed(() =>\n this.#capitalize(\n new Date(this._viewYear(), this._viewMonth(), 1).toLocaleDateString(this._resolvedLocale(), {\n month: 'long',\n year: 'numeric',\n }),\n ),\n );\n\n readonly weekdays = computed(() => this.#buildWeekdayLabels('narrow'));\n\n readonly calendarDays = computed((): CalendarDay[] => {\n const year = this._viewYear();\n const month = this._viewMonth();\n const today = new Date();\n const firstDay = new Date(year, month, 1);\n const startDow = (firstDay.getDay() + 6) % 7;\n const days: CalendarDay[] = [];\n for (let i = startDow; i > 0; i--) {\n days.push({\n date: new Date(year, month, 1 - i),\n inMonth: false,\n isToday: false,\n isSelected: false,\n });\n }\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n for (let d = 1; d <= daysInMonth; d++) {\n const date = new Date(year, month, d);\n days.push({\n date,\n inMonth: true,\n isToday: date.toDateString() === today.toDateString(),\n isSelected: this._selYear() === year && this._selMonth() === month && this._selDay() === d,\n });\n }\n let next = 1;\n while (days.length < 42) {\n days.push({\n date: new Date(year, month + 1, next++),\n inMonth: false,\n isToday: false,\n isSelected: false,\n });\n }\n return days;\n });\n\n readonly hourSlots = computed(() => this._drumSlots(this._selHour(), 24));\n readonly minuteSlots = computed(() => this._drumSlots(this._selMinute(), 60));\n\n private _drumSlots(value: number, max: number): DrumSlot[] {\n return [-1, 0, 1].map((offset) => {\n const v = (((value + offset) % max) + max) % max;\n return { value: v, offset, label: String(v).padStart(2, '0') };\n });\n }\n\n // ── Single actions ────────────────────────────────────────────────\n toggle(): void {\n if (this.isDisabledFinal()) return;\n if (!this._isRange() && this.readonly()) return;\n this.isOpen.update((v) => !v);\n }\n\n close(): void {\n this.isOpen.set(false);\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Element | null;\n const isInsidePanel = !!target?.closest('.neu-date-input__panel, .neu-drp__panel');\n if (!isInsidePanel) {\n this.close();\n }\n }\n\n prevMonth(): void {\n if (this._viewMonth() === 0) {\n this._viewMonth.set(11);\n this._viewYear.update((y) => y - 1);\n } else this._viewMonth.update((m) => m - 1);\n }\n\n nextMonth(): void {\n if (this._viewMonth() === 11) {\n this._viewMonth.set(0);\n this._viewYear.update((y) => y + 1);\n } else this._viewMonth.update((m) => m + 1);\n }\n\n selectDay(day: CalendarDay): void {\n if (!day.inMonth) return;\n this._selYear.set(day.date.getFullYear());\n this._selMonth.set(day.date.getMonth());\n this._selDay.set(day.date.getDate());\n this._emitValue();\n if (this.type() === 'date') this.close();\n }\n\n formatDayLabel(date: Date): string {\n return date.toLocaleDateString(this._resolvedLocale(), {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n\n today(): void {\n const d = new Date();\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n this.selectDay({ date: d, inMonth: true, isToday: true, isSelected: false });\n }\n\n clear(): void {\n this._selYear.set(null);\n this._selMonth.set(null);\n this._selDay.set(null);\n this._value.set('');\n this._onChange('');\n this.close();\n }\n\n changeHour(delta: number): void {\n this._selHour.update((h) => (((h + delta) % 24) + 24) % 24);\n this._emitValue();\n }\n\n changeMinute(delta: number): void {\n this._selMinute.update((m) => (((m + delta) % 60) + 60) % 60);\n this._emitValue();\n }\n\n onHourWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeHour(e.deltaY > 0 ? 1 : -1);\n }\n onMinuteWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeMinute(e.deltaY > 0 ? 1 : -1);\n }\n\n private _emitValue(): void {\n const t = this.type();\n let v = '';\n if (t === 'date' || t === 'datetime-local') {\n if (this._selYear() === null) return;\n const y = this._selYear()!;\n const mo = String(this._selMonth()! + 1).padStart(2, '0');\n const d = String(this._selDay()!).padStart(2, '0');\n const ds = `${y}-${mo}-${d}`;\n v =\n t === 'date'\n ? ds\n : `${ds}T${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n } else {\n v = `${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n }\n this._value.set(v);\n this._onChange(v);\n }\n\n // ── CVA ───────────────────────────────────────────────────────────\n writeValue(value: string | NeuDateRange | null): void {\n if (this.type() === 'range') {\n const v = value as NeuDateRange | null;\n this._pickStart.set(v?.start ?? null);\n this._pickEnd.set(v?.end ?? null);\n } else {\n const v = (value as string) ?? '';\n this._value.set(v);\n if (!v) return;\n const t = this.type();\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n } else if (t === 'time') {\n const [h, m] = v.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n } else {\n const [datePart, timePart] = v.split('T');\n if (datePart) {\n const d = new Date(datePart + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n }\n if (timePart) {\n const [h, m] = timePart.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n }\n }\n }\n }\n\n registerOnChange(fn: (v: string | NeuDateRange) => void): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n\n #normalizedLocale(locale: string | null | undefined): string {\n return locale?.trim() || '';\n }\n\n #capitalize(value: string): string {\n return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;\n }\n\n #buildWeekdayLabels(style: 'short' | 'narrow'): string[] {\n const formatter = new Intl.DateTimeFormat(this._resolvedLocale(), {\n weekday: style,\n timeZone: 'UTC',\n });\n return Array.from({ length: 7 }, (_, index) => {\n const label = formatter\n .format(new Date(Date.UTC(2024, 0, 1 + index)))\n .replace(/\\.$/, '')\n .trim();\n if (style === 'narrow') {\n return label.slice(0, 1).toUpperCase();\n }\n return this.#capitalize(label);\n });\n }\n}\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":"neural-ui-core-date-input.mjs","sources":["../../../../projects/ui-core/date-input/neu-date-input.component.ts","../../../../projects/ui-core/date-input/neural-ui-core-date-input.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// ── Exported types ───────────────────────────────────────────────────────────\n\n/** Rango de fechas seleccionado / Selected date range */\nexport interface NeuDateRange {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface NeuDatePreset {\n label: string;\n range: NeuDateRange | (() => NeuDateRange);\n}\n\n// ── Private helpers ──────────────────────────────────────────────────────────\n\nlet _neuDateInputIdSeq = 0;\n\ninterface CalendarDay {\n date: Date;\n inMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n disabled: boolean;\n}\n\ninterface DrumSlot {\n value: number;\n offset: number;\n label: string;\n}\n\ninterface RangeCell {\n date: Date;\n day: number;\n ts: number;\n current: boolean;\n today: boolean;\n selected: boolean;\n rangeStart: boolean;\n rangeEnd: boolean;\n inRange: boolean;\n label: string;\n disabled: boolean;\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction cloneDate(d: Date): Date {\n return new Date(d.getTime());\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\n/**\n * NeuralUI DateInput — campo de fecha/hora unificado con modo rango.\n * Unified date/time field with range mode.\n *\n * Uso básico / Basic usage:\n * <neu-date-input type=\"date\" [formControl]=\"dateCtrl\" />\n * <neu-date-input type=\"time\" [formControl]=\"timeCtrl\" />\n * <neu-date-input type=\"datetime-local\" [formControl]=\"dateTimeCtrl\" />\n * <neu-date-input type=\"range\" [formControl]=\"rangeCtrl\" />\n */\n@Component({\n selector: 'neu-date-input',\n imports: [OverlayModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-date-input-host',\n '[class.neu-date-input-host--sm]': 'size() === \"sm\"',\n '[class.neu-date-input-host--lg]': 'size() === \"lg\"',\n '[class.neu-drp]': '_isRange()',\n '[class.neu-drp--open]': '_isRange() && isOpen()',\n '[class.neu-drp--disabled]': '_isRange() && isDisabledFinal()',\n '(keydown.escape)': 'close()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuDateInputComponent),\n multi: true,\n },\n ],\n template: `\n @if (_isRange()) {\n @if (label()) {\n <label class=\"neu-drp__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <button\n cdkOverlayOrigin\n #rangeOrigin=\"cdkOverlayOrigin\"\n type=\"button\"\n [id]=\"_id\"\n class=\"neu-drp__trigger\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"label() || _texts().rangeAriaLabel\"\n [disabled]=\"isDisabledFinal()\"\n (click)=\"toggle()\"\n >\n <span class=\"neu-drp__icon\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </span>\n <span class=\"neu-drp__value\" [class.neu-drp__value--placeholder]=\"!_hasRange()\">\n {{ _hasRange() ? _rangeDisplayValue() : _rangePlaceholderText() }}\n </span>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"rangeOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"rangeOverlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n >\n <div\n class=\"neu-drp__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"_texts().rangeAriaLabel\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (presets().length > 0) {\n <div class=\"neu-drp__presets\" role=\"list\">\n @for (preset of presets(); track preset.label) {\n <button type=\"button\" class=\"neu-drp__preset\" (click)=\"_applyPreset(preset)\">\n {{ preset.label }}\n </button>\n }\n </div>\n }\n <div class=\"neu-drp__calendars\">\n <div class=\"neu-drp__cal\">\n <div class=\"neu-drp__cal-nav\">\n <button type=\"button\" [attr.aria-label]=\"_texts().prevMonth\" (click)=\"_prevLeft()\">\n ‹\n </button>\n <span class=\"neu-drp__cal-title\">{{ _leftTitle() }}</span>\n <button type=\"button\" [attr.aria-label]=\"_texts().nextMonth\" (click)=\"_nextLeft()\">\n ›\n </button>\n </div>\n <div class=\"neu-drp__cal-grid\">\n @for (d of _weekDayLabels(); track d) {\n <span class=\"neu-drp__day-label\">{{ d }}</span>\n }\n @for (cell of _leftDays(); track cell.ts) {\n <button\n type=\"button\"\n class=\"neu-drp__cell\"\n [class.neu-drp__cell--other-month]=\"!cell.current\"\n [class.neu-drp__cell--today]=\"cell.today\"\n [class.neu-drp__cell--selected]=\"cell.selected\"\n [class.neu-drp__cell--range-start]=\"cell.rangeStart\"\n [class.neu-drp__cell--range-end]=\"cell.rangeEnd\"\n [class.neu-drp__cell--in-range]=\"cell.inRange\"\n [disabled]=\"cell.disabled\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-pressed]=\"cell.selected\"\n (click)=\"_selectDay(cell.date)\"\n (mouseenter)=\"_hoverDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n <div class=\"neu-drp__cal\">\n <div class=\"neu-drp__cal-nav\">\n <button type=\"button\" [attr.aria-label]=\"_texts().prevMonth\" (click)=\"_prevRight()\">\n ‹\n </button>\n <span class=\"neu-drp__cal-title\">{{ _rightTitle() }}</span>\n <button type=\"button\" [attr.aria-label]=\"_texts().nextMonth\" (click)=\"_nextRight()\">\n ›\n </button>\n </div>\n <div class=\"neu-drp__cal-grid\">\n @for (d of _weekDayLabels(); track d) {\n <span class=\"neu-drp__day-label\">{{ d }}</span>\n }\n @for (cell of _rightDays(); track cell.ts) {\n <button\n type=\"button\"\n class=\"neu-drp__cell\"\n [class.neu-drp__cell--other-month]=\"!cell.current\"\n [class.neu-drp__cell--today]=\"cell.today\"\n [class.neu-drp__cell--selected]=\"cell.selected\"\n [class.neu-drp__cell--range-start]=\"cell.rangeStart\"\n [class.neu-drp__cell--range-end]=\"cell.rangeEnd\"\n [class.neu-drp__cell--in-range]=\"cell.inRange\"\n [disabled]=\"cell.disabled\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-pressed]=\"cell.selected\"\n (click)=\"_selectDay(cell.date)\"\n (mouseenter)=\"_hoverDay(cell.date)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n </div>\n <div class=\"neu-drp__footer\">\n <button type=\"button\" class=\"neu-drp__clear\" (click)=\"_clearRange()\">\n {{ _texts().clear }}\n </button>\n <button\n type=\"button\"\n class=\"neu-drp__apply\"\n [disabled]=\"!_canApply()\"\n (click)=\"_applyRange()\"\n >\n {{ _texts().apply }}\n </button>\n </div>\n </div>\n </ng-template>\n } @else {\n @if (!floatingLabel() && label()) {\n <label class=\"neu-date-input__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <div\n class=\"neu-date-input\"\n [class.neu-date-input--open]=\"isOpen()\"\n [class.neu-date-input--disabled]=\"isDisabledFinal()\"\n [class.neu-date-input--error]=\"hasError()\"\n [class.neu-date-input--has-value]=\"_value()\"\n [class.neu-date-input--float]=\"floatingLabel()\"\n >\n <button\n cdkOverlayOrigin\n #singleOrigin=\"cdkOverlayOrigin\"\n class=\"neu-date-input__trigger\"\n type=\"button\"\n [id]=\"_id\"\n [disabled]=\"isDisabledFinal() || readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n (click)=\"toggle()\"\n >\n <span class=\"neu-date-input__icon\" aria-hidden=\"true\">\n @if (type() === 'time') {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n }\n </span>\n <span\n class=\"neu-date-input__display\"\n [class.neu-date-input__display--placeholder]=\"!_value()\"\n >\n {{ displayValue() || (floatingLabel() ? '' : placeholderText()) }}\n </span>\n </button>\n @if (floatingLabel() && label()) {\n <label class=\"neu-date-input__float-label\" [for]=\"_id\">{{ label() }}</label>\n }\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"singleOrigin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"singleOverlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n >\n <div\n class=\"neu-date-input__panel\"\n [class.neu-date-input__panel--time-only]=\"type() === 'time'\"\n role=\"dialog\"\n [attr.aria-label]=\"_texts().chooseDate + (monthLabel() ? ': ' + monthLabel() : '')\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (type() !== 'time') {\n <div class=\"neu-date-input__calendar\">\n <div class=\"neu-date-input__cal-nav\">\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"prevMonth()\"\n [attr.aria-label]=\"_texts().prevMonth\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n @if (showMonthYearPicker()) {\n <span class=\"neu-date-input__cal-title neu-date-input__cal-title--pickers\">\n <select\n class=\"neu-date-input__picker\"\n [value]=\"_viewMonth()\"\n [attr.aria-label]=\"_texts().chooseMonth\"\n (change)=\"setViewMonth($any($event.target).value)\"\n >\n @for (month of monthOptions(); track month.value) {\n <option [value]=\"month.value\">{{ month.label }}</option>\n }\n </select>\n <select\n class=\"neu-date-input__picker\"\n [value]=\"_viewYear()\"\n [attr.aria-label]=\"_texts().chooseYear\"\n (change)=\"setViewYear($any($event.target).value)\"\n >\n @for (year of yearOptions(); track year) {\n <option [value]=\"year\">{{ year }}</option>\n }\n </select>\n </span>\n } @else {\n <span class=\"neu-date-input__cal-title\">{{ monthLabel() }}</span>\n }\n <button\n class=\"neu-date-input__cal-arrow\"\n type=\"button\"\n (click)=\"nextMonth()\"\n [attr.aria-label]=\"_texts().nextMonth\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n <div class=\"neu-date-input__cal-weekdays\">\n @for (d of weekdays(); track d) {\n <span>{{ d }}</span>\n }\n </div>\n <div class=\"neu-date-input__cal-grid\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n class=\"neu-date-input__cal-day\"\n type=\"button\"\n [class.neu-date-input__cal-day--other]=\"!day.inMonth\"\n [class.neu-date-input__cal-day--today]=\"day.isToday\"\n [class.neu-date-input__cal-day--selected]=\"day.isSelected\"\n [disabled]=\"day.disabled\"\n [attr.aria-label]=\"formatDayLabel(day.date)\"\n [attr.aria-pressed]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n <div class=\"neu-date-input__cal-footer\">\n <button class=\"neu-date-input__cal-footer-btn\" type=\"button\" (click)=\"clear()\">\n {{ _texts().delete }}\n </button>\n <button\n class=\"neu-date-input__cal-footer-btn neu-date-input__cal-footer-btn--today\"\n type=\"button\"\n (click)=\"today()\"\n >\n {{ _texts().today }}\n </button>\n </div>\n </div>\n }\n @if (type() === 'datetime-local') {\n <div class=\"neu-date-input__sep\"></div>\n }\n @if (type() !== 'date') {\n <div class=\"neu-date-input__time\">\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(-1)\"\n [attr.aria-label]=\"_texts().prevHour\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onHourWheel($event)\">\n @for (slot of hourSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeHour(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeHour(1)\"\n [attr.aria-label]=\"_texts().nextHour\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n <span class=\"neu-date-input__time-colon\">:</span>\n <div class=\"neu-date-input__drum\">\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(-1)\"\n [attr.aria-label]=\"_texts().prevMinute\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </button>\n <div class=\"neu-date-input__drum-track\" (wheel)=\"onMinuteWheel($event)\">\n @for (slot of minuteSlots(); track slot.offset) {\n <div\n class=\"neu-date-input__drum-item\"\n [class.neu-date-input__drum-item--selected]=\"slot.offset === 0\"\n [class.neu-date-input__drum-item--adjacent]=\"slot.offset !== 0\"\n (click)=\"slot.offset !== 0 && changeMinute(slot.offset)\"\n >\n {{ slot.label }}\n </div>\n }\n </div>\n <button\n class=\"neu-date-input__drum-arrow\"\n type=\"button\"\n (click)=\"changeMinute(1)\"\n [attr.aria-label]=\"_texts().nextMinute\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </div>\n @if (hasError()) {\n <p class=\"neu-date-input__error\" role=\"alert\">{{ errorMessage() }}</p>\n } @else if (hint()) {\n <p class=\"neu-date-input__hint\">{{ hint() }}</p>\n }\n }\n `,\n styleUrl: './neu-date-input.component.scss',\n})\nexport class NeuDateInputComponent implements ControlValueAccessor, OnDestroy {\n private readonly doc = inject(DOCUMENT);\n private readonly overlay = inject(Overlay);\n private _langObserver?: MutationObserver;\n\n /** Tipo del campo / Field type */\n type = input<'date' | 'time' | 'datetime-local' | 'range'>('date');\n /** Etiqueta / Label */\n label = input<string>('');\n /** Texto de ayuda / Help text */\n hint = input<string>('');\n /** Mensaje de error / Error message */\n errorMessage = input<string>('');\n /** Deshabilita / Disabled */\n disabled = input<boolean>(false);\n /** Tamaño del campo: 'sm' = 36px | 'md' = 48px | 'lg' = 56px / Field size */\n size = input<'sm' | 'md' | 'lg'>('md');\n /** Solo lectura / Read only */\n readonly = input<boolean>(false);\n /** Nombre / Field name */\n name = input<string>('');\n /** ID accesible / Accessible ID */\n inputId = input<string>('');\n /** Requerido / Required */\n required = input<boolean>(false);\n /** Mínimo / Minimum */\n min = input<string | null>(null);\n /** Máximo / Maximum */\n max = input<string | null>(null);\n /** Paso / Step */\n step = input<number | null>(null);\n /** Locale explícito opcional / Optional explicit locale */\n locale = input<string | null>(null);\n /** Fechas deshabilitadas / Disabled dates */\n disabledDates = input<((date: Date) => boolean) | Array<Date | string>>([]);\n /** Permite seleccionar varias fechas en type=\"date\" / Multiple date selection for type=\"date\" */\n multiple = input<boolean>(false);\n /** Muestra selectores de mes/año en el calendario / Shows month/year picker controls */\n showMonthYearPicker = input<boolean>(false);\n /** Rango de años para el selector / Year picker range */\n yearRange = input<number>(12);\n\n // ── Range-mode inputs ────────────────────────────────────────────\n /** Placeholder del trigger / Trigger placeholder */\n placeholder = input<string>('');\n /** Formato de fecha en modo rango / Date display format in range mode */\n dateFormat = input<'short' | 'medium' | 'long' | 'full' | 'numeric'>('short');\n /** Etiqueta flotante / Floating label */\n floatingLabel = input<boolean>(false);\n /** Presets rápidos para rangos / Quick range presets */\n presets = input<NeuDatePreset[]>([]);\n\n // ── Outputs ──────────────────────────────────────────────────────\n /** Emitido al confirmar el rango / Emitted when range is confirmed */\n readonly rangeChange = output<NeuDateRange>();\n\n // ── Estado interno / Internal state ──────────────────────────────\n protected readonly _id = `neu-date-input-${++_neuDateInputIdSeq}`;\n readonly isOpen = signal(false);\n readonly _viewportMargin = 16;\n readonly singleOverlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n readonly rangeOverlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n readonly overlayScrollStrategy = this.overlay.scrollStrategies.reposition();\n readonly _isRange = computed(() => this.type() === 'range');\n private readonly _cvaDisabled = signal(false);\n readonly isDisabledFinal = computed(() => this.disabled() || this._cvaDisabled());\n readonly hasError = computed(() => !!this.errorMessage());\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onChange: (v: any) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── State — single ────────────────────────────────────────────────\n protected readonly _value = signal<string>('');\n protected readonly _viewYear = signal(new Date().getFullYear());\n protected readonly _viewMonth = signal(new Date().getMonth());\n protected readonly _selYear = signal<number | null>(null);\n protected readonly _selMonth = signal<number | null>(null);\n protected readonly _selDay = signal<number | null>(null);\n protected readonly _selHour = signal(0);\n protected readonly _selMinute = signal(0);\n protected readonly _selectedDates = signal<string[]>([]);\n\n // ── State — range ─────────────────────────────────────────────────\n private readonly _today = new Date();\n private readonly _documentLang = signal(\n this.#normalizedLocale(this.doc.documentElement.lang) || 'es',\n );\n private readonly _pickStart = signal<Date | null>(null);\n private readonly _pickEnd = signal<Date | null>(null);\n private readonly _hoverDate = signal<Date | null>(null);\n readonly _leftCursor = signal<Date>(\n new Date(this._today.getFullYear(), this._today.getMonth(), 1),\n );\n readonly _rightCursor = computed(() => {\n const l = this._leftCursor();\n return new Date(l.getFullYear(), l.getMonth() + 1, 1);\n });\n readonly _hasRange = computed(() => !!this._pickStart());\n readonly _canApply = computed(() => this._pickStart() !== null && this._pickEnd() !== null);\n readonly _resolvedLocale = computed(\n () => this.#normalizedLocale(this.locale()) || this._documentLang() || 'es',\n );\n readonly _texts = computed(() => {\n const spanish = this._resolvedLocale().toLowerCase().startsWith('es');\n return spanish\n ? {\n rangeAriaLabel: 'Seleccionar rango de fechas',\n prevMonth: 'Mes anterior',\n nextMonth: 'Mes siguiente',\n clear: 'Limpiar',\n apply: 'Aplicar',\n chooseDate: 'Seleccionar fecha',\n delete: 'Borrar',\n today: 'Hoy',\n prevHour: 'Hora anterior',\n nextHour: 'Hora siguiente',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Minuto siguiente',\n rangePlaceholder: 'Seleccionar fechas',\n timePlaceholder: 'hh:mm',\n datePlaceholder: 'dd/mm/aaaa',\n dateTimePlaceholder: 'dd/mm/aaaa, hh:mm',\n chooseMonth: 'Seleccionar mes',\n chooseYear: 'Seleccionar año',\n }\n : {\n rangeAriaLabel: 'Select date range',\n prevMonth: 'Previous month',\n nextMonth: 'Next month',\n clear: 'Clear',\n apply: 'Apply',\n chooseDate: 'Choose date',\n delete: 'Clear',\n today: 'Today',\n prevHour: 'Previous hour',\n nextHour: 'Next hour',\n prevMinute: 'Previous minute',\n nextMinute: 'Next minute',\n rangePlaceholder: 'Select dates',\n timePlaceholder: 'hh:mm',\n datePlaceholder: 'mm/dd/yyyy',\n dateTimePlaceholder: 'mm/dd/yyyy, hh:mm',\n chooseMonth: 'Choose month',\n chooseYear: 'Choose year',\n };\n });\n\n readonly _weekDayLabels = computed(() => this.#buildWeekdayLabels('short'));\n readonly _leftTitle = computed(() => this._monthTitle(this._leftCursor()));\n readonly _rightTitle = computed(() => this._monthTitle(this._rightCursor()));\n readonly _leftDays = computed(() => this._buildRangeMonth(this._leftCursor()));\n readonly _rightDays = computed(() => this._buildRangeMonth(this._rightCursor()));\n readonly _rangePlaceholderText = computed(\n () => this.placeholder() || this._texts().rangePlaceholder,\n );\n\n constructor() {\n if (typeof MutationObserver !== 'undefined') {\n this._langObserver = new MutationObserver(() => {\n this._documentLang.set(this.#normalizedLocale(this.doc.documentElement.lang) || 'es');\n });\n this._langObserver.observe(this.doc.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n });\n }\n }\n\n ngOnDestroy(): void {\n this._langObserver?.disconnect();\n }\n\n private _monthTitle(d: Date): string {\n return this.#capitalize(\n new Intl.DateTimeFormat(this._resolvedLocale(), { month: 'long', year: 'numeric' }).format(d),\n );\n }\n\n readonly _rangeDisplayValue = computed(() => {\n const s = this._pickStart();\n const e = this._pickEnd();\n if (!s) return this.placeholder();\n if (!e) return this._fmtDate(s);\n return `${this._fmtDate(s)} – ${this._fmtDate(e)}`;\n });\n\n private _fmtDate(d: Date): string {\n const fmt = this.dateFormat();\n const opts: Record<string, Intl.DateTimeFormatOptions> = {\n short: { day: '2-digit', month: '2-digit', year: 'numeric' },\n medium: { day: '2-digit', month: 'short', year: 'numeric' },\n long: { day: 'numeric', month: 'long', year: 'numeric' },\n full: { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' },\n numeric: { day: 'numeric', month: 'numeric', year: '2-digit' },\n };\n return d.toLocaleDateString(this._resolvedLocale(), opts[fmt] ?? opts['short']);\n }\n\n private _buildRangeMonth(cursor: Date): RangeCell[] {\n const year = cursor.getFullYear();\n const month = cursor.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const startOffset = (firstDay.getDay() + 6) % 7;\n const cells: RangeCell[] = [];\n for (let i = startOffset - 1; i >= 0; i--) {\n cells.push(this._rangeCell(new Date(year, month, -i), false));\n }\n for (let d = 1; d <= lastDay.getDate(); d++) {\n cells.push(this._rangeCell(new Date(year, month, d), true));\n }\n while (cells.length % 7 !== 0 || cells.length < 42) {\n cells.push(\n this._rangeCell(\n new Date(year, month + 1, cells.length - startOffset - lastDay.getDate() + 1),\n false,\n ),\n );\n }\n return cells;\n }\n\n private _rangeCell(date: Date, current: boolean): RangeCell {\n const s = this._pickStart();\n const e = this._pickEnd();\n const h = this._hoverDate();\n const rangeEnd = e ?? h;\n const inRange =\n s && rangeEnd\n ? (date > s && date < rangeEnd) || (rangeEnd < s && date > rangeEnd && date < s)\n : false;\n return {\n date,\n day: date.getDate(),\n ts: date.getTime(),\n current,\n today: sameDay(date, this._today),\n selected: (s && sameDay(date, s)) || (e && sameDay(date, e)) || false,\n rangeStart: s ? sameDay(date, s) : false,\n rangeEnd: e ? sameDay(date, e) : false,\n inRange: !!inRange,\n label: date.toLocaleDateString(this._resolvedLocale()),\n disabled: this.isDateDisabled(date),\n };\n }\n\n // ── Range actions ─────────────────────────────────────────────────\n _prevLeft(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() - 1, 1));\n }\n _nextLeft(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() + 1, 1));\n }\n _prevRight(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() - 1, 1));\n }\n _nextRight(): void {\n this._leftCursor.update((d) => new Date(d.getFullYear(), d.getMonth() + 1, 1));\n }\n\n _selectDay(date: Date): void {\n if (this.isDateDisabled(date)) return;\n const s = this._pickStart();\n if (!s || this._pickEnd()) {\n this._pickStart.set(cloneDate(date));\n this._pickEnd.set(null);\n this._hoverDate.set(null);\n } else {\n if (date < s) {\n this._pickEnd.set(cloneDate(s));\n this._pickStart.set(cloneDate(date));\n } else {\n this._pickEnd.set(cloneDate(date));\n }\n this._hoverDate.set(null);\n }\n }\n\n _hoverDay(date: Date): void {\n if (this._pickStart() && !this._pickEnd()) this._hoverDate.set(date);\n }\n\n _applyRange(): void {\n const range: NeuDateRange = { start: this._pickStart(), end: this._pickEnd() };\n this._onChange(range);\n this.rangeChange.emit(range);\n this._onTouched();\n this.isOpen.set(false);\n }\n\n _applyPreset(preset: NeuDatePreset): void {\n const range = typeof preset.range === 'function' ? preset.range() : preset.range;\n this._pickStart.set(range.start ? cloneDate(range.start) : null);\n this._pickEnd.set(range.end ? cloneDate(range.end) : null);\n }\n\n _clearRange(): void {\n this._pickStart.set(null);\n this._pickEnd.set(null);\n this._hoverDate.set(null);\n const range: NeuDateRange = { start: null, end: null };\n this._onChange(range);\n this.rangeChange.emit(range);\n }\n\n // ── Single computed ───────────────────────────────────────────────\n readonly displayValue = computed(() => {\n const v = this._value();\n if (!v) return '';\n const t = this.type();\n if (t === 'date' && this.multiple()) {\n return this._selectedDates()\n .map((value) => new Date(value + 'T00:00:00'))\n .filter((date) => !isNaN(date.getTime()))\n .map((date) =>\n date.toLocaleDateString(this._resolvedLocale(), {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n }),\n )\n .join(', ');\n }\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n return isNaN(d.getTime())\n ? v\n : d.toLocaleDateString(this._resolvedLocale(), {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n });\n }\n if (t === 'time') return v;\n const [datePart, timePart] = v.split('T');\n const d = new Date(datePart + 'T00:00:00');\n return (\n (isNaN(d.getTime())\n ? datePart\n : d.toLocaleDateString(this._resolvedLocale(), {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n })) +\n ', ' +\n (timePart?.slice(0, 5) ?? '')\n );\n });\n\n readonly placeholderText = computed(() => {\n if (this.placeholder()) {\n return this.placeholder();\n }\n\n switch (this.type()) {\n case 'time':\n return this._texts().timePlaceholder;\n case 'datetime-local':\n return this._texts().dateTimePlaceholder;\n default:\n return this._texts().datePlaceholder;\n }\n });\n\n readonly monthLabel = computed(() =>\n this.#capitalize(\n new Date(this._viewYear(), this._viewMonth(), 1).toLocaleDateString(this._resolvedLocale(), {\n month: 'long',\n year: 'numeric',\n }),\n ),\n );\n\n readonly weekdays = computed(() => this.#buildWeekdayLabels('narrow'));\n\n readonly monthOptions = computed(() =>\n Array.from({ length: 12 }, (_, value) => ({\n value,\n label: this.#capitalize(\n new Date(2024, value, 1).toLocaleDateString(this._resolvedLocale(), { month: 'long' }),\n ),\n })),\n );\n\n readonly yearOptions = computed(() => {\n const center = this._viewYear();\n const span = Math.max(1, this.yearRange());\n const start = center - span;\n return Array.from({ length: span * 2 + 1 }, (_, index) => start + index);\n });\n\n readonly calendarDays = computed((): CalendarDay[] => {\n const year = this._viewYear();\n const month = this._viewMonth();\n const today = new Date();\n const firstDay = new Date(year, month, 1);\n const startDow = (firstDay.getDay() + 6) % 7;\n const days: CalendarDay[] = [];\n for (let i = startDow; i > 0; i--) {\n days.push({\n date: new Date(year, month, 1 - i),\n inMonth: false,\n isToday: false,\n isSelected: false,\n disabled: this.isDateDisabled(new Date(year, month, 1 - i)),\n });\n }\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n for (let d = 1; d <= daysInMonth; d++) {\n const date = new Date(year, month, d);\n days.push({\n date,\n inMonth: true,\n isToday: date.toDateString() === today.toDateString(),\n isSelected: this.isDateSelected(date),\n disabled: this.isDateDisabled(date),\n });\n }\n let next = 1;\n while (days.length < 42) {\n days.push({\n date: new Date(year, month + 1, next++),\n inMonth: false,\n isToday: false,\n isSelected: false,\n disabled: this.isDateDisabled(new Date(year, month + 1, next - 1)),\n });\n }\n return days;\n });\n\n readonly hourSlots = computed(() => this._drumSlots(this._selHour(), 24));\n readonly minuteSlots = computed(() => this._drumSlots(this._selMinute(), 60));\n\n private _drumSlots(value: number, max: number): DrumSlot[] {\n return [-1, 0, 1].map((offset) => {\n const v = (((value + offset) % max) + max) % max;\n return { value: v, offset, label: String(v).padStart(2, '0') };\n });\n }\n\n // ── Single actions ────────────────────────────────────────────────\n toggle(): void {\n if (this.isDisabledFinal()) return;\n if (!this._isRange() && this.readonly()) return;\n this.isOpen.update((v) => !v);\n }\n\n close(): void {\n this.isOpen.set(false);\n }\n\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Element | null;\n const isInsidePanel = !!target?.closest('.neu-date-input__panel, .neu-drp__panel');\n if (!isInsidePanel) {\n this.close();\n }\n }\n\n prevMonth(): void {\n if (this._viewMonth() === 0) {\n this._viewMonth.set(11);\n this._viewYear.update((y) => y - 1);\n } else this._viewMonth.update((m) => m - 1);\n }\n\n nextMonth(): void {\n if (this._viewMonth() === 11) {\n this._viewMonth.set(0);\n this._viewYear.update((y) => y + 1);\n } else this._viewMonth.update((m) => m + 1);\n }\n\n selectDay(day: CalendarDay): void {\n if (!day.inMonth || day.disabled) return;\n const value = this._toDateValue(day.date);\n if (this.type() === 'date' && this.multiple()) {\n this._selectedDates.update((current) =>\n current.includes(value) ? current.filter((item) => item !== value) : [...current, value],\n );\n this._value.set(this._selectedDates().join(','));\n this._onChange(this._selectedDates());\n return;\n }\n this._selYear.set(day.date.getFullYear());\n this._selMonth.set(day.date.getMonth());\n this._selDay.set(day.date.getDate());\n this._emitValue();\n if (this.type() === 'date') this.close();\n }\n\n setViewMonth(value: string | number): void {\n const month = Number(value);\n if (Number.isInteger(month) && month >= 0 && month <= 11) {\n this._viewMonth.set(month);\n }\n }\n\n setViewYear(value: string | number): void {\n const year = Number(value);\n if (Number.isInteger(year)) {\n this._viewYear.set(year);\n }\n }\n\n formatDayLabel(date: Date): string {\n return date.toLocaleDateString(this._resolvedLocale(), {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n }\n\n today(): void {\n const d = new Date();\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n this.selectDay({ date: d, inMonth: true, isToday: true, isSelected: false, disabled: false });\n }\n\n clear(): void {\n this._selYear.set(null);\n this._selMonth.set(null);\n this._selDay.set(null);\n this._selectedDates.set([]);\n this._value.set('');\n this._onChange('');\n this.close();\n }\n\n changeHour(delta: number): void {\n this._selHour.update((h) => (((h + delta) % 24) + 24) % 24);\n this._emitValue();\n }\n\n changeMinute(delta: number): void {\n this._selMinute.update((m) => (((m + delta) % 60) + 60) % 60);\n this._emitValue();\n }\n\n onHourWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeHour(e.deltaY > 0 ? 1 : -1);\n }\n onMinuteWheel(e: WheelEvent): void {\n e.preventDefault();\n this.changeMinute(e.deltaY > 0 ? 1 : -1);\n }\n\n private _emitValue(): void {\n const t = this.type();\n let v = '';\n if (t === 'date' || t === 'datetime-local') {\n if (this._selYear() === null) return;\n const y = this._selYear()!;\n const mo = String(this._selMonth()! + 1).padStart(2, '0');\n const d = String(this._selDay()!).padStart(2, '0');\n const ds = `${y}-${mo}-${d}`;\n v =\n t === 'date'\n ? ds\n : `${ds}T${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n } else {\n v = `${String(this._selHour()).padStart(2, '0')}:${String(this._selMinute()).padStart(2, '0')}`;\n }\n this._value.set(v);\n this._onChange(v);\n }\n\n isDateSelected(date: Date): boolean {\n if (this.type() === 'date' && this.multiple()) {\n return this._selectedDates().includes(this._toDateValue(date));\n }\n\n return (\n this._selYear() === date.getFullYear() &&\n this._selMonth() === date.getMonth() &&\n this._selDay() === date.getDate()\n );\n }\n\n isDateDisabled(date: Date): boolean {\n const disabled = this.disabledDates();\n if (typeof disabled === 'function') {\n return disabled(date);\n }\n\n return disabled.some((value) => {\n const candidate = value instanceof Date ? value : new Date(`${value}T00:00:00`);\n return !isNaN(candidate.getTime()) && sameDay(candidate, date);\n });\n }\n\n private _toDateValue(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(\n date.getDate(),\n ).padStart(2, '0')}`;\n }\n\n // ── CVA ───────────────────────────────────────────────────────────\n writeValue(value: string | string[] | NeuDateRange | null): void {\n if (this.type() === 'range') {\n const v = value as NeuDateRange | null;\n this._pickStart.set(v?.start ?? null);\n this._pickEnd.set(v?.end ?? null);\n } else {\n if (this.type() === 'date' && this.multiple()) {\n const values = Array.isArray(value)\n ? value\n : typeof value === 'string' && value\n ? value.split(',').map((item) => item.trim())\n : [];\n this._selectedDates.set(values.filter(Boolean));\n this._value.set(this._selectedDates().join(','));\n return;\n }\n const v = (value as string) ?? '';\n this._value.set(v);\n if (!v) return;\n const t = this.type();\n if (t === 'date') {\n const d = new Date(v + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n } else if (t === 'time') {\n const [h, m] = v.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n } else {\n const [datePart, timePart] = v.split('T');\n if (datePart) {\n const d = new Date(datePart + 'T00:00:00');\n if (!isNaN(d.getTime())) {\n this._selYear.set(d.getFullYear());\n this._selMonth.set(d.getMonth());\n this._selDay.set(d.getDate());\n this._viewYear.set(d.getFullYear());\n this._viewMonth.set(d.getMonth());\n }\n }\n if (timePart) {\n const [h, m] = timePart.split(':').map(Number);\n if (!isNaN(h)) this._selHour.set(h);\n if (!isNaN(m)) this._selMinute.set(m);\n }\n }\n }\n }\n\n registerOnChange(fn: (v: string | string[] | NeuDateRange) => void): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n\n #normalizedLocale(locale: string | null | undefined): string {\n return locale?.trim() || '';\n }\n\n #capitalize(value: string): string {\n return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;\n }\n\n #buildWeekdayLabels(style: 'short' | 'narrow'): string[] {\n const formatter = new Intl.DateTimeFormat(this._resolvedLocale(), {\n weekday: style,\n timeZone: 'UTC',\n });\n return Array.from({ length: 7 }, (_, index) => {\n const label = formatter\n .format(new Date(Date.UTC(2024, 0, 1 + index)))\n .replace(/\\.$/, '')\n .trim();\n if (style === 'narrow') {\n return label.slice(0, 1).toUpperCase();\n }\n return this.#capitalize(label);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -26,10 +26,24 @@ class NeuEmptyStateComponent {
26
26
  description = input('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
27
27
  /** Texto del botón de acción. Si está vacío, no se muestra el botón. / Action button text. If empty, the button is not shown. */
28
28
  actionLabel = input('', ...(ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []));
29
+ /** Tamaño visual del estado vacío / Visual empty state size */
30
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
31
+ /** Tono semántico del icono y fondo / Semantic tone for icon and background */
32
+ tone = input('neutral', ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
33
+ /** Reduce espaciado para tablas, listas y overlays compactos / Reduces spacing for tables, lists and compact overlays */
34
+ compact = input(false, ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
29
35
  /** Emite cuando el usuario hace clic en el botón de acción. / Emits when the user clicks the action button. */
30
36
  action = output();
37
+ hostClasses() {
38
+ return {
39
+ 'neu-empty-state': true,
40
+ [`neu-empty-state--${this.size()}`]: true,
41
+ [`neu-empty-state--${this.tone()}`]: true,
42
+ 'neu-empty-state--compact': this.compact(),
43
+ };
44
+ }
31
45
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuEmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuEmptyStateComponent, isStandalone: true, selector: "neu-empty-state", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { classAttribute: "neu-empty-state" }, ngImport: i0, template: `
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuEmptyStateComponent, isStandalone: true, selector: "neu-empty-state", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
33
47
  <div class="neu-empty-state__inner">
34
48
  @if (icon()) {
35
49
  <span class="neu-empty-state__icon">
@@ -49,11 +63,11 @@ class NeuEmptyStateComponent {
49
63
  </button>
50
64
  }
51
65
  </div>
52
- `, isInline: true, styles: [".neu-empty-state{display:flex;align-items:center;justify-content:center;padding:var(--neu-space-10, 2.5rem) var(--neu-space-6, 1.5rem);text-align:center;width:100%}.neu-empty-state__inner{display:flex;flex-direction:column;align-items:center;gap:var(--neu-space-3, .75rem);max-width:380px}.neu-empty-state__icon{display:flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:var(--neu-radius-lg, 16px);background:var(--neu-surface-2, #f8fafc);color:var(--neu-text-muted, #94a3b8);margin-bottom:var(--neu-space-2, .5rem);border:1px solid var(--neu-border, #e2e8f0)}.neu-empty-state__title{margin:0;font-size:var(--neu-text-base, 1rem);font-weight:600;color:var(--neu-text, #0f172a)}.neu-empty-state__desc{margin:0;font-size:var(--neu-text-sm, .875rem);color:var(--neu-text-muted, #64748b);line-height:1.5}\n"], dependencies: [{ kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }, { kind: "component", type: NeuButtonComponent, selector: "button[neu-button]", inputs: ["variant", "size", "disabled", "loading", "fullWidth", "icon", "iconPosition", "iconOnly", "ariaLabel"], outputs: ["neuClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
66
+ `, isInline: true, styles: [".neu-empty-state{display:flex;align-items:center;justify-content:center;padding:var(--neu-space-10, 2.5rem) var(--neu-space-6, 1.5rem);text-align:center;width:100%}.neu-empty-state__inner{display:flex;flex-direction:column;align-items:center;gap:var(--neu-space-3, .75rem);max-width:380px}.neu-empty-state__icon{display:flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:var(--neu-radius-lg, 16px);background:var(--neu-surface-2, #f8fafc);color:var(--neu-text-muted, #94a3b8);margin-bottom:var(--neu-space-2, .5rem);border:1px solid var(--neu-border, #e2e8f0)}.neu-empty-state__title{margin:0;font-size:var(--neu-text-base, 1rem);font-weight:600;color:var(--neu-text, #0f172a)}.neu-empty-state__desc{margin:0;font-size:var(--neu-text-sm, .875rem);color:var(--neu-text-muted, #64748b);line-height:1.5}.neu-empty-state--sm,.neu-empty-state--compact{padding:var(--neu-space-5, 1.25rem) var(--neu-space-4, 1rem)}.neu-empty-state--sm .neu-empty-state__inner,.neu-empty-state--compact .neu-empty-state__inner{gap:var(--neu-space-2, .5rem);max-width:320px}.neu-empty-state--sm .neu-empty-state__icon,.neu-empty-state--compact .neu-empty-state__icon{width:48px;height:48px;border-radius:var(--neu-radius-md, 12px);margin-bottom:0}.neu-empty-state--sm .neu-empty-state__title,.neu-empty-state--compact .neu-empty-state__title{font-size:var(--neu-text-sm, .875rem)}.neu-empty-state--sm .neu-empty-state__desc,.neu-empty-state--compact .neu-empty-state__desc{font-size:var(--neu-text-xs, .75rem)}.neu-empty-state--lg{padding:var(--neu-space-12, 3rem) var(--neu-space-8, 2rem)}.neu-empty-state--lg .neu-empty-state__inner{max-width:460px}.neu-empty-state--lg .neu-empty-state__title{font-size:var(--neu-text-lg, 1.125rem)}.neu-empty-state--info .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-info, #0ea5e9) 12%,transparent);color:var(--neu-info, #0ea5e9);border-color:color-mix(in srgb,var(--neu-info, #0ea5e9) 24%,transparent)}.neu-empty-state--warning .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-warning, #f59e0b) 14%,transparent);color:var(--neu-warning, #f59e0b);border-color:color-mix(in srgb,var(--neu-warning, #f59e0b) 28%,transparent)}.neu-empty-state--danger .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-danger, #ef4444) 12%,transparent);color:var(--neu-danger, #ef4444);border-color:color-mix(in srgb,var(--neu-danger, #ef4444) 24%,transparent)}.neu-empty-state--success .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-success, #22c55e) 12%,transparent);color:var(--neu-success, #22c55e);border-color:color-mix(in srgb,var(--neu-success, #22c55e) 24%,transparent)}\n"], dependencies: [{ kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }, { kind: "component", type: NeuButtonComponent, selector: "button[neu-button]", inputs: ["variant", "size", "disabled", "loading", "fullWidth", "icon", "iconPosition", "iconOnly", "ariaLabel"], outputs: ["neuClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
53
67
  }
54
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuEmptyStateComponent, decorators: [{
55
69
  type: Component,
56
- args: [{ selector: 'neu-empty-state', imports: [NeuIconComponent, NeuButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'neu-empty-state' }, template: `
70
+ args: [{ selector: 'neu-empty-state', imports: [NeuIconComponent, NeuButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'hostClasses()' }, template: `
57
71
  <div class="neu-empty-state__inner">
58
72
  @if (icon()) {
59
73
  <span class="neu-empty-state__icon">
@@ -73,8 +87,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
73
87
  </button>
74
88
  }
75
89
  </div>
76
- `, styles: [".neu-empty-state{display:flex;align-items:center;justify-content:center;padding:var(--neu-space-10, 2.5rem) var(--neu-space-6, 1.5rem);text-align:center;width:100%}.neu-empty-state__inner{display:flex;flex-direction:column;align-items:center;gap:var(--neu-space-3, .75rem);max-width:380px}.neu-empty-state__icon{display:flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:var(--neu-radius-lg, 16px);background:var(--neu-surface-2, #f8fafc);color:var(--neu-text-muted, #94a3b8);margin-bottom:var(--neu-space-2, .5rem);border:1px solid var(--neu-border, #e2e8f0)}.neu-empty-state__title{margin:0;font-size:var(--neu-text-base, 1rem);font-weight:600;color:var(--neu-text, #0f172a)}.neu-empty-state__desc{margin:0;font-size:var(--neu-text-sm, .875rem);color:var(--neu-text-muted, #64748b);line-height:1.5}\n"] }]
77
- }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
90
+ `, styles: [".neu-empty-state{display:flex;align-items:center;justify-content:center;padding:var(--neu-space-10, 2.5rem) var(--neu-space-6, 1.5rem);text-align:center;width:100%}.neu-empty-state__inner{display:flex;flex-direction:column;align-items:center;gap:var(--neu-space-3, .75rem);max-width:380px}.neu-empty-state__icon{display:flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:var(--neu-radius-lg, 16px);background:var(--neu-surface-2, #f8fafc);color:var(--neu-text-muted, #94a3b8);margin-bottom:var(--neu-space-2, .5rem);border:1px solid var(--neu-border, #e2e8f0)}.neu-empty-state__title{margin:0;font-size:var(--neu-text-base, 1rem);font-weight:600;color:var(--neu-text, #0f172a)}.neu-empty-state__desc{margin:0;font-size:var(--neu-text-sm, .875rem);color:var(--neu-text-muted, #64748b);line-height:1.5}.neu-empty-state--sm,.neu-empty-state--compact{padding:var(--neu-space-5, 1.25rem) var(--neu-space-4, 1rem)}.neu-empty-state--sm .neu-empty-state__inner,.neu-empty-state--compact .neu-empty-state__inner{gap:var(--neu-space-2, .5rem);max-width:320px}.neu-empty-state--sm .neu-empty-state__icon,.neu-empty-state--compact .neu-empty-state__icon{width:48px;height:48px;border-radius:var(--neu-radius-md, 12px);margin-bottom:0}.neu-empty-state--sm .neu-empty-state__title,.neu-empty-state--compact .neu-empty-state__title{font-size:var(--neu-text-sm, .875rem)}.neu-empty-state--sm .neu-empty-state__desc,.neu-empty-state--compact .neu-empty-state__desc{font-size:var(--neu-text-xs, .75rem)}.neu-empty-state--lg{padding:var(--neu-space-12, 3rem) var(--neu-space-8, 2rem)}.neu-empty-state--lg .neu-empty-state__inner{max-width:460px}.neu-empty-state--lg .neu-empty-state__title{font-size:var(--neu-text-lg, 1.125rem)}.neu-empty-state--info .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-info, #0ea5e9) 12%,transparent);color:var(--neu-info, #0ea5e9);border-color:color-mix(in srgb,var(--neu-info, #0ea5e9) 24%,transparent)}.neu-empty-state--warning .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-warning, #f59e0b) 14%,transparent);color:var(--neu-warning, #f59e0b);border-color:color-mix(in srgb,var(--neu-warning, #f59e0b) 28%,transparent)}.neu-empty-state--danger .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-danger, #ef4444) 12%,transparent);color:var(--neu-danger, #ef4444);border-color:color-mix(in srgb,var(--neu-danger, #ef4444) 24%,transparent)}.neu-empty-state--success .neu-empty-state__icon{background:color-mix(in srgb,var(--neu-success, #22c55e) 12%,transparent);color:var(--neu-success, #22c55e);border-color:color-mix(in srgb,var(--neu-success, #22c55e) 24%,transparent)}\n"] }]
91
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconSize", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], actionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionLabel", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
78
92
 
79
93
  /**
80
94
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-empty-state.mjs","sources":["../../../../projects/ui-core/empty-state/neu-empty-state.component.ts","../../../../projects/ui-core/empty-state/neural-ui-core-empty-state.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\nimport { NeuButtonComponent } from '@neural-ui/core/button';\n\n/**\n * NeuEmptyState — Estado vacío con icono Lucide, título, descripción y acción.\n *\n * Uso:\n * <neu-empty-state\n * icon=\"lucideInbox\"\n * title=\"Sin resultados\"\n * description=\"Prueba con otros filtros.\"\n * actionLabel=\"Limpiar filtros\"\n * (action)=\"clearFilters()\"\n * />\n */\n@Component({\n selector: 'neu-empty-state',\n imports: [NeuIconComponent, NeuButtonComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-empty-state' },\n template: `\n <div class=\"neu-empty-state__inner\">\n @if (icon()) {\n <span class=\"neu-empty-state__icon\">\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <p class=\"neu-empty-state__title\">{{ title() }}</p>\n\n @if (description()) {\n <p class=\"neu-empty-state__desc\">{{ description() }}</p>\n }\n\n @if (actionLabel()) {\n <button neu-button variant=\"primary\" size=\"md\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n </div>\n `,\n styleUrl: './neu-empty-state.component.scss',\n})\nexport class NeuEmptyStateComponent {\n /** Nombre del icono Lucide registrado con provideIcons(). / Lucide icon name registered with provideIcons(). */\n icon = input<string>('lucideInbox');\n /** Tamaño del icono. Por defecto 3rem. / Icon size. Default 3rem. */\n iconSize = input<string>('3rem');\n /** Título principal del estado vacío. / Main title of the empty state. */\n title = input<string>('No hay nada aquí');\n /** Descripción secundaria opcional. / Optional secondary description. */\n description = input<string>('');\n /** Texto del botón de acción. Si está vacío, no se muestra el botón. / Action button text. If empty, the button is not shown. */\n actionLabel = input<string>('');\n\n /** Emite cuando el usuario hace clic en el botón de acción. / Emits when the user clicks the action button. */\n action = output<void>();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;AAUA;;;;;;;;;;;AAWG;MA8BU,sBAAsB,CAAA;;AAEjC,IAAA,IAAI,GAAG,KAAK,CAAS,aAAa,2EAAC;;AAEnC,IAAA,QAAQ,GAAG,KAAK,CAAS,MAAM,+EAAC;;AAEhC,IAAA,KAAK,GAAG,KAAK,CAAS,kBAAkB,4EAAC;;AAEzC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,kFAAC;;AAE/B,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,kFAAC;;IAG/B,MAAM,GAAG,MAAM,EAAQ;wGAbZ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvBvB;;;;;;;;;;;;;;;;;;;;GAoBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxBS,gBAAgB,8FAAE,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA2BnC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA7BlC,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAA,QAAA,EACxB;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,q0BAAA,CAAA,EAAA;;;AChDH;;AAEG;;;;"}
1
+ {"version":3,"file":"neural-ui-core-empty-state.mjs","sources":["../../../../projects/ui-core/empty-state/neu-empty-state.component.ts","../../../../projects/ui-core/empty-state/neural-ui-core-empty-state.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\nimport { NeuButtonComponent } from '@neural-ui/core/button';\n\nexport type NeuEmptyStateSize = 'sm' | 'md' | 'lg';\nexport type NeuEmptyStateTone = 'neutral' | 'info' | 'warning' | 'danger' | 'success';\n\n/**\n * NeuEmptyState — Estado vacío con icono Lucide, título, descripción y acción.\n *\n * Uso:\n * <neu-empty-state\n * icon=\"lucideInbox\"\n * title=\"Sin resultados\"\n * description=\"Prueba con otros filtros.\"\n * actionLabel=\"Limpiar filtros\"\n * (action)=\"clearFilters()\"\n * />\n */\n@Component({\n selector: 'neu-empty-state',\n imports: [NeuIconComponent, NeuButtonComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()' },\n template: `\n <div class=\"neu-empty-state__inner\">\n @if (icon()) {\n <span class=\"neu-empty-state__icon\">\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <p class=\"neu-empty-state__title\">{{ title() }}</p>\n\n @if (description()) {\n <p class=\"neu-empty-state__desc\">{{ description() }}</p>\n }\n\n @if (actionLabel()) {\n <button neu-button variant=\"primary\" size=\"md\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n </div>\n `,\n styleUrl: './neu-empty-state.component.scss',\n})\nexport class NeuEmptyStateComponent {\n /** Nombre del icono Lucide registrado con provideIcons(). / Lucide icon name registered with provideIcons(). */\n icon = input<string>('lucideInbox');\n /** Tamaño del icono. Por defecto 3rem. / Icon size. Default 3rem. */\n iconSize = input<string>('3rem');\n /** Título principal del estado vacío. / Main title of the empty state. */\n title = input<string>('No hay nada aquí');\n /** Descripción secundaria opcional. / Optional secondary description. */\n description = input<string>('');\n /** Texto del botón de acción. Si está vacío, no se muestra el botón. / Action button text. If empty, the button is not shown. */\n actionLabel = input<string>('');\n /** Tamaño visual del estado vacío / Visual empty state size */\n size = input<NeuEmptyStateSize>('md');\n /** Tono semántico del icono y fondo / Semantic tone for icon and background */\n tone = input<NeuEmptyStateTone>('neutral');\n /** Reduce espaciado para tablas, listas y overlays compactos / Reduces spacing for tables, lists and compact overlays */\n compact = input<boolean>(false);\n\n /** Emite cuando el usuario hace clic en el botón de acción. / Emits when the user clicks the action button. */\n action = output<void>();\n\n hostClasses(): Record<string, boolean> {\n return {\n 'neu-empty-state': true,\n [`neu-empty-state--${this.size()}`]: true,\n [`neu-empty-state--${this.tone()}`]: true,\n 'neu-empty-state--compact': this.compact(),\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+
4
+ class NeuFormFieldComponent {
5
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
6
+ hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
7
+ error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
8
+ prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []));
9
+ suffix = input('', ...(ngDevMode ? [{ debugName: "suffix" }] : /* istanbul ignore next */ []));
10
+ forId = input('', ...(ngDevMode ? [{ debugName: "forId" }] : /* istanbul ignore next */ []));
11
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
12
+ classes = computed(() => ({
13
+ 'neu-form-field': true,
14
+ [`neu-form-field--${this.size()}`]: true,
15
+ 'neu-form-field--error': !!this.error(),
16
+ }), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuFormFieldComponent, isStandalone: true, selector: "neu-form-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, forId: { classPropertyName: "forId", publicName: "forId", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
19
+ @if (label()) {
20
+ <label class="neu-form-field__label" [attr.for]="forId() || null">{{ label() }}</label>
21
+ }
22
+ <div class="neu-form-field__control">
23
+ @if (prefix()) {
24
+ <span class="neu-form-field__prefix">{{ prefix() }}</span>
25
+ }
26
+ <ng-content />
27
+ @if (suffix()) {
28
+ <span class="neu-form-field__suffix">{{ suffix() }}</span>
29
+ }
30
+ </div>
31
+ @if (error()) {
32
+ <p class="neu-form-field__error" role="alert">{{ error() }}</p>
33
+ } @else if (hint()) {
34
+ <p class="neu-form-field__hint">{{ hint() }}</p>
35
+ }
36
+ `, isInline: true, styles: [".neu-form-field{display:grid;gap:.375rem}.neu-form-field__label{font-size:.875rem;font-weight:600;color:var(--neu-text, #111827)}.neu-form-field__control,.neu-input-group{display:flex;align-items:stretch;border-radius:.625rem}.neu-form-field__control{gap:.5rem}.neu-form-field__prefix,.neu-form-field__suffix{display:inline-flex;align-items:center;color:var(--neu-text-muted, #6b7280)}.neu-form-field__hint{color:var(--neu-text-muted, #6b7280);font-size:.8125rem}.neu-form-field__error{color:var(--neu-error, #dc2626);font-size:.8125rem}.neu-input-group--attached>*{border-radius:0}.neu-input-group--attached>:first-child{border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}.neu-input-group--attached>:last-child{border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuFormFieldComponent, decorators: [{
39
+ type: Component,
40
+ args: [{ selector: 'neu-form-field', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'classes()' }, template: `
41
+ @if (label()) {
42
+ <label class="neu-form-field__label" [attr.for]="forId() || null">{{ label() }}</label>
43
+ }
44
+ <div class="neu-form-field__control">
45
+ @if (prefix()) {
46
+ <span class="neu-form-field__prefix">{{ prefix() }}</span>
47
+ }
48
+ <ng-content />
49
+ @if (suffix()) {
50
+ <span class="neu-form-field__suffix">{{ suffix() }}</span>
51
+ }
52
+ </div>
53
+ @if (error()) {
54
+ <p class="neu-form-field__error" role="alert">{{ error() }}</p>
55
+ } @else if (hint()) {
56
+ <p class="neu-form-field__hint">{{ hint() }}</p>
57
+ }
58
+ `, styles: [".neu-form-field{display:grid;gap:.375rem}.neu-form-field__label{font-size:.875rem;font-weight:600;color:var(--neu-text, #111827)}.neu-form-field__control,.neu-input-group{display:flex;align-items:stretch;border-radius:.625rem}.neu-form-field__control{gap:.5rem}.neu-form-field__prefix,.neu-form-field__suffix{display:inline-flex;align-items:center;color:var(--neu-text-muted, #6b7280)}.neu-form-field__hint{color:var(--neu-text-muted, #6b7280);font-size:.8125rem}.neu-form-field__error{color:var(--neu-error, #dc2626);font-size:.8125rem}.neu-input-group--attached>*{border-radius:0}.neu-input-group--attached>:first-child{border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}.neu-input-group--attached>:last-child{border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}\n"] }]
59
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], forId: [{ type: i0.Input, args: [{ isSignal: true, alias: "forId", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
60
+ class NeuInputGroupComponent {
61
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
62
+ attached = input(true, ...(ngDevMode ? [{ debugName: "attached" }] : /* istanbul ignore next */ []));
63
+ classes = computed(() => ({
64
+ 'neu-input-group': true,
65
+ [`neu-input-group--${this.size()}`]: true,
66
+ 'neu-input-group--attached': this.attached(),
67
+ }), ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuInputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: NeuInputGroupComponent, isStandalone: true, selector: "neu-input-group", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, attached: { classPropertyName: "attached", publicName: "attached", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [".neu-form-field{display:grid;gap:.375rem}.neu-form-field__label{font-size:.875rem;font-weight:600;color:var(--neu-text, #111827)}.neu-form-field__control,.neu-input-group{display:flex;align-items:stretch;border-radius:.625rem}.neu-form-field__control{gap:.5rem}.neu-form-field__prefix,.neu-form-field__suffix{display:inline-flex;align-items:center;color:var(--neu-text-muted, #6b7280)}.neu-form-field__hint{color:var(--neu-text-muted, #6b7280);font-size:.8125rem}.neu-form-field__error{color:var(--neu-error, #dc2626);font-size:.8125rem}.neu-input-group--attached>*{border-radius:0}.neu-input-group--attached>:first-child{border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}.neu-input-group--attached>:last-child{border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuInputGroupComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'neu-input-group', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'classes()' }, template: `<ng-content />`, styles: [".neu-form-field{display:grid;gap:.375rem}.neu-form-field__label{font-size:.875rem;font-weight:600;color:var(--neu-text, #111827)}.neu-form-field__control,.neu-input-group{display:flex;align-items:stretch;border-radius:.625rem}.neu-form-field__control{gap:.5rem}.neu-form-field__prefix,.neu-form-field__suffix{display:inline-flex;align-items:center;color:var(--neu-text-muted, #6b7280)}.neu-form-field__hint{color:var(--neu-text-muted, #6b7280);font-size:.8125rem}.neu-form-field__error{color:var(--neu-error, #dc2626);font-size:.8125rem}.neu-input-group--attached>*{border-radius:0}.neu-input-group--attached>:first-child{border-top-left-radius:.625rem;border-bottom-left-radius:.625rem}.neu-input-group--attached>:last-child{border-top-right-radius:.625rem;border-bottom-right-radius:.625rem}\n"] }]
74
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], attached: [{ type: i0.Input, args: [{ isSignal: true, alias: "attached", required: false }] }] } });
75
+
76
+ /**
77
+ * Generated bundle index. Do not edit.
78
+ */
79
+
80
+ export { NeuFormFieldComponent, NeuInputGroupComponent };
81
+ //# sourceMappingURL=neural-ui-core-form-field.mjs.map