@tailng-ui/primitives 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -1
- package/src/lib/form/datepicker/datepicker.utils.js +2 -1
- package/src/lib/form/datepicker/datepicker.utils.js.map +1 -1
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +2 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -1
- package/src/lib/form/datepicker/tng-datepicker.overlay.js +68 -48
- package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.utils.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"datepicker.utils.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -157,11 +157,12 @@ export function buildMonthGrid(options) {
|
|
|
157
157
|
const hidden = !inMonth && !options.showOutsideDays;
|
|
158
158
|
const active = datesEqual(options.adapter, date, options.activeDate);
|
|
159
159
|
const focusVisible = options.focusedDate !== null && datesEqual(options.adapter, date, options.focusedDate);
|
|
160
|
+
const disabled = !inMonth || options.isDisabled(date);
|
|
160
161
|
cells.push(Object.freeze({
|
|
161
162
|
active,
|
|
162
163
|
colIndex: index % 7,
|
|
163
164
|
date,
|
|
164
|
-
disabled
|
|
165
|
+
disabled,
|
|
165
166
|
focusVisible,
|
|
166
167
|
hidden,
|
|
167
168
|
id: options.createCellId(date),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker.utils.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n TngCalendarView,\n TngDateAdapter,\n TngDateCell,\n TngDateRange,\n TngDateValue,\n TngMonthOption,\n TngWeekdayIndex,\n TngYearOption,\n} from './datepicker.types';\n\ntype TngMonthGridOptions<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createCellId: (date: TDate) => string;\n fixedWeeks: boolean;\n focusStrategy: 'active-descendant' | 'roving';\n focusedDate: TDate | null;\n inRange: (date: TDate) => boolean;\n isDisabled: (date: TDate) => boolean;\n isRangeEnd: (date: TDate) => boolean;\n isRangeStart: (date: TDate) => boolean;\n isSelected: (date: TDate) => boolean;\n locale?: string;\n showOutsideDays: boolean;\n today: TDate;\n visibleMonth: TDate;\n weekStartsOn: TngWeekdayIndex;\n}>;\n\ntype TngMonthOptionsConfig<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createId: (month: number) => string;\n disabledMonth: (month: number) => boolean;\n focusedDate: TDate | null;\n focusedSection: 'day' | 'month' | 'year';\n locale?: string;\n selectedMonth: (month: number) => boolean;\n visibleMonth: TDate;\n}>;\n\ntype TngYearOptionsConfig<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createId: (year: number) => string;\n disabledYear: (year: number) => boolean;\n focusedDate: TDate | null;\n focusedSection: 'day' | 'month' | 'year';\n locale?: string;\n selectedYear: (year: number) => boolean;\n startYear: number;\n totalYears: number;\n visibleMonth: TDate;\n}>;\n\ntype TngMoveDateOptions<TDate> = Readonly<{\n adapter: Readonly<TngDateAdapter<TDate>>;\n allowCrossView?: boolean;\n delta: number;\n isDisabled: (date: TDate) => boolean;\n start: TDate;\n}>;\n\ntype TngWeekBoundary = 'end' | 'start';\n\nexport function resolveLocaleWeekStartsOn(locale?: string): TngWeekdayIndex {\n if (typeof Intl === 'undefined' || typeof Intl.Locale === 'undefined' || locale === undefined) {\n return 0;\n }\n\n try {\n const weekInfo = (new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: Readonly<{ firstDay: number }>;\n }).weekInfo;\n if (weekInfo === undefined) {\n return 0;\n }\n\n return (weekInfo.firstDay % 7) as TngWeekdayIndex;\n } catch {\n return 0;\n }\n}\n\nexport function toDateKey<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n): string {\n const year = adapter.getYear(date).toString().padStart(4, '0');\n const month = (adapter.getMonth(date) + 1).toString().padStart(2, '0');\n const day = adapter.getDate(date).toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function datesEqual<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate | null,\n right: TDate | null,\n): boolean {\n if (left === null || right === null) {\n return left === right;\n }\n\n return adapter.compare(left, right) === 0;\n}\n\nexport function compareMonthIdentity<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate,\n right: TDate,\n): number {\n const yearDiff = adapter.getYear(left) - adapter.getYear(right);\n if (yearDiff !== 0) {\n return yearDiff;\n }\n\n return adapter.getMonth(left) - adapter.getMonth(right);\n}\n\nexport function compareYearIdentity<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate,\n right: TDate,\n): number {\n return adapter.getYear(left) - adapter.getYear(right);\n}\n\nexport function normalizeRangeOrder<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n range: Readonly<TngDateRange<TDate>>,\n): TngDateRange<TDate> {\n if (range.start === null || range.end === null) {\n return range;\n }\n\n if (adapter.compare(range.start, range.end) <= 0) {\n return range;\n }\n\n return Object.freeze({\n end: range.start,\n start: range.end,\n });\n}\n\nexport function sortAndUniqueDates<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n dates: readonly TDate[],\n): readonly TDate[] {\n const sorted = [...dates].sort((left, right) => adapter.compare(left, right));\n const unique: TDate[] = [];\n for (const date of sorted) {\n const last = unique.length > 0 ? unique[unique.length - 1] : null;\n if (last !== null && adapter.compare(last, date) === 0) {\n continue;\n }\n unique.push(date);\n }\n return Object.freeze(unique);\n}\n\nexport function isDateValueInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: TDate,\n visibleMonth: TDate,\n): boolean {\n return (\n adapter.getYear(value) === adapter.getYear(visibleMonth) &&\n adapter.getMonth(value) === adapter.getMonth(visibleMonth)\n );\n}\n\nexport function clampDateToMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n monthDate: TDate,\n): TDate {\n const lastDate = adapter.getDate(adapter.endOfMonth(monthDate));\n return adapter.createDate(\n adapter.getYear(monthDate),\n adapter.getMonth(monthDate),\n Math.min(adapter.getDate(date), lastDate),\n );\n}\n\nexport function moveDateSkippingDisabled<TDate>(\n options: Readonly<TngMoveDateOptions<TDate>>,\n): TDate {\n const allowCrossView = options.allowCrossView ?? true;\n const maxIterations = 400;\n let next = options.adapter.addDays(options.start, options.delta);\n let remaining = maxIterations;\n while (remaining > 0 && options.isDisabled(next)) {\n const currentMonth = options.adapter.getMonth(options.start);\n const nextMonth = options.adapter.getMonth(next);\n if (!allowCrossView && currentMonth !== nextMonth) {\n return options.start;\n }\n next = options.adapter.addDays(next, options.delta);\n remaining -= 1;\n }\n\n return remaining === 0 ? options.start : next;\n}\n\nexport function resolveWeekBoundaryDate<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n weekStartsOn: TngWeekdayIndex,\n boundary: TngWeekBoundary,\n): TDate {\n const start = adapter.startOfWeek(date, weekStartsOn);\n return boundary === 'start' ? start : adapter.addDays(start, 6);\n}\n\nexport function isValueSelected<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n selectionMode: 'multiple' | 'range' | 'single',\n value: Readonly<TngDateValue<TDate>>,\n date: TDate,\n): boolean {\n if (value === null) {\n return false;\n }\n\n if (selectionMode === 'single') {\n return adapter.compare(value as TDate, date) === 0;\n }\n\n if (selectionMode === 'multiple') {\n return (value as readonly TDate[]).some((selected) => adapter.compare(selected, date) === 0);\n }\n\n const range = value as TngDateRange<TDate>;\n if (range.start === null || range.end === null) {\n return range.start !== null && adapter.compare(range.start, date) === 0;\n }\n\n return adapter.compare(range.start, date) <= 0 && adapter.compare(range.end, date) >= 0;\n}\n\nexport function isDateInRange<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: Readonly<TngDateValue<TDate>>,\n date: TDate,\n): boolean {\n if (value === null || Array.isArray(value)) {\n return false;\n }\n\n if ('start' in value && 'end' in value && value.start !== null && value.end !== null) {\n return adapter.compare(value.start, date) <= 0 && adapter.compare(value.end, date) >= 0;\n }\n\n return false;\n}\n\nexport function hasSelectableDateInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n monthDate: TDate,\n isDisabled: (date: TDate) => boolean,\n): boolean {\n const start = adapter.startOfMonth(monthDate);\n const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));\n for (let day = 0; day < totalDays; day += 1) {\n const candidate = adapter.addDays(start, day);\n if (!isDisabled(candidate)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function hasSelectableDateInYear<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n year: number,\n currentMonth: TDate,\n isDisabled: (date: TDate) => boolean,\n): boolean {\n for (let month = 0; month < 12; month += 1) {\n const monthDate = adapter.createDate(year, month, 1);\n if (hasSelectableDateInMonth(adapter, monthDate, isDisabled)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function findFirstEnabledDateInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n monthDate: TDate,\n isDisabled: (date: TDate) => boolean,\n): TDate | null {\n const start = adapter.startOfMonth(monthDate);\n const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));\n for (let day = 0; day < totalDays; day += 1) {\n const candidate = adapter.addDays(start, day);\n if (!isDisabled(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nexport function buildMonthGrid<TDate>(\n options: Readonly<TngMonthGridOptions<TDate>>,\n): readonly TngDateCell<TDate>[] {\n const firstOfMonth = options.adapter.startOfMonth(options.visibleMonth);\n const firstVisibleDate = options.adapter.startOfWeek(firstOfMonth, options.weekStartsOn);\n const daysInMonth = options.adapter.getDate(options.adapter.endOfMonth(options.visibleMonth));\n const leadingOffset = (options.adapter.getDay(firstOfMonth) - options.weekStartsOn + 7) % 7;\n const weekCount = options.fixedWeeks ? 6 : Math.ceil((leadingOffset + daysInMonth) / 7);\n const totalCells = weekCount * 7;\n const cells: TngDateCell<TDate>[] = [];\n\n for (let index = 0; index < totalCells; index += 1) {\n const date = options.adapter.addDays(firstVisibleDate, index);\n const inMonth = isDateValueInMonth(options.adapter, date, options.visibleMonth);\n const hidden = !inMonth && !options.showOutsideDays;\n const active = datesEqual(options.adapter, date, options.activeDate);\n const focusVisible = options.focusedDate !== null && datesEqual(options.adapter, date, options.focusedDate);\n cells.push(\n Object.freeze({\n active,\n colIndex: index % 7,\n date,\n disabled: options.isDisabled(date),\n focusVisible,\n hidden,\n id: options.createCellId(date),\n inMonth,\n inRange: options.inRange(date),\n label: hidden ? '' : options.adapter.format(date, 'day-number', options.locale),\n rangeEnd: options.isRangeEnd(date),\n rangeStart: options.isRangeStart(date),\n rowIndex: Math.floor(index / 7),\n selected: options.isSelected(date),\n tabindex: active && options.focusStrategy === 'roving' ? 0 : -1,\n today: datesEqual(options.adapter, date, options.today),\n }),\n );\n }\n\n return Object.freeze(cells);\n}\n\nexport function buildMonthOptions<TDate>(\n options: Readonly<TngMonthOptionsConfig<TDate>>,\n): readonly TngMonthOption<TDate>[] {\n const year = options.adapter.getYear(options.visibleMonth);\n const monthOptions: TngMonthOption<TDate>[] = [];\n for (let monthIndex = 0; monthIndex < 12; monthIndex += 1) {\n const date = options.adapter.createDate(year, monthIndex, 1);\n const active =\n options.focusedSection === 'month' &&\n options.adapter.getYear(options.activeDate) === year &&\n options.adapter.getMonth(options.activeDate) === monthIndex;\n const focusVisible =\n options.focusedSection === 'month' &&\n options.focusedDate !== null &&\n compareMonthIdentity(options.adapter, date, options.focusedDate) === 0;\n monthOptions.push(\n Object.freeze({\n active,\n date,\n disabled: options.disabledMonth(monthIndex),\n focusVisible,\n id: options.createId(monthIndex),\n index: monthIndex,\n label: options.adapter.format(date, 'month-short', options.locale),\n selected: options.selectedMonth(monthIndex),\n tabindex: active ? 0 : -1,\n }),\n );\n }\n\n return Object.freeze(monthOptions);\n}\n\nexport function buildYearOptions<TDate>(\n options: Readonly<TngYearOptionsConfig<TDate>>,\n): readonly TngYearOption<TDate>[] {\n const yearOptions: TngYearOption<TDate>[] = [];\n for (let offset = 0; offset < options.totalYears; offset += 1) {\n const year = options.startYear + offset;\n const date = options.adapter.createDate(year, options.adapter.getMonth(options.visibleMonth), 1);\n const active = options.focusedSection === 'year' && options.adapter.getYear(options.activeDate) === year;\n const focusVisible =\n options.focusedSection === 'year' &&\n options.focusedDate !== null &&\n compareYearIdentity(options.adapter, date, options.focusedDate) === 0;\n yearOptions.push(\n Object.freeze({\n active,\n date,\n disabled: options.disabledYear(year),\n focusVisible,\n id: options.createId(year),\n label: options.adapter.format(date, 'year-label', options.locale),\n selected: options.selectedYear(year),\n tabindex: active ? 0 : -1,\n year,\n }),\n );\n }\n\n return Object.freeze(yearOptions);\n}\n\nexport function resolveInitialFocusedSection(view: TngCalendarView): TngCalendarView {\n return view;\n}\n\nexport function resolveViewForEscape(currentView: TngCalendarView): TngCalendarView | null {\n return currentView === 'day' ? null : 'day';\n}\n\nexport function includesView(views: readonly TngCalendarView[], view: TngCalendarView): boolean {\n return views.includes(view);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"datepicker.utils.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n TngCalendarView,\n TngDateAdapter,\n TngDateCell,\n TngDateRange,\n TngDateValue,\n TngMonthOption,\n TngWeekdayIndex,\n TngYearOption,\n} from './datepicker.types';\n\ntype TngMonthGridOptions<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createCellId: (date: TDate) => string;\n fixedWeeks: boolean;\n focusStrategy: 'active-descendant' | 'roving';\n focusedDate: TDate | null;\n inRange: (date: TDate) => boolean;\n isDisabled: (date: TDate) => boolean;\n isRangeEnd: (date: TDate) => boolean;\n isRangeStart: (date: TDate) => boolean;\n isSelected: (date: TDate) => boolean;\n locale?: string;\n showOutsideDays: boolean;\n today: TDate;\n visibleMonth: TDate;\n weekStartsOn: TngWeekdayIndex;\n}>;\n\ntype TngMonthOptionsConfig<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createId: (month: number) => string;\n disabledMonth: (month: number) => boolean;\n focusedDate: TDate | null;\n focusedSection: 'day' | 'month' | 'year';\n locale?: string;\n selectedMonth: (month: number) => boolean;\n visibleMonth: TDate;\n}>;\n\ntype TngYearOptionsConfig<TDate> = Readonly<{\n activeDate: TDate;\n adapter: Readonly<TngDateAdapter<TDate>>;\n createId: (year: number) => string;\n disabledYear: (year: number) => boolean;\n focusedDate: TDate | null;\n focusedSection: 'day' | 'month' | 'year';\n locale?: string;\n selectedYear: (year: number) => boolean;\n startYear: number;\n totalYears: number;\n visibleMonth: TDate;\n}>;\n\ntype TngMoveDateOptions<TDate> = Readonly<{\n adapter: Readonly<TngDateAdapter<TDate>>;\n allowCrossView?: boolean;\n delta: number;\n isDisabled: (date: TDate) => boolean;\n start: TDate;\n}>;\n\ntype TngWeekBoundary = 'end' | 'start';\n\nexport function resolveLocaleWeekStartsOn(locale?: string): TngWeekdayIndex {\n if (typeof Intl === 'undefined' || typeof Intl.Locale === 'undefined' || locale === undefined) {\n return 0;\n }\n\n try {\n const weekInfo = (new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: Readonly<{ firstDay: number }>;\n }).weekInfo;\n if (weekInfo === undefined) {\n return 0;\n }\n\n return (weekInfo.firstDay % 7) as TngWeekdayIndex;\n } catch {\n return 0;\n }\n}\n\nexport function toDateKey<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n): string {\n const year = adapter.getYear(date).toString().padStart(4, '0');\n const month = (adapter.getMonth(date) + 1).toString().padStart(2, '0');\n const day = adapter.getDate(date).toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function datesEqual<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate | null,\n right: TDate | null,\n): boolean {\n if (left === null || right === null) {\n return left === right;\n }\n\n return adapter.compare(left, right) === 0;\n}\n\nexport function compareMonthIdentity<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate,\n right: TDate,\n): number {\n const yearDiff = adapter.getYear(left) - adapter.getYear(right);\n if (yearDiff !== 0) {\n return yearDiff;\n }\n\n return adapter.getMonth(left) - adapter.getMonth(right);\n}\n\nexport function compareYearIdentity<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n left: TDate,\n right: TDate,\n): number {\n return adapter.getYear(left) - adapter.getYear(right);\n}\n\nexport function normalizeRangeOrder<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n range: Readonly<TngDateRange<TDate>>,\n): TngDateRange<TDate> {\n if (range.start === null || range.end === null) {\n return range;\n }\n\n if (adapter.compare(range.start, range.end) <= 0) {\n return range;\n }\n\n return Object.freeze({\n end: range.start,\n start: range.end,\n });\n}\n\nexport function sortAndUniqueDates<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n dates: readonly TDate[],\n): readonly TDate[] {\n const sorted = [...dates].sort((left, right) => adapter.compare(left, right));\n const unique: TDate[] = [];\n for (const date of sorted) {\n const last = unique.length > 0 ? unique[unique.length - 1] : null;\n if (last !== null && adapter.compare(last, date) === 0) {\n continue;\n }\n unique.push(date);\n }\n return Object.freeze(unique);\n}\n\nexport function isDateValueInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: TDate,\n visibleMonth: TDate,\n): boolean {\n return (\n adapter.getYear(value) === adapter.getYear(visibleMonth) &&\n adapter.getMonth(value) === adapter.getMonth(visibleMonth)\n );\n}\n\nexport function clampDateToMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n monthDate: TDate,\n): TDate {\n const lastDate = adapter.getDate(adapter.endOfMonth(monthDate));\n return adapter.createDate(\n adapter.getYear(monthDate),\n adapter.getMonth(monthDate),\n Math.min(adapter.getDate(date), lastDate),\n );\n}\n\nexport function moveDateSkippingDisabled<TDate>(\n options: Readonly<TngMoveDateOptions<TDate>>,\n): TDate {\n const allowCrossView = options.allowCrossView ?? true;\n const maxIterations = 400;\n let next = options.adapter.addDays(options.start, options.delta);\n let remaining = maxIterations;\n while (remaining > 0 && options.isDisabled(next)) {\n const currentMonth = options.adapter.getMonth(options.start);\n const nextMonth = options.adapter.getMonth(next);\n if (!allowCrossView && currentMonth !== nextMonth) {\n return options.start;\n }\n next = options.adapter.addDays(next, options.delta);\n remaining -= 1;\n }\n\n return remaining === 0 ? options.start : next;\n}\n\nexport function resolveWeekBoundaryDate<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n date: TDate,\n weekStartsOn: TngWeekdayIndex,\n boundary: TngWeekBoundary,\n): TDate {\n const start = adapter.startOfWeek(date, weekStartsOn);\n return boundary === 'start' ? start : adapter.addDays(start, 6);\n}\n\nexport function isValueSelected<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n selectionMode: 'multiple' | 'range' | 'single',\n value: Readonly<TngDateValue<TDate>>,\n date: TDate,\n): boolean {\n if (value === null) {\n return false;\n }\n\n if (selectionMode === 'single') {\n return adapter.compare(value as TDate, date) === 0;\n }\n\n if (selectionMode === 'multiple') {\n return (value as readonly TDate[]).some((selected) => adapter.compare(selected, date) === 0);\n }\n\n const range = value as TngDateRange<TDate>;\n if (range.start === null || range.end === null) {\n return range.start !== null && adapter.compare(range.start, date) === 0;\n }\n\n return adapter.compare(range.start, date) <= 0 && adapter.compare(range.end, date) >= 0;\n}\n\nexport function isDateInRange<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: Readonly<TngDateValue<TDate>>,\n date: TDate,\n): boolean {\n if (value === null || Array.isArray(value)) {\n return false;\n }\n\n if ('start' in value && 'end' in value && value.start !== null && value.end !== null) {\n return adapter.compare(value.start, date) <= 0 && adapter.compare(value.end, date) >= 0;\n }\n\n return false;\n}\n\nexport function hasSelectableDateInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n monthDate: TDate,\n isDisabled: (date: TDate) => boolean,\n): boolean {\n const start = adapter.startOfMonth(monthDate);\n const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));\n for (let day = 0; day < totalDays; day += 1) {\n const candidate = adapter.addDays(start, day);\n if (!isDisabled(candidate)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function hasSelectableDateInYear<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n year: number,\n currentMonth: TDate,\n isDisabled: (date: TDate) => boolean,\n): boolean {\n for (let month = 0; month < 12; month += 1) {\n const monthDate = adapter.createDate(year, month, 1);\n if (hasSelectableDateInMonth(adapter, monthDate, isDisabled)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function findFirstEnabledDateInMonth<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n monthDate: TDate,\n isDisabled: (date: TDate) => boolean,\n): TDate | null {\n const start = adapter.startOfMonth(monthDate);\n const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));\n for (let day = 0; day < totalDays; day += 1) {\n const candidate = adapter.addDays(start, day);\n if (!isDisabled(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nexport function buildMonthGrid<TDate>(\n options: Readonly<TngMonthGridOptions<TDate>>,\n): readonly TngDateCell<TDate>[] {\n const firstOfMonth = options.adapter.startOfMonth(options.visibleMonth);\n const firstVisibleDate = options.adapter.startOfWeek(firstOfMonth, options.weekStartsOn);\n const daysInMonth = options.adapter.getDate(options.adapter.endOfMonth(options.visibleMonth));\n const leadingOffset = (options.adapter.getDay(firstOfMonth) - options.weekStartsOn + 7) % 7;\n const weekCount = options.fixedWeeks ? 6 : Math.ceil((leadingOffset + daysInMonth) / 7);\n const totalCells = weekCount * 7;\n const cells: TngDateCell<TDate>[] = [];\n\n for (let index = 0; index < totalCells; index += 1) {\n const date = options.adapter.addDays(firstVisibleDate, index);\n const inMonth = isDateValueInMonth(options.adapter, date, options.visibleMonth);\n const hidden = !inMonth && !options.showOutsideDays;\n const active = datesEqual(options.adapter, date, options.activeDate);\n const focusVisible = options.focusedDate !== null && datesEqual(options.adapter, date, options.focusedDate);\n const disabled = !inMonth || options.isDisabled(date);\n cells.push(\n Object.freeze({\n active,\n colIndex: index % 7,\n date,\n disabled,\n focusVisible,\n hidden,\n id: options.createCellId(date),\n inMonth,\n inRange: options.inRange(date),\n label: hidden ? '' : options.adapter.format(date, 'day-number', options.locale),\n rangeEnd: options.isRangeEnd(date),\n rangeStart: options.isRangeStart(date),\n rowIndex: Math.floor(index / 7),\n selected: options.isSelected(date),\n tabindex: active && options.focusStrategy === 'roving' ? 0 : -1,\n today: datesEqual(options.adapter, date, options.today),\n }),\n );\n }\n\n return Object.freeze(cells);\n}\n\nexport function buildMonthOptions<TDate>(\n options: Readonly<TngMonthOptionsConfig<TDate>>,\n): readonly TngMonthOption<TDate>[] {\n const year = options.adapter.getYear(options.visibleMonth);\n const monthOptions: TngMonthOption<TDate>[] = [];\n for (let monthIndex = 0; monthIndex < 12; monthIndex += 1) {\n const date = options.adapter.createDate(year, monthIndex, 1);\n const active =\n options.focusedSection === 'month' &&\n options.adapter.getYear(options.activeDate) === year &&\n options.adapter.getMonth(options.activeDate) === monthIndex;\n const focusVisible =\n options.focusedSection === 'month' &&\n options.focusedDate !== null &&\n compareMonthIdentity(options.adapter, date, options.focusedDate) === 0;\n monthOptions.push(\n Object.freeze({\n active,\n date,\n disabled: options.disabledMonth(monthIndex),\n focusVisible,\n id: options.createId(monthIndex),\n index: monthIndex,\n label: options.adapter.format(date, 'month-short', options.locale),\n selected: options.selectedMonth(monthIndex),\n tabindex: active ? 0 : -1,\n }),\n );\n }\n\n return Object.freeze(monthOptions);\n}\n\nexport function buildYearOptions<TDate>(\n options: Readonly<TngYearOptionsConfig<TDate>>,\n): readonly TngYearOption<TDate>[] {\n const yearOptions: TngYearOption<TDate>[] = [];\n for (let offset = 0; offset < options.totalYears; offset += 1) {\n const year = options.startYear + offset;\n const date = options.adapter.createDate(year, options.adapter.getMonth(options.visibleMonth), 1);\n const active = options.focusedSection === 'year' && options.adapter.getYear(options.activeDate) === year;\n const focusVisible =\n options.focusedSection === 'year' &&\n options.focusedDate !== null &&\n compareYearIdentity(options.adapter, date, options.focusedDate) === 0;\n yearOptions.push(\n Object.freeze({\n active,\n date,\n disabled: options.disabledYear(year),\n focusVisible,\n id: options.createId(year),\n label: options.adapter.format(date, 'year-label', options.locale),\n selected: options.selectedYear(year),\n tabindex: active ? 0 : -1,\n year,\n }),\n );\n }\n\n return Object.freeze(yearOptions);\n}\n\nexport function resolveInitialFocusedSection(view: TngCalendarView): TngCalendarView {\n return view;\n}\n\nexport function resolveViewForEscape(currentView: TngCalendarView): TngCalendarView | null {\n return currentView === 'day' ? null : 'day';\n}\n\nexport function includesView(views: readonly TngCalendarView[], view: TngCalendarView): boolean {\n return views.includes(view);\n}\n"]}
|
|
@@ -47,6 +47,8 @@ export declare class TngDatepickerOverlay {
|
|
|
47
47
|
private positionOverlay;
|
|
48
48
|
private setupRepositionListeners;
|
|
49
49
|
private teardownRepositionListeners;
|
|
50
|
+
private syncPortalledThemeVars;
|
|
51
|
+
private clearPortalledThemeVars;
|
|
50
52
|
private mountToBodyAndPosition;
|
|
51
53
|
private restoreToPlaceholder;
|
|
52
54
|
private resolvePlacement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-datepicker.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAMX,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tng-datepicker.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAMX,MAAM,eAAe,CAAC;AAYvB,OAAO,KAAK,EACV,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;;AAW5B,KAAK,kBAAkB,GACnB,UAAU,CAAC,WAAW,CAAC,GACvB,WAAW,GACX,IAAI,GACJ,SAAS,CAAC;AA+Cd,qBAIa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkD;IAChF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IACvE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsC;IAExE,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA+B;IAErD,SAAgB,UAAU;oBA/Ed,MAAM,QAAQ,CAAC;YACzB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;YACnD,IAAI,EAAE,OAAO,CAAC;SACf,CAAC;yBACe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI;mBAC3C,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI;QA4E1D;IACH,SAAgB,MAAM,0DAEnB;IACH,SAAgB,SAAS;;;oBAEtB;IACH,SAAgB,MAAM;;;oBAEnB;IACH,SAAgB,SAAS;;;;oBAEtB;IAGH,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,CAGhC;IAGD,SAAS,KAAK,OAAO,IAAI,MAAM,GAAG,IAAI,CAGrC;IAGD,SAAS,KAAK,aAAa,IAAI,QAAQ,GAAG,KAAK,CAG9C;;IA6CD,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;yCAxSb,oBAAoB;2CAApB,oBAAoB;CA2ShC"}
|
|
@@ -1,24 +1,41 @@
|
|
|
1
1
|
import { DestroyRef, Directive, ElementRef, HostBinding, effect, inject, input, signal, } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { applyFixedPortalledOverlayBaseStyles, clearFixedPortalledOverlayBaseStyles, clearPortalledThemeVars, positionFixedAnchoredOverlay, resolveCssCustomPropertyPx, syncPortalledThemeVars, } from '@tailng-ui/cdk';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
const PORTALLED_DATEPICKER_THEME_VARS = [
|
|
5
|
+
'--tng-datepicker-radius',
|
|
6
|
+
'--tng-datepicker-field-height',
|
|
7
|
+
'--tng-datepicker-overlay-gap',
|
|
8
|
+
'--tng-datepicker-day-cell-size',
|
|
9
|
+
'--tng-datepicker-picker-cell-size',
|
|
10
|
+
'--tng-datepicker-grid-gap',
|
|
11
|
+
'--tng-datepicker-inline-gap',
|
|
12
|
+
'--tng-datepicker-overlay-padding',
|
|
13
|
+
'--tng-datepicker-border',
|
|
14
|
+
'--tng-datepicker-border-strong',
|
|
15
|
+
'--tng-datepicker-bg',
|
|
16
|
+
'--tng-datepicker-surface',
|
|
17
|
+
'--tng-datepicker-canvas',
|
|
18
|
+
'--tng-datepicker-fg',
|
|
19
|
+
'--tng-datepicker-muted',
|
|
20
|
+
'--tng-datepicker-brand',
|
|
21
|
+
'--tng-datepicker-danger',
|
|
22
|
+
'--tng-datepicker-focus',
|
|
23
|
+
'--tng-datepicker-shadow',
|
|
24
|
+
'--tng-datepicker-focus-shadow',
|
|
25
|
+
'--tng-datepicker-ease',
|
|
26
|
+
'--tng-semantic-background-base',
|
|
27
|
+
'--tng-semantic-background-surface',
|
|
28
|
+
'--tng-semantic-background-canvas',
|
|
29
|
+
'--tng-semantic-border-subtle',
|
|
30
|
+
'--tng-semantic-border-strong',
|
|
31
|
+
'--tng-semantic-foreground-primary',
|
|
32
|
+
'--tng-semantic-foreground-secondary',
|
|
33
|
+
'--tng-semantic-accent-brand',
|
|
34
|
+
'--tng-semantic-accent-danger',
|
|
35
|
+
'--tng-semantic-focus-ring',
|
|
36
|
+
];
|
|
4
37
|
const OVERLAY_VIEWPORT_MARGIN = 12;
|
|
5
38
|
const OVERLAY_OFFSET = 9;
|
|
6
|
-
function rectFromClientRect(rect) {
|
|
7
|
-
return {
|
|
8
|
-
height: rect.height,
|
|
9
|
-
left: rect.left,
|
|
10
|
-
top: rect.top,
|
|
11
|
-
width: rect.width,
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function viewportRect(windowRef) {
|
|
15
|
-
return {
|
|
16
|
-
height: windowRef.innerHeight || 768,
|
|
17
|
-
left: 0,
|
|
18
|
-
top: 0,
|
|
19
|
-
width: windowRef.innerWidth || 1024,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
39
|
function resolveAnchorElement(anchor) {
|
|
23
40
|
if (anchor instanceof ElementRef) {
|
|
24
41
|
return anchor.nativeElement;
|
|
@@ -134,31 +151,16 @@ export class TngDatepickerOverlay {
|
|
|
134
151
|
if (anchor === null || this.ownerWindow === null) {
|
|
135
152
|
return;
|
|
136
153
|
}
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
const width = Math.max(0, Math.min(anchorRect.width, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2));
|
|
140
|
-
overlay.style.width = `${width}px`;
|
|
141
|
-
overlay.style.maxWidth = `${Math.max(0, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2)}px`;
|
|
142
|
-
overlay.style.maxHeight = '';
|
|
143
|
-
const overlayRect = rectFromClientRect(overlay.getBoundingClientRect());
|
|
144
|
-
const result = computeOverlayPosition({
|
|
145
|
-
anchorRect,
|
|
154
|
+
const result = positionFixedAnchoredOverlay({
|
|
155
|
+
anchor,
|
|
146
156
|
collision: this.resolveCollision(),
|
|
147
157
|
direction: this.resolveDirection(),
|
|
148
158
|
offset: this.resolveOffset(),
|
|
149
|
-
|
|
159
|
+
overlay,
|
|
150
160
|
placement: this.resolvePlacement(),
|
|
151
|
-
|
|
161
|
+
viewportMargin: OVERLAY_VIEWPORT_MARGIN,
|
|
162
|
+
windowRef: this.ownerWindow,
|
|
152
163
|
});
|
|
153
|
-
overlay.style.left = `${result.x}px`;
|
|
154
|
-
overlay.style.top = `${result.y}px`;
|
|
155
|
-
const anchorBottom = anchorRect.top + anchorRect.height;
|
|
156
|
-
const availableHeight = result.side === 'top'
|
|
157
|
-
? Math.max(0, Math.floor(anchorRect.top - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET))
|
|
158
|
-
: Math.max(0, Math.floor(viewport.height - anchorBottom - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET));
|
|
159
|
-
if (availableHeight > 0) {
|
|
160
|
-
overlay.style.maxHeight = `${availableHeight}px`;
|
|
161
|
-
}
|
|
162
164
|
this.resolvedPlacement.set(result.side === 'top' ? 'top' : 'bottom');
|
|
163
165
|
overlay.style.visibility = '';
|
|
164
166
|
}
|
|
@@ -193,6 +195,21 @@ export class TngDatepickerOverlay {
|
|
|
193
195
|
this.resizeObserver?.disconnect();
|
|
194
196
|
this.resizeObserver = null;
|
|
195
197
|
}
|
|
198
|
+
syncPortalledThemeVars() {
|
|
199
|
+
const overlay = this.elRef.nativeElement;
|
|
200
|
+
const themeSource = this.findAnchorEl();
|
|
201
|
+
if (themeSource === null) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
syncPortalledThemeVars({
|
|
205
|
+
cssVars: PORTALLED_DATEPICKER_THEME_VARS,
|
|
206
|
+
panel: overlay,
|
|
207
|
+
source: themeSource,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
clearPortalledThemeVars() {
|
|
211
|
+
clearPortalledThemeVars(this.elRef.nativeElement, PORTALLED_DATEPICKER_THEME_VARS);
|
|
212
|
+
}
|
|
196
213
|
mountToBodyAndPosition() {
|
|
197
214
|
const overlay = this.elRef.nativeElement;
|
|
198
215
|
if (this.ownerDocument === null) {
|
|
@@ -202,11 +219,8 @@ export class TngDatepickerOverlay {
|
|
|
202
219
|
if (overlay.parentNode !== this.ownerDocument.body) {
|
|
203
220
|
this.ownerDocument.body.appendChild(overlay);
|
|
204
221
|
}
|
|
205
|
-
overlay
|
|
206
|
-
|
|
207
|
-
overlay.style.top = '0px';
|
|
208
|
-
overlay.style.visibility = 'hidden';
|
|
209
|
-
overlay.style.zIndex = '1000';
|
|
222
|
+
applyFixedPortalledOverlayBaseStyles(overlay);
|
|
223
|
+
this.syncPortalledThemeVars();
|
|
210
224
|
queueMicrotask(() => {
|
|
211
225
|
if (!this.controller().getOutputs().open) {
|
|
212
226
|
return;
|
|
@@ -228,20 +242,26 @@ export class TngDatepickerOverlay {
|
|
|
228
242
|
}
|
|
229
243
|
this.teardownRepositionListeners();
|
|
230
244
|
this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');
|
|
231
|
-
|
|
245
|
+
this.clearPortalledThemeVars();
|
|
246
|
+
clearFixedPortalledOverlayBaseStyles(overlay);
|
|
232
247
|
overlay.style.maxHeight = '';
|
|
233
248
|
overlay.style.maxWidth = '';
|
|
234
|
-
overlay.style.position = '';
|
|
235
|
-
overlay.style.top = '';
|
|
236
|
-
overlay.style.visibility = '';
|
|
237
249
|
overlay.style.width = '';
|
|
238
|
-
overlay.style.zIndex = '';
|
|
239
250
|
}
|
|
240
251
|
resolvePlacement() {
|
|
241
252
|
return this.placement() ?? { align: 'start', side: 'bottom' };
|
|
242
253
|
}
|
|
243
254
|
resolveOffset() {
|
|
244
|
-
|
|
255
|
+
const explicitOffset = this.offset();
|
|
256
|
+
if (explicitOffset !== undefined) {
|
|
257
|
+
return explicitOffset;
|
|
258
|
+
}
|
|
259
|
+
const themeSource = this.findAnchorEl();
|
|
260
|
+
return {
|
|
261
|
+
side: themeSource === null
|
|
262
|
+
? OVERLAY_OFFSET
|
|
263
|
+
: resolveCssCustomPropertyPx(themeSource, '--tng-datepicker-overlay-gap', OVERLAY_OFFSET),
|
|
264
|
+
};
|
|
245
265
|
}
|
|
246
266
|
resolveCollision() {
|
|
247
267
|
return this.collision() ?? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-datepicker.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n computeOverlayPosition,\n type TngOverlayCollisionOptions,\n type TngOverlayOffset,\n type TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport type {\n TngDatepickerAttributeMap,\n} from './datepicker.types';\n\ntype TngDatepickerOverlayController = Readonly<{\n getOutputs: () => Readonly<{\n getHostAttributes: () => TngDatepickerAttributeMap;\n open: boolean;\n }>;\n registerOverlay: (element: HTMLElement | null) => void;\n subscribe: (listener: (event: unknown) => void) => () => void;\n}>;\n\ntype MaybeRect = Readonly<{\n height: number;\n left: number;\n top: number;\n width: number;\n}>;\n\ntype OverlayAnchorInput =\n | ElementRef<HTMLElement>\n | HTMLElement\n | null\n | undefined;\n\nconst OVERLAY_VIEWPORT_MARGIN = 12;\nconst OVERLAY_OFFSET = 9;\n\nfunction rectFromClientRect(rect: DOMRect | ClientRect): MaybeRect {\n return {\n height: rect.height,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n };\n}\n\nfunction viewportRect(windowRef: Window): MaybeRect {\n return {\n height: windowRef.innerHeight || 768,\n left: 0,\n top: 0,\n width: windowRef.innerWidth || 1024,\n };\n}\n\nfunction resolveAnchorElement(anchor: OverlayAnchorInput): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n return anchor instanceof HTMLElement ? anchor : null;\n}\n\n@Directive({\n selector: '[tngDatepickerOverlay]',\n exportAs: 'tngDatepickerOverlay',\n})\nexport class TngDatepickerOverlay {\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly ownerDocument = this.elRef.nativeElement.ownerDocument ?? null;\n private readonly ownerWindow = this.ownerDocument?.defaultView ?? null;\n private readonly renderVersion = signal(0);\n private readonly resolvedPlacement = signal<'bottom' | 'top'>('bottom');\n\n private overlayPlaceholder: Comment | null = null;\n private overlayOriginalParent: Node | null = null;\n private overlayLayoutFrame: number | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n public readonly controller = input.required<TngDatepickerOverlayController>({\n alias: 'tngDatepickerOverlay',\n });\n public readonly anchor = input<OverlayAnchorInput>(undefined, {\n alias: 'tngDatepickerOverlayAnchor',\n });\n public readonly placement = input<TngOverlayPlacement | undefined>(undefined, {\n alias: 'tngDatepickerOverlayPlacement',\n });\n public readonly offset = input<TngOverlayOffset | undefined>(undefined, {\n alias: 'tngDatepickerOverlayOffset',\n });\n public readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined, {\n alias: 'tngDatepickerOverlayCollision',\n });\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : '';\n }\n\n @HostBinding('style.display')\n protected get display(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : 'none';\n }\n\n @HostBinding('attr.data-placement')\n protected get dataPlacement(): 'bottom' | 'top' {\n this.renderVersion();\n return this.resolvedPlacement();\n }\n\n public constructor() {\n this.initializeOverlayPortal();\n\n effect((onCleanup) => {\n const controller = this.controller();\n controller.registerOverlay(this.elRef.nativeElement);\n const unsubscribe = controller.subscribe(() => {\n this.renderVersion.update((value) => value + 1);\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.registerOverlay(null);\n });\n });\n\n effect(() => {\n const open = this.controller().getOutputs().open;\n this.renderVersion();\n this.placement();\n this.offset();\n this.collision();\n this.anchor();\n\n if (open) {\n this.mountToBodyAndPosition();\n return;\n }\n\n this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.overlayLayoutFrame !== null && this.ownerWindow !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n this.overlayLayoutFrame = null;\n }\n\n this.teardownRepositionListeners();\n this.restoreToPlaceholder(true);\n });\n }\n\n private initializeOverlayPortal(): void {\n if (this.overlayPlaceholder !== null) {\n return;\n }\n\n const placeholderDocument = this.ownerDocument ?? document;\n const overlay = this.elRef.nativeElement;\n this.overlayPlaceholder = placeholderDocument.createComment('tng-datepicker-overlay-anchor');\n this.overlayOriginalParent = overlay.parentNode;\n const placeholder = this.overlayPlaceholder;\n if (this.overlayOriginalParent !== null && placeholder !== null) {\n this.overlayOriginalParent.insertBefore(placeholder, overlay);\n }\n }\n\n private findAnchorEl(): HTMLElement | null {\n const explicitAnchor = resolveAnchorElement(this.anchor());\n if (explicitAnchor !== null) {\n return explicitAnchor;\n }\n\n const scope =\n this.overlayPlaceholder?.parentNode instanceof HTMLElement\n ? this.overlayPlaceholder.parentNode\n : this.overlayOriginalParent instanceof HTMLElement\n ? this.overlayOriginalParent\n : null;\n\n return (\n scope?.querySelector('[data-slot=\"datepicker-input-shell\"]') ??\n scope?.querySelector('[data-slot=\"datepicker-trigger\"]')\n ) as HTMLElement | null;\n }\n\n private scheduleReposition(): void {\n if (!this.controller().getOutputs().open || this.ownerWindow === null) {\n return;\n }\n\n if (this.overlayLayoutFrame !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n }\n\n this.overlayLayoutFrame = this.ownerWindow.requestAnimationFrame(() => {\n this.overlayLayoutFrame = null;\n this.positionOverlay();\n });\n }\n\n private positionOverlay(): void {\n const overlay = this.elRef.nativeElement;\n const anchor = this.findAnchorEl();\n if (anchor === null || this.ownerWindow === null) {\n return;\n }\n\n const anchorRect = rectFromClientRect(anchor.getBoundingClientRect());\n const viewport = viewportRect(this.ownerWindow);\n const width = Math.max(\n 0,\n Math.min(anchorRect.width, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2),\n );\n\n overlay.style.width = `${width}px`;\n overlay.style.maxWidth = `${Math.max(0, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2)}px`;\n overlay.style.maxHeight = '';\n\n const overlayRect = rectFromClientRect(overlay.getBoundingClientRect());\n const result = computeOverlayPosition({\n anchorRect,\n collision: this.resolveCollision(),\n direction: this.resolveDirection(),\n offset: this.resolveOffset(),\n overlayRect,\n placement: this.resolvePlacement(),\n viewportRect: viewport,\n });\n\n overlay.style.left = `${result.x}px`;\n overlay.style.top = `${result.y}px`;\n\n const anchorBottom = anchorRect.top + anchorRect.height;\n const availableHeight =\n result.side === 'top'\n ? Math.max(0, Math.floor(anchorRect.top - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET))\n : Math.max(\n 0,\n Math.floor(viewport.height - anchorBottom - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET),\n );\n\n if (availableHeight > 0) {\n overlay.style.maxHeight = `${availableHeight}px`;\n }\n\n this.resolvedPlacement.set(result.side === 'top' ? 'top' : 'bottom');\n overlay.style.visibility = '';\n }\n\n private setupRepositionListeners(): void {\n if (this.ownerWindow === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const schedule = (): void => {\n this.scheduleReposition();\n };\n\n this.ownerWindow.addEventListener('resize', schedule);\n this.ownerWindow.addEventListener('scroll', schedule, true);\n this.removeResizeListener = () => this.ownerWindow?.removeEventListener('resize', schedule);\n this.removeScrollListener = () => this.ownerWindow?.removeEventListener('scroll', schedule, true);\n\n if ('ResizeObserver' in this.ownerWindow) {\n const ResizeObserverCtor = this.ownerWindow.ResizeObserver;\n this.resizeObserver = new ResizeObserverCtor(() => {\n this.scheduleReposition();\n });\n\n const anchor = this.findAnchorEl();\n if (anchor !== null && this.resizeObserver !== null) {\n this.resizeObserver.observe(anchor);\n }\n\n this.resizeObserver?.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private mountToBodyAndPosition(): void {\n const overlay = this.elRef.nativeElement;\n if (this.ownerDocument === null) {\n return;\n }\n\n this.setupRepositionListeners();\n\n if (overlay.parentNode !== this.ownerDocument.body) {\n this.ownerDocument.body.appendChild(overlay);\n }\n\n overlay.style.position = 'fixed';\n overlay.style.left = '0px';\n overlay.style.top = '0px';\n overlay.style.visibility = 'hidden';\n overlay.style.zIndex = '1000';\n\n queueMicrotask(() => {\n if (!this.controller().getOutputs().open) {\n return;\n }\n\n this.positionOverlay();\n });\n }\n\n private restoreToPlaceholder(force = false): void {\n const overlay = this.elRef.nativeElement;\n if (!force && overlay.parentNode !== this.ownerDocument?.body) {\n return;\n }\n\n const placeholder = this.overlayPlaceholder;\n if (placeholder?.parentNode !== null && placeholder !== null) {\n placeholder.parentNode.insertBefore(overlay, placeholder);\n } else if (this.overlayOriginalParent !== null) {\n this.overlayOriginalParent.appendChild(overlay);\n }\n\n this.teardownRepositionListeners();\n this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');\n overlay.style.left = '';\n overlay.style.maxHeight = '';\n overlay.style.maxWidth = '';\n overlay.style.position = '';\n overlay.style.top = '';\n overlay.style.visibility = '';\n overlay.style.width = '';\n overlay.style.zIndex = '';\n }\n\n private resolvePlacement(): TngOverlayPlacement {\n return this.placement() ?? { align: 'start', side: 'bottom' };\n }\n\n private resolveOffset(): TngOverlayOffset {\n return this.offset() ?? { side: OVERLAY_OFFSET };\n }\n\n private resolveCollision(): TngOverlayCollisionOptions {\n return this.collision() ?? {\n flip: true,\n padding: OVERLAY_VIEWPORT_MARGIN,\n shift: true,\n };\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n return this.controller().getOutputs().getHostAttributes()['dir'] === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-datepicker.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/tng-datepicker.overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n HostBinding,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport {\n applyFixedPortalledOverlayBaseStyles,\n clearFixedPortalledOverlayBaseStyles,\n clearPortalledThemeVars,\n positionFixedAnchoredOverlay,\n resolveCssCustomPropertyPx,\n syncPortalledThemeVars,\n type TngOverlayCollisionOptions,\n type TngOverlayOffset,\n type TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport type {\n TngDatepickerAttributeMap,\n} from './datepicker.types';\n\ntype TngDatepickerOverlayController = Readonly<{\n getOutputs: () => Readonly<{\n getHostAttributes: () => TngDatepickerAttributeMap;\n open: boolean;\n }>;\n registerOverlay: (element: HTMLElement | null) => void;\n subscribe: (listener: (event: unknown) => void) => () => void;\n}>;\n\ntype OverlayAnchorInput =\n | ElementRef<HTMLElement>\n | HTMLElement\n | null\n | undefined;\n\nconst PORTALLED_DATEPICKER_THEME_VARS = [\n '--tng-datepicker-radius',\n '--tng-datepicker-field-height',\n '--tng-datepicker-overlay-gap',\n '--tng-datepicker-day-cell-size',\n '--tng-datepicker-picker-cell-size',\n '--tng-datepicker-grid-gap',\n '--tng-datepicker-inline-gap',\n '--tng-datepicker-overlay-padding',\n '--tng-datepicker-border',\n '--tng-datepicker-border-strong',\n '--tng-datepicker-bg',\n '--tng-datepicker-surface',\n '--tng-datepicker-canvas',\n '--tng-datepicker-fg',\n '--tng-datepicker-muted',\n '--tng-datepicker-brand',\n '--tng-datepicker-danger',\n '--tng-datepicker-focus',\n '--tng-datepicker-shadow',\n '--tng-datepicker-focus-shadow',\n '--tng-datepicker-ease',\n '--tng-semantic-background-base',\n '--tng-semantic-background-surface',\n '--tng-semantic-background-canvas',\n '--tng-semantic-border-subtle',\n '--tng-semantic-border-strong',\n '--tng-semantic-foreground-primary',\n '--tng-semantic-foreground-secondary',\n '--tng-semantic-accent-brand',\n '--tng-semantic-accent-danger',\n '--tng-semantic-focus-ring',\n] as const;\n\nconst OVERLAY_VIEWPORT_MARGIN = 12;\nconst OVERLAY_OFFSET = 9;\n\nfunction resolveAnchorElement(anchor: OverlayAnchorInput): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n return anchor instanceof HTMLElement ? anchor : null;\n}\n\n@Directive({\n selector: '[tngDatepickerOverlay]',\n exportAs: 'tngDatepickerOverlay',\n})\nexport class TngDatepickerOverlay {\n private readonly elRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly ownerDocument = this.elRef.nativeElement.ownerDocument ?? null;\n private readonly ownerWindow = this.ownerDocument?.defaultView ?? null;\n private readonly renderVersion = signal(0);\n private readonly resolvedPlacement = signal<'bottom' | 'top'>('bottom');\n\n private overlayPlaceholder: Comment | null = null;\n private overlayOriginalParent: Node | null = null;\n private overlayLayoutFrame: number | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n\n public readonly controller = input.required<TngDatepickerOverlayController>({\n alias: 'tngDatepickerOverlay',\n });\n public readonly anchor = input<OverlayAnchorInput>(undefined, {\n alias: 'tngDatepickerOverlayAnchor',\n });\n public readonly placement = input<TngOverlayPlacement | undefined>(undefined, {\n alias: 'tngDatepickerOverlayPlacement',\n });\n public readonly offset = input<TngOverlayOffset | undefined>(undefined, {\n alias: 'tngDatepickerOverlayOffset',\n });\n public readonly collision = input<TngOverlayCollisionOptions | undefined>(undefined, {\n alias: 'tngDatepickerOverlayCollision',\n });\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : '';\n }\n\n @HostBinding('style.display')\n protected get display(): string | null {\n this.renderVersion();\n return this.controller().getOutputs().open ? null : 'none';\n }\n\n @HostBinding('attr.data-placement')\n protected get dataPlacement(): 'bottom' | 'top' {\n this.renderVersion();\n return this.resolvedPlacement();\n }\n\n public constructor() {\n this.initializeOverlayPortal();\n\n effect((onCleanup) => {\n const controller = this.controller();\n controller.registerOverlay(this.elRef.nativeElement);\n const unsubscribe = controller.subscribe(() => {\n this.renderVersion.update((value) => value + 1);\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.registerOverlay(null);\n });\n });\n\n effect(() => {\n const open = this.controller().getOutputs().open;\n this.renderVersion();\n this.placement();\n this.offset();\n this.collision();\n this.anchor();\n\n if (open) {\n this.mountToBodyAndPosition();\n return;\n }\n\n this.restoreToPlaceholder();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.overlayLayoutFrame !== null && this.ownerWindow !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n this.overlayLayoutFrame = null;\n }\n\n this.teardownRepositionListeners();\n this.restoreToPlaceholder(true);\n });\n }\n\n private initializeOverlayPortal(): void {\n if (this.overlayPlaceholder !== null) {\n return;\n }\n\n const placeholderDocument = this.ownerDocument ?? document;\n const overlay = this.elRef.nativeElement;\n this.overlayPlaceholder = placeholderDocument.createComment('tng-datepicker-overlay-anchor');\n this.overlayOriginalParent = overlay.parentNode;\n const placeholder = this.overlayPlaceholder;\n if (this.overlayOriginalParent !== null && placeholder !== null) {\n this.overlayOriginalParent.insertBefore(placeholder, overlay);\n }\n }\n\n private findAnchorEl(): HTMLElement | null {\n const explicitAnchor = resolveAnchorElement(this.anchor());\n if (explicitAnchor !== null) {\n return explicitAnchor;\n }\n\n const scope =\n this.overlayPlaceholder?.parentNode instanceof HTMLElement\n ? this.overlayPlaceholder.parentNode\n : this.overlayOriginalParent instanceof HTMLElement\n ? this.overlayOriginalParent\n : null;\n\n return (\n scope?.querySelector('[data-slot=\"datepicker-input-shell\"]') ??\n scope?.querySelector('[data-slot=\"datepicker-trigger\"]')\n ) as HTMLElement | null;\n }\n\n private scheduleReposition(): void {\n if (!this.controller().getOutputs().open || this.ownerWindow === null) {\n return;\n }\n\n if (this.overlayLayoutFrame !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n }\n\n this.overlayLayoutFrame = this.ownerWindow.requestAnimationFrame(() => {\n this.overlayLayoutFrame = null;\n this.positionOverlay();\n });\n }\n\n private positionOverlay(): void {\n const overlay = this.elRef.nativeElement;\n const anchor = this.findAnchorEl();\n if (anchor === null || this.ownerWindow === null) {\n return;\n }\n\n const result = positionFixedAnchoredOverlay({\n anchor,\n collision: this.resolveCollision(),\n direction: this.resolveDirection(),\n offset: this.resolveOffset(),\n overlay,\n placement: this.resolvePlacement(),\n viewportMargin: OVERLAY_VIEWPORT_MARGIN,\n windowRef: this.ownerWindow,\n });\n this.resolvedPlacement.set(result.side === 'top' ? 'top' : 'bottom');\n overlay.style.visibility = '';\n }\n\n private setupRepositionListeners(): void {\n if (this.ownerWindow === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const schedule = (): void => {\n this.scheduleReposition();\n };\n\n this.ownerWindow.addEventListener('resize', schedule);\n this.ownerWindow.addEventListener('scroll', schedule, true);\n this.removeResizeListener = () => this.ownerWindow?.removeEventListener('resize', schedule);\n this.removeScrollListener = () => this.ownerWindow?.removeEventListener('scroll', schedule, true);\n\n if ('ResizeObserver' in this.ownerWindow) {\n const ResizeObserverCtor = this.ownerWindow.ResizeObserver;\n this.resizeObserver = new ResizeObserverCtor(() => {\n this.scheduleReposition();\n });\n\n const anchor = this.findAnchorEl();\n if (anchor !== null && this.resizeObserver !== null) {\n this.resizeObserver.observe(anchor);\n }\n\n this.resizeObserver?.observe(this.elRef.nativeElement);\n }\n }\n\n private teardownRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private syncPortalledThemeVars(): void {\n const overlay = this.elRef.nativeElement;\n const themeSource = this.findAnchorEl();\n if (themeSource === null) {\n return;\n }\n\n syncPortalledThemeVars({\n cssVars: PORTALLED_DATEPICKER_THEME_VARS,\n panel: overlay,\n source: themeSource,\n });\n }\n\n private clearPortalledThemeVars(): void {\n clearPortalledThemeVars(this.elRef.nativeElement, PORTALLED_DATEPICKER_THEME_VARS);\n }\n\n private mountToBodyAndPosition(): void {\n const overlay = this.elRef.nativeElement;\n if (this.ownerDocument === null) {\n return;\n }\n\n this.setupRepositionListeners();\n\n if (overlay.parentNode !== this.ownerDocument.body) {\n this.ownerDocument.body.appendChild(overlay);\n }\n\n applyFixedPortalledOverlayBaseStyles(overlay);\n this.syncPortalledThemeVars();\n\n queueMicrotask(() => {\n if (!this.controller().getOutputs().open) {\n return;\n }\n\n this.positionOverlay();\n });\n }\n\n private restoreToPlaceholder(force = false): void {\n const overlay = this.elRef.nativeElement;\n if (!force && overlay.parentNode !== this.ownerDocument?.body) {\n return;\n }\n\n const placeholder = this.overlayPlaceholder;\n if (placeholder?.parentNode !== null && placeholder !== null) {\n placeholder.parentNode.insertBefore(overlay, placeholder);\n } else if (this.overlayOriginalParent !== null) {\n this.overlayOriginalParent.appendChild(overlay);\n }\n\n this.teardownRepositionListeners();\n this.resolvedPlacement.set(this.resolvePlacement().side === 'top' ? 'top' : 'bottom');\n this.clearPortalledThemeVars();\n clearFixedPortalledOverlayBaseStyles(overlay);\n overlay.style.maxHeight = '';\n overlay.style.maxWidth = '';\n overlay.style.width = '';\n }\n\n private resolvePlacement(): TngOverlayPlacement {\n return this.placement() ?? { align: 'start', side: 'bottom' };\n }\n\n private resolveOffset(): TngOverlayOffset {\n const explicitOffset = this.offset();\n if (explicitOffset !== undefined) {\n return explicitOffset;\n }\n\n const themeSource = this.findAnchorEl();\n return {\n side:\n themeSource === null\n ? OVERLAY_OFFSET\n : resolveCssCustomPropertyPx(\n themeSource,\n '--tng-datepicker-overlay-gap',\n OVERLAY_OFFSET,\n ),\n };\n }\n\n private resolveCollision(): TngOverlayCollisionOptions {\n return this.collision() ?? {\n flip: true,\n padding: OVERLAY_VIEWPORT_MARGIN,\n shift: true,\n };\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n return this.controller().getOutputs().getHostAttributes()['dir'] === 'rtl' ? 'rtl' : 'ltr';\n }\n}\n"]}
|