@bloc-ui/date-picker 0.0.2 → 0.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"bloc-ui-date-picker.mjs","sources":["../../../projects/bloc-ui-date-picker/src/date-picker.component.ts","../../../projects/bloc-ui-date-picker/src/date-picker.module.ts","../../../projects/bloc-ui-date-picker/src/bloc-ui-date-picker.ts"],"sourcesContent":["import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n forwardRef,\r\n HostListener,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst DAYS_OF_WEEK = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\n\r\ninterface CalendarDay {\r\n date: Date;\r\n day: number;\r\n isCurrentMonth: boolean;\r\n isToday: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\n/**\r\n * Date picker component with calendar dropdown.\r\n *\r\n * ```html\r\n * <bloc-date-picker [(ngModel)]=\"selectedDate\" />\r\n * <bloc-date-picker [formControl]=\"dateCtrl\" placeholder=\"Choose date\" />\r\n * ```\r\n */\r\n@Component({\r\n selector: 'bloc-date-picker',\r\n standalone: true,\r\n template: `\r\n <div class=\"bloc-date-picker__input-wrapper\" (click)=\"toggleCalendar()\">\r\n <input\r\n class=\"bloc-date-picker__input\"\r\n type=\"text\"\r\n readonly\r\n [value]=\"displayValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n aria-haspopup=\"dialog\" />\r\n <span class=\"bloc-date-picker__icon\" aria-hidden=\"true\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\"/>\r\n <line x1=\"2\" y1=\"6\" x2=\"14\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"1.3\"/>\r\n <line x1=\"5\" y1=\"1.5\" x2=\"5\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/>\r\n <line x1=\"11\" y1=\"1.5\" x2=\"11\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div class=\"bloc-date-picker__dropdown\" role=\"dialog\" aria-label=\"Date picker\">\r\n <div class=\"bloc-date-picker__header\">\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"prevMonth()\" aria-label=\"Previous month\">\r\n &#8249;\r\n </button>\r\n <span class=\"bloc-date-picker__month-year\">\r\n {{ monthYearLabel() }}\r\n </span>\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"nextMonth()\" aria-label=\"Next month\">\r\n &#8250;\r\n </button>\r\n </div>\r\n\r\n <div class=\"bloc-date-picker__weekdays\">\r\n @for (day of weekdays; track day) {\r\n <span class=\"bloc-date-picker__weekday\">{{ day }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"bloc-date-picker__days\">\r\n @for (day of calendarDays(); track day.date.getTime()) {\r\n <button\r\n type=\"button\"\r\n class=\"bloc-date-picker__day\"\r\n [class.bloc-date-picker__day--other]=\"!day.isCurrentMonth\"\r\n [class.bloc-date-picker__day--today]=\"day.isToday\"\r\n [class.bloc-date-picker__day--selected]=\"day.isSelected\"\r\n [class.bloc-date-picker__day--disabled]=\"day.isDisabled\"\r\n [disabled]=\"day.isDisabled\"\r\n (click)=\"selectDay(day)\">\r\n {{ day.day }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"bloc-date-picker__footer\">\r\n <button type=\"button\" class=\"bloc-date-picker__today-btn\" (click)=\"goToToday()\">\r\n Today\r\n </button>\r\n @if (_selectedDate()) {\r\n <button type=\"button\" class=\"bloc-date-picker__clear-btn\" (click)=\"clear()\">\r\n Clear\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styleUrl: './date-picker.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BlocDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n '[class.bloc-date-picker]': 'true',\r\n '[class.bloc-date-picker--sm]': 'size() === \"sm\"',\r\n '[class.bloc-date-picker--lg]': 'size() === \"lg\"',\r\n '[class.bloc-date-picker--disabled]': 'isDisabled()',\r\n '[class.bloc-date-picker--open]': 'isOpen()',\r\n },\r\n})\r\nexport class BlocDatePickerComponent implements ControlValueAccessor {\r\n private readonly _el = inject(ElementRef<HTMLElement>);\r\n\r\n /** Preset size. Defaults to `'md'`. */\r\n readonly size = input<'sm' | 'md' | 'lg'>('md');\r\n\r\n /** Placeholder text for the input. */\r\n readonly placeholder = input<string>('Select date');\r\n\r\n /** Date format for display. Defaults to `'yyyy-MM-dd'`. */\r\n readonly format = input<string>('yyyy-MM-dd');\r\n\r\n /** Disable the date picker via template binding. */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Minimum selectable date. */\r\n readonly minDate = input<Date | null>(null);\r\n\r\n /** Maximum selectable date. */\r\n readonly maxDate = input<Date | null>(null);\r\n\r\n readonly weekdays = DAYS_OF_WEEK;\r\n\r\n /** Currently selected date. */\r\n readonly _selectedDate = signal<Date | null>(null);\r\n\r\n /** Whether the calendar dropdown is open. */\r\n readonly isOpen = signal<boolean>(false);\r\n\r\n /** The month being viewed (year + month). */\r\n readonly _viewDate = signal<Date>(new Date());\r\n\r\n private readonly _formDisabled = signal<boolean>(false);\r\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\r\n\r\n private _onChange: (val: Date | null) => void = () => { };\r\n _onTouched: () => void = () => { };\r\n\r\n readonly displayValue = computed(() => {\r\n const d = this._selectedDate();\r\n if (!d) return '';\r\n return this._formatDate(d);\r\n });\r\n\r\n readonly monthYearLabel = computed(() => {\r\n const d = this._viewDate();\r\n return d.toLocaleString('default', { month: 'long', year: 'numeric' });\r\n });\r\n\r\n readonly calendarDays = computed<CalendarDay[]>(() => {\r\n const viewDate = this._viewDate();\r\n const selected = this._selectedDate();\r\n const today = new Date();\r\n const min = this.minDate();\r\n const max = this.maxDate();\r\n\r\n const year = viewDate.getFullYear();\r\n const month = viewDate.getMonth();\r\n\r\n const firstOfMonth = new Date(year, month, 1);\r\n const startDay = firstOfMonth.getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n\r\n // Fill from previous month\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n const days: CalendarDay[] = [];\r\n\r\n for (let i = startDay - 1; i >= 0; i--) {\r\n const date = new Date(year, month - 1, prevMonthDays - i);\r\n days.push(this._buildDay(date, false, today, selected, min, max));\r\n }\r\n\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n const date = new Date(year, month, d);\r\n days.push(this._buildDay(date, true, today, selected, min, max));\r\n }\r\n\r\n // Fill remaining to complete 6 rows (42 cells)\r\n const remaining = 42 - days.length;\r\n for (let d = 1; d <= remaining; d++) {\r\n const date = new Date(year, month + 1, d);\r\n days.push(this._buildDay(date, false, today, selected, min, max));\r\n }\r\n\r\n return days;\r\n });\r\n\r\n toggleCalendar(): void {\r\n if (this.isDisabled()) return;\r\n this.isOpen.update((v) => !v);\r\n if (this.isOpen()) {\r\n const selected = this._selectedDate();\r\n if (selected) {\r\n this._viewDate.set(new Date(selected.getFullYear(), selected.getMonth(), 1));\r\n }\r\n }\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this._selectedDate.set(day.date);\r\n this._onChange(day.date);\r\n this.isOpen.set(false);\r\n }\r\n\r\n prevMonth(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear(), d.getMonth() - 1, 1));\r\n }\r\n\r\n nextMonth(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear(), d.getMonth() + 1, 1));\r\n }\r\n\r\n goToToday(): void {\r\n const today = new Date();\r\n this._selectedDate.set(today);\r\n this._viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\r\n this._onChange(today);\r\n this.isOpen.set(false);\r\n }\r\n\r\n clear(): void {\r\n this._selectedDate.set(null);\r\n this._onChange(null);\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n _onDocClick(event: MouseEvent): void {\r\n if (!this._el.nativeElement.contains(event.target as Node)) {\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n @HostListener('keydown.escape')\r\n _onEsc(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n // — ControlValueAccessor —\r\n\r\n writeValue(val: unknown): void {\r\n this._selectedDate.set(val instanceof Date ? val : val ? new Date(val as string) : null);\r\n }\r\n\r\n registerOnChange(fn: (val: Date | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._formDisabled.set(isDisabled);\r\n }\r\n\r\n // — Private helpers —\r\n\r\n private _buildDay(\r\n date: Date,\r\n isCurrentMonth: boolean,\r\n today: Date,\r\n selected: Date | null,\r\n min: Date | null,\r\n max: Date | null,\r\n ): CalendarDay {\r\n const isToday =\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear();\r\n const isSelected = selected\r\n ? date.getDate() === selected.getDate() &&\r\n date.getMonth() === selected.getMonth() &&\r\n date.getFullYear() === selected.getFullYear()\r\n : false;\r\n\r\n let isDisabled = false;\r\n if (min) {\r\n const minDay = new Date(min.getFullYear(), min.getMonth(), min.getDate());\r\n isDisabled = date < minDay;\r\n }\r\n if (max && !isDisabled) {\r\n const maxDay = new Date(max.getFullYear(), max.getMonth(), max.getDate());\r\n isDisabled = date > maxDay;\r\n }\r\n\r\n return { date, day: date.getDate(), isCurrentMonth, isToday, isSelected, isDisabled };\r\n }\r\n\r\n private _formatDate(d: Date): string {\r\n const yyyy = d.getFullYear();\r\n const mm = String(d.getMonth() + 1).padStart(2, '0');\r\n const dd = String(d.getDate()).padStart(2, '0');\r\n\r\n return this.format()\r\n .replace('yyyy', String(yyyy))\r\n .replace('MM', mm)\r\n .replace('dd', dd);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { BlocDatePickerComponent } from './date-picker.component';\r\n\r\n@NgModule({\r\n imports: [BlocDatePickerComponent],\r\n exports: [BlocDatePickerComponent],\r\n})\r\nexport class BlocDatePickerModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bloc-ui-date-picker.mjs","sources":["../../../projects/bloc-ui-date-picker/src/calendar-panel.component.ts","../../../projects/bloc-ui-date-picker/src/date-picker-trigger.directive.ts","../../../projects/bloc-ui-date-picker/src/date-range-picker-trigger.directive.ts","../../../projects/bloc-ui-date-picker/src/date-picker.module.ts","../../../projects/bloc-ui-date-picker/src/bloc-ui-date-picker.ts"],"sourcesContent":["import { Component, computed, input, output, signal } from '@angular/core';\r\n\r\nconst DAYS_OF_WEEK = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nconst MONTHS_SHORT = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n\r\nexport interface CalendarDay {\r\n date: Date;\r\n day: number;\r\n isCurrentMonth: boolean;\r\n isToday: boolean;\r\n isSelected: boolean;\r\n isDisabled: boolean;\r\n isRangeStart: boolean;\r\n isRangeEnd: boolean;\r\n isInRange: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'bloc-calendar-panel',\r\n standalone: true,\r\n template: `\r\n <div class=\"bloc-date-picker__header\">\r\n @if (_view() === 'day') {\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"prevMonth()\" aria-label=\"Previous month\">&#8249;</button>\r\n <button type=\"button\" class=\"bloc-date-picker__month-year-btn\" (click)=\"openMonthView()\">{{ monthYearLabel() }}</button>\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"nextMonth()\" aria-label=\"Next month\">&#8250;</button>\r\n }\r\n @if (_view() === 'month') {\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"prevYear()\" aria-label=\"Previous year\">&#8249;</button>\r\n <button type=\"button\" class=\"bloc-date-picker__month-year-btn\" (click)=\"openYearView()\">{{ viewYear() }}</button>\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"nextYear()\" aria-label=\"Next year\">&#8250;</button>\r\n }\r\n @if (_view() === 'year') {\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"prevYearRange()\" aria-label=\"Previous years\">&#8249;</button>\r\n <span class=\"bloc-date-picker__month-year-label\">{{ yearRange()[0] }} – {{ yearRange()[11] }}</span>\r\n <button type=\"button\" class=\"bloc-date-picker__nav\" (click)=\"nextYearRange()\" aria-label=\"Next years\">&#8250;</button>\r\n }\r\n </div>\r\n\r\n @if (_view() === 'day') {\r\n <div class=\"bloc-date-picker__weekdays\">\r\n @for (day of weekdays; track day) {\r\n <span class=\"bloc-date-picker__weekday\">{{ day }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"bloc-date-picker__days\">\r\n @for (day of calendarDays(); track day.date.getTime()) {\r\n <button\r\n type=\"button\"\r\n class=\"bloc-date-picker__day\"\r\n [class.bloc-date-picker__day--other]=\"!day.isCurrentMonth\"\r\n [class.bloc-date-picker__day--today]=\"day.isToday\"\r\n [class.bloc-date-picker__day--selected]=\"day.isSelected\"\r\n [class.bloc-date-picker__day--disabled]=\"day.isDisabled\"\r\n [class.bloc-date-picker__day--range-start]=\"day.isRangeStart\"\r\n [class.bloc-date-picker__day--range-end]=\"day.isRangeEnd\"\r\n [class.bloc-date-picker__day--in-range]=\"day.isInRange\"\r\n [disabled]=\"day.isDisabled\"\r\n (click)=\"selectDay(day)\"\r\n (mouseenter)=\"onDayHover(day)\">\r\n {{ day.day }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (_view() === 'month') {\r\n <div class=\"bloc-date-picker__month-grid\">\r\n @for (m of months; track $index) {\r\n <button\r\n type=\"button\"\r\n class=\"bloc-date-picker__month-cell\"\r\n [class.bloc-date-picker__month-cell--selected]=\"selectedDate() && viewYear() === selectedDate()!.getFullYear() && $index === selectedDate()!.getMonth()\"\r\n [class.bloc-date-picker__month-cell--current]=\"viewYear() === currentYear && $index === currentMonth\"\r\n (click)=\"selectMonth($index)\">\r\n {{ m }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (_view() === 'year') {\r\n <div class=\"bloc-date-picker__year-grid\">\r\n @for (y of yearRange(); track y) {\r\n <button\r\n type=\"button\"\r\n class=\"bloc-date-picker__year-cell\"\r\n [class.bloc-date-picker__year-cell--selected]=\"selectedDate() && y === selectedDate()!.getFullYear()\"\r\n [class.bloc-date-picker__year-cell--current]=\"y === currentYear\"\r\n (click)=\"selectYear(y)\">\r\n {{ y }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (_view() === 'day') {\r\n <div class=\"bloc-date-picker__footer\">\r\n <button type=\"button\" class=\"bloc-date-picker__today-btn\" (click)=\"goToToday()\">\r\n Today\r\n </button>\r\n @if (selectedDate() || rangeStart()) {\r\n <button type=\"button\" class=\"bloc-date-picker__clear-btn\" (click)=\"clear()\">\r\n Clear\r\n </button>\r\n }\r\n </div>\r\n }\r\n `,\r\n styleUrl: './calendar-panel.component.scss',\r\n host: { class: 'bloc-calendar-panel' },\r\n})\r\nexport class BlocCalendarPanelComponent {\r\n /** Currently selected date (passed in by parent). */\r\n readonly selectedDate = input<Date | null>(null);\r\n\r\n /** Minimum selectable date. */\r\n readonly minDate = input<Date | null>(null);\r\n\r\n /** Maximum selectable date. */\r\n readonly maxDate = input<Date | null>(null);\r\n\r\n /** Panel mode: 'single' for single date, 'range' for date range. */\r\n readonly mode = input<'single' | 'range'>('single');\r\n\r\n /** Range start date (range mode). */\r\n readonly rangeStart = input<Date | null>(null);\r\n\r\n /** Range end date (range mode). */\r\n readonly rangeEnd = input<Date | null>(null);\r\n\r\n /** Hover date for range preview (range mode). */\r\n readonly hoverDate = input<Date | null>(null);\r\n\r\n /** Emitted when a day is picked or \"Today\" is clicked. */\r\n readonly dateSelect = output<Date>();\r\n\r\n /** Emitted when \"Clear\" is clicked. */\r\n readonly cleared = output<void>();\r\n\r\n /** Emitted when a day is hovered (range mode). */\r\n readonly dateHover = output<Date>();\r\n\r\n readonly weekdays = DAYS_OF_WEEK;\r\n readonly months = MONTHS_SHORT;\r\n\r\n readonly _viewDate = signal<Date>(new Date());\r\n readonly _view = signal<'day' | 'month' | 'year'>('day');\r\n readonly _yearRangeStart = signal<number>(new Date().getFullYear() - 4);\r\n\r\n readonly yearRange = computed(() =>\r\n Array.from({ length: 12 }, (_, i) => this._yearRangeStart() + i)\r\n );\r\n\r\n readonly viewYear = computed(() => this._viewDate().getFullYear());\r\n readonly viewMonth = computed(() => this._viewDate().getMonth());\r\n\r\n readonly currentYear = new Date().getFullYear();\r\n readonly currentMonth = new Date().getMonth();\r\n\r\n readonly monthYearLabel = computed(() => {\r\n const d = this._viewDate();\r\n return d.toLocaleString('default', { month: 'long', year: 'numeric' });\r\n });\r\n\r\n readonly calendarDays = computed<CalendarDay[]>(() => {\r\n const viewDate = this._viewDate();\r\n const selected = this.selectedDate();\r\n const today = new Date();\r\n const min = this.minDate();\r\n const max = this.maxDate();\r\n const rStart = this.rangeStart();\r\n const rEnd = this.rangeEnd();\r\n const hover = this.hoverDate();\r\n const isRange = this.mode() === 'range';\r\n\r\n const year = viewDate.getFullYear();\r\n const month = viewDate.getMonth();\r\n\r\n const firstOfMonth = new Date(year, month, 1);\r\n const startDay = firstOfMonth.getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n const days: CalendarDay[] = [];\r\n\r\n for (let i = startDay - 1; i >= 0; i--) {\r\n const date = new Date(year, month - 1, prevMonthDays - i);\r\n days.push(this._buildDay(date, false, today, selected, min, max, isRange, rStart, rEnd, hover));\r\n }\r\n\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n const date = new Date(year, month, d);\r\n days.push(this._buildDay(date, true, today, selected, min, max, isRange, rStart, rEnd, hover));\r\n }\r\n\r\n const remaining = 42 - days.length;\r\n for (let d = 1; d <= remaining; d++) {\r\n const date = new Date(year, month + 1, d);\r\n days.push(this._buildDay(date, false, today, selected, min, max, isRange, rStart, rEnd, hover));\r\n }\r\n\r\n return days;\r\n });\r\n\r\n /** Reset the panel to day view, optionally centred on the given date. */\r\n resetView(date?: Date | null): void {\r\n this._view.set('day');\r\n if (date) {\r\n this._viewDate.set(new Date(date.getFullYear(), date.getMonth(), 1));\r\n }\r\n }\r\n\r\n // — Navigation —\r\n\r\n prevMonth(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear(), d.getMonth() - 1, 1));\r\n }\r\n\r\n nextMonth(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear(), d.getMonth() + 1, 1));\r\n }\r\n\r\n openMonthView(): void {\r\n this._view.set('month');\r\n }\r\n\r\n openYearView(): void {\r\n const viewYear = this._viewDate().getFullYear();\r\n this._yearRangeStart.set(viewYear - 4);\r\n this._view.set('year');\r\n }\r\n\r\n selectMonth(monthIndex: number): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear(), monthIndex, 1));\r\n this._view.set('day');\r\n }\r\n\r\n selectYear(year: number): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(year, d.getMonth(), 1));\r\n this._view.set('month');\r\n }\r\n\r\n prevYear(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear() - 1, d.getMonth(), 1));\r\n }\r\n\r\n nextYear(): void {\r\n const d = this._viewDate();\r\n this._viewDate.set(new Date(d.getFullYear() + 1, d.getMonth(), 1));\r\n }\r\n\r\n prevYearRange(): void {\r\n this._yearRangeStart.update((v) => v - 12);\r\n }\r\n\r\n nextYearRange(): void {\r\n this._yearRangeStart.update((v) => v + 12);\r\n }\r\n\r\n selectDay(day: CalendarDay): void {\r\n if (day.isDisabled) return;\r\n this.dateSelect.emit(day.date);\r\n }\r\n\r\n onDayHover(day: CalendarDay): void {\r\n if (this.mode() === 'range' && !day.isDisabled) {\r\n this.dateHover.emit(day.date);\r\n }\r\n }\r\n\r\n goToToday(): void {\r\n const today = new Date();\r\n this._viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\r\n this.dateSelect.emit(today);\r\n }\r\n\r\n clear(): void {\r\n this.cleared.emit();\r\n }\r\n\r\n // — Private helpers —\r\n\r\n private _buildDay(\r\n date: Date,\r\n isCurrentMonth: boolean,\r\n today: Date,\r\n selected: Date | null,\r\n min: Date | null,\r\n max: Date | null,\r\n isRange = false,\r\n rangeStart: Date | null = null,\r\n rangeEnd: Date | null = null,\r\n hoverDate: Date | null = null,\r\n ): CalendarDay {\r\n const isToday =\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear();\r\n const isSelected = selected\r\n ? date.getDate() === selected.getDate() &&\r\n date.getMonth() === selected.getMonth() &&\r\n date.getFullYear() === selected.getFullYear()\r\n : false;\r\n\r\n let isDisabled = false;\r\n if (min) {\r\n const minDay = new Date(min.getFullYear(), min.getMonth(), min.getDate());\r\n isDisabled = date < minDay;\r\n }\r\n if (max && !isDisabled) {\r\n const maxDay = new Date(max.getFullYear(), max.getMonth(), max.getDate());\r\n isDisabled = date > maxDay;\r\n }\r\n\r\n let isRangeStart = false;\r\n let isRangeEnd = false;\r\n let isInRange = false;\r\n\r\n if (isRange) {\r\n const dt = this._stripTime(date).getTime();\r\n const s = rangeStart ? this._stripTime(rangeStart).getTime() : null;\r\n const e = rangeEnd ? this._stripTime(rangeEnd).getTime() : null;\r\n const h = hoverDate ? this._stripTime(hoverDate).getTime() : null;\r\n\r\n if (s !== null && e !== null) {\r\n // Complete range\r\n isRangeStart = dt === s;\r\n isRangeEnd = dt === e;\r\n isInRange = dt > s && dt < e;\r\n } else if (s !== null && h !== null) {\r\n // Preview range (one click done, hovering)\r\n const lo = Math.min(s, h);\r\n const hi = Math.max(s, h);\r\n isRangeStart = dt === lo;\r\n isRangeEnd = dt === hi;\r\n isInRange = dt > lo && dt < hi;\r\n } else if (s !== null) {\r\n isRangeStart = dt === s;\r\n }\r\n }\r\n\r\n return { date, day: date.getDate(), isCurrentMonth, isToday, isSelected, isDisabled, isRangeStart, isRangeEnd, isInRange };\r\n }\r\n\r\n private _stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n }\r\n}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n input,\r\n OnInit,\r\n Renderer2,\r\n signal,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BlocCalendarPanelComponent } from './calendar-panel.component';\r\n\r\n// ── Injected styles ────────────────────────────────────────────────────────\r\n\r\nconst TRIGGER_CSS = [\r\n '.bloc-dp-trigger-dropdown{',\r\n 'position:fixed;z-index:var(--bloc-date-picker-z-index,100);',\r\n 'min-width:280px;border-width:1px;border-style:solid;',\r\n 'border-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db));',\r\n 'border-radius:var(--bloc-date-picker-dropdown-radius,8px);',\r\n 'padding:12px;box-sizing:border-box;',\r\n 'font-family:inherit;',\r\n 'animation:bloc-dp-trigger-in .15s ease}',\r\n ':where(.bloc-dp-trigger-dropdown){',\r\n 'background-color:var(--bloc-date-picker-dropdown-bg,#ffffff);',\r\n 'box-shadow:var(--bloc-date-picker-dropdown-shadow,0 4px 16px rgba(0,0,0,.1))}',\r\n // Arrow — outer\r\n '.bloc-dp-trigger-dropdown::before,',\r\n '.bloc-dp-trigger-dropdown::after{content:\"\";position:absolute;width:0;height:0}',\r\n '.bloc-dp-trigger-dropdown::before{',\r\n 'top:-8px;left:16px;border:8px solid transparent;border-top:none;',\r\n 'border-bottom-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db))}',\r\n // Arrow — inner\r\n '.bloc-dp-trigger-dropdown::after{',\r\n 'top:-7px;left:17px;border:7px solid transparent;border-top:none;',\r\n 'border-bottom-color:var(--bloc-date-picker-dropdown-bg,#ffffff)}',\r\n // Upward variant\r\n '.bloc-dp-trigger-dropdown--upward{animation-name:bloc-dp-trigger-in-up}',\r\n '.bloc-dp-trigger-dropdown--upward::before{',\r\n 'top:auto;bottom:-8px;left:16px;border:8px solid transparent;border-bottom:none;',\r\n 'border-top-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db))}',\r\n '.bloc-dp-trigger-dropdown--upward::after{',\r\n 'top:auto;bottom:-7px;left:17px;border:7px solid transparent;border-bottom:none;',\r\n 'border-top-color:var(--bloc-date-picker-dropdown-bg,#ffffff)}',\r\n '@keyframes bloc-dp-trigger-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}',\r\n '@keyframes bloc-dp-trigger-in-up{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}',\r\n // Disabled state\r\n '.bloc-date-picker-trigger--disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}',\r\n].join('');\r\n\r\nfunction ensureStyles(doc: Document): void {\r\n if (!doc?.head || doc.getElementById('bloc-dp-trigger-styles')) return;\r\n const style = doc.createElement('style');\r\n style.id = 'bloc-dp-trigger-styles';\r\n style.textContent = TRIGGER_CSS;\r\n doc.head.appendChild(style);\r\n}\r\n\r\n// ── Directive ──────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: '[blocDatePickerTrigger]',\r\n standalone: true,\r\n exportAs: 'blocDatePickerTrigger',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BlocDatePickerTriggerDirective),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n '(click)': 'toggle()',\r\n '[attr.aria-haspopup]': '\"dialog\"',\r\n '[attr.aria-expanded]': 'isOpen()',\r\n '[class.bloc-date-picker-trigger--open]': 'isOpen()',\r\n '[class.bloc-date-picker-trigger--disabled]': 'isDisabled()',\r\n '[attr.disabled]': 'isDisabled() || null',\r\n },\r\n})\r\nexport class BlocDatePickerTriggerDirective implements ControlValueAccessor, OnInit {\r\n private readonly _el = inject(ElementRef<HTMLElement>);\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _renderer = inject(Renderer2);\r\n private readonly _doc = inject(DOCUMENT);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n /** Minimum selectable date. */\r\n readonly minDate = input<Date | null>(null);\r\n\r\n /** Maximum selectable date. */\r\n readonly maxDate = input<Date | null>(null);\r\n\r\n /** Date format string for `displayValue`. Defaults to `'yyyy-MM-dd'`. */\r\n readonly format = input<string>('yyyy-MM-dd');\r\n\r\n /** Disable the trigger via template binding. */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Currently selected date. */\r\n readonly _selectedDate = signal<Date | null>(null);\r\n\r\n /** Whether the calendar panel is open. */\r\n readonly isOpen = signal<boolean>(false);\r\n\r\n private readonly _formDisabled = signal<boolean>(false);\r\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\r\n\r\n /** Formatted display value consumers can bind in their trigger template. */\r\n readonly displayValue = computed(() => {\r\n const d = this._selectedDate();\r\n if (!d) return '';\r\n return this._formatDate(d);\r\n });\r\n\r\n private _onChange: (val: Date | null) => void = () => { };\r\n private _onTouched: () => void = () => { };\r\n\r\n private _panelRef: ComponentRef<BlocCalendarPanelComponent> | null = null;\r\n private _wrapper: HTMLElement | null = null;\r\n private _docClickUnlisten: (() => void) | null = null;\r\n private _escUnlisten: (() => void) | null = null;\r\n\r\n constructor() {\r\n ensureStyles(this._doc);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._destroyRef.onDestroy(() => this._close());\r\n }\r\n\r\n toggle(): void {\r\n if (this.isDisabled()) return;\r\n this.isOpen() ? this._close() : this._open();\r\n }\r\n\r\n // ── ControlValueAccessor ────────────────────────────────────────────────\r\n\r\n writeValue(val: unknown): void {\r\n this._selectedDate.set(val instanceof Date ? val : val ? new Date(val as string) : null);\r\n }\r\n\r\n registerOnChange(fn: (val: Date | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._formDisabled.set(isDisabled);\r\n }\r\n\r\n // ── Private ─────────────────────────────────────────────────────────────\r\n\r\n private _open(): void {\r\n if (this._panelRef) return;\r\n\r\n // Create panel via ViewContainerRef (keeps it in Angular's change-detection tree)\r\n this._panelRef = this._vcr.createComponent(BlocCalendarPanelComponent);\r\n const panel = this._panelRef.instance;\r\n\r\n // Set inputs\r\n this._panelRef.setInput('selectedDate', this._selectedDate());\r\n this._panelRef.setInput('minDate', this.minDate());\r\n this._panelRef.setInput('maxDate', this.maxDate());\r\n\r\n // Listen to outputs\r\n panel.dateSelect.subscribe((date: Date) => {\r\n this._selectedDate.set(date);\r\n this._onChange(date);\r\n this._close();\r\n });\r\n panel.cleared.subscribe(() => {\r\n this._selectedDate.set(null);\r\n this._onChange(null);\r\n });\r\n\r\n panel.resetView(this._selectedDate());\r\n\r\n // Create wrapper div and append component's host element into it\r\n this._wrapper = this._doc.createElement('div');\r\n this._wrapper.className = 'bloc-dp-trigger-dropdown';\r\n this._wrapper.setAttribute('role', 'dialog');\r\n this._wrapper.setAttribute('aria-label', 'Date picker');\r\n this._wrapper.appendChild(this._panelRef.location.nativeElement);\r\n this._doc.body.appendChild(this._wrapper);\r\n\r\n // Position\r\n this._positionDropdown();\r\n\r\n this.isOpen.set(true);\r\n this._onTouched();\r\n\r\n // Close on outside click (delay so current click doesn't immediately close)\r\n requestAnimationFrame(() => {\r\n this._docClickUnlisten = this._renderer.listen('document', 'click', (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (\r\n !this._el.nativeElement.contains(target) &&\r\n !this._wrapper?.contains(target)\r\n ) {\r\n this._close();\r\n }\r\n });\r\n\r\n this._escUnlisten = this._renderer.listen('document', 'keydown.escape', () => {\r\n this._close();\r\n });\r\n });\r\n }\r\n\r\n private _close(): void {\r\n this._docClickUnlisten?.();\r\n this._docClickUnlisten = null;\r\n this._escUnlisten?.();\r\n this._escUnlisten = null;\r\n\r\n if (this._panelRef) {\r\n this._panelRef.destroy();\r\n this._panelRef = null;\r\n }\r\n\r\n if (this._wrapper) {\r\n this._wrapper.remove();\r\n this._wrapper = null;\r\n }\r\n\r\n this.isOpen.set(false);\r\n }\r\n\r\n private _positionDropdown(): void {\r\n if (!this._wrapper) return;\r\n const rect = this._el.nativeElement.getBoundingClientRect();\r\n const openUpward = window.innerHeight - rect.bottom < 320;\r\n\r\n if (openUpward) {\r\n this._wrapper.classList.add('bloc-dp-trigger-dropdown--upward');\r\n this._wrapper.style.left = `${rect.left}px`;\r\n this._wrapper.style.bottom = `${window.innerHeight - rect.top + 10}px`;\r\n this._wrapper.style.top = 'auto';\r\n } else {\r\n this._wrapper.classList.remove('bloc-dp-trigger-dropdown--upward');\r\n this._wrapper.style.left = `${rect.left}px`;\r\n this._wrapper.style.top = `${rect.bottom + 10}px`;\r\n this._wrapper.style.bottom = 'auto';\r\n }\r\n }\r\n\r\n private _formatDate(d: Date): string {\r\n const yyyy = d.getFullYear();\r\n const mm = String(d.getMonth() + 1).padStart(2, '0');\r\n const dd = String(d.getDate()).padStart(2, '0');\r\n\r\n return this.format()\r\n .replace('yyyy', String(yyyy))\r\n .replace('MM', mm)\r\n .replace('dd', dd);\r\n }\r\n}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n forwardRef,\r\n inject,\r\n input,\r\n OnInit,\r\n Renderer2,\r\n signal,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ControlValueAccessor, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BlocCalendarPanelComponent } from './calendar-panel.component';\r\n\r\nexport interface DateRange {\r\n from: Date | null;\r\n to: Date | null;\r\n}\r\n\r\n// ── Injected styles (reuses the same dropdown CSS id as the single trigger) ──\r\n\r\nconst TRIGGER_CSS = [\r\n '.bloc-dp-trigger-dropdown{',\r\n 'position:fixed;z-index:var(--bloc-date-picker-z-index,100);',\r\n 'min-width:280px;border-width:1px;border-style:solid;',\r\n 'border-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db));',\r\n 'border-radius:var(--bloc-date-picker-dropdown-radius,8px);',\r\n 'padding:12px;box-sizing:border-box;',\r\n 'font-family:inherit;',\r\n 'animation:bloc-dp-trigger-in .15s ease}',\r\n ':where(.bloc-dp-trigger-dropdown){',\r\n 'background-color:var(--bloc-date-picker-dropdown-bg,#ffffff);',\r\n 'box-shadow:var(--bloc-date-picker-dropdown-shadow,0 4px 16px rgba(0,0,0,.1))}',\r\n '.bloc-dp-trigger-dropdown::before,',\r\n '.bloc-dp-trigger-dropdown::after{content:\"\";position:absolute;width:0;height:0}',\r\n '.bloc-dp-trigger-dropdown::before{',\r\n 'top:-8px;left:16px;border:8px solid transparent;border-top:none;',\r\n 'border-bottom-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db))}',\r\n '.bloc-dp-trigger-dropdown::after{',\r\n 'top:-7px;left:17px;border:7px solid transparent;border-top:none;',\r\n 'border-bottom-color:var(--bloc-date-picker-dropdown-bg,#ffffff)}',\r\n '.bloc-dp-trigger-dropdown--upward{animation-name:bloc-dp-trigger-in-up}',\r\n '.bloc-dp-trigger-dropdown--upward::before{',\r\n 'top:auto;bottom:-8px;left:16px;border:8px solid transparent;border-bottom:none;',\r\n 'border-top-color:var(--bloc-date-picker-dropdown-border,var(--bloc-border,#d1d5db))}',\r\n '.bloc-dp-trigger-dropdown--upward::after{',\r\n 'top:auto;bottom:-7px;left:17px;border:7px solid transparent;border-bottom:none;',\r\n 'border-top-color:var(--bloc-date-picker-dropdown-bg,#ffffff)}',\r\n '@keyframes bloc-dp-trigger-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}',\r\n '@keyframes bloc-dp-trigger-in-up{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}',\r\n '.bloc-date-picker-trigger--disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}',\r\n].join('');\r\n\r\nfunction ensureStyles(doc: Document): void {\r\n if (!doc?.head || doc.getElementById('bloc-dp-trigger-styles')) return;\r\n const style = doc.createElement('style');\r\n style.id = 'bloc-dp-trigger-styles';\r\n style.textContent = TRIGGER_CSS;\r\n doc.head.appendChild(style);\r\n}\r\n\r\n// ── Directive ──────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: '[blocDateRangePickerTrigger]',\r\n standalone: true,\r\n exportAs: 'blocDateRangePickerTrigger',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BlocDateRangePickerTriggerDirective),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n '(click)': 'toggle()',\r\n '[attr.aria-haspopup]': '\"dialog\"',\r\n '[attr.aria-expanded]': 'isOpen()',\r\n '[class.bloc-date-picker-trigger--open]': 'isOpen()',\r\n '[class.bloc-date-picker-trigger--disabled]': 'isDisabled()',\r\n '[attr.disabled]': 'isDisabled() || null',\r\n },\r\n})\r\nexport class BlocDateRangePickerTriggerDirective implements ControlValueAccessor, OnInit {\r\n private readonly _el = inject(ElementRef<HTMLElement>);\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _renderer = inject(Renderer2);\r\n private readonly _doc = inject(DOCUMENT);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n /** Minimum selectable date. */\r\n readonly minDate = input<Date | null>(null);\r\n\r\n /** Maximum selectable date. */\r\n readonly maxDate = input<Date | null>(null);\r\n\r\n /** Date format string. Defaults to `'yyyy-MM-dd'`. */\r\n readonly format = input<string>('yyyy-MM-dd');\r\n\r\n /** Disable the trigger via template binding. */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Optional FormGroup with `from` and `to` controls. When provided, the directive patches these controls directly. */\r\n readonly rangeFormGroup = input<FormGroup | null>(null);\r\n\r\n // ── Internal state ──────────────────────────────────────────────────────\r\n\r\n readonly _rangeStart = signal<Date | null>(null);\r\n readonly _rangeEnd = signal<Date | null>(null);\r\n readonly _hoverDate = signal<Date | null>(null);\r\n readonly _pickState = signal<'idle' | 'picking'>('idle');\r\n\r\n readonly isOpen = signal<boolean>(false);\r\n\r\n private readonly _formDisabled = signal<boolean>(false);\r\n readonly isDisabled = computed(() => this.disabled() || this._formDisabled());\r\n\r\n /** Formatted display value: \"from → to\" or partial. */\r\n readonly displayValue = computed(() => {\r\n const from = this._rangeStart();\r\n const to = this._rangeEnd();\r\n if (from && to) return `${this._formatDate(from)} → ${this._formatDate(to)}`;\r\n if (from) return this._formatDate(from);\r\n return '';\r\n });\r\n\r\n /** Formatted from date. */\r\n readonly displayValueFrom = computed(() => {\r\n const d = this._rangeStart();\r\n return d ? this._formatDate(d) : '';\r\n });\r\n\r\n /** Formatted to date. */\r\n readonly displayValueTo = computed(() => {\r\n const d = this._rangeEnd();\r\n return d ? this._formatDate(d) : '';\r\n });\r\n\r\n private _onChange: (val: DateRange) => void = () => { };\r\n private _onTouched: () => void = () => { };\r\n\r\n private _panelRef: ComponentRef<BlocCalendarPanelComponent> | null = null;\r\n private _wrapper: HTMLElement | null = null;\r\n private _docClickUnlisten: (() => void) | null = null;\r\n private _escUnlisten: (() => void) | null = null;\r\n\r\n constructor() {\r\n ensureStyles(this._doc);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._destroyRef.onDestroy(() => this._close());\r\n }\r\n\r\n toggle(): void {\r\n if (this.isDisabled()) return;\r\n this.isOpen() ? this._close() : this._open();\r\n }\r\n\r\n // ── ControlValueAccessor ────────────────────────────────────────────────\r\n\r\n writeValue(val: unknown): void {\r\n if (val && typeof val === 'object' && ('from' in val || 'to' in val)) {\r\n const v = val as Partial<DateRange>;\r\n this._rangeStart.set(this._toDate(v.from));\r\n this._rangeEnd.set(this._toDate(v.to));\r\n } else {\r\n this._rangeStart.set(null);\r\n this._rangeEnd.set(null);\r\n }\r\n this._pickState.set('idle');\r\n }\r\n\r\n registerOnChange(fn: (val: DateRange) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._formDisabled.set(isDisabled);\r\n }\r\n\r\n // ── Private ─────────────────────────────────────────────────────────────\r\n\r\n private _open(): void {\r\n if (this._panelRef) return;\r\n\r\n this._panelRef = this._vcr.createComponent(BlocCalendarPanelComponent);\r\n const panel = this._panelRef.instance;\r\n\r\n // Set inputs — range mode\r\n this._panelRef.setInput('mode', 'range');\r\n this._panelRef.setInput('rangeStart', this._rangeStart());\r\n this._panelRef.setInput('rangeEnd', this._rangeEnd());\r\n this._panelRef.setInput('hoverDate', null);\r\n this._panelRef.setInput('minDate', this.minDate());\r\n this._panelRef.setInput('maxDate', this.maxDate());\r\n\r\n // Listen to outputs\r\n panel.dateSelect.subscribe((date: Date) => this._handleDateSelect(date));\r\n panel.dateHover.subscribe((date: Date) => this._handleDateHover(date));\r\n panel.cleared.subscribe(() => this._handleClear());\r\n\r\n // Reset view to show the range start month, or current month\r\n panel.resetView(this._rangeStart());\r\n\r\n // Create wrapper\r\n this._wrapper = this._doc.createElement('div');\r\n this._wrapper.className = 'bloc-dp-trigger-dropdown';\r\n this._wrapper.setAttribute('role', 'dialog');\r\n this._wrapper.setAttribute('aria-label', 'Date range picker');\r\n this._wrapper.appendChild(this._panelRef.location.nativeElement);\r\n this._doc.body.appendChild(this._wrapper);\r\n\r\n this._positionDropdown();\r\n this.isOpen.set(true);\r\n this._onTouched();\r\n\r\n requestAnimationFrame(() => {\r\n this._docClickUnlisten = this._renderer.listen('document', 'click', (e: MouseEvent) => {\r\n const target = e.target as Node;\r\n if (\r\n !this._el.nativeElement.contains(target) &&\r\n !this._wrapper?.contains(target)\r\n ) {\r\n this._close();\r\n }\r\n });\r\n\r\n this._escUnlisten = this._renderer.listen('document', 'keydown.escape', () => {\r\n this._close();\r\n });\r\n });\r\n }\r\n\r\n private _handleDateSelect(date: Date): void {\r\n if (this._pickState() === 'idle') {\r\n // First click — set anchor\r\n this._rangeStart.set(date);\r\n this._rangeEnd.set(null);\r\n this._hoverDate.set(null);\r\n this._pickState.set('picking');\r\n\r\n // Update panel inputs\r\n this._panelRef?.setInput('rangeStart', date);\r\n this._panelRef?.setInput('rangeEnd', null);\r\n this._panelRef?.setInput('hoverDate', null);\r\n } else {\r\n // Second click — complete range\r\n const anchor = this._rangeStart()!;\r\n const [from, to] = anchor <= date ? [anchor, date] : [date, anchor];\r\n\r\n this._rangeStart.set(from);\r\n this._rangeEnd.set(to);\r\n this._hoverDate.set(null);\r\n this._pickState.set('idle');\r\n\r\n this._emitValue({ from, to });\r\n this._close();\r\n }\r\n }\r\n\r\n private _handleDateHover(date: Date): void {\r\n if (this._pickState() === 'picking') {\r\n this._hoverDate.set(date);\r\n this._panelRef?.setInput('hoverDate', date);\r\n }\r\n }\r\n\r\n private _handleClear(): void {\r\n this._rangeStart.set(null);\r\n this._rangeEnd.set(null);\r\n this._hoverDate.set(null);\r\n this._pickState.set('idle');\r\n\r\n this._panelRef?.setInput('rangeStart', null);\r\n this._panelRef?.setInput('rangeEnd', null);\r\n this._panelRef?.setInput('hoverDate', null);\r\n\r\n this._emitValue({ from: null, to: null });\r\n }\r\n\r\n private _emitValue(val: DateRange): void {\r\n this._onChange(val);\r\n\r\n // Sync FormGroup if provided\r\n const fg = this.rangeFormGroup();\r\n if (fg) {\r\n fg.patchValue({ from: val.from, to: val.to }, { emitEvent: false });\r\n }\r\n }\r\n\r\n private _close(): void {\r\n this._docClickUnlisten?.();\r\n this._docClickUnlisten = null;\r\n this._escUnlisten?.();\r\n this._escUnlisten = null;\r\n\r\n if (this._panelRef) {\r\n this._panelRef.destroy();\r\n this._panelRef = null;\r\n }\r\n\r\n if (this._wrapper) {\r\n this._wrapper.remove();\r\n this._wrapper = null;\r\n }\r\n\r\n // If we were mid-pick, revert to idle and restore previous complete range\r\n if (this._pickState() === 'picking') {\r\n this._pickState.set('idle');\r\n // If no completed range, clear anchor\r\n if (!this._rangeEnd()) {\r\n this._rangeStart.set(null);\r\n }\r\n }\r\n\r\n this._hoverDate.set(null);\r\n this.isOpen.set(false);\r\n }\r\n\r\n private _positionDropdown(): void {\r\n if (!this._wrapper) return;\r\n const rect = this._el.nativeElement.getBoundingClientRect();\r\n const openUpward = window.innerHeight - rect.bottom < 320;\r\n\r\n if (openUpward) {\r\n this._wrapper.classList.add('bloc-dp-trigger-dropdown--upward');\r\n this._wrapper.style.left = `${rect.left}px`;\r\n this._wrapper.style.bottom = `${window.innerHeight - rect.top + 10}px`;\r\n this._wrapper.style.top = 'auto';\r\n } else {\r\n this._wrapper.classList.remove('bloc-dp-trigger-dropdown--upward');\r\n this._wrapper.style.left = `${rect.left}px`;\r\n this._wrapper.style.top = `${rect.bottom + 10}px`;\r\n this._wrapper.style.bottom = 'auto';\r\n }\r\n }\r\n\r\n private _formatDate(d: Date): string {\r\n const yyyy = d.getFullYear();\r\n const mm = String(d.getMonth() + 1).padStart(2, '0');\r\n const dd = String(d.getDate()).padStart(2, '0');\r\n\r\n return this.format()\r\n .replace('yyyy', String(yyyy))\r\n .replace('MM', mm)\r\n .replace('dd', dd);\r\n }\r\n\r\n private _toDate(val: unknown): Date | null {\r\n if (val instanceof Date) return val;\r\n if (val && typeof val === 'string') return new Date(val);\r\n return null;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { BlocDatePickerTriggerDirective } from './date-picker-trigger.directive';\r\nimport { BlocDateRangePickerTriggerDirective } from './date-range-picker-trigger.directive';\r\n\r\n@NgModule({\r\n imports: [BlocDatePickerTriggerDirective, BlocDateRangePickerTriggerDirective],\r\n exports: [BlocDatePickerTriggerDirective, BlocDateRangePickerTriggerDirective],\r\n})\r\nexport class BlocDatePickerModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TRIGGER_CSS","ensureStyles"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloc-ui/date-picker",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/debasish1996/BLOC-UI.git",
@@ -1,72 +1,114 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ControlValueAccessor } from '@angular/forms';
2
+ import { OnInit } from '@angular/core';
3
+ import { ControlValueAccessor, FormGroup } from '@angular/forms';
3
4
 
4
- interface CalendarDay {
5
- date: Date;
6
- day: number;
7
- isCurrentMonth: boolean;
8
- isToday: boolean;
9
- isSelected: boolean;
10
- isDisabled: boolean;
11
- }
12
- /**
13
- * Date picker component with calendar dropdown.
14
- *
15
- * ```html
16
- * <bloc-date-picker [(ngModel)]="selectedDate" />
17
- * <bloc-date-picker [formControl]="dateCtrl" placeholder="Choose date" />
18
- * ```
19
- */
20
- declare class BlocDatePickerComponent implements ControlValueAccessor {
5
+ declare class BlocDatePickerTriggerDirective implements ControlValueAccessor, OnInit {
21
6
  private readonly _el;
22
- /** Preset size. Defaults to `'md'`. */
23
- readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
24
- /** Placeholder text for the input. */
25
- readonly placeholder: _angular_core.InputSignal<string>;
26
- /** Date format for display. Defaults to `'yyyy-MM-dd'`. */
27
- readonly format: _angular_core.InputSignal<string>;
28
- /** Disable the date picker via template binding. */
29
- readonly disabled: _angular_core.InputSignal<boolean>;
7
+ private readonly _vcr;
8
+ private readonly _renderer;
9
+ private readonly _doc;
10
+ private readonly _destroyRef;
30
11
  /** Minimum selectable date. */
31
12
  readonly minDate: _angular_core.InputSignal<Date | null>;
32
13
  /** Maximum selectable date. */
33
14
  readonly maxDate: _angular_core.InputSignal<Date | null>;
34
- readonly weekdays: string[];
15
+ /** Date format string for `displayValue`. Defaults to `'yyyy-MM-dd'`. */
16
+ readonly format: _angular_core.InputSignal<string>;
17
+ /** Disable the trigger via template binding. */
18
+ readonly disabled: _angular_core.InputSignal<boolean>;
35
19
  /** Currently selected date. */
36
20
  readonly _selectedDate: _angular_core.WritableSignal<Date | null>;
37
- /** Whether the calendar dropdown is open. */
21
+ /** Whether the calendar panel is open. */
38
22
  readonly isOpen: _angular_core.WritableSignal<boolean>;
39
- /** The month being viewed (year + month). */
40
- readonly _viewDate: _angular_core.WritableSignal<Date>;
41
23
  private readonly _formDisabled;
42
24
  readonly isDisabled: _angular_core.Signal<boolean>;
43
- private _onChange;
44
- _onTouched: () => void;
25
+ /** Formatted display value consumers can bind in their trigger template. */
45
26
  readonly displayValue: _angular_core.Signal<string>;
46
- readonly monthYearLabel: _angular_core.Signal<string>;
47
- readonly calendarDays: _angular_core.Signal<CalendarDay[]>;
48
- toggleCalendar(): void;
49
- selectDay(day: CalendarDay): void;
50
- prevMonth(): void;
51
- nextMonth(): void;
52
- goToToday(): void;
53
- clear(): void;
54
- _onDocClick(event: MouseEvent): void;
55
- _onEsc(): void;
27
+ private _onChange;
28
+ private _onTouched;
29
+ private _panelRef;
30
+ private _wrapper;
31
+ private _docClickUnlisten;
32
+ private _escUnlisten;
33
+ constructor();
34
+ ngOnInit(): void;
35
+ toggle(): void;
56
36
  writeValue(val: unknown): void;
57
37
  registerOnChange(fn: (val: Date | null) => void): void;
58
38
  registerOnTouched(fn: () => void): void;
59
39
  setDisabledState(isDisabled: boolean): void;
60
- private _buildDay;
40
+ private _open;
41
+ private _close;
42
+ private _positionDropdown;
43
+ private _formatDate;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlocDatePickerTriggerDirective, never>;
45
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BlocDatePickerTriggerDirective, "[blocDatePickerTrigger]", ["blocDatePickerTrigger"], { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
46
+ }
47
+
48
+ interface DateRange {
49
+ from: Date | null;
50
+ to: Date | null;
51
+ }
52
+ declare class BlocDateRangePickerTriggerDirective implements ControlValueAccessor, OnInit {
53
+ private readonly _el;
54
+ private readonly _vcr;
55
+ private readonly _renderer;
56
+ private readonly _doc;
57
+ private readonly _destroyRef;
58
+ /** Minimum selectable date. */
59
+ readonly minDate: _angular_core.InputSignal<Date | null>;
60
+ /** Maximum selectable date. */
61
+ readonly maxDate: _angular_core.InputSignal<Date | null>;
62
+ /** Date format string. Defaults to `'yyyy-MM-dd'`. */
63
+ readonly format: _angular_core.InputSignal<string>;
64
+ /** Disable the trigger via template binding. */
65
+ readonly disabled: _angular_core.InputSignal<boolean>;
66
+ /** Optional FormGroup with `from` and `to` controls. When provided, the directive patches these controls directly. */
67
+ readonly rangeFormGroup: _angular_core.InputSignal<FormGroup<any> | null>;
68
+ readonly _rangeStart: _angular_core.WritableSignal<Date | null>;
69
+ readonly _rangeEnd: _angular_core.WritableSignal<Date | null>;
70
+ readonly _hoverDate: _angular_core.WritableSignal<Date | null>;
71
+ readonly _pickState: _angular_core.WritableSignal<"idle" | "picking">;
72
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
73
+ private readonly _formDisabled;
74
+ readonly isDisabled: _angular_core.Signal<boolean>;
75
+ /** Formatted display value: "from → to" or partial. */
76
+ readonly displayValue: _angular_core.Signal<string>;
77
+ /** Formatted from date. */
78
+ readonly displayValueFrom: _angular_core.Signal<string>;
79
+ /** Formatted to date. */
80
+ readonly displayValueTo: _angular_core.Signal<string>;
81
+ private _onChange;
82
+ private _onTouched;
83
+ private _panelRef;
84
+ private _wrapper;
85
+ private _docClickUnlisten;
86
+ private _escUnlisten;
87
+ constructor();
88
+ ngOnInit(): void;
89
+ toggle(): void;
90
+ writeValue(val: unknown): void;
91
+ registerOnChange(fn: (val: DateRange) => void): void;
92
+ registerOnTouched(fn: () => void): void;
93
+ setDisabledState(isDisabled: boolean): void;
94
+ private _open;
95
+ private _handleDateSelect;
96
+ private _handleDateHover;
97
+ private _handleClear;
98
+ private _emitValue;
99
+ private _close;
100
+ private _positionDropdown;
61
101
  private _formatDate;
62
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlocDatePickerComponent, never>;
63
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BlocDatePickerComponent, "bloc-date-picker", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
102
+ private _toDate;
103
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlocDateRangePickerTriggerDirective, never>;
104
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BlocDateRangePickerTriggerDirective, "[blocDateRangePickerTrigger]", ["blocDateRangePickerTrigger"], { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rangeFormGroup": { "alias": "rangeFormGroup"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
64
105
  }
65
106
 
66
107
  declare class BlocDatePickerModule {
67
108
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlocDatePickerModule, never>;
68
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<BlocDatePickerModule, never, [typeof BlocDatePickerComponent], [typeof BlocDatePickerComponent]>;
109
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<BlocDatePickerModule, never, [typeof BlocDatePickerTriggerDirective, typeof BlocDateRangePickerTriggerDirective], [typeof BlocDatePickerTriggerDirective, typeof BlocDateRangePickerTriggerDirective]>;
69
110
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<BlocDatePickerModule>;
70
111
  }
71
112
 
72
- export { BlocDatePickerComponent, BlocDatePickerModule };
113
+ export { BlocDatePickerModule, BlocDatePickerTriggerDirective, BlocDateRangePickerTriggerDirective };
114
+ export type { DateRange };