@tailng-ui/primitives 0.30.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/README.md +3 -0
- package/package.json +2 -2
- 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/src/lib/form/input-otp/tng-input-otp.d.ts +2 -0
- package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
- package/src/lib/form/input-otp/tng-input-otp.js +14 -1
- package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
package/README.md
CHANGED
|
@@ -53,6 +53,9 @@ yarn add @tailng-ui/primitives @tailng-ui/cdk
|
|
|
53
53
|
npm install @tailng-ui/primitives @tailng-ui/cdk
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
+
`@tailng-ui/primitives` no longer bundles the CDK layer transitively. Install
|
|
57
|
+
`@tailng-ui/cdk` explicitly alongside the primitives package.
|
|
58
|
+
|
|
56
59
|
Peer dependencies:
|
|
57
60
|
|
|
58
61
|
- `@angular/core` `^21.1.0`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailng-ui/primitives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"@angular/core": "^21.1.0",
|
|
20
|
-
"@tailng-ui/cdk": "^0.
|
|
20
|
+
"@tailng-ui/cdk": "^0.25.0",
|
|
21
21
|
"tslib": "^2.3.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false
|
|
@@ -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"]}
|
|
@@ -43,10 +43,12 @@ export declare class TngInputOtp {
|
|
|
43
43
|
protected get dataFocusedAttr(): '' | null;
|
|
44
44
|
protected get dataFocusVisibleAttr(): '' | null;
|
|
45
45
|
protected get dataActiveAttr(): string | null;
|
|
46
|
+
protected onFocusOut(event: FocusEvent): void;
|
|
46
47
|
slotValue(index: number): string;
|
|
47
48
|
isSlotTabbable(index: number): boolean;
|
|
48
49
|
handleSlotFocus(index: number, target: HTMLInputElement | null): void;
|
|
49
50
|
handleSlotKeydown(index: number, event: KeyboardEvent): void;
|
|
51
|
+
handleGroupFocusOut(event: FocusEvent): void;
|
|
50
52
|
handleSlotInput(index: number, target: HTMLInputElement | null): void;
|
|
51
53
|
handleSlotPaste(index: number, event: ClipboardEvent): void;
|
|
52
54
|
private normalizedValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-input-otp.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/input-otp/tng-input-otp.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tng-input-otp.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/input-otp/tng-input-otp.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,6 +202,9 @@ export class TngInputOtp {
|
|
|
202
202
|
}
|
|
203
203
|
return String(clampOtpIndex(index, this.length()));
|
|
204
204
|
}
|
|
205
|
+
onFocusOut(event) {
|
|
206
|
+
this.handleGroupFocusOut(event);
|
|
207
|
+
}
|
|
205
208
|
slotValue(index) {
|
|
206
209
|
const slot = toTngOtpSlots(this.length(), this.normalizedValue())[index];
|
|
207
210
|
return slot ?? '';
|
|
@@ -253,6 +256,13 @@ export class TngInputOtp {
|
|
|
253
256
|
event.preventDefault();
|
|
254
257
|
}
|
|
255
258
|
}
|
|
259
|
+
handleGroupFocusOut(event) {
|
|
260
|
+
const nextTarget = event.relatedTarget;
|
|
261
|
+
if (nextTarget instanceof Node && this.hostElement.contains(nextTarget)) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
this.activeIndex.set(null);
|
|
265
|
+
}
|
|
256
266
|
handleSlotInput(index, target) {
|
|
257
267
|
if (!(target instanceof HTMLInputElement)) {
|
|
258
268
|
return;
|
|
@@ -377,7 +387,7 @@ export class TngInputOtp {
|
|
|
377
387
|
});
|
|
378
388
|
}
|
|
379
389
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngInputOtp, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
380
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngInputOtp, isStandalone: true, selector: "[tngInputOtp]", inputs: { length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, focused: { classPropertyName: "focused", publicName: "focused", isSignal: true, isRequired: false, transformFunction: null }, focusVisible: { classPropertyName: "focusVisible", publicName: "focusVisible", isSignal: true, isRequired: false, transformFunction: null }, activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", activeIndex: "activeIndexChange", complete: "complete" }, host: { properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.roleAttr", "attr.data-empty": "this.dataEmptyAttr", "attr.data-partial": "this.dataPartialAttr", "attr.data-complete": "this.dataCompleteAttr", "attr.data-disabled": "this.dataDisabledAttr", "attr.data-readonly": "this.dataReadonlyAttr", "attr.data-required": "this.dataRequiredAttr", "attr.data-invalid": "this.dataInvalidAttr", "attr.data-focused": "this.dataFocusedAttr", "attr.data-focus-visible": "this.dataFocusVisibleAttr", "attr.data-active": "this.dataActiveAttr" } }, exportAs: ["tngInputOtp"], ngImport: i0 });
|
|
390
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngInputOtp, isStandalone: true, selector: "[tngInputOtp]", inputs: { length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, focused: { classPropertyName: "focused", publicName: "focused", isSignal: true, isRequired: false, transformFunction: null }, focusVisible: { classPropertyName: "focusVisible", publicName: "focusVisible", isSignal: true, isRequired: false, transformFunction: null }, activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", activeIndex: "activeIndexChange", complete: "complete" }, host: { listeners: { "focusout": "onFocusOut($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.roleAttr", "attr.data-empty": "this.dataEmptyAttr", "attr.data-partial": "this.dataPartialAttr", "attr.data-complete": "this.dataCompleteAttr", "attr.data-disabled": "this.dataDisabledAttr", "attr.data-readonly": "this.dataReadonlyAttr", "attr.data-required": "this.dataRequiredAttr", "attr.data-invalid": "this.dataInvalidAttr", "attr.data-focused": "this.dataFocusedAttr", "attr.data-focus-visible": "this.dataFocusVisibleAttr", "attr.data-active": "this.dataActiveAttr" } }, exportAs: ["tngInputOtp"], ngImport: i0 });
|
|
381
391
|
}
|
|
382
392
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngInputOtp, decorators: [{
|
|
383
393
|
type: Directive,
|
|
@@ -421,6 +431,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
421
431
|
}], dataActiveAttr: [{
|
|
422
432
|
type: HostBinding,
|
|
423
433
|
args: ['attr.data-active']
|
|
434
|
+
}], onFocusOut: [{
|
|
435
|
+
type: HostListener,
|
|
436
|
+
args: ['focusout', ['$event']]
|
|
424
437
|
}] } });
|
|
425
438
|
export class TngInputOtpSlot {
|
|
426
439
|
otp = inject(TngInputOtp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-input-otp.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/input-otp/tng-input-otp.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\n\nexport function normalizeTngOtpLength(value: number): number {\n if (!Number.isFinite(value)) {\n return 6;\n }\n\n const rounded = Math.trunc(value);\n if (rounded < 1) {\n return 1;\n }\n\n return rounded > 12 ? 12 : rounded;\n}\n\nexport type TngOtpCompletionState = 'complete' | 'empty' | 'partial';\n\nexport function normalizeTngOtpValue(value: unknown): string {\n if (typeof value !== 'string') {\n return '';\n }\n\n return value;\n}\n\nexport function clampTngOtpValue(value: string, length: number): string {\n return Array.from(value).slice(0, length).join('');\n}\n\nexport type TngInputOtpType = 'numeric' | 'alphanumeric' | 'custom';\n\nconst tngOtpDigitPattern = /^\\d$/;\nconst tngOtpAlphanumericPattern = /^[a-zA-Z0-9]$/;\n\nfunction toNonGlobalRegex(pattern: RegExp): RegExp {\n const flags = pattern.flags.replace(/g/g, '');\n return new RegExp(pattern.source, flags);\n}\n\nexport function sanitizeTngOtpCharacters(\n value: string,\n mode: TngInputOtpType,\n pattern: string | RegExp | null,\n): readonly string[] {\n const compiledPattern =\n mode !== 'custom'\n ? null\n : typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern === null\n ? null\n : toNonGlobalRegex(pattern);\n\n const acceptedChars: string[] = [];\n for (const char of Array.from(value)) {\n if (mode === 'numeric' && !tngOtpDigitPattern.test(char)) {\n continue;\n }\n\n if (mode === 'alphanumeric' && !tngOtpAlphanumericPattern.test(char)) {\n continue;\n }\n\n if (compiledPattern && !compiledPattern.test(char)) {\n continue;\n }\n\n acceptedChars.push(char);\n }\n\n return acceptedChars;\n}\n\nexport function toTngOtpSlots(length: number, value: string): readonly string[] {\n const safeLength = normalizeTngOtpLength(length);\n const slots = Array.from({ length: safeLength }, () => '');\n const chars = Array.from(clampTngOtpValue(value, safeLength));\n\n for (const [index, char] of chars.entries()) {\n if (index >= safeLength) {\n break;\n }\n\n slots[index] = char;\n }\n\n return slots;\n}\n\nexport function applyTngOtpCharacters(\n value: string,\n startIndex: number,\n characters: readonly string[],\n maxLength: number,\n): string {\n const safeLength = normalizeTngOtpLength(maxLength);\n const nextChars = Array.from(clampTngOtpValue(value, safeLength));\n const safeStart = Math.max(0, Math.min(startIndex, safeLength - 1));\n\n let cursor = nextChars.length < safeLength ? Math.min(safeStart, nextChars.length) : safeStart;\n for (const char of characters) {\n if (cursor >= safeLength) {\n break;\n }\n\n if (cursor < nextChars.length) {\n nextChars[cursor] = char;\n } else {\n nextChars.push(char);\n }\n\n cursor += 1;\n }\n\n return nextChars.slice(0, safeLength).join('');\n}\n\nexport function removeTngOtpCharacter(value: string, index: number): string {\n const chars = Array.from(value);\n if (index < 0 || index >= chars.length) {\n return value;\n }\n\n chars.splice(index, 1);\n return chars.join('');\n}\n\nexport function resolveTngOtpEntryIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length >= safeLength) {\n return safeLength - 1;\n }\n\n return safeValue.length;\n}\n\nexport function resolveTngOtpEndIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length === 0) {\n return safeLength - 1;\n }\n\n return Math.max(0, safeValue.length - 1);\n}\n\nfunction clampOtpIndex(index: number, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n if (!Number.isFinite(index)) {\n return 0;\n }\n\n if (index < 0) {\n return 0;\n }\n\n if (index >= safeLength) {\n return safeLength - 1;\n }\n\n return Math.trunc(index);\n}\n\nexport type TngOtpBackspaceResult = Readonly<{\n focusIndex: number;\n value: string;\n}>;\n\nexport function resolveTngOtpState(length: number, value: string): TngOtpCompletionState {\n const normalizedLength = normalizeTngOtpLength(length);\n const clampedValue = clampTngOtpValue(normalizeTngOtpValue(value), normalizedLength);\n\n if (clampedValue.length === 0) {\n return 'empty';\n }\n\n return clampedValue.length >= normalizedLength ? 'complete' : 'partial';\n}\n\nexport function resolveTngOtpBackspaceResult(\n value: string,\n index: number,\n length: number,\n): TngOtpBackspaceResult | null {\n const normalizedLength = normalizeTngOtpLength(length);\n const normalizedValue = clampTngOtpValue(normalizeTngOtpValue(value), normalizedLength);\n if (normalizedValue.length === 0) {\n return null;\n }\n\n const boundedIndex = Number.isFinite(index)\n ? Math.max(0, Math.min(Math.trunc(index), normalizedLength - 1))\n : 0;\n const nextChars = Array.from(normalizedValue);\n\n if (boundedIndex < normalizedValue.length) {\n nextChars.splice(boundedIndex, 1);\n return {\n focusIndex: Math.max(0, boundedIndex - 1),\n value: nextChars.join(''),\n };\n }\n\n const previousIndex = Math.max(0, normalizedValue.length - 1);\n nextChars.splice(previousIndex, 1);\n return {\n focusIndex: Math.max(0, previousIndex),\n value: nextChars.join(''),\n };\n}\n\n@Directive({\n selector: '[tngInputOtp]',\n exportAs: 'tngInputOtp',\n})\nexport class TngInputOtp {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n public readonly length = input<number, number | string>(6, {\n transform: (value: number | string): number =>\n normalizeTngOtpLength(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = model<string>('');\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly readonly = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly focused = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly focusVisible = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly activeIndex = model<number | null>(null);\n public readonly type = input<TngInputOtpType>('numeric');\n public readonly pattern = input<string | RegExp | null>(null);\n public readonly selectOnFocus = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n public readonly complete = output<string>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-otp' as const;\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'group' as const;\n\n @HostBinding('attr.data-empty')\n protected get dataEmptyAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'empty' ? '' : null;\n }\n\n @HostBinding('attr.data-partial')\n protected get dataPartialAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'partial' ? '' : null;\n }\n\n @HostBinding('attr.data-complete')\n protected get dataCompleteAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'complete' ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-readonly')\n protected get dataReadonlyAttr(): '' | null {\n return this.readonly() ? '' : null;\n }\n\n @HostBinding('attr.data-required')\n protected get dataRequiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalidAttr(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused() ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible() ? '' : null;\n }\n\n @HostBinding('attr.data-active')\n protected get dataActiveAttr(): string | null {\n const index = this.activeIndex();\n if (typeof index !== 'number' || !Number.isFinite(index)) {\n return null;\n }\n\n if (index < 0 || index >= this.length()) {\n return null;\n }\n\n return String(clampOtpIndex(index, this.length()));\n }\n\n public slotValue(index: number): string {\n const slot = toTngOtpSlots(this.length(), this.normalizedValue())[index];\n return slot ?? '';\n }\n\n public isSlotTabbable(index: number): boolean {\n return this.resolvedActiveIndex() === index;\n }\n\n public handleSlotFocus(index: number, target: HTMLInputElement | null): void {\n const nextIndex = this.resolveEditableIndex(index);\n this.activeIndex.set(nextIndex);\n\n if (this.selectOnFocus() && target instanceof HTMLInputElement) {\n target.select();\n }\n }\n\n public handleSlotKeydown(index: number, event: KeyboardEvent): void {\n const editableIndex = this.resolveEditableIndex(index);\n const total = this.length();\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.focusSlot(Math.max(0, editableIndex - 1), true);\n return;\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n this.focusSlot(Math.min(total - 1, editableIndex + 1), true);\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n this.focusSlot(0, true);\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n this.focusSlot(resolveTngOtpEndIndex(this.normalizedValue(), total), true);\n return;\n }\n\n if (event.key === 'Backspace') {\n event.preventDefault();\n this.handleBackspace(editableIndex);\n return;\n }\n\n if (event.key === 'Delete') {\n event.preventDefault();\n this.handleDelete(editableIndex);\n return;\n }\n\n if ((this.disabled() || this.readonly()) && event.key.length === 1) {\n event.preventDefault();\n }\n }\n\n public handleSlotInput(index: number, target: HTMLInputElement | null): void {\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (this.disabled() || this.readonly()) {\n target.value = this.slotValue(this.resolveEditableIndex(index));\n return;\n }\n\n const chars = sanitizeTngOtpCharacters(target.value, this.type(), this.pattern());\n if (chars.length === 0) {\n const nextValue = removeTngOtpCharacter(this.normalizedValue(), this.resolveEditableIndex(index));\n this.commitValue(nextValue, this.resolveEditableIndex(index));\n return;\n }\n\n const previousValue = this.normalizedValue();\n const totalLength = this.length();\n const editableIndex = this.resolveEditableIndex(index);\n const wasCompleteBeforeInput = previousValue.length >= totalLength;\n const wasReplacingExistingCharacter = editableIndex < previousValue.length;\n const nextValue = applyTngOtpCharacters(previousValue, editableIndex, chars, totalLength);\n const nextFocus =\n wasCompleteBeforeInput || wasReplacingExistingCharacter\n ? Math.min(totalLength - 1, editableIndex + chars.length)\n : nextValue.length >= totalLength\n ? totalLength - 1\n : Math.min(totalLength - 1, Math.max(editableIndex + chars.length, nextValue.length));\n\n this.commitValue(nextValue, nextFocus);\n }\n\n public handleSlotPaste(index: number, event: ClipboardEvent): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const clipboardValue = event.clipboardData?.getData('text') ?? '';\n const chars = sanitizeTngOtpCharacters(clipboardValue, this.type(), this.pattern());\n if (chars.length === 0) {\n event.preventDefault();\n return;\n }\n\n event.preventDefault();\n const editableIndex = this.resolveEditableIndex(index);\n const nextValue = applyTngOtpCharacters(this.normalizedValue(), editableIndex, chars, this.length());\n const nextFocus =\n nextValue.length >= this.length()\n ? this.length() - 1\n : Math.min(this.length() - 1, nextValue.length);\n\n this.commitValue(nextValue, nextFocus);\n }\n\n private normalizedValue(): string {\n const chars = sanitizeTngOtpCharacters(normalizeTngOtpValue(this.value()), this.type(), this.pattern());\n return chars.slice(0, this.length()).join('');\n }\n\n private resolvedActiveIndex(): number {\n const current = this.activeIndex();\n if (typeof current === 'number' && Number.isFinite(current)) {\n return clampOtpIndex(current, this.length());\n }\n\n return resolveTngOtpEntryIndex(this.normalizedValue(), this.length());\n }\n\n private resolveEditableIndex(index: number): number {\n const safeIndex = clampOtpIndex(index, this.length());\n const currentValueLength = this.normalizedValue().length;\n\n if (currentValueLength >= this.length()) {\n return safeIndex;\n }\n\n return Math.min(safeIndex, currentValueLength);\n }\n\n private handleBackspace(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const nextState = resolveTngOtpBackspaceResult(this.normalizedValue(), index, this.length());\n if (nextState === null) {\n return;\n }\n\n this.commitValue(nextState.value, nextState.focusIndex);\n }\n\n private handleDelete(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n if (index >= this.normalizedValue().length) {\n return;\n }\n\n const nextValue = removeTngOtpCharacter(this.normalizedValue(), index);\n this.commitValue(nextValue, index);\n }\n\n private commitValue(nextValue: string, nextFocusIndex: number): void {\n const previousValue = this.normalizedValue();\n const normalized = clampTngOtpValue(\n sanitizeTngOtpCharacters(nextValue, this.type(), this.pattern()).join(''),\n this.length(),\n );\n const didChange = normalized !== previousValue;\n\n this.value.set(normalized);\n this.activeIndex.set(clampOtpIndex(nextFocusIndex, this.length()));\n\n if (didChange && resolveTngOtpState(this.length(), normalized) === 'complete') {\n this.complete.emit(normalized);\n }\n\n queueMicrotask(() => {\n this.syncSlotInputValues();\n this.focusSlot(this.resolvedActiveIndex(), this.selectOnFocus());\n });\n }\n\n private focusSlot(index: number, select: boolean): void {\n const safeIndex = clampOtpIndex(index, this.length());\n const slot = this.hostElement.querySelector(\n `[data-tng-otp-slot='${safeIndex}']`,\n ) as HTMLInputElement | null;\n\n if (!(slot instanceof HTMLInputElement)) {\n return;\n }\n\n slot.focus();\n if (select) {\n slot.select();\n }\n\n this.activeIndex.set(safeIndex);\n }\n\n private syncSlotInputValues(): void {\n const slotInputs = this.hostElement.querySelectorAll('[data-tng-otp-slot]');\n slotInputs.forEach((slotInput: Element) => {\n if (!(slotInput instanceof HTMLInputElement)) {\n return;\n }\n\n const slotIndex = Number(slotInput.getAttribute('data-tng-otp-slot'));\n if (!Number.isFinite(slotIndex)) {\n return;\n }\n\n slotInput.value = this.slotValue(slotIndex);\n });\n }\n}\n\n@Directive({\n selector: 'input[tngInputOtpSlot]',\n exportAs: 'tngInputOtpSlot',\n})\nexport class TngInputOtpSlot {\n private readonly otp = inject(TngInputOtp);\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n public readonly index = input<number, number | string>(0, {\n alias: 'tngInputOtpSlot',\n transform: (value: number | string): number =>\n Number.isFinite(typeof value === 'number' ? value : Number(value))\n ? Math.trunc(typeof value === 'number' ? value : Number(value))\n : 0,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-otp-slot' as const;\n\n @HostBinding('attr.data-tng-otp-slot')\n protected get dataIndexAttr(): string {\n return String(this.index());\n }\n\n @HostBinding('value')\n protected get valueProp(): string {\n return this.otp.slotValue(this.index());\n }\n\n @HostBinding('tabIndex')\n protected get tabIndexProp(): number {\n return this.otp.isSlotTabbable(this.index()) ? 0 : -1;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.otp.handleSlotFocus(this.index(), this.elementRef.nativeElement);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.otp.handleSlotKeydown(this.index(), event);\n }\n\n @HostListener('input')\n protected onInput(): void {\n this.otp.handleSlotInput(this.index(), this.elementRef.nativeElement);\n }\n\n @HostListener('paste', ['$event'])\n protected onPaste(event: ClipboardEvent): void {\n this.otp.handleSlotPaste(this.index(), event);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-input-otp.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/input-otp/tng-input-otp.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\n\nexport function normalizeTngOtpLength(value: number): number {\n if (!Number.isFinite(value)) {\n return 6;\n }\n\n const rounded = Math.trunc(value);\n if (rounded < 1) {\n return 1;\n }\n\n return rounded > 12 ? 12 : rounded;\n}\n\nexport type TngOtpCompletionState = 'complete' | 'empty' | 'partial';\n\nexport function normalizeTngOtpValue(value: unknown): string {\n if (typeof value !== 'string') {\n return '';\n }\n\n return value;\n}\n\nexport function clampTngOtpValue(value: string, length: number): string {\n return Array.from(value).slice(0, length).join('');\n}\n\nexport type TngInputOtpType = 'numeric' | 'alphanumeric' | 'custom';\n\nconst tngOtpDigitPattern = /^\\d$/;\nconst tngOtpAlphanumericPattern = /^[a-zA-Z0-9]$/;\n\nfunction toNonGlobalRegex(pattern: RegExp): RegExp {\n const flags = pattern.flags.replace(/g/g, '');\n return new RegExp(pattern.source, flags);\n}\n\nexport function sanitizeTngOtpCharacters(\n value: string,\n mode: TngInputOtpType,\n pattern: string | RegExp | null,\n): readonly string[] {\n const compiledPattern =\n mode !== 'custom'\n ? null\n : typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern === null\n ? null\n : toNonGlobalRegex(pattern);\n\n const acceptedChars: string[] = [];\n for (const char of Array.from(value)) {\n if (mode === 'numeric' && !tngOtpDigitPattern.test(char)) {\n continue;\n }\n\n if (mode === 'alphanumeric' && !tngOtpAlphanumericPattern.test(char)) {\n continue;\n }\n\n if (compiledPattern && !compiledPattern.test(char)) {\n continue;\n }\n\n acceptedChars.push(char);\n }\n\n return acceptedChars;\n}\n\nexport function toTngOtpSlots(length: number, value: string): readonly string[] {\n const safeLength = normalizeTngOtpLength(length);\n const slots = Array.from({ length: safeLength }, () => '');\n const chars = Array.from(clampTngOtpValue(value, safeLength));\n\n for (const [index, char] of chars.entries()) {\n if (index >= safeLength) {\n break;\n }\n\n slots[index] = char;\n }\n\n return slots;\n}\n\nexport function applyTngOtpCharacters(\n value: string,\n startIndex: number,\n characters: readonly string[],\n maxLength: number,\n): string {\n const safeLength = normalizeTngOtpLength(maxLength);\n const nextChars = Array.from(clampTngOtpValue(value, safeLength));\n const safeStart = Math.max(0, Math.min(startIndex, safeLength - 1));\n\n let cursor = nextChars.length < safeLength ? Math.min(safeStart, nextChars.length) : safeStart;\n for (const char of characters) {\n if (cursor >= safeLength) {\n break;\n }\n\n if (cursor < nextChars.length) {\n nextChars[cursor] = char;\n } else {\n nextChars.push(char);\n }\n\n cursor += 1;\n }\n\n return nextChars.slice(0, safeLength).join('');\n}\n\nexport function removeTngOtpCharacter(value: string, index: number): string {\n const chars = Array.from(value);\n if (index < 0 || index >= chars.length) {\n return value;\n }\n\n chars.splice(index, 1);\n return chars.join('');\n}\n\nexport function resolveTngOtpEntryIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length >= safeLength) {\n return safeLength - 1;\n }\n\n return safeValue.length;\n}\n\nexport function resolveTngOtpEndIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length === 0) {\n return safeLength - 1;\n }\n\n return Math.max(0, safeValue.length - 1);\n}\n\nfunction clampOtpIndex(index: number, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n if (!Number.isFinite(index)) {\n return 0;\n }\n\n if (index < 0) {\n return 0;\n }\n\n if (index >= safeLength) {\n return safeLength - 1;\n }\n\n return Math.trunc(index);\n}\n\nexport type TngOtpBackspaceResult = Readonly<{\n focusIndex: number;\n value: string;\n}>;\n\nexport function resolveTngOtpState(length: number, value: string): TngOtpCompletionState {\n const normalizedLength = normalizeTngOtpLength(length);\n const clampedValue = clampTngOtpValue(normalizeTngOtpValue(value), normalizedLength);\n\n if (clampedValue.length === 0) {\n return 'empty';\n }\n\n return clampedValue.length >= normalizedLength ? 'complete' : 'partial';\n}\n\nexport function resolveTngOtpBackspaceResult(\n value: string,\n index: number,\n length: number,\n): TngOtpBackspaceResult | null {\n const normalizedLength = normalizeTngOtpLength(length);\n const normalizedValue = clampTngOtpValue(normalizeTngOtpValue(value), normalizedLength);\n if (normalizedValue.length === 0) {\n return null;\n }\n\n const boundedIndex = Number.isFinite(index)\n ? Math.max(0, Math.min(Math.trunc(index), normalizedLength - 1))\n : 0;\n const nextChars = Array.from(normalizedValue);\n\n if (boundedIndex < normalizedValue.length) {\n nextChars.splice(boundedIndex, 1);\n return {\n focusIndex: Math.max(0, boundedIndex - 1),\n value: nextChars.join(''),\n };\n }\n\n const previousIndex = Math.max(0, normalizedValue.length - 1);\n nextChars.splice(previousIndex, 1);\n return {\n focusIndex: Math.max(0, previousIndex),\n value: nextChars.join(''),\n };\n}\n\n@Directive({\n selector: '[tngInputOtp]',\n exportAs: 'tngInputOtp',\n})\nexport class TngInputOtp {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n public readonly length = input<number, number | string>(6, {\n transform: (value: number | string): number =>\n normalizeTngOtpLength(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = model<string>('');\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly readonly = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly focused = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly focusVisible = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly activeIndex = model<number | null>(null);\n public readonly type = input<TngInputOtpType>('numeric');\n public readonly pattern = input<string | RegExp | null>(null);\n public readonly selectOnFocus = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n public readonly complete = output<string>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-otp' as const;\n\n @HostBinding('attr.role')\n protected readonly roleAttr = 'group' as const;\n\n @HostBinding('attr.data-empty')\n protected get dataEmptyAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'empty' ? '' : null;\n }\n\n @HostBinding('attr.data-partial')\n protected get dataPartialAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'partial' ? '' : null;\n }\n\n @HostBinding('attr.data-complete')\n protected get dataCompleteAttr(): '' | null {\n return resolveTngOtpState(this.length(), this.normalizedValue()) === 'complete' ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-readonly')\n protected get dataReadonlyAttr(): '' | null {\n return this.readonly() ? '' : null;\n }\n\n @HostBinding('attr.data-required')\n protected get dataRequiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalidAttr(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused() ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible() ? '' : null;\n }\n\n @HostBinding('attr.data-active')\n protected get dataActiveAttr(): string | null {\n const index = this.activeIndex();\n if (typeof index !== 'number' || !Number.isFinite(index)) {\n return null;\n }\n\n if (index < 0 || index >= this.length()) {\n return null;\n }\n\n return String(clampOtpIndex(index, this.length()));\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n this.handleGroupFocusOut(event);\n }\n\n public slotValue(index: number): string {\n const slot = toTngOtpSlots(this.length(), this.normalizedValue())[index];\n return slot ?? '';\n }\n\n public isSlotTabbable(index: number): boolean {\n return this.resolvedActiveIndex() === index;\n }\n\n public handleSlotFocus(index: number, target: HTMLInputElement | null): void {\n const nextIndex = this.resolveEditableIndex(index);\n this.activeIndex.set(nextIndex);\n\n if (this.selectOnFocus() && target instanceof HTMLInputElement) {\n target.select();\n }\n }\n\n public handleSlotKeydown(index: number, event: KeyboardEvent): void {\n const editableIndex = this.resolveEditableIndex(index);\n const total = this.length();\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.focusSlot(Math.max(0, editableIndex - 1), true);\n return;\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n this.focusSlot(Math.min(total - 1, editableIndex + 1), true);\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n this.focusSlot(0, true);\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n this.focusSlot(resolveTngOtpEndIndex(this.normalizedValue(), total), true);\n return;\n }\n\n if (event.key === 'Backspace') {\n event.preventDefault();\n this.handleBackspace(editableIndex);\n return;\n }\n\n if (event.key === 'Delete') {\n event.preventDefault();\n this.handleDelete(editableIndex);\n return;\n }\n\n if ((this.disabled() || this.readonly()) && event.key.length === 1) {\n event.preventDefault();\n }\n }\n\n public handleGroupFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget;\n if (nextTarget instanceof Node && this.hostElement.contains(nextTarget)) {\n return;\n }\n\n this.activeIndex.set(null);\n }\n\n public handleSlotInput(index: number, target: HTMLInputElement | null): void {\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (this.disabled() || this.readonly()) {\n target.value = this.slotValue(this.resolveEditableIndex(index));\n return;\n }\n\n const chars = sanitizeTngOtpCharacters(target.value, this.type(), this.pattern());\n if (chars.length === 0) {\n const nextValue = removeTngOtpCharacter(this.normalizedValue(), this.resolveEditableIndex(index));\n this.commitValue(nextValue, this.resolveEditableIndex(index));\n return;\n }\n\n const previousValue = this.normalizedValue();\n const totalLength = this.length();\n const editableIndex = this.resolveEditableIndex(index);\n const wasCompleteBeforeInput = previousValue.length >= totalLength;\n const wasReplacingExistingCharacter = editableIndex < previousValue.length;\n const nextValue = applyTngOtpCharacters(previousValue, editableIndex, chars, totalLength);\n const nextFocus =\n wasCompleteBeforeInput || wasReplacingExistingCharacter\n ? Math.min(totalLength - 1, editableIndex + chars.length)\n : nextValue.length >= totalLength\n ? totalLength - 1\n : Math.min(totalLength - 1, Math.max(editableIndex + chars.length, nextValue.length));\n\n this.commitValue(nextValue, nextFocus);\n }\n\n public handleSlotPaste(index: number, event: ClipboardEvent): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const clipboardValue = event.clipboardData?.getData('text') ?? '';\n const chars = sanitizeTngOtpCharacters(clipboardValue, this.type(), this.pattern());\n if (chars.length === 0) {\n event.preventDefault();\n return;\n }\n\n event.preventDefault();\n const editableIndex = this.resolveEditableIndex(index);\n const nextValue = applyTngOtpCharacters(this.normalizedValue(), editableIndex, chars, this.length());\n const nextFocus =\n nextValue.length >= this.length()\n ? this.length() - 1\n : Math.min(this.length() - 1, nextValue.length);\n\n this.commitValue(nextValue, nextFocus);\n }\n\n private normalizedValue(): string {\n const chars = sanitizeTngOtpCharacters(normalizeTngOtpValue(this.value()), this.type(), this.pattern());\n return chars.slice(0, this.length()).join('');\n }\n\n private resolvedActiveIndex(): number {\n const current = this.activeIndex();\n if (typeof current === 'number' && Number.isFinite(current)) {\n return clampOtpIndex(current, this.length());\n }\n\n return resolveTngOtpEntryIndex(this.normalizedValue(), this.length());\n }\n\n private resolveEditableIndex(index: number): number {\n const safeIndex = clampOtpIndex(index, this.length());\n const currentValueLength = this.normalizedValue().length;\n\n if (currentValueLength >= this.length()) {\n return safeIndex;\n }\n\n return Math.min(safeIndex, currentValueLength);\n }\n\n private handleBackspace(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const nextState = resolveTngOtpBackspaceResult(this.normalizedValue(), index, this.length());\n if (nextState === null) {\n return;\n }\n\n this.commitValue(nextState.value, nextState.focusIndex);\n }\n\n private handleDelete(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n if (index >= this.normalizedValue().length) {\n return;\n }\n\n const nextValue = removeTngOtpCharacter(this.normalizedValue(), index);\n this.commitValue(nextValue, index);\n }\n\n private commitValue(nextValue: string, nextFocusIndex: number): void {\n const previousValue = this.normalizedValue();\n const normalized = clampTngOtpValue(\n sanitizeTngOtpCharacters(nextValue, this.type(), this.pattern()).join(''),\n this.length(),\n );\n const didChange = normalized !== previousValue;\n\n this.value.set(normalized);\n this.activeIndex.set(clampOtpIndex(nextFocusIndex, this.length()));\n\n if (didChange && resolveTngOtpState(this.length(), normalized) === 'complete') {\n this.complete.emit(normalized);\n }\n\n queueMicrotask(() => {\n this.syncSlotInputValues();\n this.focusSlot(this.resolvedActiveIndex(), this.selectOnFocus());\n });\n }\n\n private focusSlot(index: number, select: boolean): void {\n const safeIndex = clampOtpIndex(index, this.length());\n const slot = this.hostElement.querySelector(\n `[data-tng-otp-slot='${safeIndex}']`,\n ) as HTMLInputElement | null;\n\n if (!(slot instanceof HTMLInputElement)) {\n return;\n }\n\n slot.focus();\n if (select) {\n slot.select();\n }\n\n this.activeIndex.set(safeIndex);\n }\n\n private syncSlotInputValues(): void {\n const slotInputs = this.hostElement.querySelectorAll('[data-tng-otp-slot]');\n slotInputs.forEach((slotInput: Element) => {\n if (!(slotInput instanceof HTMLInputElement)) {\n return;\n }\n\n const slotIndex = Number(slotInput.getAttribute('data-tng-otp-slot'));\n if (!Number.isFinite(slotIndex)) {\n return;\n }\n\n slotInput.value = this.slotValue(slotIndex);\n });\n }\n}\n\n@Directive({\n selector: 'input[tngInputOtpSlot]',\n exportAs: 'tngInputOtpSlot',\n})\nexport class TngInputOtpSlot {\n private readonly otp = inject(TngInputOtp);\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n public readonly index = input<number, number | string>(0, {\n alias: 'tngInputOtpSlot',\n transform: (value: number | string): number =>\n Number.isFinite(typeof value === 'number' ? value : Number(value))\n ? Math.trunc(typeof value === 'number' ? value : Number(value))\n : 0,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-otp-slot' as const;\n\n @HostBinding('attr.data-tng-otp-slot')\n protected get dataIndexAttr(): string {\n return String(this.index());\n }\n\n @HostBinding('value')\n protected get valueProp(): string {\n return this.otp.slotValue(this.index());\n }\n\n @HostBinding('tabIndex')\n protected get tabIndexProp(): number {\n return this.otp.isSlotTabbable(this.index()) ? 0 : -1;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.otp.handleSlotFocus(this.index(), this.elementRef.nativeElement);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.otp.handleSlotKeydown(this.index(), event);\n }\n\n @HostListener('input')\n protected onInput(): void {\n this.otp.handleSlotInput(this.index(), this.elementRef.nativeElement);\n }\n\n @HostListener('paste', ['$event'])\n protected onPaste(event: ClipboardEvent): void {\n this.otp.handleSlotPaste(this.index(), event);\n }\n}\n"]}
|