@neural-ui/core 1.4.0 → 1.5.0
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.
- package/README.md +2 -1
- package/calendar/package.json +4 -0
- package/fesm2022/neural-ui-core-autocomplete.mjs +2 -2
- package/fesm2022/neural-ui-core-block-ui.mjs +2 -2
- package/fesm2022/neural-ui-core-button.mjs +2 -2
- package/fesm2022/neural-ui-core-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-calendar.mjs +551 -0
- package/fesm2022/neural-ui-core-calendar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chip.mjs +2 -2
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
- package/fesm2022/neural-ui-core-confirm-dialog.mjs +2 -2
- package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +2 -2
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
- package/fesm2022/neural-ui-core-date-input.mjs +2 -2
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-image-gallery.mjs +224 -0
- package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input.mjs +2 -2
- package/fesm2022/neural-ui-core-kanban.mjs +270 -0
- package/fesm2022/neural-ui-core-kanban.mjs.map +1 -0
- package/fesm2022/neural-ui-core-meter-group.mjs +2 -2
- package/fesm2022/neural-ui-core-multiselect.mjs +13 -2
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
- package/fesm2022/neural-ui-core-nav.mjs +2 -2
- package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
- package/fesm2022/neural-ui-core-number-input.mjs +2 -2
- package/fesm2022/neural-ui-core-pagination.mjs +2 -2
- package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
- package/fesm2022/neural-ui-core-progress-bar.mjs +2 -2
- package/fesm2022/neural-ui-core-scheduler-gantt.mjs +289 -0
- package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -0
- package/fesm2022/neural-ui-core-select.mjs +31 -9
- package/fesm2022/neural-ui-core-select.mjs.map +1 -1
- package/fesm2022/neural-ui-core-slider.mjs +2 -2
- package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
- package/fesm2022/neural-ui-core-split-button.mjs +2 -2
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-stepper.mjs +2 -2
- package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
- package/fesm2022/neural-ui-core-table.mjs +273 -19
- package/fesm2022/neural-ui-core-table.mjs.map +1 -1
- package/fesm2022/neural-ui-core-textarea.mjs +2 -2
- package/fesm2022/neural-ui-core-timeline-grid.mjs +215 -0
- package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs +2 -2
- package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tree-table.mjs +262 -0
- package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tree.mjs +413 -0
- package/fesm2022/neural-ui-core-tree.mjs.map +1 -0
- package/fesm2022/neural-ui-core-uploader.mjs +624 -0
- package/fesm2022/neural-ui-core-uploader.mjs.map +1 -0
- package/fesm2022/neural-ui-core-virtual-list.mjs +2 -2
- package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
- package/fesm2022/neural-ui-core.mjs +3 -1
- package/fesm2022/neural-ui-core.mjs.map +1 -1
- package/image-gallery/package.json +4 -0
- package/kanban/package.json +4 -0
- package/package.json +34 -2
- package/scheduler-gantt/package.json +4 -0
- package/styles/_tokens.scss +13 -4
- package/timeline-grid/package.json +4 -0
- package/tree/package.json +4 -0
- package/tree-table/package.json +4 -0
- package/types/neural-ui-core-calendar.d.ts +79 -0
- package/types/neural-ui-core-image-gallery.d.ts +26 -0
- package/types/neural-ui-core-kanban.d.ts +52 -0
- package/types/neural-ui-core-multiselect.d.ts +1 -0
- package/types/neural-ui-core-scheduler-gantt.d.ts +68 -0
- package/types/neural-ui-core-select.d.ts +2 -0
- package/types/neural-ui-core-table.d.ts +44 -2
- package/types/neural-ui-core-timeline-grid.d.ts +55 -0
- package/types/neural-ui-core-tree-table.d.ts +72 -0
- package/types/neural-ui-core-tree.d.ts +52 -0
- package/types/neural-ui-core-uploader.d.ts +98 -0
- package/uploader/package.json +4 -0
|
@@ -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 ElementRef,\n HostListener,\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 { 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: [],\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 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 @if (isOpen()) {\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 }\n } @else {\n @if (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 >\n <button\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() || placeholderText() }}\n </span>\n </button>\n @if (isOpen()) {\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 }\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 el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly doc = inject(DOCUMENT);\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\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 _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 @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target as Node)) this.close();\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 ElementRef,\n HostListener,\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 { 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: [],\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 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 @if (isOpen()) {\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 }\n } @else {\n @if (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 >\n <button\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() || placeholderText() }}\n </span>\n </button>\n @if (isOpen()) {\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 }\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 el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly doc = inject(DOCUMENT);\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\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 _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 @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target as Node)) this.close();\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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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, signal, effect, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { NeuImageViewerDirective } from '@neural-ui/core/image-viewer';
|
|
4
|
+
|
|
5
|
+
class NeuImageGalleryComponent {
|
|
6
|
+
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
7
|
+
initialIndex = input(0, ...(ngDevMode ? [{ debugName: "initialIndex" }] : /* istanbul ignore next */ []));
|
|
8
|
+
showThumbnails = input(true, ...(ngDevMode ? [{ debugName: "showThumbnails" }] : /* istanbul ignore next */ []));
|
|
9
|
+
thumbnailPosition = input('bottom', ...(ngDevMode ? [{ debugName: "thumbnailPosition" }] : /* istanbul ignore next */ []));
|
|
10
|
+
objectFit = input('cover', ...(ngDevMode ? [{ debugName: "objectFit" }] : /* istanbul ignore next */ []));
|
|
11
|
+
showCounter = input(true, ...(ngDevMode ? [{ debugName: "showCounter" }] : /* istanbul ignore next */ []));
|
|
12
|
+
viewerEnabled = input(true, ...(ngDevMode ? [{ debugName: "viewerEnabled" }] : /* istanbul ignore next */ []));
|
|
13
|
+
activeIndexChange = output();
|
|
14
|
+
_activeIndex = signal(0, ...(ngDevMode ? [{ debugName: "_activeIndex" }] : /* istanbul ignore next */ []));
|
|
15
|
+
constructor() {
|
|
16
|
+
effect(() => {
|
|
17
|
+
this._activeIndex.set(this._clampIndex(this.initialIndex()));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
activeIndex = computed(() => this._clampIndex(this._activeIndex()), ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
21
|
+
currentItem = computed(() => this.items()[this.activeIndex()], ...(ngDevMode ? [{ debugName: "currentItem" }] : /* istanbul ignore next */ []));
|
|
22
|
+
setActiveIndex(index) {
|
|
23
|
+
const nextIndex = this._clampIndex(index);
|
|
24
|
+
this._activeIndex.set(nextIndex);
|
|
25
|
+
this.activeIndexChange.emit(nextIndex);
|
|
26
|
+
}
|
|
27
|
+
goPrev() {
|
|
28
|
+
this.setActiveIndex(this.activeIndex() - 1);
|
|
29
|
+
}
|
|
30
|
+
goNext() {
|
|
31
|
+
this.setActiveIndex(this.activeIndex() + 1);
|
|
32
|
+
}
|
|
33
|
+
_clampIndex(index) {
|
|
34
|
+
const total = this.items().length;
|
|
35
|
+
if (total === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
return Math.max(0, Math.min(total - 1, index));
|
|
38
|
+
}
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuImageGalleryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: NeuImageGalleryComponent, isStandalone: true, selector: "neu-image-gallery", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, initialIndex: { classPropertyName: "initialIndex", publicName: "initialIndex", isSignal: true, isRequired: false, transformFunction: null }, showThumbnails: { classPropertyName: "showThumbnails", publicName: "showThumbnails", isSignal: true, isRequired: false, transformFunction: null }, thumbnailPosition: { classPropertyName: "thumbnailPosition", publicName: "thumbnailPosition", isSignal: true, isRequired: false, transformFunction: null }, objectFit: { classPropertyName: "objectFit", publicName: "objectFit", isSignal: true, isRequired: false, transformFunction: null }, showCounter: { classPropertyName: "showCounter", publicName: "showCounter", isSignal: true, isRequired: false, transformFunction: null }, viewerEnabled: { classPropertyName: "viewerEnabled", publicName: "viewerEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeIndexChange: "activeIndexChange" }, ngImport: i0, template: `
|
|
41
|
+
@if (items().length > 0) {
|
|
42
|
+
<div
|
|
43
|
+
class="neu-image-gallery"
|
|
44
|
+
[class.neu-image-gallery--left]="thumbnailPosition() === 'left' && showThumbnails()"
|
|
45
|
+
>
|
|
46
|
+
@if (showThumbnails()) {
|
|
47
|
+
<div
|
|
48
|
+
class="neu-image-gallery__thumbs"
|
|
49
|
+
[class.neu-image-gallery__thumbs--left]="thumbnailPosition() === 'left'"
|
|
50
|
+
>
|
|
51
|
+
@for (item of items(); track item.src; let i = $index) {
|
|
52
|
+
<button
|
|
53
|
+
type="button"
|
|
54
|
+
class="neu-image-gallery__thumb"
|
|
55
|
+
[class.neu-image-gallery__thumb--active]="activeIndex() === i"
|
|
56
|
+
[attr.aria-label]="item.alt || 'Image ' + (i + 1)"
|
|
57
|
+
(click)="setActiveIndex(i)"
|
|
58
|
+
>
|
|
59
|
+
<img [src]="item.src" [alt]="item.alt || ''" />
|
|
60
|
+
</button>
|
|
61
|
+
}
|
|
62
|
+
</div>
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
<div class="neu-image-gallery__stage">
|
|
66
|
+
@if (items().length > 1) {
|
|
67
|
+
<button
|
|
68
|
+
type="button"
|
|
69
|
+
class="neu-image-gallery__nav neu-image-gallery__nav--prev"
|
|
70
|
+
[disabled]="activeIndex() === 0"
|
|
71
|
+
aria-label="Previous image"
|
|
72
|
+
(click)="goPrev()"
|
|
73
|
+
>
|
|
74
|
+
‹
|
|
75
|
+
</button>
|
|
76
|
+
<button
|
|
77
|
+
type="button"
|
|
78
|
+
class="neu-image-gallery__nav neu-image-gallery__nav--next"
|
|
79
|
+
[disabled]="activeIndex() === items().length - 1"
|
|
80
|
+
aria-label="Next image"
|
|
81
|
+
(click)="goNext()"
|
|
82
|
+
>
|
|
83
|
+
›
|
|
84
|
+
</button>
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@if (viewerEnabled()) {
|
|
88
|
+
<button
|
|
89
|
+
type="button"
|
|
90
|
+
class="neu-image-gallery__viewer-trigger"
|
|
91
|
+
[neuImageViewer]="items()"
|
|
92
|
+
[neuIvIndex]="activeIndex()"
|
|
93
|
+
[attr.aria-label]="currentItem().alt || 'Open image viewer'"
|
|
94
|
+
>
|
|
95
|
+
<img
|
|
96
|
+
class="neu-image-gallery__image"
|
|
97
|
+
[class.neu-image-gallery__image--contain]="objectFit() === 'contain'"
|
|
98
|
+
[class.neu-image-gallery__image--cover]="objectFit() === 'cover'"
|
|
99
|
+
[src]="currentItem().src"
|
|
100
|
+
[alt]="currentItem().alt || ''"
|
|
101
|
+
/>
|
|
102
|
+
</button>
|
|
103
|
+
} @else {
|
|
104
|
+
<img
|
|
105
|
+
class="neu-image-gallery__image"
|
|
106
|
+
[class.neu-image-gallery__image--contain]="objectFit() === 'contain'"
|
|
107
|
+
[class.neu-image-gallery__image--cover]="objectFit() === 'cover'"
|
|
108
|
+
[src]="currentItem().src"
|
|
109
|
+
[alt]="currentItem().alt || ''"
|
|
110
|
+
/>
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
<div class="neu-image-gallery__meta">
|
|
114
|
+
@if (showCounter()) {
|
|
115
|
+
<span class="neu-image-gallery__counter">
|
|
116
|
+
{{ activeIndex() + 1 }} / {{ items().length }}
|
|
117
|
+
</span>
|
|
118
|
+
}
|
|
119
|
+
@if (currentItem().caption) {
|
|
120
|
+
<span class="neu-image-gallery__caption">{{ currentItem().caption }}</span>
|
|
121
|
+
}
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
}
|
|
126
|
+
`, isInline: true, styles: [".neu-image-gallery{display:grid;gap:var(--neu-space-3)}.neu-image-gallery--left{grid-template-columns:88px minmax(0,1fr);align-items:start}.neu-image-gallery__stage{position:relative;border-radius:var(--neu-radius-lg);overflow:hidden;background:color-mix(in srgb,var(--neu-surface-2) 82%,black 18%);border:1px solid var(--neu-border);min-height:280px}.neu-image-gallery__viewer-trigger{display:block;width:100%;height:100%;padding:0;border:none;background:transparent;cursor:zoom-in}.neu-image-gallery__image{display:block;width:100%;height:100%;min-height:280px}.neu-image-gallery__image--contain{object-fit:contain}.neu-image-gallery__image--cover{object-fit:cover}.neu-image-gallery__nav{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:999px;border:1px solid color-mix(in srgb,var(--neu-surface) 70%,black 30%);background:color-mix(in srgb,var(--neu-surface) 74%,black 26%);color:var(--neu-text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;z-index:1}.neu-image-gallery__nav:disabled{opacity:.35;cursor:not-allowed}.neu-image-gallery__nav--prev{left:var(--neu-space-3)}.neu-image-gallery__nav--next{right:var(--neu-space-3)}.neu-image-gallery__meta{position:absolute;right:var(--neu-space-3);bottom:var(--neu-space-3);display:flex;gap:var(--neu-space-2);align-items:center}.neu-image-gallery__counter,.neu-image-gallery__caption{display:inline-flex;align-items:center;min-height:30px;padding:0 var(--neu-space-3);border-radius:999px;background:color-mix(in srgb,black 62%,var(--neu-surface) 38%);color:#fff;font-size:var(--neu-text-xs)}.neu-image-gallery__thumbs{display:flex;gap:var(--neu-space-2);overflow:auto;padding-bottom:2px}.neu-image-gallery__thumbs--left{flex-direction:column;max-height:320px;padding-right:4px}.neu-image-gallery__thumb{width:72px;height:72px;flex:0 0 auto;border-radius:var(--neu-radius);overflow:hidden;border:2px solid transparent;background:var(--neu-surface-2);padding:0;cursor:pointer}.neu-image-gallery__thumb--active{border-color:var(--neu-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-image-gallery__thumb img{width:100%;height:100%;display:block;object-fit:cover}@media(max-width:720px){.neu-image-gallery--left{grid-template-columns:1fr}.neu-image-gallery__thumbs--left{flex-direction:row;max-height:none;padding-right:0}}\n"], dependencies: [{ kind: "directive", type: NeuImageViewerDirective, selector: "[neuImageViewer]", inputs: ["neuImageViewer", "neuIvIndex"], exportAs: ["neuImageViewer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuImageGalleryComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'neu-image-gallery', imports: [NeuImageViewerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
131
|
+
@if (items().length > 0) {
|
|
132
|
+
<div
|
|
133
|
+
class="neu-image-gallery"
|
|
134
|
+
[class.neu-image-gallery--left]="thumbnailPosition() === 'left' && showThumbnails()"
|
|
135
|
+
>
|
|
136
|
+
@if (showThumbnails()) {
|
|
137
|
+
<div
|
|
138
|
+
class="neu-image-gallery__thumbs"
|
|
139
|
+
[class.neu-image-gallery__thumbs--left]="thumbnailPosition() === 'left'"
|
|
140
|
+
>
|
|
141
|
+
@for (item of items(); track item.src; let i = $index) {
|
|
142
|
+
<button
|
|
143
|
+
type="button"
|
|
144
|
+
class="neu-image-gallery__thumb"
|
|
145
|
+
[class.neu-image-gallery__thumb--active]="activeIndex() === i"
|
|
146
|
+
[attr.aria-label]="item.alt || 'Image ' + (i + 1)"
|
|
147
|
+
(click)="setActiveIndex(i)"
|
|
148
|
+
>
|
|
149
|
+
<img [src]="item.src" [alt]="item.alt || ''" />
|
|
150
|
+
</button>
|
|
151
|
+
}
|
|
152
|
+
</div>
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
<div class="neu-image-gallery__stage">
|
|
156
|
+
@if (items().length > 1) {
|
|
157
|
+
<button
|
|
158
|
+
type="button"
|
|
159
|
+
class="neu-image-gallery__nav neu-image-gallery__nav--prev"
|
|
160
|
+
[disabled]="activeIndex() === 0"
|
|
161
|
+
aria-label="Previous image"
|
|
162
|
+
(click)="goPrev()"
|
|
163
|
+
>
|
|
164
|
+
‹
|
|
165
|
+
</button>
|
|
166
|
+
<button
|
|
167
|
+
type="button"
|
|
168
|
+
class="neu-image-gallery__nav neu-image-gallery__nav--next"
|
|
169
|
+
[disabled]="activeIndex() === items().length - 1"
|
|
170
|
+
aria-label="Next image"
|
|
171
|
+
(click)="goNext()"
|
|
172
|
+
>
|
|
173
|
+
›
|
|
174
|
+
</button>
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@if (viewerEnabled()) {
|
|
178
|
+
<button
|
|
179
|
+
type="button"
|
|
180
|
+
class="neu-image-gallery__viewer-trigger"
|
|
181
|
+
[neuImageViewer]="items()"
|
|
182
|
+
[neuIvIndex]="activeIndex()"
|
|
183
|
+
[attr.aria-label]="currentItem().alt || 'Open image viewer'"
|
|
184
|
+
>
|
|
185
|
+
<img
|
|
186
|
+
class="neu-image-gallery__image"
|
|
187
|
+
[class.neu-image-gallery__image--contain]="objectFit() === 'contain'"
|
|
188
|
+
[class.neu-image-gallery__image--cover]="objectFit() === 'cover'"
|
|
189
|
+
[src]="currentItem().src"
|
|
190
|
+
[alt]="currentItem().alt || ''"
|
|
191
|
+
/>
|
|
192
|
+
</button>
|
|
193
|
+
} @else {
|
|
194
|
+
<img
|
|
195
|
+
class="neu-image-gallery__image"
|
|
196
|
+
[class.neu-image-gallery__image--contain]="objectFit() === 'contain'"
|
|
197
|
+
[class.neu-image-gallery__image--cover]="objectFit() === 'cover'"
|
|
198
|
+
[src]="currentItem().src"
|
|
199
|
+
[alt]="currentItem().alt || ''"
|
|
200
|
+
/>
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
<div class="neu-image-gallery__meta">
|
|
204
|
+
@if (showCounter()) {
|
|
205
|
+
<span class="neu-image-gallery__counter">
|
|
206
|
+
{{ activeIndex() + 1 }} / {{ items().length }}
|
|
207
|
+
</span>
|
|
208
|
+
}
|
|
209
|
+
@if (currentItem().caption) {
|
|
210
|
+
<span class="neu-image-gallery__caption">{{ currentItem().caption }}</span>
|
|
211
|
+
}
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
}
|
|
216
|
+
`, styles: [".neu-image-gallery{display:grid;gap:var(--neu-space-3)}.neu-image-gallery--left{grid-template-columns:88px minmax(0,1fr);align-items:start}.neu-image-gallery__stage{position:relative;border-radius:var(--neu-radius-lg);overflow:hidden;background:color-mix(in srgb,var(--neu-surface-2) 82%,black 18%);border:1px solid var(--neu-border);min-height:280px}.neu-image-gallery__viewer-trigger{display:block;width:100%;height:100%;padding:0;border:none;background:transparent;cursor:zoom-in}.neu-image-gallery__image{display:block;width:100%;height:100%;min-height:280px}.neu-image-gallery__image--contain{object-fit:contain}.neu-image-gallery__image--cover{object-fit:cover}.neu-image-gallery__nav{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:999px;border:1px solid color-mix(in srgb,var(--neu-surface) 70%,black 30%);background:color-mix(in srgb,var(--neu-surface) 74%,black 26%);color:var(--neu-text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;z-index:1}.neu-image-gallery__nav:disabled{opacity:.35;cursor:not-allowed}.neu-image-gallery__nav--prev{left:var(--neu-space-3)}.neu-image-gallery__nav--next{right:var(--neu-space-3)}.neu-image-gallery__meta{position:absolute;right:var(--neu-space-3);bottom:var(--neu-space-3);display:flex;gap:var(--neu-space-2);align-items:center}.neu-image-gallery__counter,.neu-image-gallery__caption{display:inline-flex;align-items:center;min-height:30px;padding:0 var(--neu-space-3);border-radius:999px;background:color-mix(in srgb,black 62%,var(--neu-surface) 38%);color:#fff;font-size:var(--neu-text-xs)}.neu-image-gallery__thumbs{display:flex;gap:var(--neu-space-2);overflow:auto;padding-bottom:2px}.neu-image-gallery__thumbs--left{flex-direction:column;max-height:320px;padding-right:4px}.neu-image-gallery__thumb{width:72px;height:72px;flex:0 0 auto;border-radius:var(--neu-radius);overflow:hidden;border:2px solid transparent;background:var(--neu-surface-2);padding:0;cursor:pointer}.neu-image-gallery__thumb--active{border-color:var(--neu-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-image-gallery__thumb img{width:100%;height:100%;display:block;object-fit:cover}@media(max-width:720px){.neu-image-gallery--left{grid-template-columns:1fr}.neu-image-gallery__thumbs--left{flex-direction:row;max-height:none;padding-right:0}}\n"] }]
|
|
217
|
+
}], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], initialIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialIndex", required: false }] }], showThumbnails: [{ type: i0.Input, args: [{ isSignal: true, alias: "showThumbnails", required: false }] }], thumbnailPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "thumbnailPosition", required: false }] }], objectFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "objectFit", required: false }] }], showCounter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCounter", required: false }] }], viewerEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewerEnabled", required: false }] }], activeIndexChange: [{ type: i0.Output, args: ["activeIndexChange"] }] } });
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Generated bundle index. Do not edit.
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
export { NeuImageGalleryComponent };
|
|
224
|
+
//# sourceMappingURL=neural-ui-core-image-gallery.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neural-ui-core-image-gallery.mjs","sources":["../../../../projects/ui-core/image-gallery/neu-image-gallery.component.ts","../../../../projects/ui-core/image-gallery/neural-ui-core-image-gallery.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NeuImageViewerDirective, type NeuImageViewerItem } from '@neural-ui/core/image-viewer';\n\n@Component({\n selector: 'neu-image-gallery',\n imports: [NeuImageViewerDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (items().length > 0) {\n <div\n class=\"neu-image-gallery\"\n [class.neu-image-gallery--left]=\"thumbnailPosition() === 'left' && showThumbnails()\"\n >\n @if (showThumbnails()) {\n <div\n class=\"neu-image-gallery__thumbs\"\n [class.neu-image-gallery__thumbs--left]=\"thumbnailPosition() === 'left'\"\n >\n @for (item of items(); track item.src; let i = $index) {\n <button\n type=\"button\"\n class=\"neu-image-gallery__thumb\"\n [class.neu-image-gallery__thumb--active]=\"activeIndex() === i\"\n [attr.aria-label]=\"item.alt || 'Image ' + (i + 1)\"\n (click)=\"setActiveIndex(i)\"\n >\n <img [src]=\"item.src\" [alt]=\"item.alt || ''\" />\n </button>\n }\n </div>\n }\n\n <div class=\"neu-image-gallery__stage\">\n @if (items().length > 1) {\n <button\n type=\"button\"\n class=\"neu-image-gallery__nav neu-image-gallery__nav--prev\"\n [disabled]=\"activeIndex() === 0\"\n aria-label=\"Previous image\"\n (click)=\"goPrev()\"\n >\n ‹\n </button>\n <button\n type=\"button\"\n class=\"neu-image-gallery__nav neu-image-gallery__nav--next\"\n [disabled]=\"activeIndex() === items().length - 1\"\n aria-label=\"Next image\"\n (click)=\"goNext()\"\n >\n ›\n </button>\n }\n\n @if (viewerEnabled()) {\n <button\n type=\"button\"\n class=\"neu-image-gallery__viewer-trigger\"\n [neuImageViewer]=\"items()\"\n [neuIvIndex]=\"activeIndex()\"\n [attr.aria-label]=\"currentItem().alt || 'Open image viewer'\"\n >\n <img\n class=\"neu-image-gallery__image\"\n [class.neu-image-gallery__image--contain]=\"objectFit() === 'contain'\"\n [class.neu-image-gallery__image--cover]=\"objectFit() === 'cover'\"\n [src]=\"currentItem().src\"\n [alt]=\"currentItem().alt || ''\"\n />\n </button>\n } @else {\n <img\n class=\"neu-image-gallery__image\"\n [class.neu-image-gallery__image--contain]=\"objectFit() === 'contain'\"\n [class.neu-image-gallery__image--cover]=\"objectFit() === 'cover'\"\n [src]=\"currentItem().src\"\n [alt]=\"currentItem().alt || ''\"\n />\n }\n\n <div class=\"neu-image-gallery__meta\">\n @if (showCounter()) {\n <span class=\"neu-image-gallery__counter\">\n {{ activeIndex() + 1 }} / {{ items().length }}\n </span>\n }\n @if (currentItem().caption) {\n <span class=\"neu-image-gallery__caption\">{{ currentItem().caption }}</span>\n }\n </div>\n </div>\n </div>\n }\n `,\n styleUrl: './neu-image-gallery.component.scss',\n})\nexport class NeuImageGalleryComponent {\n readonly items = input<NeuImageViewerItem[]>([]);\n readonly initialIndex = input<number>(0);\n readonly showThumbnails = input<boolean>(true);\n readonly thumbnailPosition = input<'bottom' | 'left'>('bottom');\n readonly objectFit = input<'cover' | 'contain'>('cover');\n readonly showCounter = input<boolean>(true);\n readonly viewerEnabled = input<boolean>(true);\n\n readonly activeIndexChange = output<number>();\n\n private readonly _activeIndex = signal(0);\n\n constructor() {\n effect(() => {\n this._activeIndex.set(this._clampIndex(this.initialIndex()));\n });\n }\n\n readonly activeIndex = computed(() => this._clampIndex(this._activeIndex()));\n readonly currentItem = computed(() => this.items()[this.activeIndex()]);\n\n setActiveIndex(index: number): void {\n const nextIndex = this._clampIndex(index);\n this._activeIndex.set(nextIndex);\n this.activeIndexChange.emit(nextIndex);\n }\n\n goPrev(): void {\n this.setActiveIndex(this.activeIndex() - 1);\n }\n\n goNext(): void {\n this.setActiveIndex(this.activeIndex() + 1);\n }\n\n private _clampIndex(index: number): number {\n const total = this.items().length;\n if (total === 0) return 0;\n return Math.max(0, Math.min(total - 1, index));\n }\n}\n\nexport type { NeuImageViewerItem } from '@neural-ui/core/image-viewer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|