@ship-ui/core 0.22.15 → 0.22.16
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/assets/mcp/components.json +32 -8
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +9 -0
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-blueprint.mjs +10 -2
- package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-datepicker.mjs +16 -4
- package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-dialog.mjs +4 -0
- package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-popover.mjs +4 -0
- package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-table.mjs +426 -22
- package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ship-ui-core-ship-blueprint.d.ts +1 -0
- package/types/ship-ui-core-ship-datepicker.d.ts +2 -0
- package/types/ship-ui-core-ship-table.d.ts +12 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-datepicker.mjs","sources":["../../../projects/ship-ui/ship-datepicker/ship-datepicker.ts","../../../projects/ship-ui/ship-datepicker/ship-datepicker-input.ts","../../../projects/ship-ui/ship-datepicker/ship-daterange-input.ts","../../../projects/ship-ui/ship-datepicker/ship-ui-core-ship-datepicker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, output, signal, viewChild, inject, ViewEncapsulation } from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { HostListener } from '@angular/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\n@Component({\n selector: 'sh-datepicker',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon],\n template: `\n <header>\n <button tabindex=\"-1\" (click)=\"previousMonth()\"><sh-icon>caret-left</sh-icon></button>\n <div class=\"title\">\n {{ getMonthName(currentDate()!) }}\n @if (monthsToShow() > 1) {\n - {{ getMonthName(getLastVisibleMonth()) }}\n }\n {{ getFullYear(currentDate()!) }}\n </div>\n <button tabindex=\"-1\" (click)=\"nextMonth()\"><sh-icon>caret-right</sh-icon></button>\n </header>\n\n <section class=\"months-container\">\n @for (monthOffset of monthOffsets(); track monthOffset) {\n <div class=\"month\">\n <nav class=\"weekdays\">\n @for (day of weekdays(); track $index) {\n <div>{{ day }}</div>\n }\n </nav>\n\n <div class=\"days\" #daysRef>\n @for (calDate of getMonthDates(monthOffset); track $index) {\n <button\n type=\"button\"\n #elementRef\n [class.out-of-scope]=\"!isCurrentMonth(calDate, monthOffset)\"\n [class]=\"isDateSelected(calDate)\"\n [attr.aria-label]=\"getAriaLabel(calDate)\"\n [attr.tabindex]=\"getTabIndex(calDate)\"\n [attr.aria-selected]=\"isDateSelectedBool(calDate)\"\n (keydown)=\"onKeydown($event, calDate)\"\n (click)=\"setDate(calDate, elementRef)\">\n {{ calDate.getDate() }}\n </button>\n }\n\n @if (!asRange()) {\n <article class=\"days\">\n <div class=\"sel-el\" [style]=\"selectedDateStylePosition()\"></div>\n </article>\n }\n </div>\n </div>\n }\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.as-range]': 'asRange()',\n '[class]': '\"columns-\" + monthsToShow()',\n '[class.disabled]': 'disabled()',\n },\n})\nexport class ShipDatepicker {\n #INIT_DATE = new Date(new Date().setHours(0, 0, 0, 0));\n\n date = model<Date | null>(null);\n endDate = model<Date | null>(null);\n asRange = input<boolean>(false);\n activeRangeSelection = input<'start' | 'end' | null>(null);\n monthsToShow = input<number>(1);\n disabled = input<boolean>(false);\n tabbedOut = output<void>();\n\n startOfWeek = input<number>(1);\n weekdayLabels = input<string[]>(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n daysRef = viewChild<ElementRef<HTMLDivElement>>('daysRef');\n currentDate = signal<Date>(this.date() ?? this.#INIT_DATE);\n\n #keybindings = inject(ShipA11yKeybindingsService);\n\n monthOffsets = computed(() => {\n return Array.from({ length: this.monthsToShow() }, (_, i) => i);\n });\n\n selectedDateStylePosition = signal<{ transform: string; opacity: string } | null>(null);\n\n weekdays = computed(() => {\n const startOfWeek = this.startOfWeek();\n const weekdayLabels = this.weekdayLabels();\n\n return weekdayLabels.slice(startOfWeek).concat(weekdayLabels.slice(0, startOfWeek));\n });\n\n currentClasses = classMutationSignal();\n someEffect = effect(() => {\n const _ = this.currentClasses();\n\n this.#findSelectedAndCalc();\n });\n\n getLastVisibleMonth(): Date {\n const lastMonthOffset = this.monthsToShow() - 1;\n return this.getOffsetDate(lastMonthOffset);\n }\n\n getOffsetDate(monthOffset: number): Date {\n const date = new Date(this.currentDate());\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n\n getMonthDates(monthOffset: number): Date[] {\n const offsetDate = this.getOffsetDate(monthOffset);\n return this.#generateMonthDates(offsetDate, this.startOfWeek());\n }\n\n #newDateEffect = effect(() => {\n if (this.monthsToShow() > 1) return;\n\n this.#setDateAsCurrent();\n });\n\n ngOnInit() {\n if (this.monthsToShow() === 1) return;\n\n this.#setDateAsCurrent();\n }\n\n #setDateAsCurrent() {\n const newDate = this.date();\n if (newDate && !isNaN(newDate.getTime())) {\n this.currentDate.set(newDate);\n }\n this.#findSelectedAndCalc();\n }\n\n #findSelectedAndCalc() {\n setTimeout(() => {\n const selectedElement = this.daysRef()?.nativeElement.querySelector('.sel');\n\n if (!selectedElement) {\n return this.selectedDateStylePosition.update((x) => (x ? { ...x, opacity: '0' } : null));\n }\n\n this.setSelectedDateStylePosition(selectedElement as HTMLElement);\n });\n }\n\n #generateMonthDates(date: Date, startOfWeek: number): Date[] {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const dates: Date[] = [];\n\n let offset = firstDay - startOfWeek;\n if (offset < 0) {\n offset += 7;\n }\n\n const lastDayOfPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = offset - 1; i >= 0; i--) {\n dates.push(new Date(year, month - 1, lastDayOfPrevMonth - i, 0, 0, 0, 0));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push(new Date(year, month, i, 0, 0, 0, 0));\n }\n\n let nextMonthDay = 1;\n while (dates.length % 7 !== 0) {\n dates.push(new Date(year, month + 1, nextMonthDay++, 0, 0, 0, 0));\n }\n\n return dates;\n }\n\n nextMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() + 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n previousMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() - 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n setDate(newDate: Date, selectedElement: HTMLElement) {\n this.focusedDate.set(newDate);\n\n const createDateWithExistingTime = (newDate: Date, existingDate: any | null) => {\n let hours = 0, minutes = 0, seconds = 0, milliseconds = 0;\n \n if (existingDate) {\n if (typeof existingDate === 'string' || typeof existingDate === 'number') {\n existingDate = new Date(existingDate);\n }\n if (existingDate instanceof Date && !isNaN(existingDate.getTime())) {\n hours = existingDate.getHours();\n minutes = existingDate.getMinutes();\n seconds = existingDate.getSeconds();\n milliseconds = existingDate.getMilliseconds();\n }\n }\n\n return new Date(\n newDate.getFullYear(),\n newDate.getMonth(),\n newDate.getDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n );\n };\n\n if (!this.asRange()) {\n this.date.set(createDateWithExistingTime(newDate, this.date()));\n this.endDate.set(null);\n } else {\n const startDate = this.date();\n const endDate = this.endDate();\n const selectionMode = this.activeRangeSelection();\n\n if (selectionMode === 'start') {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n if (endDate && utcDate > endDate) {\n this.endDate.set(null);\n }\n } else if (selectionMode === 'end') {\n if (!startDate || newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n if (!startDate) {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n } else if (!endDate) {\n if (newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n this.endDate.set(null);\n }\n }\n }\n\n if (this.asRange()) return;\n\n this.setSelectedDateStylePosition(selectedElement);\n }\n\n isDateSelected(date: Date): string | null {\n let startDate: any = this.date();\n let endDate: any = this.endDate();\n\n if (typeof startDate === 'string' || typeof startDate === 'number') startDate = new Date(startDate);\n if (typeof endDate === 'string' || typeof endDate === 'number') endDate = new Date(endDate);\n\n if (!startDate || !(startDate instanceof Date) || isNaN(startDate.getTime())) return null;\n\n const startOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n };\n\n const endOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n };\n\n const currentDate = startOfDay(date);\n const rangeStart = startOfDay(startDate);\n const rangeEnd = endDate ? endOfDay(endDate) : null;\n\n let classes = [];\n\n if (this.asRange()) {\n if (rangeEnd === null) {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel first last');\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('first');\n }\n\n if (currentDate.getTime() === startOfDay(rangeEnd).getTime()) {\n classes.push('last');\n }\n\n if (currentDate >= rangeStart && currentDate <= rangeEnd) {\n classes.push('sel');\n\n const dayOfWeek = currentDate.getDay();\n const startOfWeek = this.startOfWeek();\n\n if (dayOfWeek === startOfWeek) {\n classes.push('week-start');\n }\n\n const endOfWeek = (startOfWeek + 6) % 7;\n if (dayOfWeek === endOfWeek) {\n classes.push('week-end');\n }\n }\n\n const nextDate = new Date(currentDate);\n nextDate.setDate(currentDate.getDate() + 1);\n const prevDate = new Date(currentDate);\n prevDate.setDate(currentDate.getDate() - 1);\n\n const isFirstOfMonth = currentDate.getDate() === 1;\n const isLastOfMonth = nextDate.getMonth() !== currentDate.getMonth();\n\n if (isFirstOfMonth) {\n classes.push('month-start');\n }\n\n if (isLastOfMonth) {\n classes.push('month-end');\n }\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel');\n }\n }\n\n return classes.join(' ') || null;\n }\n\n setSelectedDateStylePosition(selectedElement: HTMLElement) {\n this.selectedDateStylePosition.set({\n transform: `translate(${selectedElement.offsetLeft}px, ${selectedElement.offsetTop}px)`,\n opacity: '1',\n });\n }\n\n getMonthName(date: Date): string {\n return date.toLocaleString('default', { month: 'long' });\n }\n\n getFullYear(date: Date): number {\n return date.getFullYear();\n }\n\n // Rest of the component methods remain the same, but update isCurrentMonth:\n isCurrentMonth(date: Date, monthOffset: number): boolean {\n const offsetDate = this.getOffsetDate(monthOffset);\n return date.getMonth() === offsetDate.getMonth();\n }\n\n focusedDate = signal<Date | null>(null);\n #selfRef = inject(ElementRef);\n\n isSameDay(d1: Date | null | undefined, d2: Date | null | undefined): boolean {\n if (!d1 || !d2) return false;\n return d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate();\n }\n\n getAriaLabel(date: Date): string {\n return date.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });\n }\n\n getTabIndex(date: Date): number {\n const focused = this.focusedDate();\n const selected = this.date();\n const today = new Date();\n\n if (focused) {\n return this.isSameDay(date, focused) ? 0 : -1;\n }\n if (selected) {\n return this.isSameDay(date, selected) ? 0 : -1;\n }\n return this.isSameDay(date, today) ? 0 : -1;\n }\n\n isDateSelectedBool(date: Date): boolean {\n const classes = this.isDateSelected(date);\n return classes ? classes.includes('sel') : false;\n }\n\n onKeydown(event: KeyboardEvent, date: Date) {\n let newDate = new Date(date);\n let handled = false;\n\n if (this.#keybindings.matches(event, 'datepicker.prev-month')) {\n newDate.setMonth(date.getMonth() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.next-month')) {\n newDate.setMonth(date.getMonth() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.prev-year')) {\n newDate.setFullYear(date.getFullYear() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.next-year')) {\n newDate.setFullYear(date.getFullYear() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.month-start')) {\n newDate = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.month-end')) {\n newDate = new Date(date.getFullYear(), date.getMonth() + 1, 0, 0, 0, 0, 0);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.day-next')) {\n newDate.setDate(date.getDate() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.day-prev')) {\n newDate.setDate(date.getDate() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.week-next')) {\n newDate.setDate(date.getDate() + 7);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.week-prev')) {\n newDate.setDate(date.getDate() - 7);\n handled = true;\n }\n\n if (handled) {\n event.preventDefault();\n this.ensureDateVisible(newDate);\n this.focusedDate.set(newDate);\n \n setTimeout(() => {\n const buttons = this.#selfRef.nativeElement.querySelectorAll('button');\n if (buttons) {\n const targetAria = this.getAriaLabel(newDate);\n let bestMatch: HTMLButtonElement | null = null;\n for (let i = 0; i < buttons.length; i++) {\n if (buttons[i].getAttribute('aria-label') === targetAria) {\n bestMatch = buttons[i];\n if (!buttons[i].classList.contains('out-of-scope')) {\n break;\n }\n }\n }\n if (bestMatch) {\n bestMatch.focus();\n }\n }\n });\n }\n }\n\n ensureDateVisible(date: Date) {\n const start = this.currentDate();\n const end = this.getLastVisibleMonth();\n \n if (date < new Date(start.getFullYear(), start.getMonth(), 1)) {\n this.currentDate.set(new Date(date.getFullYear(), date.getMonth(), 1));\n this.#findSelectedAndCalc();\n } else if (date > new Date(end.getFullYear(), end.getMonth() + 1, 0)) {\n const newStart = new Date(date);\n newStart.setMonth(newStart.getMonth() - this.monthsToShow() + 1);\n newStart.setDate(1);\n this.currentDate.set(newStart);\n this.#findSelectedAndCalc();\n }\n }\n\n focusActiveDate() {\n setTimeout(() => {\n const activeBtn = this.#selfRef.nativeElement.querySelector('button[tabindex=\"0\"]') as HTMLButtonElement;\n if (activeBtn) activeBtn.focus();\n }, 50);\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.tabbedOut.emit();\n }\n });\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, HostListener, computed, contentChild, effect, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-datepicker-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div id=\"input-wrap\" class=\"input\" ngProjectAs=\"input\">\n @if (this.masking()) {\n <div class=\"masked-value\">\n {{ _maskedDate() }}\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker [date]=\"internalDate()\" (dateChange)=\"onDateChange($event)\" (tabbedOut)=\"isOpen.set(false)\" [class]=\"currentClass()\" />\n }\n </div>\n </sh-form-field-popover>\n\n <ng-template #defaultIndicator></ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDatepickerInput {\n // #INIT_DATE = this.#getUTCDate(new Date());\n\n #selfRef = inject(ElementRef);\n ngControl = contentChild(NgControl);\n #datePipe = inject(DatePipe);\n #inputRef = signal<HTMLInputElement | null>(null);\n\n masking = input('mediumDate');\n closed = output<Date | null>();\n\n _maskedDate = computed(() => {\n const date = this.internalDate();\n const mask = this.masking();\n\n if (!mask) return date;\n if (!date) return null;\n\n return this.#datePipe.transform(date, mask);\n });\n\n internalDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n currentClass = classMutationSignal();\n #inputObserver = contentProjectionSignal<HTMLInputElement>('#input-wrap input');\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onDateChange(date: Date | null) {\n this.internalDate.set(date);\n\n const control = this.ngControl()?.control;\n\n if (control) {\n control.setValue(date);\n } else {\n const input = this.#inputRef();\n if (input) {\n input.value = date ? date.toString() : '';\n input.dispatchEvent(new Event('input'));\n }\n }\n }\n\n close() {\n this.closed.emit(this.internalDate());\n }\n\n #inputRefEffect = effect(() => {\n const inputs = this.#inputObserver();\n\n if (!inputs.length) return;\n\n const input = inputs[0];\n\n if (!input) return;\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('inputValueChanged', (event: any) => {\n const val = event.detail.value;\n if (!val) {\n this.internalDate.set(null);\n return;\n }\n \n let newD = new Date(val);\n \n if (isNaN(newD.getTime())) {\n // If it's a time-only string like \"14:30\" or \"14:30:00\"\n if (typeof val === 'string' && /^(\\d{2}):(\\d{2})/.test(val)) {\n const match = val.match(/^(\\d{2}):(\\d{2})(?::(\\d{2}))?/);\n if (match) {\n const current = this.internalDate() || new Date();\n newD = new Date(current);\n newD.setHours(parseInt(match[1], 10), parseInt(match[2], 10), match[3] ? parseInt(match[3], 10) : 0, 0);\n }\n }\n }\n \n if (!isNaN(newD.getTime())) {\n this.internalDate.set(newD);\n }\n });\n\n input.addEventListener('focus', () => {\n this.isOpen.set(true);\n // Removed input.blur() so users can actually type or use Shift+Tab to navigate backward\n });\n\n this.#inputRef.set(input);\n input.autocomplete = 'off';\n\n if (typeof input.value === 'string') {\n this.internalDate.set(input.value ? new Date(input.value) : null);\n }\n });\n\n #createCustomInputEventListener(input: HTMLInputElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n\n return input;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, HostListener, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-daterange-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover [class]=\"'columns-' + monthsToShow()\" (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n @if (this.masking()) {\n <div class=\"masked-value\" [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n <span class=\"start-val\">{{ _maskedStartDate() ?? 'N/A' }}</span>\n <span class=\"separator\">-</span>\n <span class=\"end-val\">{{ _maskedEndDate() ?? 'N/A' }}</span>\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker\n [date]=\"startDate()\"\n [endDate]=\"endDate()\"\n [activeRangeSelection]=\"activeInput()\"\n [class]=\"classes\"\n (dateChange)=\"onStartDateChange($event)\"\n (endDateChange)=\"onEndDateChange($event)\"\n (tabbedOut)=\"isOpen.set(false)\"\n [monthsToShow]=\"monthsToShow()\"\n [asRange]=\"true\" />\n }\n </div>\n </sh-form-field-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDaterangeInput {\n #selfRef = inject(ElementRef);\n\n #inputObserver = contentProjectionSignal('input', {\n childList: true,\n subtree: true,\n });\n\n #datePipe = inject(DatePipe);\n monthsToShow = input<number>(1);\n masking = input('mediumDate');\n closed = output<{ start: Date | null; end: Date | null }>();\n\n startDate = signal<Date | null>(null);\n endDate = signal<Date | null>(null);\n activeInput = signal<'start' | 'end'>('start');\n isOpen = model<boolean>(false);\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n get classes() {\n return `${this.#selfRef.nativeElement.classList.value}`;\n }\n\n _maskedStartDate = computed(() => {\n const date = this.startDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n _maskedEndDate = computed(() => {\n const date = this.endDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n constructor() {\n effect(() => {\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs.length === 0) return;\n\n if (inputs[0]) this.setupInput(inputs[0], true);\n if (inputs[1]) this.setupInput(inputs[1], false);\n });\n }\n\n private setupInput(element: HTMLInputElement, isStart: boolean) {\n if ((element as any)._hasCustomFocusEvent) return;\n (element as any)._hasCustomFocusEvent = true;\n\n element.autocomplete = 'off';\n \n // Set tabindex -1 on the second input to prevent users from having to Shift+Tab \n // multiple times to exit the component when masking is enabled.\n if (!isStart) {\n element.tabIndex = -1;\n }\n\n element.addEventListener('focus', () => {\n this.activeInput.set(isStart ? 'start' : 'end');\n if ((element as any)._ignoreNextFocus) {\n (element as any)._ignoreNextFocus = false;\n return;\n }\n this.isOpen.set(true);\n });\n\n // Handle initial value\n if (element.value) {\n try {\n const date = new Date(element.value);\n if (!isNaN(date.getTime())) {\n if (isStart) {\n this.startDate.set(date);\n } else {\n this.endDate.set(date);\n }\n }\n } catch (e) {\n console.warn('Invalid date value:', element.value);\n }\n }\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onStartDateChange(date: Date | null) {\n this.startDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0]) this.updateInputValue([inputs[0]], date);\n \n // Automatically switch to end date selection\n this.activeInput.set('end');\n }\n\n onEndDateChange(date: Date | null) {\n this.endDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[1]) this.updateInputValue([inputs[1]], date);\n\n if (this.startDate() && date) {\n this.isOpen.set(false);\n \n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0] && document.activeElement !== inputs[0]) {\n (inputs[0] as any)._ignoreNextFocus = true;\n inputs[0].focus();\n }\n }\n }\n\n private updateInputValue(inputs: HTMLInputElement[], date: Date | null) {\n inputs.forEach((input) => {\n if (this.masking()) {\n input.value = this.#datePipe.transform(date, this.masking()) ?? '';\n } else {\n input.value = date ? date.toUTCString() : '';\n }\n this.dispatchInputEvent(input);\n });\n }\n\n private dispatchInputEvent(input: HTMLInputElement) {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n close() {\n this.closed.emit({\n start: this.startDate(),\n end: this.endDate(),\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":"ship-ui-core-ship-datepicker.mjs","sources":["../../../projects/ship-ui/ship-datepicker/ship-datepicker.ts","../../../projects/ship-ui/ship-datepicker/ship-datepicker-input.ts","../../../projects/ship-ui/ship-datepicker/ship-daterange-input.ts","../../../projects/ship-ui/ship-datepicker/ship-ui-core-ship-datepicker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, output, signal, viewChild, inject, ViewEncapsulation } from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { HostListener } from '@angular/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\n@Component({\n selector: 'sh-datepicker',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon],\n template: `\n <header>\n <button tabindex=\"-1\" (click)=\"previousMonth()\" [attr.aria-keyshortcuts]=\"prevMonthShortcut()\"><sh-icon>caret-left</sh-icon></button>\n <div class=\"title\">\n {{ getMonthName(currentDate()!) }}\n @if (monthsToShow() > 1) {\n - {{ getMonthName(getLastVisibleMonth()) }}\n }\n {{ getFullYear(currentDate()!) }}\n </div>\n <button tabindex=\"-1\" (click)=\"nextMonth()\" [attr.aria-keyshortcuts]=\"nextMonthShortcut()\"><sh-icon>caret-right</sh-icon></button>\n </header>\n\n <section class=\"months-container\">\n @for (monthOffset of monthOffsets(); track monthOffset) {\n <div class=\"month\">\n <nav class=\"weekdays\">\n @for (day of weekdays(); track $index) {\n <div>{{ day }}</div>\n }\n </nav>\n\n <div class=\"days\" #daysRef>\n @for (calDate of getMonthDates(monthOffset); track $index) {\n <button\n type=\"button\"\n #elementRef\n [class.out-of-scope]=\"!isCurrentMonth(calDate, monthOffset)\"\n [class]=\"isDateSelected(calDate)\"\n [attr.aria-label]=\"getAriaLabel(calDate)\"\n [attr.tabindex]=\"getTabIndex(calDate)\"\n [attr.aria-selected]=\"isDateSelectedBool(calDate)\"\n (keydown)=\"onKeydown($event, calDate)\"\n (click)=\"setDate(calDate, elementRef)\">\n {{ calDate.getDate() }}\n </button>\n }\n\n @if (!asRange()) {\n <article class=\"days\">\n <div class=\"sel-el\" [style]=\"selectedDateStylePosition()\"></div>\n </article>\n }\n </div>\n </div>\n }\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.as-range]': 'asRange()',\n '[class]': '\"columns-\" + monthsToShow()',\n '[class.disabled]': 'disabled()',\n },\n})\nexport class ShipDatepicker {\n #INIT_DATE = new Date(new Date().setHours(0, 0, 0, 0));\n\n date = model<Date | null>(null);\n endDate = model<Date | null>(null);\n asRange = input<boolean>(false);\n activeRangeSelection = input<'start' | 'end' | null>(null);\n monthsToShow = input<number>(1);\n disabled = input<boolean>(false);\n tabbedOut = output<void>();\n\n startOfWeek = input<number>(1);\n weekdayLabels = input<string[]>(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n daysRef = viewChild<ElementRef<HTMLDivElement>>('daysRef');\n currentDate = signal<Date>(this.date() ?? this.#INIT_DATE);\n\n #keybindings = inject(ShipA11yKeybindingsService);\n\n prevMonthShortcut = computed(() => {\n const action = 'datepicker.prev-month';\n const shortcut = this.#keybindings.getShortcut(action);\n return shortcut ? (this.#keybindings.getDisplayShortcut(action) || shortcut) : null;\n });\n\n nextMonthShortcut = computed(() => {\n const action = 'datepicker.next-month';\n const shortcut = this.#keybindings.getShortcut(action);\n return shortcut ? (this.#keybindings.getDisplayShortcut(action) || shortcut) : null;\n });\n\n monthOffsets = computed(() => {\n return Array.from({ length: this.monthsToShow() }, (_, i) => i);\n });\n\n selectedDateStylePosition = signal<{ transform: string; opacity: string } | null>(null);\n\n weekdays = computed(() => {\n const startOfWeek = this.startOfWeek();\n const weekdayLabels = this.weekdayLabels();\n\n return weekdayLabels.slice(startOfWeek).concat(weekdayLabels.slice(0, startOfWeek));\n });\n\n currentClasses = classMutationSignal();\n someEffect = effect(() => {\n const _ = this.currentClasses();\n\n this.#findSelectedAndCalc();\n });\n\n getLastVisibleMonth(): Date {\n const lastMonthOffset = this.monthsToShow() - 1;\n return this.getOffsetDate(lastMonthOffset);\n }\n\n getOffsetDate(monthOffset: number): Date {\n const date = new Date(this.currentDate());\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n\n getMonthDates(monthOffset: number): Date[] {\n const offsetDate = this.getOffsetDate(monthOffset);\n return this.#generateMonthDates(offsetDate, this.startOfWeek());\n }\n\n #newDateEffect = effect(() => {\n if (this.monthsToShow() > 1) return;\n\n this.#setDateAsCurrent();\n });\n\n ngOnInit() {\n if (this.monthsToShow() === 1) return;\n\n this.#setDateAsCurrent();\n }\n\n #setDateAsCurrent() {\n const newDate = this.date();\n if (newDate && !isNaN(newDate.getTime())) {\n this.currentDate.set(newDate);\n }\n this.#findSelectedAndCalc();\n }\n\n #findSelectedAndCalc() {\n setTimeout(() => {\n const selectedElement = this.daysRef()?.nativeElement.querySelector('.sel');\n\n if (!selectedElement) {\n return this.selectedDateStylePosition.update((x) => (x ? { ...x, opacity: '0' } : null));\n }\n\n this.setSelectedDateStylePosition(selectedElement as HTMLElement);\n });\n }\n\n #generateMonthDates(date: Date, startOfWeek: number): Date[] {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const dates: Date[] = [];\n\n let offset = firstDay - startOfWeek;\n if (offset < 0) {\n offset += 7;\n }\n\n const lastDayOfPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = offset - 1; i >= 0; i--) {\n dates.push(new Date(year, month - 1, lastDayOfPrevMonth - i, 0, 0, 0, 0));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push(new Date(year, month, i, 0, 0, 0, 0));\n }\n\n let nextMonthDay = 1;\n while (dates.length % 7 !== 0) {\n dates.push(new Date(year, month + 1, nextMonthDay++, 0, 0, 0, 0));\n }\n\n return dates;\n }\n\n nextMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() + 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n previousMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() - 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n setDate(newDate: Date, selectedElement: HTMLElement) {\n this.focusedDate.set(newDate);\n\n const createDateWithExistingTime = (newDate: Date, existingDate: any | null) => {\n let hours = 0, minutes = 0, seconds = 0, milliseconds = 0;\n \n if (existingDate) {\n if (typeof existingDate === 'string' || typeof existingDate === 'number') {\n existingDate = new Date(existingDate);\n }\n if (existingDate instanceof Date && !isNaN(existingDate.getTime())) {\n hours = existingDate.getHours();\n minutes = existingDate.getMinutes();\n seconds = existingDate.getSeconds();\n milliseconds = existingDate.getMilliseconds();\n }\n }\n\n return new Date(\n newDate.getFullYear(),\n newDate.getMonth(),\n newDate.getDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n );\n };\n\n if (!this.asRange()) {\n this.date.set(createDateWithExistingTime(newDate, this.date()));\n this.endDate.set(null);\n } else {\n const startDate = this.date();\n const endDate = this.endDate();\n const selectionMode = this.activeRangeSelection();\n\n if (selectionMode === 'start') {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n if (endDate && utcDate > endDate) {\n this.endDate.set(null);\n }\n } else if (selectionMode === 'end') {\n if (!startDate || newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n if (!startDate) {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n } else if (!endDate) {\n if (newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n this.endDate.set(null);\n }\n }\n }\n\n if (this.asRange()) return;\n\n this.setSelectedDateStylePosition(selectedElement);\n }\n\n isDateSelected(date: Date): string | null {\n let startDate: any = this.date();\n let endDate: any = this.endDate();\n\n if (typeof startDate === 'string' || typeof startDate === 'number') startDate = new Date(startDate);\n if (typeof endDate === 'string' || typeof endDate === 'number') endDate = new Date(endDate);\n\n if (!startDate || !(startDate instanceof Date) || isNaN(startDate.getTime())) return null;\n\n const startOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n };\n\n const endOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n };\n\n const currentDate = startOfDay(date);\n const rangeStart = startOfDay(startDate);\n const rangeEnd = endDate ? endOfDay(endDate) : null;\n\n let classes = [];\n\n if (this.asRange()) {\n if (rangeEnd === null) {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel first last');\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('first');\n }\n\n if (currentDate.getTime() === startOfDay(rangeEnd).getTime()) {\n classes.push('last');\n }\n\n if (currentDate >= rangeStart && currentDate <= rangeEnd) {\n classes.push('sel');\n\n const dayOfWeek = currentDate.getDay();\n const startOfWeek = this.startOfWeek();\n\n if (dayOfWeek === startOfWeek) {\n classes.push('week-start');\n }\n\n const endOfWeek = (startOfWeek + 6) % 7;\n if (dayOfWeek === endOfWeek) {\n classes.push('week-end');\n }\n }\n\n const nextDate = new Date(currentDate);\n nextDate.setDate(currentDate.getDate() + 1);\n const prevDate = new Date(currentDate);\n prevDate.setDate(currentDate.getDate() - 1);\n\n const isFirstOfMonth = currentDate.getDate() === 1;\n const isLastOfMonth = nextDate.getMonth() !== currentDate.getMonth();\n\n if (isFirstOfMonth) {\n classes.push('month-start');\n }\n\n if (isLastOfMonth) {\n classes.push('month-end');\n }\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel');\n }\n }\n\n return classes.join(' ') || null;\n }\n\n setSelectedDateStylePosition(selectedElement: HTMLElement) {\n this.selectedDateStylePosition.set({\n transform: `translate(${selectedElement.offsetLeft}px, ${selectedElement.offsetTop}px)`,\n opacity: '1',\n });\n }\n\n getMonthName(date: Date): string {\n return date.toLocaleString('default', { month: 'long' });\n }\n\n getFullYear(date: Date): number {\n return date.getFullYear();\n }\n\n // Rest of the component methods remain the same, but update isCurrentMonth:\n isCurrentMonth(date: Date, monthOffset: number): boolean {\n const offsetDate = this.getOffsetDate(monthOffset);\n return date.getMonth() === offsetDate.getMonth();\n }\n\n focusedDate = signal<Date | null>(null);\n #selfRef = inject(ElementRef);\n\n isSameDay(d1: Date | null | undefined, d2: Date | null | undefined): boolean {\n if (!d1 || !d2) return false;\n return d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate();\n }\n\n getAriaLabel(date: Date): string {\n return date.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });\n }\n\n getTabIndex(date: Date): number {\n const focused = this.focusedDate();\n const selected = this.date();\n const today = new Date();\n\n if (focused) {\n return this.isSameDay(date, focused) ? 0 : -1;\n }\n if (selected) {\n return this.isSameDay(date, selected) ? 0 : -1;\n }\n return this.isSameDay(date, today) ? 0 : -1;\n }\n\n isDateSelectedBool(date: Date): boolean {\n const classes = this.isDateSelected(date);\n return classes ? classes.includes('sel') : false;\n }\n\n onKeydown(event: KeyboardEvent, date: Date) {\n let newDate = new Date(date);\n let handled = false;\n\n if (this.#keybindings.matches(event, 'datepicker.prev-month')) {\n newDate.setMonth(date.getMonth() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.next-month')) {\n newDate.setMonth(date.getMonth() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.prev-year')) {\n newDate.setFullYear(date.getFullYear() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.next-year')) {\n newDate.setFullYear(date.getFullYear() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.month-start')) {\n newDate = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.month-end')) {\n newDate = new Date(date.getFullYear(), date.getMonth() + 1, 0, 0, 0, 0, 0);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.day-next')) {\n newDate.setDate(date.getDate() + 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.day-prev')) {\n newDate.setDate(date.getDate() - 1);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.week-next')) {\n newDate.setDate(date.getDate() + 7);\n handled = true;\n } else if (this.#keybindings.matches(event, 'datepicker.week-prev')) {\n newDate.setDate(date.getDate() - 7);\n handled = true;\n }\n\n if (handled) {\n event.preventDefault();\n this.ensureDateVisible(newDate);\n this.focusedDate.set(newDate);\n \n setTimeout(() => {\n const buttons = this.#selfRef.nativeElement.querySelectorAll('button');\n if (buttons) {\n const targetAria = this.getAriaLabel(newDate);\n let bestMatch: HTMLButtonElement | null = null;\n for (let i = 0; i < buttons.length; i++) {\n if (buttons[i].getAttribute('aria-label') === targetAria) {\n bestMatch = buttons[i];\n if (!buttons[i].classList.contains('out-of-scope')) {\n break;\n }\n }\n }\n if (bestMatch) {\n bestMatch.focus();\n }\n }\n });\n }\n }\n\n ensureDateVisible(date: Date) {\n const start = this.currentDate();\n const end = this.getLastVisibleMonth();\n \n if (date < new Date(start.getFullYear(), start.getMonth(), 1)) {\n this.currentDate.set(new Date(date.getFullYear(), date.getMonth(), 1));\n this.#findSelectedAndCalc();\n } else if (date > new Date(end.getFullYear(), end.getMonth() + 1, 0)) {\n const newStart = new Date(date);\n newStart.setMonth(newStart.getMonth() - this.monthsToShow() + 1);\n newStart.setDate(1);\n this.currentDate.set(newStart);\n this.#findSelectedAndCalc();\n }\n }\n\n focusActiveDate() {\n setTimeout(() => {\n const activeBtn = this.#selfRef.nativeElement.querySelector('button[tabindex=\"0\"]') as HTMLButtonElement;\n if (activeBtn) activeBtn.focus();\n }, 50);\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.tabbedOut.emit();\n }\n });\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, HostListener, computed, contentChild, effect, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-datepicker-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div id=\"input-wrap\" class=\"input\" ngProjectAs=\"input\">\n @if (this.masking()) {\n <div class=\"masked-value\">\n {{ _maskedDate() }}\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker [date]=\"internalDate()\" (dateChange)=\"onDateChange($event)\" (tabbedOut)=\"isOpen.set(false)\" [class]=\"currentClass()\" />\n }\n </div>\n </sh-form-field-popover>\n\n <ng-template #defaultIndicator></ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDatepickerInput {\n // #INIT_DATE = this.#getUTCDate(new Date());\n\n #selfRef = inject(ElementRef);\n ngControl = contentChild(NgControl);\n #datePipe = inject(DatePipe);\n #inputRef = signal<HTMLInputElement | null>(null);\n\n masking = input('mediumDate');\n closed = output<Date | null>();\n\n _maskedDate = computed(() => {\n const date = this.internalDate();\n const mask = this.masking();\n\n if (!mask) return date;\n if (!date) return null;\n\n return this.#datePipe.transform(date, mask);\n });\n\n internalDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n currentClass = classMutationSignal();\n #inputObserver = contentProjectionSignal<HTMLInputElement>('#input-wrap input');\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onDateChange(date: Date | null) {\n this.internalDate.set(date);\n\n const control = this.ngControl()?.control;\n\n if (control) {\n control.setValue(date);\n } else {\n const input = this.#inputRef();\n if (input) {\n input.value = date ? date.toString() : '';\n input.dispatchEvent(new Event('input'));\n }\n }\n }\n\n close() {\n this.closed.emit(this.internalDate());\n }\n\n #inputRefEffect = effect(() => {\n const inputs = this.#inputObserver();\n\n if (!inputs.length) return;\n\n const input = inputs[0];\n\n if (!input) return;\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('inputValueChanged', (event: any) => {\n const val = event.detail.value;\n if (!val) {\n this.internalDate.set(null);\n return;\n }\n \n let newD = new Date(val);\n \n if (isNaN(newD.getTime())) {\n // If it's a time-only string like \"14:30\" or \"14:30:00\"\n if (typeof val === 'string' && /^(\\d{2}):(\\d{2})/.test(val)) {\n const match = val.match(/^(\\d{2}):(\\d{2})(?::(\\d{2}))?/);\n if (match) {\n const current = this.internalDate() || new Date();\n newD = new Date(current);\n newD.setHours(parseInt(match[1], 10), parseInt(match[2], 10), match[3] ? parseInt(match[3], 10) : 0, 0);\n }\n }\n }\n \n if (!isNaN(newD.getTime())) {\n this.internalDate.set(newD);\n }\n });\n\n input.addEventListener('focus', () => {\n this.isOpen.set(true);\n // Removed input.blur() so users can actually type or use Shift+Tab to navigate backward\n });\n\n this.#inputRef.set(input);\n input.autocomplete = 'off';\n\n if (typeof input.value === 'string') {\n this.internalDate.set(input.value ? new Date(input.value) : null);\n }\n });\n\n #createCustomInputEventListener(input: HTMLInputElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n\n return input;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, HostListener, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-daterange-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover [class]=\"'columns-' + monthsToShow()\" (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n @if (this.masking()) {\n <div class=\"masked-value\" [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n <span class=\"start-val\">{{ _maskedStartDate() ?? 'N/A' }}</span>\n <span class=\"separator\">-</span>\n <span class=\"end-val\">{{ _maskedEndDate() ?? 'N/A' }}</span>\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker\n [date]=\"startDate()\"\n [endDate]=\"endDate()\"\n [activeRangeSelection]=\"activeInput()\"\n [class]=\"classes\"\n (dateChange)=\"onStartDateChange($event)\"\n (endDateChange)=\"onEndDateChange($event)\"\n (tabbedOut)=\"isOpen.set(false)\"\n [monthsToShow]=\"monthsToShow()\"\n [asRange]=\"true\" />\n }\n </div>\n </sh-form-field-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDaterangeInput {\n #selfRef = inject(ElementRef);\n\n #inputObserver = contentProjectionSignal('input', {\n childList: true,\n subtree: true,\n });\n\n #datePipe = inject(DatePipe);\n monthsToShow = input<number>(1);\n masking = input('mediumDate');\n closed = output<{ start: Date | null; end: Date | null }>();\n\n startDate = signal<Date | null>(null);\n endDate = signal<Date | null>(null);\n activeInput = signal<'start' | 'end'>('start');\n isOpen = model<boolean>(false);\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n get classes() {\n return `${this.#selfRef.nativeElement.classList.value}`;\n }\n\n _maskedStartDate = computed(() => {\n const date = this.startDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n _maskedEndDate = computed(() => {\n const date = this.endDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n constructor() {\n effect(() => {\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs.length === 0) return;\n\n if (inputs[0]) this.setupInput(inputs[0], true);\n if (inputs[1]) this.setupInput(inputs[1], false);\n });\n }\n\n private setupInput(element: HTMLInputElement, isStart: boolean) {\n if ((element as any)._hasCustomFocusEvent) return;\n (element as any)._hasCustomFocusEvent = true;\n\n element.autocomplete = 'off';\n \n // Set tabindex -1 on the second input to prevent users from having to Shift+Tab \n // multiple times to exit the component when masking is enabled.\n if (!isStart) {\n element.tabIndex = -1;\n }\n\n element.addEventListener('focus', () => {\n this.activeInput.set(isStart ? 'start' : 'end');\n if ((element as any)._ignoreNextFocus) {\n (element as any)._ignoreNextFocus = false;\n return;\n }\n this.isOpen.set(true);\n });\n\n // Handle initial value\n if (element.value) {\n try {\n const date = new Date(element.value);\n if (!isNaN(date.getTime())) {\n if (isStart) {\n this.startDate.set(date);\n } else {\n this.endDate.set(date);\n }\n }\n } catch (e) {\n console.warn('Invalid date value:', element.value);\n }\n }\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onStartDateChange(date: Date | null) {\n this.startDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0]) this.updateInputValue([inputs[0]], date);\n \n // Automatically switch to end date selection\n this.activeInput.set('end');\n }\n\n onEndDateChange(date: Date | null) {\n this.endDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[1]) this.updateInputValue([inputs[1]], date);\n\n if (this.startDate() && date) {\n this.isOpen.set(false);\n \n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0] && document.activeElement !== inputs[0]) {\n (inputs[0] as any)._ignoreNextFocus = true;\n inputs[0].focus();\n }\n }\n }\n\n private updateInputValue(inputs: HTMLInputElement[], date: Date | null) {\n inputs.forEach((input) => {\n if (this.masking()) {\n input.value = this.#datePipe.transform(date, this.masking()) ?? '';\n } else {\n input.value = date ? date.toUTCString() : '';\n }\n this.dispatchInputEvent(input);\n });\n }\n\n private dispatchInputEvent(input: HTMLInputElement) {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n close() {\n this.closed.emit({\n start: this.startDate(),\n end: this.endDate(),\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,10 @@ class ShipDialog {
|
|
|
42
42
|
this.abortController = new AbortController();
|
|
43
43
|
if (this.isOpen()) {
|
|
44
44
|
dialogEl.showModal();
|
|
45
|
+
const closeShortcut = this.#keybindings.getShortcut('dialog.close');
|
|
46
|
+
if (closeShortcut) {
|
|
47
|
+
dialogEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('dialog.close') || closeShortcut);
|
|
48
|
+
}
|
|
45
49
|
dialogEl.addEventListener('close', () => {
|
|
46
50
|
this.isOpen.set(false);
|
|
47
51
|
this.closed.emit();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-dialog.mjs","sources":["../../../projects/ship-ui/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/ship-dialog/ship-ui-core-ship-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { SHIP_CONFIG } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | 'type-c' | string;\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n closeOnOutsideClick?: boolean;\n};\n\nconst DEFAULT_OPTIONS: ShipDialogOptions = {\n class: 'default',\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n maxHeight: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n closeOnOutsideClick: true,\n};\n\n@Component({\n selector: 'sh-dialog',\n styleUrl: './ship-dialog.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n @let options = this.defaultOptionMerge();\n\n @if (isOpen()) {\n <dialog\n shDialog\n #dialogRef\n [class]=\"options.class\"\n [style.width]=\"options.width ?? ''\"\n [style.max-width]=\"options.maxWidth ?? ''\"\n [style.max-height]=\"options.maxHeight ?? ''\"\n [style.height]=\"options.height ?? ''\">\n <div class=\"content\">\n <ng-content />\n </div>\n\n @if (this.defaultOptionMerge().closeOnOutsideClick) {\n <div class=\"closeable-overlay\" (click)=\"isOpen.set(false)\"></div>\n }\n </dialog>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDialog {\n #document = inject(DOCUMENT);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n #keybindings = inject(ShipA11yKeybindingsService);\n dialogRef = viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n isOpen = model<boolean>(false);\n options = input<Partial<ShipDialogOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...{ class: this.#shConfig?.dialogType ?? 'default' },\n ...this.options(),\n }));\n\n abortController: AbortController | null = null;\n isOpenEffect = effect(() => {\n const dialogEl = this.dialogRef()?.nativeElement;\n\n if (!dialogEl) return;\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n if (this.isOpen()) {\n dialogEl.showModal();\n dialogEl.addEventListener(\n 'close',\n () => {\n this.isOpen.set(false);\n this.closed.emit();\n },\n {\n signal: this.abortController?.signal,\n }\n );\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'dialog.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.abortController?.signal,\n }\n );\n } else {\n dialogEl.close();\n\n queueMicrotask(() => this.closed.emit());\n }\n });\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DOCUMENT,\n EmbeddedViewRef,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { ShipDialog, ShipDialogOptions } from './ship-dialog';\n\nexport type Exact<T, U> = U extends T ? (keyof U extends keyof T ? U : never) : never;\nexport type ComponentDataType<T> = T extends TemplateRef<infer C>\n ? (C extends { $implicit: infer K } ? K : unknown) & Partial<Omit<C, 'close' | '$implicit'>> extends infer R\n ? keyof R extends never\n ? void\n : R\n : void\n : T extends { data: InputSignal<infer K> }\n ? K\n : void;\nexport type ComponentClosedType<T> = T extends TemplateRef<infer C>\n ? C extends { close: (res?: infer U) => void }\n ? U\n : undefined\n : T extends { closed: OutputEmitterRef<infer U> }\n ? U\n : undefined;\n\nexport interface ShipDialogServiceOptions<TData = any, TResult = undefined> extends ShipDialogOptions {\n data?: TData extends void ? void : TData & Exact<TData, TData>;\n closed?: (res: TResult) => void;\n}\n\nexport type ShipDialogInstance<T> = {\n component: T;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\nexport type ShipDialogTemplateInstance<T> = {\n component: undefined;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipDialogService {\n #document = inject(DOCUMENT);\n #bodyEl = this.#document.querySelector('body');\n #appRef = inject(ApplicationRef);\n\n compRef: ComponentRef<ShipDialog> | null = null;\n insertedCompRef: ComponentRef<unknown> | null = null;\n insertedTemplateRef: EmbeddedViewRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n I,\n K = ComponentDataType<I>,\n U = ComponentClosedType<I>,\n _Options extends ShipDialogServiceOptions<K, U> = ShipDialogServiceOptions<K, U>,\n >(\n componentOrTemplate: Type<I> | (I extends TemplateRef<any> ? I : never),\n options?: _Options\n ): I extends TemplateRef<any> ? ShipDialogTemplateInstance<I> : ShipDialogInstance<I>;\n open<T = any, K = ComponentDataType<T>, U = ComponentClosedType<T>>(\n componentOrTemplate: Type<T> | TemplateRef<any>,\n options?: any\n ): ShipDialogInstance<any> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n let closedField: OutputEmitterRef<U | undefined> | undefined;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\n\n const _self = this;\n\n function closeAction(arg: U | undefined = undefined) {\n _self.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n closedField.emit(arg as any);\n }\n\n closed?.(arg as U);\n }\n\n let projectableNodes: any[][] = [];\n\n if (componentOrTemplate instanceof TemplateRef) {\n this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({\n $implicit: data,\n close: (res?: any) => closeAction(res),\n });\n projectableNodes = [this.insertedTemplateRef.rootNodes];\n } else {\n this.insertedCompRef = createComponent<T>(componentOrTemplate, {\n environmentInjector,\n });\n projectableNodes = [[this.insertedCompRef.location.nativeElement]];\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = (insertedInstance as any).data as InputSignal<K>;\n closedField = (insertedInstance as any).closed as OutputEmitterRef<U | undefined>;\n\n if (data) {\n if (isSignal(dataField)) {\n this.insertedCompRef.setInput('data', data);\n } else if (!isSignal(dataField)) {\n throw new Error('data is not an input signal on the passed component');\n }\n }\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n this.closedFieldSub = closedField.subscribe((arg: U | undefined) => {\n this.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n closed?.(arg as U);\n\n (this.compRef?.instance.closed as OutputEmitterRef<U | undefined>).emit(arg);\n });\n }\n }\n\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes,\n });\n\n if (this.insertedCompRef) {\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.insertedCompRef.changeDetectorRef.detectChanges();\n }\n\n if (this.insertedTemplateRef) {\n this.#appRef.attachView(this.insertedTemplateRef);\n this.insertedTemplateRef.detectChanges();\n }\n\n this.#appRef.attachView(this.compRef.hostView);\n\n this.compRef.changeDetectorRef.detectChanges();\n this.compRef.instance.isOpen.set(true);\n this.compRef.setInput('options', rest);\n\n this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());\n\n return {\n component: this.insertedCompRef?.instance as T | undefined,\n close: closeAction,\n closed: this.compRef.instance.closed as OutputEmitterRef<U | undefined>,\n } as ShipDialogInstance<T>;\n }\n\n #createEl(): Element {\n const wrapperEl = this.#document.createElement('sh-dialog-ref');\n wrapperEl.id = 'sh-dialog-ref';\n\n if (!this.#document.getElementById('sh-dialog-ref')) {\n this.#bodyEl?.append(wrapperEl);\n }\n\n return this.#document.getElementById('sh-dialog-ref')!;\n }\n\n #cleanupRefs(instant = false) {\n const _self = this;\n\n instant ? cleanup : queueMicrotask(() => cleanup());\n\n function cleanup() {\n if (_self.insertedCompRef) {\n _self.#appRef.detachView(_self.insertedCompRef.hostView);\n _self.closedFieldSub?.unsubscribe();\n _self.insertedCompRef.destroy();\n _self.insertedCompRef = null;\n }\n\n if (_self.insertedTemplateRef) {\n _self.#appRef.detachView(_self.insertedTemplateRef);\n _self.insertedTemplateRef.destroy();\n _self.insertedTemplateRef = null;\n }\n\n if (!_self.compRef) return;\n\n _self.#appRef.detachView(_self.compRef.hostView);\n _self.compClosedSub?.unsubscribe();\n _self.compRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.#cleanupRefs(true);\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":"ship-ui-core-ship-dialog.mjs","sources":["../../../projects/ship-ui/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/ship-dialog/ship-ui-core-ship-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { SHIP_CONFIG } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | 'type-c' | string;\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n closeOnOutsideClick?: boolean;\n};\n\nconst DEFAULT_OPTIONS: ShipDialogOptions = {\n class: 'default',\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n maxHeight: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n closeOnOutsideClick: true,\n};\n\n@Component({\n selector: 'sh-dialog',\n styleUrl: './ship-dialog.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n @let options = this.defaultOptionMerge();\n\n @if (isOpen()) {\n <dialog\n shDialog\n #dialogRef\n [class]=\"options.class\"\n [style.width]=\"options.width ?? ''\"\n [style.max-width]=\"options.maxWidth ?? ''\"\n [style.max-height]=\"options.maxHeight ?? ''\"\n [style.height]=\"options.height ?? ''\">\n <div class=\"content\">\n <ng-content />\n </div>\n\n @if (this.defaultOptionMerge().closeOnOutsideClick) {\n <div class=\"closeable-overlay\" (click)=\"isOpen.set(false)\"></div>\n }\n </dialog>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDialog {\n #document = inject(DOCUMENT);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n #keybindings = inject(ShipA11yKeybindingsService);\n dialogRef = viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n isOpen = model<boolean>(false);\n options = input<Partial<ShipDialogOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...{ class: this.#shConfig?.dialogType ?? 'default' },\n ...this.options(),\n }));\n\n abortController: AbortController | null = null;\n isOpenEffect = effect(() => {\n const dialogEl = this.dialogRef()?.nativeElement;\n\n if (!dialogEl) return;\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n if (this.isOpen()) {\n dialogEl.showModal();\n const closeShortcut = this.#keybindings.getShortcut('dialog.close');\n if (closeShortcut) {\n dialogEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('dialog.close') || closeShortcut);\n }\n dialogEl.addEventListener(\n 'close',\n () => {\n this.isOpen.set(false);\n this.closed.emit();\n },\n {\n signal: this.abortController?.signal,\n }\n );\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'dialog.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.abortController?.signal,\n }\n );\n } else {\n dialogEl.close();\n\n queueMicrotask(() => this.closed.emit());\n }\n });\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DOCUMENT,\n EmbeddedViewRef,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { ShipDialog, ShipDialogOptions } from './ship-dialog';\n\nexport type Exact<T, U> = U extends T ? (keyof U extends keyof T ? U : never) : never;\nexport type ComponentDataType<T> = T extends TemplateRef<infer C>\n ? (C extends { $implicit: infer K } ? K : unknown) & Partial<Omit<C, 'close' | '$implicit'>> extends infer R\n ? keyof R extends never\n ? void\n : R\n : void\n : T extends { data: InputSignal<infer K> }\n ? K\n : void;\nexport type ComponentClosedType<T> = T extends TemplateRef<infer C>\n ? C extends { close: (res?: infer U) => void }\n ? U\n : undefined\n : T extends { closed: OutputEmitterRef<infer U> }\n ? U\n : undefined;\n\nexport interface ShipDialogServiceOptions<TData = any, TResult = undefined> extends ShipDialogOptions {\n data?: TData extends void ? void : TData & Exact<TData, TData>;\n closed?: (res: TResult) => void;\n}\n\nexport type ShipDialogInstance<T> = {\n component: T;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\nexport type ShipDialogTemplateInstance<T> = {\n component: undefined;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipDialogService {\n #document = inject(DOCUMENT);\n #bodyEl = this.#document.querySelector('body');\n #appRef = inject(ApplicationRef);\n\n compRef: ComponentRef<ShipDialog> | null = null;\n insertedCompRef: ComponentRef<unknown> | null = null;\n insertedTemplateRef: EmbeddedViewRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n I,\n K = ComponentDataType<I>,\n U = ComponentClosedType<I>,\n _Options extends ShipDialogServiceOptions<K, U> = ShipDialogServiceOptions<K, U>,\n >(\n componentOrTemplate: Type<I> | (I extends TemplateRef<any> ? I : never),\n options?: _Options\n ): I extends TemplateRef<any> ? ShipDialogTemplateInstance<I> : ShipDialogInstance<I>;\n open<T = any, K = ComponentDataType<T>, U = ComponentClosedType<T>>(\n componentOrTemplate: Type<T> | TemplateRef<any>,\n options?: any\n ): ShipDialogInstance<any> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n let closedField: OutputEmitterRef<U | undefined> | undefined;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\n\n const _self = this;\n\n function closeAction(arg: U | undefined = undefined) {\n _self.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n closedField.emit(arg as any);\n }\n\n closed?.(arg as U);\n }\n\n let projectableNodes: any[][] = [];\n\n if (componentOrTemplate instanceof TemplateRef) {\n this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({\n $implicit: data,\n close: (res?: any) => closeAction(res),\n });\n projectableNodes = [this.insertedTemplateRef.rootNodes];\n } else {\n this.insertedCompRef = createComponent<T>(componentOrTemplate, {\n environmentInjector,\n });\n projectableNodes = [[this.insertedCompRef.location.nativeElement]];\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = (insertedInstance as any).data as InputSignal<K>;\n closedField = (insertedInstance as any).closed as OutputEmitterRef<U | undefined>;\n\n if (data) {\n if (isSignal(dataField)) {\n this.insertedCompRef.setInput('data', data);\n } else if (!isSignal(dataField)) {\n throw new Error('data is not an input signal on the passed component');\n }\n }\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n this.closedFieldSub = closedField.subscribe((arg: U | undefined) => {\n this.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n closed?.(arg as U);\n\n (this.compRef?.instance.closed as OutputEmitterRef<U | undefined>).emit(arg);\n });\n }\n }\n\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes,\n });\n\n if (this.insertedCompRef) {\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.insertedCompRef.changeDetectorRef.detectChanges();\n }\n\n if (this.insertedTemplateRef) {\n this.#appRef.attachView(this.insertedTemplateRef);\n this.insertedTemplateRef.detectChanges();\n }\n\n this.#appRef.attachView(this.compRef.hostView);\n\n this.compRef.changeDetectorRef.detectChanges();\n this.compRef.instance.isOpen.set(true);\n this.compRef.setInput('options', rest);\n\n this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());\n\n return {\n component: this.insertedCompRef?.instance as T | undefined,\n close: closeAction,\n closed: this.compRef.instance.closed as OutputEmitterRef<U | undefined>,\n } as ShipDialogInstance<T>;\n }\n\n #createEl(): Element {\n const wrapperEl = this.#document.createElement('sh-dialog-ref');\n wrapperEl.id = 'sh-dialog-ref';\n\n if (!this.#document.getElementById('sh-dialog-ref')) {\n this.#bodyEl?.append(wrapperEl);\n }\n\n return this.#document.getElementById('sh-dialog-ref')!;\n }\n\n #cleanupRefs(instant = false) {\n const _self = this;\n\n instant ? cleanup : queueMicrotask(() => cleanup());\n\n function cleanup() {\n if (_self.insertedCompRef) {\n _self.#appRef.detachView(_self.insertedCompRef.hostView);\n _self.closedFieldSub?.unsubscribe();\n _self.insertedCompRef.destroy();\n _self.insertedCompRef = null;\n }\n\n if (_self.insertedTemplateRef) {\n _self.#appRef.detachView(_self.insertedTemplateRef);\n _self.insertedTemplateRef.destroy();\n _self.insertedTemplateRef = null;\n }\n\n if (!_self.compRef) return;\n\n _self.#appRef.detachView(_self.compRef.hostView);\n _self.compClosedSub?.unsubscribe();\n _self.compRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.#cleanupRefs(true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,10 @@ class ShipPopover {
|
|
|
72
72
|
if (!popoverEl.isConnected)
|
|
73
73
|
return;
|
|
74
74
|
popoverEl.showPopover();
|
|
75
|
+
const closeShortcut = this.#keybindings.getShortcut('popover.close');
|
|
76
|
+
if (closeShortcut) {
|
|
77
|
+
popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);
|
|
78
|
+
}
|
|
75
79
|
const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;
|
|
76
80
|
if (isMobileSheet) {
|
|
77
81
|
this.#originalOverflow = this.#document.body.style.overflow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n #keybindings = inject(ShipA11yKeybindingsService);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'popover.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); // Clear any leftover inline styles\n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n /**\n * Position generators that mirror the CSS position-try-fallbacks.\n * Each returns { left, top } for the popover-content in fixed coordinates.\n */\n\n // bottom span-right: below trigger, left edge aligned with trigger left\n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n // top span-right: above trigger, left edge aligned with trigger left\n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n // bottom span-left: below trigger, right edge aligned with trigger right\n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n // top span-left: above trigger, right edge aligned with trigger right\n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n // right span-bottom: to the right of trigger, top edge aligned with trigger top\n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n // left span-bottom: to the left of trigger, top edge aligned with trigger top\n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n // right center: to the right of trigger, vertically centered\n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // left center: to the left of trigger, vertically centered\n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // right span-top: to the right of trigger, bottom edge aligned with trigger bottom\n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n // left span-top: to the left of trigger, bottom edge aligned with trigger bottom\n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n /** Check if a position fits entirely within the viewport */\n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n /** Clamp a position so the popover stays within the viewport */\n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n // Mirror the CSS position-try-fallbacks order\n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n // Try each position, use the first one that fits\n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n // If nothing fits perfectly, use the first position clamped to viewport\n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\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":"ship-ui-core-ship-popover.mjs","sources":["../../../projects/ship-ui/ship-popover/ship-popover.ts","../../../projects/ship-ui/ship-popover/ship-ui-core-ship-popover.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { generateUniqueId } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\n\nexport type ShipPopoverOptions = {\n width?: string;\n height?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n};\n\nconst BASE_SPACE = 4;\nconst SCROLLABLE_STYLES = ['scroll', 'auto'];\nconst DEFAULT_OPTIONS: ShipPopoverOptions = {\n width: undefined,\n height: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n};\n\n@Component({\n selector: 'sh-popover',\n styleUrl: './ship-popover.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"trigger\" #triggerRef [attr.popovertarget]=\"id() + 'hello'\" (click)=\"toggleIsOpen($event)\">\n <div class=\"trigger-wrapper\">\n <ng-content select=\"[trigger]\" />\n <ng-content select=\"button\" />\n <ng-content select=\"[shButton]\" />\n </div>\n <div class=\"trigger-anchor\" [style.anchor-name]=\"id()\"></div>\n </div>\n\n @if (isOpen()) {\n <div [attr.id]=\"id() + 'hello'\" popover=\"manual\" #popoverRef class=\"popover\">\n <div class=\"overlay\" (click)=\"eventClose($event)\"></div>\n <div class=\"popover-content\" #popoverContentRef [style.position-anchor]=\"id()\" [style]=\"menuStyle()\">\n <ng-content />\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.multi-layer]': 'asMultiLayer()',\n '[class.as-sheet]': 'asSheetOnMobile()',\n },\n})\nexport class ShipPopover {\n #document = inject(DOCUMENT);\n #keybindings = inject(ShipA11yKeybindingsService);\n SUPPORTS_ANCHOR =\n typeof CSS !== 'undefined' && CSS.supports('position-anchor', '--abc') && CSS.supports('anchor-name', '--abc');\n\n asMultiLayer = input<boolean>(false);\n asSheetOnMobile = input<boolean>(false);\n disableOpenByClick = input<boolean>(false);\n isOpen = model<boolean>(false);\n\n options = input<Partial<ShipPopoverOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...this.options(),\n }));\n\n triggerRef = viewChild.required<ElementRef<HTMLElement>>('triggerRef');\n popoverRef = viewChild<ElementRef<HTMLElement>>('popoverRef');\n popoverContentRef = viewChild<ElementRef<HTMLElement>>('popoverContentRef');\n\n id = signal('--' + generateUniqueId());\n menuStyle = signal<any>(null);\n\n openAbort: AbortController | null = null;\n #originalOverflow: string | null = null;\n\n openEffect = effect(() => {\n const open = this.isOpen();\n const popoverEl = this.popoverRef()?.nativeElement;\n\n queueMicrotask(() => {\n if (!popoverEl) {\n this.openAbort?.abort();\n this.openAbort = null;\n return;\n }\n if (open) {\n if (this.openAbort) {\n this.openAbort.abort();\n }\n\n this.openAbort = new AbortController();\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (this.#keybindings.matches(e, 'popover.close')) {\n if (!this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n } else {\n this.isOpen.set(false);\n }\n }\n },\n {\n signal: this.openAbort?.signal,\n }\n );\n\n if (!popoverEl.isConnected) return;\n\n popoverEl.showPopover();\n const closeShortcut = this.#keybindings.getShortcut('popover.close');\n if (closeShortcut) {\n popoverEl.setAttribute('aria-keyshortcuts', this.#keybindings.getDisplayShortcut('popover.close') || closeShortcut);\n }\n\n const isMobileSheet = this.asSheetOnMobile() && window.innerWidth <= 768;\n if (isMobileSheet) {\n this.#originalOverflow = this.#document.body.style.overflow;\n this.#document.body.style.overflow = 'hidden';\n this.menuStyle.set(null); // Clear any leftover inline styles\n }\n\n if (!this.SUPPORTS_ANCHOR && !isMobileSheet) {\n setTimeout(() => {\n const scrollableParent = this.#findScrollableParent(popoverEl);\n\n scrollableParent.addEventListener('scroll', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n window?.addEventListener('resize', () => this.#calculateMenuPosition(), {\n signal: this.openAbort?.signal,\n });\n\n this.#calculateMenuPosition();\n });\n }\n } else {\n this.closed.emit();\n popoverEl.hidePopover();\n this.openAbort?.abort();\n this.openAbort = null;\n \n if (this.asSheetOnMobile() && this.#originalOverflow !== null) {\n this.#document.body.style.overflow = this.#originalOverflow;\n this.#originalOverflow = null;\n }\n }\n });\n });\n\n toggleIsOpen(event: MouseEvent) {\n if (!this.disableOpenByClick()) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen.set(!this.isOpen());\n }\n }\n\n eventClose($event: MouseEvent) {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n }\n\n #findScrollableParent(element: HTMLElement) {\n let parent = element.parentElement;\n\n while (parent) {\n if (\n SCROLLABLE_STYLES.indexOf(window?.getComputedStyle(parent).overflowY) > -1 &&\n parent.scrollHeight > parent.clientHeight\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return this.#document.documentElement;\n }\n\n /**\n * Position generators that mirror the CSS position-try-fallbacks.\n * Each returns { left, top } for the popover-content in fixed coordinates.\n */\n\n // bottom span-right: below trigger, left edge aligned with trigger left\n #bottomSpanRight(t: DOMRect, _m: DOMRect) {\n return { left: t.left, top: t.bottom + BASE_SPACE };\n }\n\n // top span-right: above trigger, left edge aligned with trigger left\n #topSpanRight(t: DOMRect, m: DOMRect) {\n return { left: t.left, top: t.top - m.height - BASE_SPACE };\n }\n\n // bottom span-left: below trigger, right edge aligned with trigger right\n #bottomSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.bottom + BASE_SPACE };\n }\n\n // top span-left: above trigger, right edge aligned with trigger right\n #topSpanLeft(t: DOMRect, m: DOMRect) {\n return { left: t.right - m.width, top: t.top - m.height - BASE_SPACE };\n }\n\n // right span-bottom: to the right of trigger, top edge aligned with trigger top\n #rightSpanBottom(t: DOMRect, _m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top };\n }\n\n // left span-bottom: to the left of trigger, top edge aligned with trigger top\n #leftSpanBottom(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top };\n }\n\n // right center: to the right of trigger, vertically centered\n #rightCenter(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // left center: to the left of trigger, vertically centered\n #leftCenter(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.top + t.height / 2 - m.height / 2 };\n }\n\n // right span-top: to the right of trigger, bottom edge aligned with trigger bottom\n #rightSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.right + BASE_SPACE, top: t.bottom - m.height };\n }\n\n // left span-top: to the left of trigger, bottom edge aligned with trigger bottom\n #leftSpanTop(t: DOMRect, m: DOMRect) {\n return { left: t.left - m.width - BASE_SPACE, top: t.bottom - m.height };\n }\n\n /** Check if a position fits entirely within the viewport */\n #fitsInViewport(pos: { left: number; top: number }, m: DOMRect): boolean {\n return (\n pos.left >= 0 &&\n pos.top >= 0 &&\n pos.left + m.width <= window.innerWidth &&\n pos.top + m.height <= window.innerHeight\n );\n }\n\n /** Clamp a position so the popover stays within the viewport */\n #clampToViewport(pos: { left: number; top: number }, m: DOMRect): { left: number; top: number } {\n return {\n left: Math.max(0, Math.min(pos.left, window.innerWidth - m.width)),\n top: Math.max(0, Math.min(pos.top, window.innerHeight - m.height)),\n };\n }\n\n #calculateMenuPosition() {\n const triggerRect = this.triggerRef()?.nativeElement.getBoundingClientRect();\n const menuRect = this.popoverContentRef()?.nativeElement.getBoundingClientRect();\n\n if (!triggerRect || !menuRect) return;\n\n // Mirror the CSS position-try-fallbacks order\n const tryOrderDefault = [\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n this.#rightSpanBottom,\n this.#leftSpanBottom,\n this.#rightCenter,\n this.#leftCenter,\n this.#rightSpanTop,\n this.#leftSpanTop,\n ];\n\n const tryOrderMultiLayer = [\n this.#rightSpanBottom,\n this.#rightSpanTop,\n this.#leftSpanBottom,\n this.#leftSpanTop,\n this.#rightCenter,\n this.#leftCenter,\n this.#bottomSpanRight,\n this.#topSpanRight,\n this.#bottomSpanLeft,\n this.#topSpanLeft,\n ];\n\n const tryOrder = this.asMultiLayer() ? tryOrderMultiLayer : tryOrderDefault;\n\n // Try each position, use the first one that fits\n for (const positionFn of tryOrder) {\n const pos = positionFn.call(this, triggerRect, menuRect);\n\n if (this.#fitsInViewport(pos, menuRect)) {\n this.menuStyle.set({ left: pos.left + 'px', top: pos.top + 'px' });\n return;\n }\n }\n\n // If nothing fits perfectly, use the first position clamped to viewport\n const fallback = this.#clampToViewport(tryOrder[0].call(this, triggerRect, menuRect), menuRect);\n this.menuStyle.set({ left: fallback.left + 'px', top: fallback.top + 'px' });\n }\n\n ngOnDestroy() {\n this.openAbort?.abort();\n this.openAbort = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|