@tailng-ui/primitives 0.14.0 → 0.15.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.
Files changed (52) hide show
  1. package/package.json +3 -2
  2. package/src/index.d.ts +1 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +1 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
  7. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
  8. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
  9. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
  10. package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
  11. package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
  12. package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
  13. package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
  14. package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
  15. package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
  16. package/src/lib/form/datepicker/datepicker.state.js +97 -0
  17. package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
  18. package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
  19. package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
  20. package/src/lib/form/datepicker/datepicker.types.js +1 -0
  21. package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
  22. package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
  23. package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
  24. package/src/lib/form/datepicker/datepicker.utils.js +238 -0
  25. package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
  26. package/src/lib/form/datepicker/index.d.ts +3 -0
  27. package/src/lib/form/datepicker/index.d.ts.map +1 -0
  28. package/src/lib/form/datepicker/index.js +3 -0
  29. package/src/lib/form/datepicker/index.js.map +1 -0
  30. package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
  31. package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
  32. package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
  33. package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
  34. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
  35. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
  36. package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
  37. package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
  38. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
  39. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
  40. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
  41. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
  42. package/src/lib/layout/grid/tng-grid.d.ts +144 -2
  43. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  44. package/src/lib/layout/grid/tng-grid.js +669 -2
  45. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  46. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  47. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
  48. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  49. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
  50. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  51. package/src/lib/navigation/tabs/tng-tabs.js +77 -35
  52. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
@@ -0,0 +1,269 @@
1
+ import type { TngOverlayRuntime } from '@tailng-ui/cdk';
2
+ export type TngCalendarView = 'day' | 'month' | 'year';
3
+ export type TngDatepickerSelectionMode = 'single' | 'range' | 'multiple';
4
+ export type TngDatepickerDirection = 'ltr' | 'rtl';
5
+ export type TngDatepickerFocusStrategy = 'active-descendant' | 'roving';
6
+ export type TngDatepickerFocusedSection = 'day' | 'month' | 'year';
7
+ export type TngDatepickerOverlayMode = 'overlay' | 'push' | 'side';
8
+ export type TngDatepickerPosition = 'center' | 'end' | 'start';
9
+ export type TngDatepickerCloseReason = 'escape' | 'outside' | 'programmatic' | 'select';
10
+ export type TngDateFormatToken = 'input' | 'label' | 'month-year' | 'month-long' | 'month-short' | 'weekday-short' | 'weekday-narrow' | 'day-number' | 'year-label';
11
+ export type TngWeekdayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;
12
+ export type TngDateInputValue<TDate> = Date | TDate | string | null | undefined;
13
+ export type TngDateRange<TDate> = Readonly<{
14
+ end: TDate | null;
15
+ start: TDate | null;
16
+ }>;
17
+ export type TngDateRangeInput<TDate> = Readonly<{
18
+ end: TngDateInputValue<TDate>;
19
+ start: TngDateInputValue<TDate>;
20
+ }>;
21
+ export type TngDateValue<TDate> = TDate | TngDateRange<TDate> | readonly TDate[] | null;
22
+ export type TngDateSelectionInput<TDate> = TngDateInputValue<TDate> | TngDateRangeInput<TDate> | readonly TngDateInputValue<TDate>[];
23
+ export type TngDatepickerTrigger = 'keyboard' | 'pointer' | 'programmatic' | 'text-input';
24
+ type TngDatepickerKnownAttributes = {
25
+ id?: string;
26
+ };
27
+ export type TngDatepickerAttributeMap = Readonly<Record<string, string> & TngDatepickerKnownAttributes>;
28
+ export type TngDateAdapter<TDate> = Readonly<{
29
+ addDays: (date: TDate, amount: number) => TDate;
30
+ addMonths: (date: TDate, amount: number) => TDate;
31
+ addYears: (date: TDate, amount: number) => TDate;
32
+ compare: (left: TDate, right: TDate) => -1 | 0 | 1;
33
+ createDate: (year: number, month: number, day: number) => TDate;
34
+ deserialize?: (value: unknown, locale?: string) => TDate | null;
35
+ endOfMonth: (date: TDate) => TDate;
36
+ format: (date: TDate, format: TngDateFormatToken | string, locale?: string) => string;
37
+ getDate: (date: TDate) => number;
38
+ getDay: (date: TDate) => number;
39
+ getMonth: (date: TDate) => number;
40
+ getYear: (date: TDate) => number;
41
+ isValid: (date: TDate) => boolean;
42
+ parse: (text: string, locale?: string) => TDate | null;
43
+ startOfMonth: (date: TDate) => TDate;
44
+ startOfWeek: (date: TDate, weekStartsOn: TngWeekdayIndex) => TDate;
45
+ today: () => TDate;
46
+ }>;
47
+ export type TngDateCell<TDate> = Readonly<{
48
+ active: boolean;
49
+ colIndex: number;
50
+ date: TDate;
51
+ disabled: boolean;
52
+ focusVisible: boolean;
53
+ hidden: boolean;
54
+ id: string;
55
+ inMonth: boolean;
56
+ inRange: boolean;
57
+ label: string;
58
+ rangeEnd: boolean;
59
+ rangeStart: boolean;
60
+ rowIndex: number;
61
+ selected: boolean;
62
+ tabindex: -1 | 0;
63
+ today: boolean;
64
+ }>;
65
+ export type TngMonthOption<TDate> = Readonly<{
66
+ active: boolean;
67
+ date: TDate;
68
+ disabled: boolean;
69
+ focusVisible: boolean;
70
+ id: string;
71
+ index: number;
72
+ label: string;
73
+ selected: boolean;
74
+ tabindex: -1 | 0;
75
+ }>;
76
+ export type TngYearOption<TDate> = Readonly<{
77
+ active: boolean;
78
+ date: TDate;
79
+ disabled: boolean;
80
+ focusVisible: boolean;
81
+ id: string;
82
+ label: string;
83
+ selected: boolean;
84
+ tabindex: -1 | 0;
85
+ year: number;
86
+ }>;
87
+ export type TngDatepickerLayout = Readonly<{
88
+ mode: TngDatepickerOverlayMode;
89
+ offsetX: number;
90
+ width: number;
91
+ }>;
92
+ export type TngDatepickerState<TDate> = Readonly<{
93
+ activeDate: TDate;
94
+ disabled: boolean;
95
+ focusedSection: TngDatepickerFocusedSection;
96
+ inputText: string;
97
+ lastCloseReason: TngDatepickerCloseReason | null;
98
+ open: boolean;
99
+ validationError: string | null;
100
+ value: TngDateValue<TDate>;
101
+ view: TngCalendarView;
102
+ visibleMonth: TDate;
103
+ }>;
104
+ export type TngDatepickerOutputs<TDate> = Readonly<{
105
+ activeDate: TDate;
106
+ cells: readonly TngDateCell<TDate>[];
107
+ focusedSection: TngDatepickerFocusedSection;
108
+ getCellAttributes: (cellOrDate: Readonly<TngDateCell<TDate>> | TDate) => TngDatepickerAttributeMap;
109
+ getGridAttributes: () => TngDatepickerAttributeMap;
110
+ getHostAttributes: () => TngDatepickerAttributeMap;
111
+ getMonthAttributes: (monthOrOption: number | Readonly<TngMonthOption<TDate>>) => TngDatepickerAttributeMap;
112
+ getOverlayAttributes: () => TngDatepickerAttributeMap;
113
+ getTriggerAttributes: () => TngDatepickerAttributeMap;
114
+ getYearAttributes: (yearOrOption: number | Readonly<TngYearOption<TDate>>) => TngDatepickerAttributeMap;
115
+ inputText: string;
116
+ labelMonthYear: string;
117
+ layout: TngDatepickerLayout;
118
+ monthOptions: readonly TngMonthOption<TDate>[];
119
+ open: boolean;
120
+ validationError: string | null;
121
+ value: TngDateValue<TDate>;
122
+ view: TngCalendarView;
123
+ visibleMonth: TDate;
124
+ weekdayLabels: readonly string[];
125
+ yearOptions: readonly TngYearOption<TDate>[];
126
+ }>;
127
+ export type TngDatepickerEvent<TDate> = Readonly<{
128
+ next: boolean;
129
+ previous: boolean;
130
+ type: 'opened';
131
+ }> | Readonly<{
132
+ previous: boolean;
133
+ type: 'openStart';
134
+ }> | Readonly<{
135
+ reason: TngDatepickerCloseReason;
136
+ type: 'closeStart';
137
+ }> | Readonly<{
138
+ reason: TngDatepickerCloseReason;
139
+ type: 'closed';
140
+ }> | Readonly<{
141
+ activeDate: TDate;
142
+ previousActiveDate: TDate;
143
+ trigger: TngDatepickerTrigger;
144
+ type: 'activeChange';
145
+ }> | Readonly<{
146
+ trigger: TngDatepickerTrigger;
147
+ type: 'valueChange';
148
+ value: TngDateValue<TDate>;
149
+ previousValue: TngDateValue<TDate>;
150
+ }> | Readonly<{
151
+ previousView: TngCalendarView;
152
+ type: 'viewChange';
153
+ view: TngCalendarView;
154
+ }> | Readonly<{
155
+ previousMonth: TDate;
156
+ type: 'monthChange';
157
+ visibleMonth: TDate;
158
+ }> | Readonly<{
159
+ previousYear: number;
160
+ type: 'yearChange';
161
+ year: number;
162
+ }>;
163
+ export type TngDatepickerListener<TDate> = (event: TngDatepickerEvent<TDate>) => void;
164
+ export type TngDatepickerConfig<TDate> = Readonly<{
165
+ adapter?: TngDateAdapter<TDate>;
166
+ allowDeselect?: boolean;
167
+ allowManualInput?: boolean;
168
+ ariaDescribedBy?: string | null;
169
+ ariaLabel?: string | null;
170
+ ariaLabelledBy?: string | null;
171
+ autoCommitView?: boolean;
172
+ closeOnEscape?: boolean;
173
+ closeOnOutsideClick?: boolean;
174
+ closeOnSelect?: boolean;
175
+ closeOthersOnOpen?: boolean;
176
+ defaultOpen?: boolean;
177
+ direction?: TngDatepickerDirection;
178
+ disableDate?: (date: TDate) => boolean;
179
+ disabled?: boolean;
180
+ enableMultipleRangeSelection?: boolean;
181
+ enableRangeSelection?: boolean;
182
+ enableTypeahead?: boolean;
183
+ fixedWeeks?: boolean;
184
+ focusStrategy?: TngDatepickerFocusStrategy;
185
+ id?: string;
186
+ initialView?: TngCalendarView;
187
+ locale?: string;
188
+ max?: TngDateInputValue<TDate>;
189
+ maxDate?: TngDateInputValue<TDate>;
190
+ maxSelections?: number | null;
191
+ min?: TngDateInputValue<TDate>;
192
+ minDate?: TngDateInputValue<TDate>;
193
+ onPartialInputCommit?: boolean;
194
+ overlayMode?: TngDatepickerOverlayMode;
195
+ overlayRuntime?: TngOverlayRuntime | null;
196
+ overlaySize?: number;
197
+ ownerDocument?: Document | null;
198
+ position?: TngDatepickerPosition;
199
+ preserveViewOnOpenClose?: boolean;
200
+ restoreFocus?: boolean;
201
+ selectionMode?: TngDatepickerSelectionMode;
202
+ showOutsideDays?: boolean;
203
+ skipDisabled?: boolean;
204
+ today?: TngDateInputValue<TDate>;
205
+ trapFocus?: boolean;
206
+ value?: TngDateSelectionInput<TDate>;
207
+ weekStartsOn?: TngWeekdayIndex;
208
+ yearPageSize?: number;
209
+ }>;
210
+ export type TngDatepickerStatePatch<TDate> = Readonly<{
211
+ activeDate?: TngDateInputValue<TDate>;
212
+ disabled?: boolean;
213
+ inputText?: string;
214
+ value?: TngDateSelectionInput<TDate>;
215
+ view?: TngCalendarView;
216
+ visibleMonth?: TngDateInputValue<TDate>;
217
+ }>;
218
+ export type TngDatepickerController<TDate> = Readonly<{
219
+ clear: () => void;
220
+ close: (reason?: TngDatepickerCloseReason) => void;
221
+ commitInputText: () => boolean;
222
+ destroy: () => void;
223
+ formatDate: (date: TDate, format?: TngDateFormatToken | string) => string;
224
+ getOutputs: () => TngDatepickerOutputs<TDate>;
225
+ getState: () => TngDatepickerState<TDate>;
226
+ goToNextMonth: () => void;
227
+ goToPrevMonth: () => void;
228
+ handleCellClick: (date: TngDateInputValue<TDate>, options?: Readonly<{
229
+ shiftKey?: boolean;
230
+ }>) => void;
231
+ handleCellPointerEnter: (date: TngDateInputValue<TDate>) => void;
232
+ handleGridKeyDown: (event: Readonly<Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>>) => void;
233
+ handleMonthGridKeyDown: (event: Readonly<Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>>) => void;
234
+ handleOverlayKeyDown: (event: Readonly<Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>>) => void;
235
+ handleTriggerKeyDown: (event: Readonly<Pick<KeyboardEvent, 'key' | 'preventDefault'>>) => void;
236
+ handleYearGridKeyDown: (event: Readonly<Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>>) => void;
237
+ nextMonth: () => void;
238
+ nextYear: () => void;
239
+ open: () => void;
240
+ parseInputText: (text: string) => TDate | null;
241
+ prevMonth: () => void;
242
+ prevYear: () => void;
243
+ registerOverlay: (element: HTMLElement | null) => void;
244
+ registerTrigger: (element: HTMLElement | null) => void;
245
+ selectDate: (date: TngDateInputValue<TDate>, options?: Readonly<{
246
+ shiftKey?: boolean;
247
+ trigger?: TngDatepickerTrigger;
248
+ }>) => void;
249
+ selectMonth: (monthIndex: number) => void;
250
+ selectYear: (year: number) => void;
251
+ setActiveDate: (date: TngDateInputValue<TDate>, trigger?: TngDatepickerTrigger) => void;
252
+ setConfig: (config: Partial<TngDatepickerConfig<TDate>>) => void;
253
+ setDisabled: (disabled: boolean) => void;
254
+ setFocusedSection: (section: TngDatepickerFocusedSection) => void;
255
+ setInputText: (text: string) => void;
256
+ setOpen: (open: boolean) => void;
257
+ setState: (patch: TngDatepickerStatePatch<TDate>) => void;
258
+ setValue: (value: TngDateSelectionInput<TDate>) => void;
259
+ setView: (view: TngCalendarView) => void;
260
+ setVisibleMonth: (valueOrYear: TngDateInputValue<TDate> | number, month?: number) => void;
261
+ setVisibleYear: (year: number) => void;
262
+ showDaysPanel: () => void;
263
+ showMonthsPanel: () => void;
264
+ showYearsPanel: () => void;
265
+ subscribe: (listener: TngDatepickerListener<TDate>) => () => void;
266
+ toggleOpen: () => void;
267
+ }>;
268
+ export {};
269
+ //# sourceMappingURL=datepicker.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.types.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=datepicker.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.types.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TngOverlayRuntime } from '@tailng-ui/cdk';\n\nexport type TngCalendarView = 'day' | 'month' | 'year';\nexport type TngDatepickerSelectionMode = 'single' | 'range' | 'multiple';\nexport type TngDatepickerDirection = 'ltr' | 'rtl';\nexport type TngDatepickerFocusStrategy = 'active-descendant' | 'roving';\nexport type TngDatepickerFocusedSection = 'day' | 'month' | 'year';\nexport type TngDatepickerOverlayMode = 'overlay' | 'push' | 'side';\nexport type TngDatepickerPosition = 'center' | 'end' | 'start';\nexport type TngDatepickerCloseReason = 'escape' | 'outside' | 'programmatic' | 'select';\nexport type TngDateFormatToken =\n | 'input'\n | 'label'\n | 'month-year'\n | 'month-long'\n | 'month-short'\n | 'weekday-short'\n | 'weekday-narrow'\n | 'day-number'\n | 'year-label';\nexport type TngWeekdayIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type TngDateInputValue<TDate> = Date | TDate | string | null | undefined;\n\nexport type TngDateRange<TDate> = Readonly<{\n end: TDate | null;\n start: TDate | null;\n}>;\n\nexport type TngDateRangeInput<TDate> = Readonly<{\n end: TngDateInputValue<TDate>;\n start: TngDateInputValue<TDate>;\n}>;\n\nexport type TngDateValue<TDate> = TDate | TngDateRange<TDate> | readonly TDate[] | null;\nexport type TngDateSelectionInput<TDate> =\n | TngDateInputValue<TDate>\n | TngDateRangeInput<TDate>\n | readonly TngDateInputValue<TDate>[];\n\nexport type TngDatepickerTrigger =\n | 'keyboard'\n | 'pointer'\n | 'programmatic'\n | 'text-input';\n\n type TngDatepickerKnownAttributes = {\n id?: string;\n };\n \n export type TngDatepickerAttributeMap = Readonly<\n Record<string, string> & TngDatepickerKnownAttributes\n >;\n\nexport type TngDateAdapter<TDate> = Readonly<{\n addDays: (date: TDate, amount: number) => TDate;\n addMonths: (date: TDate, amount: number) => TDate;\n addYears: (date: TDate, amount: number) => TDate;\n compare: (left: TDate, right: TDate) => -1 | 0 | 1;\n createDate: (year: number, month: number, day: number) => TDate;\n deserialize?: (value: unknown, locale?: string) => TDate | null;\n endOfMonth: (date: TDate) => TDate;\n format: (date: TDate, format: TngDateFormatToken | string, locale?: string) => string;\n getDate: (date: TDate) => number;\n getDay: (date: TDate) => number;\n getMonth: (date: TDate) => number;\n getYear: (date: TDate) => number;\n isValid: (date: TDate) => boolean;\n parse: (text: string, locale?: string) => TDate | null;\n startOfMonth: (date: TDate) => TDate;\n startOfWeek: (date: TDate, weekStartsOn: TngWeekdayIndex) => TDate;\n today: () => TDate;\n}>;\n\nexport type TngDateCell<TDate> = Readonly<{\n active: boolean;\n colIndex: number;\n date: TDate;\n disabled: boolean;\n focusVisible: boolean;\n hidden: boolean;\n id: string;\n inMonth: boolean;\n inRange: boolean;\n label: string;\n rangeEnd: boolean;\n rangeStart: boolean;\n rowIndex: number;\n selected: boolean;\n tabindex: -1 | 0;\n today: boolean;\n}>;\n\nexport type TngMonthOption<TDate> = Readonly<{\n active: boolean;\n date: TDate;\n disabled: boolean;\n focusVisible: boolean;\n id: string;\n index: number;\n label: string;\n selected: boolean;\n tabindex: -1 | 0;\n}>;\n\nexport type TngYearOption<TDate> = Readonly<{\n active: boolean;\n date: TDate;\n disabled: boolean;\n focusVisible: boolean;\n id: string;\n label: string;\n selected: boolean;\n tabindex: -1 | 0;\n year: number;\n}>;\n\nexport type TngDatepickerLayout = Readonly<{\n mode: TngDatepickerOverlayMode;\n offsetX: number;\n width: number;\n}>;\n\nexport type TngDatepickerState<TDate> = Readonly<{\n activeDate: TDate;\n disabled: boolean;\n focusedSection: TngDatepickerFocusedSection;\n inputText: string;\n lastCloseReason: TngDatepickerCloseReason | null;\n open: boolean;\n validationError: string | null;\n value: TngDateValue<TDate>;\n view: TngCalendarView;\n visibleMonth: TDate;\n}>;\n\nexport type TngDatepickerOutputs<TDate> = Readonly<{\n activeDate: TDate;\n cells: readonly TngDateCell<TDate>[];\n focusedSection: TngDatepickerFocusedSection;\n getCellAttributes: (cellOrDate: Readonly<TngDateCell<TDate>> | TDate) => TngDatepickerAttributeMap;\n getGridAttributes: () => TngDatepickerAttributeMap;\n getHostAttributes: () => TngDatepickerAttributeMap;\n getMonthAttributes: (monthOrOption: number | Readonly<TngMonthOption<TDate>>) => TngDatepickerAttributeMap;\n getOverlayAttributes: () => TngDatepickerAttributeMap;\n getTriggerAttributes: () => TngDatepickerAttributeMap;\n getYearAttributes: (yearOrOption: number | Readonly<TngYearOption<TDate>>) => TngDatepickerAttributeMap;\n inputText: string;\n labelMonthYear: string;\n layout: TngDatepickerLayout;\n monthOptions: readonly TngMonthOption<TDate>[];\n open: boolean;\n validationError: string | null;\n value: TngDateValue<TDate>;\n view: TngCalendarView;\n visibleMonth: TDate;\n weekdayLabels: readonly string[];\n yearOptions: readonly TngYearOption<TDate>[];\n}>;\n\nexport type TngDatepickerEvent<TDate> =\n | Readonly<{\n next: boolean;\n previous: boolean;\n type: 'opened';\n }>\n | Readonly<{\n previous: boolean;\n type: 'openStart';\n }>\n | Readonly<{\n reason: TngDatepickerCloseReason;\n type: 'closeStart';\n }>\n | Readonly<{\n reason: TngDatepickerCloseReason;\n type: 'closed';\n }>\n | Readonly<{\n activeDate: TDate;\n previousActiveDate: TDate;\n trigger: TngDatepickerTrigger;\n type: 'activeChange';\n }>\n | Readonly<{\n trigger: TngDatepickerTrigger;\n type: 'valueChange';\n value: TngDateValue<TDate>;\n previousValue: TngDateValue<TDate>;\n }>\n | Readonly<{\n previousView: TngCalendarView;\n type: 'viewChange';\n view: TngCalendarView;\n }>\n | Readonly<{\n previousMonth: TDate;\n type: 'monthChange';\n visibleMonth: TDate;\n }>\n | Readonly<{\n previousYear: number;\n type: 'yearChange';\n year: number;\n }>;\n\nexport type TngDatepickerListener<TDate> = (event: TngDatepickerEvent<TDate>) => void;\n\nexport type TngDatepickerConfig<TDate> = Readonly<{\n adapter?: TngDateAdapter<TDate>;\n allowDeselect?: boolean;\n allowManualInput?: boolean;\n ariaDescribedBy?: string | null;\n ariaLabel?: string | null;\n ariaLabelledBy?: string | null;\n autoCommitView?: boolean;\n closeOnEscape?: boolean;\n closeOnOutsideClick?: boolean;\n closeOnSelect?: boolean;\n closeOthersOnOpen?: boolean;\n defaultOpen?: boolean;\n direction?: TngDatepickerDirection;\n disableDate?: (date: TDate) => boolean;\n disabled?: boolean;\n enableMultipleRangeSelection?: boolean;\n enableRangeSelection?: boolean;\n enableTypeahead?: boolean;\n fixedWeeks?: boolean;\n focusStrategy?: TngDatepickerFocusStrategy;\n id?: string;\n initialView?: TngCalendarView;\n locale?: string;\n max?: TngDateInputValue<TDate>;\n maxDate?: TngDateInputValue<TDate>;\n maxSelections?: number | null;\n min?: TngDateInputValue<TDate>;\n minDate?: TngDateInputValue<TDate>;\n onPartialInputCommit?: boolean;\n overlayMode?: TngDatepickerOverlayMode;\n overlayRuntime?: TngOverlayRuntime | null;\n overlaySize?: number;\n ownerDocument?: Document | null;\n position?: TngDatepickerPosition;\n preserveViewOnOpenClose?: boolean;\n restoreFocus?: boolean;\n selectionMode?: TngDatepickerSelectionMode;\n showOutsideDays?: boolean;\n skipDisabled?: boolean;\n today?: TngDateInputValue<TDate>;\n trapFocus?: boolean;\n value?: TngDateSelectionInput<TDate>;\n weekStartsOn?: TngWeekdayIndex;\n yearPageSize?: number;\n}>;\n\nexport type TngDatepickerStatePatch<TDate> = Readonly<{\n activeDate?: TngDateInputValue<TDate>;\n disabled?: boolean;\n inputText?: string;\n value?: TngDateSelectionInput<TDate>;\n view?: TngCalendarView;\n visibleMonth?: TngDateInputValue<TDate>;\n}>;\n\nexport type TngDatepickerController<TDate> = Readonly<{\n clear: () => void;\n close: (reason?: TngDatepickerCloseReason) => void;\n commitInputText: () => boolean;\n destroy: () => void;\n formatDate: (date: TDate, format?: TngDateFormatToken | string) => string;\n getOutputs: () => TngDatepickerOutputs<TDate>;\n getState: () => TngDatepickerState<TDate>;\n goToNextMonth: () => void;\n goToPrevMonth: () => void;\n handleCellClick: (\n date: TngDateInputValue<TDate>,\n options?: Readonly<{ shiftKey?: boolean }>,\n ) => void;\n handleCellPointerEnter: (date: TngDateInputValue<TDate>) => void;\n handleGridKeyDown: (\n event: Readonly<\n Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>\n >,\n ) => void;\n handleMonthGridKeyDown: (\n event: Readonly<\n Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>\n >,\n ) => void;\n handleOverlayKeyDown: (\n event: Readonly<\n Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>\n >,\n ) => void;\n handleTriggerKeyDown: (\n event: Readonly<Pick<KeyboardEvent, 'key' | 'preventDefault'>>,\n ) => void;\n handleYearGridKeyDown: (\n event: Readonly<\n Pick<KeyboardEvent, 'altKey' | 'ctrlKey' | 'key' | 'metaKey' | 'preventDefault' | 'shiftKey'>\n >,\n ) => void;\n nextMonth: () => void;\n nextYear: () => void;\n open: () => void;\n parseInputText: (text: string) => TDate | null;\n prevMonth: () => void;\n prevYear: () => void;\n registerOverlay: (element: HTMLElement | null) => void;\n registerTrigger: (element: HTMLElement | null) => void;\n selectDate: (\n date: TngDateInputValue<TDate>,\n options?: Readonly<{ shiftKey?: boolean; trigger?: TngDatepickerTrigger }>,\n ) => void;\n selectMonth: (monthIndex: number) => void;\n selectYear: (year: number) => void;\n setActiveDate: (date: TngDateInputValue<TDate>, trigger?: TngDatepickerTrigger) => void;\n setConfig: (config: Partial<TngDatepickerConfig<TDate>>) => void;\n setDisabled: (disabled: boolean) => void;\n setFocusedSection: (section: TngDatepickerFocusedSection) => void;\n setInputText: (text: string) => void;\n setOpen: (open: boolean) => void;\n setState: (patch: TngDatepickerStatePatch<TDate>) => void;\n setValue: (value: TngDateSelectionInput<TDate>) => void;\n setView: (view: TngCalendarView) => void;\n setVisibleMonth: (valueOrYear: TngDateInputValue<TDate> | number, month?: number) => void;\n setVisibleYear: (year: number) => void;\n showDaysPanel: () => void;\n showMonthsPanel: () => void;\n showYearsPanel: () => void;\n subscribe: (listener: TngDatepickerListener<TDate>) => () => void;\n toggleOpen: () => void;\n}>;\n"]}
@@ -0,0 +1,75 @@
1
+ import type { TngCalendarView, TngDateAdapter, TngDateCell, TngDateRange, TngDateValue, TngMonthOption, TngWeekdayIndex, TngYearOption } from './datepicker.types';
2
+ type TngMonthGridOptions<TDate> = Readonly<{
3
+ activeDate: TDate;
4
+ adapter: Readonly<TngDateAdapter<TDate>>;
5
+ createCellId: (date: TDate) => string;
6
+ fixedWeeks: boolean;
7
+ focusStrategy: 'active-descendant' | 'roving';
8
+ focusedDate: TDate | null;
9
+ inRange: (date: TDate) => boolean;
10
+ isDisabled: (date: TDate) => boolean;
11
+ isRangeEnd: (date: TDate) => boolean;
12
+ isRangeStart: (date: TDate) => boolean;
13
+ isSelected: (date: TDate) => boolean;
14
+ locale?: string;
15
+ showOutsideDays: boolean;
16
+ today: TDate;
17
+ visibleMonth: TDate;
18
+ weekStartsOn: TngWeekdayIndex;
19
+ }>;
20
+ type TngMonthOptionsConfig<TDate> = Readonly<{
21
+ activeDate: TDate;
22
+ adapter: Readonly<TngDateAdapter<TDate>>;
23
+ createId: (month: number) => string;
24
+ disabledMonth: (month: number) => boolean;
25
+ focusedDate: TDate | null;
26
+ focusedSection: 'day' | 'month' | 'year';
27
+ locale?: string;
28
+ selectedMonth: (month: number) => boolean;
29
+ visibleMonth: TDate;
30
+ }>;
31
+ type TngYearOptionsConfig<TDate> = Readonly<{
32
+ activeDate: TDate;
33
+ adapter: Readonly<TngDateAdapter<TDate>>;
34
+ createId: (year: number) => string;
35
+ disabledYear: (year: number) => boolean;
36
+ focusedDate: TDate | null;
37
+ focusedSection: 'day' | 'month' | 'year';
38
+ locale?: string;
39
+ selectedYear: (year: number) => boolean;
40
+ startYear: number;
41
+ totalYears: number;
42
+ visibleMonth: TDate;
43
+ }>;
44
+ type TngMoveDateOptions<TDate> = Readonly<{
45
+ adapter: Readonly<TngDateAdapter<TDate>>;
46
+ allowCrossView?: boolean;
47
+ delta: number;
48
+ isDisabled: (date: TDate) => boolean;
49
+ start: TDate;
50
+ }>;
51
+ type TngWeekBoundary = 'end' | 'start';
52
+ export declare function resolveLocaleWeekStartsOn(locale?: string): TngWeekdayIndex;
53
+ export declare function toDateKey<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, date: TDate): string;
54
+ export declare function datesEqual<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, left: TDate | null, right: TDate | null): boolean;
55
+ export declare function compareMonthIdentity<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, left: TDate, right: TDate): number;
56
+ export declare function compareYearIdentity<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, left: TDate, right: TDate): number;
57
+ export declare function normalizeRangeOrder<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, range: Readonly<TngDateRange<TDate>>): TngDateRange<TDate>;
58
+ export declare function sortAndUniqueDates<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, dates: readonly TDate[]): readonly TDate[];
59
+ export declare function isDateValueInMonth<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, value: TDate, visibleMonth: TDate): boolean;
60
+ export declare function clampDateToMonth<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, date: TDate, monthDate: TDate): TDate;
61
+ export declare function moveDateSkippingDisabled<TDate>(options: Readonly<TngMoveDateOptions<TDate>>): TDate;
62
+ export declare function resolveWeekBoundaryDate<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, date: TDate, weekStartsOn: TngWeekdayIndex, boundary: TngWeekBoundary): TDate;
63
+ export declare function isValueSelected<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, selectionMode: 'multiple' | 'range' | 'single', value: Readonly<TngDateValue<TDate>>, date: TDate): boolean;
64
+ export declare function isDateInRange<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, value: Readonly<TngDateValue<TDate>>, date: TDate): boolean;
65
+ export declare function hasSelectableDateInMonth<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, monthDate: TDate, isDisabled: (date: TDate) => boolean): boolean;
66
+ export declare function hasSelectableDateInYear<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, year: number, currentMonth: TDate, isDisabled: (date: TDate) => boolean): boolean;
67
+ export declare function findFirstEnabledDateInMonth<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, monthDate: TDate, isDisabled: (date: TDate) => boolean): TDate | null;
68
+ export declare function buildMonthGrid<TDate>(options: Readonly<TngMonthGridOptions<TDate>>): readonly TngDateCell<TDate>[];
69
+ export declare function buildMonthOptions<TDate>(options: Readonly<TngMonthOptionsConfig<TDate>>): readonly TngMonthOption<TDate>[];
70
+ export declare function buildYearOptions<TDate>(options: Readonly<TngYearOptionsConfig<TDate>>): readonly TngYearOption<TDate>[];
71
+ export declare function resolveInitialFocusedSection(view: TngCalendarView): TngCalendarView;
72
+ export declare function resolveViewForEscape(currentView: TngCalendarView): TngCalendarView | null;
73
+ export declare function includesView(views: readonly TngCalendarView[], view: TngCalendarView): boolean;
74
+ export {};
75
+ //# sourceMappingURL=datepicker.utils.d.ts.map
@@ -0,0 +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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"}
@@ -0,0 +1,238 @@
1
+ export function resolveLocaleWeekStartsOn(locale) {
2
+ if (typeof Intl === 'undefined' || typeof Intl.Locale === 'undefined' || locale === undefined) {
3
+ return 0;
4
+ }
5
+ try {
6
+ const weekInfo = new Intl.Locale(locale).weekInfo;
7
+ if (weekInfo === undefined) {
8
+ return 0;
9
+ }
10
+ return (weekInfo.firstDay % 7);
11
+ }
12
+ catch {
13
+ return 0;
14
+ }
15
+ }
16
+ export function toDateKey(adapter, date) {
17
+ const year = adapter.getYear(date).toString().padStart(4, '0');
18
+ const month = (adapter.getMonth(date) + 1).toString().padStart(2, '0');
19
+ const day = adapter.getDate(date).toString().padStart(2, '0');
20
+ return `${year}-${month}-${day}`;
21
+ }
22
+ export function datesEqual(adapter, left, right) {
23
+ if (left === null || right === null) {
24
+ return left === right;
25
+ }
26
+ return adapter.compare(left, right) === 0;
27
+ }
28
+ export function compareMonthIdentity(adapter, left, right) {
29
+ const yearDiff = adapter.getYear(left) - adapter.getYear(right);
30
+ if (yearDiff !== 0) {
31
+ return yearDiff;
32
+ }
33
+ return adapter.getMonth(left) - adapter.getMonth(right);
34
+ }
35
+ export function compareYearIdentity(adapter, left, right) {
36
+ return adapter.getYear(left) - adapter.getYear(right);
37
+ }
38
+ export function normalizeRangeOrder(adapter, range) {
39
+ if (range.start === null || range.end === null) {
40
+ return range;
41
+ }
42
+ if (adapter.compare(range.start, range.end) <= 0) {
43
+ return range;
44
+ }
45
+ return Object.freeze({
46
+ end: range.start,
47
+ start: range.end,
48
+ });
49
+ }
50
+ export function sortAndUniqueDates(adapter, dates) {
51
+ const sorted = [...dates].sort((left, right) => adapter.compare(left, right));
52
+ const unique = [];
53
+ for (const date of sorted) {
54
+ const last = unique.length > 0 ? unique[unique.length - 1] : null;
55
+ if (last !== null && adapter.compare(last, date) === 0) {
56
+ continue;
57
+ }
58
+ unique.push(date);
59
+ }
60
+ return Object.freeze(unique);
61
+ }
62
+ export function isDateValueInMonth(adapter, value, visibleMonth) {
63
+ return (adapter.getYear(value) === adapter.getYear(visibleMonth) &&
64
+ adapter.getMonth(value) === adapter.getMonth(visibleMonth));
65
+ }
66
+ export function clampDateToMonth(adapter, date, monthDate) {
67
+ const lastDate = adapter.getDate(adapter.endOfMonth(monthDate));
68
+ return adapter.createDate(adapter.getYear(monthDate), adapter.getMonth(monthDate), Math.min(adapter.getDate(date), lastDate));
69
+ }
70
+ export function moveDateSkippingDisabled(options) {
71
+ const allowCrossView = options.allowCrossView ?? true;
72
+ const maxIterations = 400;
73
+ let next = options.adapter.addDays(options.start, options.delta);
74
+ let remaining = maxIterations;
75
+ while (remaining > 0 && options.isDisabled(next)) {
76
+ const currentMonth = options.adapter.getMonth(options.start);
77
+ const nextMonth = options.adapter.getMonth(next);
78
+ if (!allowCrossView && currentMonth !== nextMonth) {
79
+ return options.start;
80
+ }
81
+ next = options.adapter.addDays(next, options.delta);
82
+ remaining -= 1;
83
+ }
84
+ return remaining === 0 ? options.start : next;
85
+ }
86
+ export function resolveWeekBoundaryDate(adapter, date, weekStartsOn, boundary) {
87
+ const start = adapter.startOfWeek(date, weekStartsOn);
88
+ return boundary === 'start' ? start : adapter.addDays(start, 6);
89
+ }
90
+ export function isValueSelected(adapter, selectionMode, value, date) {
91
+ if (value === null) {
92
+ return false;
93
+ }
94
+ if (selectionMode === 'single') {
95
+ return adapter.compare(value, date) === 0;
96
+ }
97
+ if (selectionMode === 'multiple') {
98
+ return value.some((selected) => adapter.compare(selected, date) === 0);
99
+ }
100
+ const range = value;
101
+ if (range.start === null || range.end === null) {
102
+ return range.start !== null && adapter.compare(range.start, date) === 0;
103
+ }
104
+ return adapter.compare(range.start, date) <= 0 && adapter.compare(range.end, date) >= 0;
105
+ }
106
+ export function isDateInRange(adapter, value, date) {
107
+ if (value === null || Array.isArray(value)) {
108
+ return false;
109
+ }
110
+ if ('start' in value && 'end' in value && value.start !== null && value.end !== null) {
111
+ return adapter.compare(value.start, date) <= 0 && adapter.compare(value.end, date) >= 0;
112
+ }
113
+ return false;
114
+ }
115
+ export function hasSelectableDateInMonth(adapter, monthDate, isDisabled) {
116
+ const start = adapter.startOfMonth(monthDate);
117
+ const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));
118
+ for (let day = 0; day < totalDays; day += 1) {
119
+ const candidate = adapter.addDays(start, day);
120
+ if (!isDisabled(candidate)) {
121
+ return true;
122
+ }
123
+ }
124
+ return false;
125
+ }
126
+ export function hasSelectableDateInYear(adapter, year, currentMonth, isDisabled) {
127
+ for (let month = 0; month < 12; month += 1) {
128
+ const monthDate = adapter.createDate(year, month, 1);
129
+ if (hasSelectableDateInMonth(adapter, monthDate, isDisabled)) {
130
+ return true;
131
+ }
132
+ }
133
+ return false;
134
+ }
135
+ export function findFirstEnabledDateInMonth(adapter, monthDate, isDisabled) {
136
+ const start = adapter.startOfMonth(monthDate);
137
+ const totalDays = adapter.getDate(adapter.endOfMonth(monthDate));
138
+ for (let day = 0; day < totalDays; day += 1) {
139
+ const candidate = adapter.addDays(start, day);
140
+ if (!isDisabled(candidate)) {
141
+ return candidate;
142
+ }
143
+ }
144
+ return null;
145
+ }
146
+ export function buildMonthGrid(options) {
147
+ const firstOfMonth = options.adapter.startOfMonth(options.visibleMonth);
148
+ const firstVisibleDate = options.adapter.startOfWeek(firstOfMonth, options.weekStartsOn);
149
+ const daysInMonth = options.adapter.getDate(options.adapter.endOfMonth(options.visibleMonth));
150
+ const leadingOffset = (options.adapter.getDay(firstOfMonth) - options.weekStartsOn + 7) % 7;
151
+ const weekCount = options.fixedWeeks ? 6 : Math.ceil((leadingOffset + daysInMonth) / 7);
152
+ const totalCells = weekCount * 7;
153
+ const cells = [];
154
+ for (let index = 0; index < totalCells; index += 1) {
155
+ const date = options.adapter.addDays(firstVisibleDate, index);
156
+ const inMonth = isDateValueInMonth(options.adapter, date, options.visibleMonth);
157
+ const hidden = !inMonth && !options.showOutsideDays;
158
+ const active = datesEqual(options.adapter, date, options.activeDate);
159
+ const focusVisible = options.focusedDate !== null && datesEqual(options.adapter, date, options.focusedDate);
160
+ cells.push(Object.freeze({
161
+ active,
162
+ colIndex: index % 7,
163
+ date,
164
+ disabled: options.isDisabled(date),
165
+ focusVisible,
166
+ hidden,
167
+ id: options.createCellId(date),
168
+ inMonth,
169
+ inRange: options.inRange(date),
170
+ label: hidden ? '' : options.adapter.format(date, 'day-number', options.locale),
171
+ rangeEnd: options.isRangeEnd(date),
172
+ rangeStart: options.isRangeStart(date),
173
+ rowIndex: Math.floor(index / 7),
174
+ selected: options.isSelected(date),
175
+ tabindex: active && options.focusStrategy === 'roving' ? 0 : -1,
176
+ today: datesEqual(options.adapter, date, options.today),
177
+ }));
178
+ }
179
+ return Object.freeze(cells);
180
+ }
181
+ export function buildMonthOptions(options) {
182
+ const year = options.adapter.getYear(options.visibleMonth);
183
+ const monthOptions = [];
184
+ for (let monthIndex = 0; monthIndex < 12; monthIndex += 1) {
185
+ const date = options.adapter.createDate(year, monthIndex, 1);
186
+ const active = options.focusedSection === 'month' &&
187
+ options.adapter.getYear(options.activeDate) === year &&
188
+ options.adapter.getMonth(options.activeDate) === monthIndex;
189
+ const focusVisible = options.focusedSection === 'month' &&
190
+ options.focusedDate !== null &&
191
+ compareMonthIdentity(options.adapter, date, options.focusedDate) === 0;
192
+ monthOptions.push(Object.freeze({
193
+ active,
194
+ date,
195
+ disabled: options.disabledMonth(monthIndex),
196
+ focusVisible,
197
+ id: options.createId(monthIndex),
198
+ index: monthIndex,
199
+ label: options.adapter.format(date, 'month-short', options.locale),
200
+ selected: options.selectedMonth(monthIndex),
201
+ tabindex: active ? 0 : -1,
202
+ }));
203
+ }
204
+ return Object.freeze(monthOptions);
205
+ }
206
+ export function buildYearOptions(options) {
207
+ const yearOptions = [];
208
+ for (let offset = 0; offset < options.totalYears; offset += 1) {
209
+ const year = options.startYear + offset;
210
+ const date = options.adapter.createDate(year, options.adapter.getMonth(options.visibleMonth), 1);
211
+ const active = options.focusedSection === 'year' && options.adapter.getYear(options.activeDate) === year;
212
+ const focusVisible = options.focusedSection === 'year' &&
213
+ options.focusedDate !== null &&
214
+ compareYearIdentity(options.adapter, date, options.focusedDate) === 0;
215
+ yearOptions.push(Object.freeze({
216
+ active,
217
+ date,
218
+ disabled: options.disabledYear(year),
219
+ focusVisible,
220
+ id: options.createId(year),
221
+ label: options.adapter.format(date, 'year-label', options.locale),
222
+ selected: options.selectedYear(year),
223
+ tabindex: active ? 0 : -1,
224
+ year,
225
+ }));
226
+ }
227
+ return Object.freeze(yearOptions);
228
+ }
229
+ export function resolveInitialFocusedSection(view) {
230
+ return view;
231
+ }
232
+ export function resolveViewForEscape(currentView) {
233
+ return currentView === 'day' ? null : 'day';
234
+ }
235
+ export function includesView(views, view) {
236
+ return views.includes(view);
237
+ }
238
+ //# sourceMappingURL=datepicker.utils.js.map