@tailng-ui/primitives 0.32.0 → 0.33.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.
@@ -0,0 +1,883 @@
1
+ import { DestroyRef, Directive, ElementRef, HostBinding, HostListener, Injector, computed, effect, inject, input, signal, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export function resolveTngDatepickerPeriodLabel(controller, outputs) {
4
+ if (outputs.view === 'year') {
5
+ const startYear = outputs.yearOptions[0]?.year;
6
+ const endYear = outputs.yearOptions[outputs.yearOptions.length - 1]?.year;
7
+ if (startYear !== undefined && endYear !== undefined) {
8
+ return `${startYear} - ${endYear}`;
9
+ }
10
+ }
11
+ if (outputs.view === 'month') {
12
+ return controller.formatDate(outputs.visibleMonth, 'year-label');
13
+ }
14
+ return outputs.labelMonthYear;
15
+ }
16
+ export function bindTngDatepicker(controller) {
17
+ const destroyRef = inject(DestroyRef);
18
+ const version = signal(0, ...(ngDevMode ? [{ debugName: "version" }] : []));
19
+ const unsubscribe = controller.subscribe(() => {
20
+ version.update((value) => value + 1);
21
+ });
22
+ destroyRef.onDestroy(() => unsubscribe());
23
+ const outputs = computed(() => {
24
+ version();
25
+ return controller.getOutputs();
26
+ }, ...(ngDevMode ? [{ debugName: "outputs" }] : []));
27
+ const periodLabel = computed(() => resolveTngDatepickerPeriodLabel(controller, outputs()), ...(ngDevMode ? [{ debugName: "periodLabel" }] : []));
28
+ return Object.freeze({ outputs, periodLabel });
29
+ }
30
+ function resolveCurrentFocusTargetId(outputs) {
31
+ if (outputs.view === 'day') {
32
+ const gridAttributes = outputs.getGridAttributes();
33
+ if (gridAttributes['aria-activedescendant'] !== undefined) {
34
+ return gridAttributes.id ?? null;
35
+ }
36
+ return outputs.cells.find((cell) => cell.active)?.id ?? null;
37
+ }
38
+ if (outputs.view === 'month') {
39
+ return outputs.monthOptions.find((option) => option.active)?.id ?? null;
40
+ }
41
+ if (outputs.view === 'year') {
42
+ return outputs.yearOptions.find((option) => option.active)?.id ?? null;
43
+ }
44
+ return null;
45
+ }
46
+ function shouldSyncOverlayFocusAfterPickerKey(key) {
47
+ return (key === 'ArrowUp' ||
48
+ key === 'ArrowDown' ||
49
+ key === 'ArrowLeft' ||
50
+ key === 'ArrowRight' ||
51
+ key === 'Home' ||
52
+ key === 'End' ||
53
+ key === 'PageUp' ||
54
+ key === 'PageDown' ||
55
+ key === 'Enter' ||
56
+ key === ' ' ||
57
+ key === 'Escape');
58
+ }
59
+ function isPickerActivationKey(key) {
60
+ return key === 'Enter' || key === ' ';
61
+ }
62
+ function queueDatepickerOverlayFocusSync(controller, ownerDocument) {
63
+ const targetDocument = ownerDocument ?? document;
64
+ queueMicrotask(() => {
65
+ const focusTarget = () => {
66
+ const outputs = controller.getOutputs();
67
+ if (!outputs.open) {
68
+ return;
69
+ }
70
+ const targetId = resolveCurrentFocusTargetId(outputs);
71
+ if (targetId === null) {
72
+ return;
73
+ }
74
+ const target = targetDocument.getElementById(targetId);
75
+ if (!(target instanceof HTMLElement)) {
76
+ return;
77
+ }
78
+ target.focus();
79
+ };
80
+ if (typeof requestAnimationFrame === 'function') {
81
+ requestAnimationFrame(() => focusTarget());
82
+ return;
83
+ }
84
+ setTimeout(() => focusTarget(), 0);
85
+ });
86
+ }
87
+ function resolveAttribute(attributes, key) {
88
+ return attributes[key] ?? null;
89
+ }
90
+ class TngDatepickerControllerPart {
91
+ injector = inject(Injector);
92
+ ownerDocument = inject((ElementRef)).nativeElement.ownerDocument ?? null;
93
+ renderVersion = signal(0, ...(ngDevMode ? [{ debugName: "renderVersion" }] : []));
94
+ ngOnInit() {
95
+ effect((onCleanup) => {
96
+ const controller = this.controller();
97
+ const unsubscribe = controller.subscribe(() => {
98
+ this.renderVersion.update((value) => value + 1);
99
+ });
100
+ onCleanup(() => unsubscribe());
101
+ }, { injector: this.injector });
102
+ }
103
+ syncOverlayFocus() {
104
+ queueDatepickerOverlayFocusSync(this.controller(), this.ownerDocument);
105
+ }
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerControllerPart, deps: [], target: i0.ɵɵFactoryTarget.Directive });
107
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngDatepickerControllerPart, isStandalone: true, ngImport: i0 });
108
+ }
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerControllerPart, decorators: [{
110
+ type: Directive
111
+ }] });
112
+ export class TngDatepickerHost extends TngDatepickerControllerPart {
113
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerHost' });
114
+ attributes = computed(() => {
115
+ this.renderVersion();
116
+ return this.controller().getOutputs().getHostAttributes();
117
+ }, ...(ngDevMode ? [{ debugName: "attributes" }] : []));
118
+ get ariaDescribedby() {
119
+ return resolveAttribute(this.attributes(), 'aria-describedby');
120
+ }
121
+ get ariaLabel() {
122
+ return resolveAttribute(this.attributes(), 'aria-label');
123
+ }
124
+ get ariaLabelledby() {
125
+ return resolveAttribute(this.attributes(), 'aria-labelledby');
126
+ }
127
+ get dataDisabled() {
128
+ return resolveAttribute(this.attributes(), 'data-disabled');
129
+ }
130
+ get dataOpen() {
131
+ return resolveAttribute(this.attributes(), 'data-open');
132
+ }
133
+ get dataSlot() {
134
+ return resolveAttribute(this.attributes(), 'data-slot');
135
+ }
136
+ get dataView() {
137
+ return resolveAttribute(this.attributes(), 'data-view');
138
+ }
139
+ get dir() {
140
+ return resolveAttribute(this.attributes(), 'dir');
141
+ }
142
+ get role() {
143
+ return resolveAttribute(this.attributes(), 'role');
144
+ }
145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerHost, deps: null, target: i0.ɵɵFactoryTarget.Directive });
146
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerHost, isStandalone: true, selector: "[tngDatepickerHost]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerHost", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.aria-describedby": "this.ariaDescribedby", "attr.aria-label": "this.ariaLabel", "attr.aria-labelledby": "this.ariaLabelledby", "attr.data-disabled": "this.dataDisabled", "attr.data-open": "this.dataOpen", "attr.data-slot": "this.dataSlot", "attr.data-view": "this.dataView", "attr.dir": "this.dir", "attr.role": "this.role" } }, exportAs: ["tngDatepickerHost"], usesInheritance: true, ngImport: i0 });
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerHost, decorators: [{
149
+ type: Directive,
150
+ args: [{
151
+ selector: '[tngDatepickerHost]',
152
+ exportAs: 'tngDatepickerHost',
153
+ standalone: true,
154
+ }]
155
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerHost", required: true }] }], ariaDescribedby: [{
156
+ type: HostBinding,
157
+ args: ['attr.aria-describedby']
158
+ }], ariaLabel: [{
159
+ type: HostBinding,
160
+ args: ['attr.aria-label']
161
+ }], ariaLabelledby: [{
162
+ type: HostBinding,
163
+ args: ['attr.aria-labelledby']
164
+ }], dataDisabled: [{
165
+ type: HostBinding,
166
+ args: ['attr.data-disabled']
167
+ }], dataOpen: [{
168
+ type: HostBinding,
169
+ args: ['attr.data-open']
170
+ }], dataSlot: [{
171
+ type: HostBinding,
172
+ args: ['attr.data-slot']
173
+ }], dataView: [{
174
+ type: HostBinding,
175
+ args: ['attr.data-view']
176
+ }], dir: [{
177
+ type: HostBinding,
178
+ args: ['attr.dir']
179
+ }], role: [{
180
+ type: HostBinding,
181
+ args: ['attr.role']
182
+ }] } });
183
+ export class TngDatepickerInput extends TngDatepickerControllerPart {
184
+ inputElement = inject(ElementRef);
185
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerInput' });
186
+ dataSlot = 'datepicker-input';
187
+ get valueProp() {
188
+ this.renderVersion();
189
+ return this.controller().getOutputs().inputText;
190
+ }
191
+ get ariaInvalid() {
192
+ this.renderVersion();
193
+ return this.controller().getOutputs().validationError !== null ? 'true' : null;
194
+ }
195
+ onBlur() {
196
+ this.controller().commitInputText();
197
+ }
198
+ onInput() {
199
+ this.controller().setInputText(this.inputElement.nativeElement.value);
200
+ }
201
+ onClick() {
202
+ if (this.controller().getOutputs().open) {
203
+ return;
204
+ }
205
+ this.controller().open();
206
+ this.syncOverlayFocus();
207
+ }
208
+ onKeydown(event) {
209
+ if (event.key === 'Enter') {
210
+ event.preventDefault();
211
+ if (!this.controller().getOutputs().open) {
212
+ this.controller().open();
213
+ this.syncOverlayFocus();
214
+ return;
215
+ }
216
+ this.controller().commitInputText();
217
+ return;
218
+ }
219
+ if (event.key === 'ArrowDown' && !this.controller().getOutputs().open) {
220
+ event.preventDefault();
221
+ this.controller().open();
222
+ this.syncOverlayFocus();
223
+ }
224
+ }
225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
226
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerInput, isStandalone: true, selector: "input[tngDatepickerInput]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerInput", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "blur": "onBlur()", "input": "onInput()", "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "value": "this.valueProp", "attr.aria-invalid": "this.ariaInvalid" } }, exportAs: ["tngDatepickerInput"], usesInheritance: true, ngImport: i0 });
227
+ }
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerInput, decorators: [{
229
+ type: Directive,
230
+ args: [{
231
+ selector: 'input[tngDatepickerInput]',
232
+ exportAs: 'tngDatepickerInput',
233
+ standalone: true,
234
+ }]
235
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerInput", required: true }] }], dataSlot: [{
236
+ type: HostBinding,
237
+ args: ['attr.data-slot']
238
+ }], valueProp: [{
239
+ type: HostBinding,
240
+ args: ['value']
241
+ }], ariaInvalid: [{
242
+ type: HostBinding,
243
+ args: ['attr.aria-invalid']
244
+ }], onBlur: [{
245
+ type: HostListener,
246
+ args: ['blur']
247
+ }], onInput: [{
248
+ type: HostListener,
249
+ args: ['input']
250
+ }], onClick: [{
251
+ type: HostListener,
252
+ args: ['click']
253
+ }], onKeydown: [{
254
+ type: HostListener,
255
+ args: ['keydown', ['$event']]
256
+ }] } });
257
+ export class TngDatepickerTrigger extends TngDatepickerControllerPart {
258
+ elementRef = inject(ElementRef);
259
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerTrigger' });
260
+ ngOnInit() {
261
+ super.ngOnInit();
262
+ effect((onCleanup) => {
263
+ const controller = this.controller();
264
+ const element = this.elementRef.nativeElement;
265
+ controller.registerTrigger(element);
266
+ onCleanup(() => controller.registerTrigger(null));
267
+ }, { injector: this.injector });
268
+ }
269
+ dataSlot = 'datepicker-trigger';
270
+ get ariaHaspopup() {
271
+ this.renderVersion();
272
+ return this.controller().getOutputs().getTriggerAttributes()['aria-haspopup'] ?? null;
273
+ }
274
+ get ariaExpanded() {
275
+ this.renderVersion();
276
+ return this.controller().getOutputs().getTriggerAttributes()['aria-expanded'] ?? null;
277
+ }
278
+ get ariaControls() {
279
+ this.renderVersion();
280
+ return this.controller().getOutputs().getTriggerAttributes()['aria-controls'] ?? null;
281
+ }
282
+ get dataOpen() {
283
+ this.renderVersion();
284
+ return this.controller().getOutputs().getTriggerAttributes()['data-open'] ?? null;
285
+ }
286
+ onClick() {
287
+ const wasOpen = this.controller().getOutputs().open;
288
+ this.controller().toggleOpen();
289
+ if (!wasOpen && this.controller().getOutputs().open) {
290
+ this.syncOverlayFocus();
291
+ }
292
+ }
293
+ onKeydown(event) {
294
+ const wasOpen = this.controller().getOutputs().open;
295
+ this.controller().handleTriggerKeyDown(event);
296
+ if (!wasOpen && this.controller().getOutputs().open) {
297
+ this.syncOverlayFocus();
298
+ }
299
+ }
300
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
301
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerTrigger, isStandalone: true, selector: "button[tngDatepickerTrigger]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerTrigger", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.aria-haspopup": "this.ariaHaspopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-controls": "this.ariaControls", "attr.data-open": "this.dataOpen" } }, exportAs: ["tngDatepickerTrigger"], usesInheritance: true, ngImport: i0 });
302
+ }
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerTrigger, decorators: [{
304
+ type: Directive,
305
+ args: [{
306
+ selector: 'button[tngDatepickerTrigger]',
307
+ exportAs: 'tngDatepickerTrigger',
308
+ standalone: true,
309
+ }]
310
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerTrigger", required: true }] }], dataSlot: [{
311
+ type: HostBinding,
312
+ args: ['attr.data-slot']
313
+ }], ariaHaspopup: [{
314
+ type: HostBinding,
315
+ args: ['attr.aria-haspopup']
316
+ }], ariaExpanded: [{
317
+ type: HostBinding,
318
+ args: ['attr.aria-expanded']
319
+ }], ariaControls: [{
320
+ type: HostBinding,
321
+ args: ['attr.aria-controls']
322
+ }], dataOpen: [{
323
+ type: HostBinding,
324
+ args: ['attr.data-open']
325
+ }], onClick: [{
326
+ type: HostListener,
327
+ args: ['click']
328
+ }], onKeydown: [{
329
+ type: HostListener,
330
+ args: ['keydown', ['$event']]
331
+ }] } });
332
+ export class TngDatepickerPrevButton extends TngDatepickerControllerPart {
333
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerPrevButton' });
334
+ dataSlot = 'datepicker-nav-button';
335
+ onClick() {
336
+ if (this.controller().getOutputs().view === 'day') {
337
+ this.controller().prevMonth();
338
+ }
339
+ else {
340
+ this.controller().prevYear();
341
+ }
342
+ this.syncOverlayFocus();
343
+ }
344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerPrevButton, deps: null, target: i0.ɵɵFactoryTarget.Directive });
345
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerPrevButton, isStandalone: true, selector: "button[tngDatepickerPrevButton]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerPrevButton", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngDatepickerPrevButton"], usesInheritance: true, ngImport: i0 });
346
+ }
347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerPrevButton, decorators: [{
348
+ type: Directive,
349
+ args: [{
350
+ selector: 'button[tngDatepickerPrevButton]',
351
+ exportAs: 'tngDatepickerPrevButton',
352
+ standalone: true,
353
+ }]
354
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerPrevButton", required: true }] }], dataSlot: [{
355
+ type: HostBinding,
356
+ args: ['attr.data-slot']
357
+ }], onClick: [{
358
+ type: HostListener,
359
+ args: ['click']
360
+ }] } });
361
+ export class TngDatepickerNextButton extends TngDatepickerControllerPart {
362
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerNextButton' });
363
+ dataSlot = 'datepicker-nav-button';
364
+ onClick() {
365
+ if (this.controller().getOutputs().view === 'day') {
366
+ this.controller().nextMonth();
367
+ }
368
+ else {
369
+ this.controller().nextYear();
370
+ }
371
+ this.syncOverlayFocus();
372
+ }
373
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerNextButton, deps: null, target: i0.ɵɵFactoryTarget.Directive });
374
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerNextButton, isStandalone: true, selector: "button[tngDatepickerNextButton]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerNextButton", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngDatepickerNextButton"], usesInheritance: true, ngImport: i0 });
375
+ }
376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerNextButton, decorators: [{
377
+ type: Directive,
378
+ args: [{
379
+ selector: 'button[tngDatepickerNextButton]',
380
+ exportAs: 'tngDatepickerNextButton',
381
+ standalone: true,
382
+ }]
383
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerNextButton", required: true }] }], dataSlot: [{
384
+ type: HostBinding,
385
+ args: ['attr.data-slot']
386
+ }], onClick: [{
387
+ type: HostListener,
388
+ args: ['click']
389
+ }] } });
390
+ export class TngDatepickerPeriodButton extends TngDatepickerControllerPart {
391
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerPeriodButton' });
392
+ dataSlot = 'datepicker-period-button';
393
+ get dataInteractive() {
394
+ this.renderVersion();
395
+ return this.controller().getOutputs().view !== 'year' ? 'true' : null;
396
+ }
397
+ onClick() {
398
+ if (this.controller().getOutputs().view === 'year') {
399
+ return;
400
+ }
401
+ this.controller().showYearsPanel();
402
+ this.syncOverlayFocus();
403
+ }
404
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerPeriodButton, deps: null, target: i0.ɵɵFactoryTarget.Directive });
405
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerPeriodButton, isStandalone: true, selector: "button[tngDatepickerPeriodButton]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerPeriodButton", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot", "attr.data-interactive": "this.dataInteractive" } }, exportAs: ["tngDatepickerPeriodButton"], usesInheritance: true, ngImport: i0 });
406
+ }
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerPeriodButton, decorators: [{
408
+ type: Directive,
409
+ args: [{
410
+ selector: 'button[tngDatepickerPeriodButton]',
411
+ exportAs: 'tngDatepickerPeriodButton',
412
+ standalone: true,
413
+ }]
414
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerPeriodButton", required: true }] }], dataSlot: [{
415
+ type: HostBinding,
416
+ args: ['attr.data-slot']
417
+ }], dataInteractive: [{
418
+ type: HostBinding,
419
+ args: ['attr.data-interactive']
420
+ }], onClick: [{
421
+ type: HostListener,
422
+ args: ['click']
423
+ }] } });
424
+ export class TngDatepickerDayGrid extends TngDatepickerControllerPart {
425
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerDayGrid' });
426
+ get dataSlot() {
427
+ this.renderVersion();
428
+ return this.controller().getOutputs().getGridAttributes()['data-slot'] ?? 'datepicker-grid';
429
+ }
430
+ get id() {
431
+ this.renderVersion();
432
+ return this.controller().getOutputs().getGridAttributes().id ?? null;
433
+ }
434
+ get role() {
435
+ this.renderVersion();
436
+ return this.controller().getOutputs().getGridAttributes()['role'] ?? null;
437
+ }
438
+ get ariaActiveDescendant() {
439
+ this.renderVersion();
440
+ return this.controller().getOutputs().getGridAttributes()['aria-activedescendant'] ?? null;
441
+ }
442
+ get ariaLabelledby() {
443
+ this.renderVersion();
444
+ return this.controller().getOutputs().getGridAttributes()['aria-labelledby'] ?? null;
445
+ }
446
+ onKeydown(event) {
447
+ this.controller().handleGridKeyDown(event);
448
+ if (shouldSyncOverlayFocusAfterPickerKey(event.key)) {
449
+ this.syncOverlayFocus();
450
+ }
451
+ }
452
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerDayGrid, deps: null, target: i0.ɵɵFactoryTarget.Directive });
453
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerDayGrid, isStandalone: true, selector: "[tngDatepickerDayGrid]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerDayGrid", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-activedescendant": "this.ariaActiveDescendant", "attr.aria-labelledby": "this.ariaLabelledby" } }, exportAs: ["tngDatepickerDayGrid"], usesInheritance: true, ngImport: i0 });
454
+ }
455
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerDayGrid, decorators: [{
456
+ type: Directive,
457
+ args: [{
458
+ selector: '[tngDatepickerDayGrid]',
459
+ exportAs: 'tngDatepickerDayGrid',
460
+ standalone: true,
461
+ }]
462
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerDayGrid", required: true }] }], dataSlot: [{
463
+ type: HostBinding,
464
+ args: ['attr.data-slot']
465
+ }], id: [{
466
+ type: HostBinding,
467
+ args: ['attr.id']
468
+ }], role: [{
469
+ type: HostBinding,
470
+ args: ['attr.role']
471
+ }], ariaActiveDescendant: [{
472
+ type: HostBinding,
473
+ args: ['attr.aria-activedescendant']
474
+ }], ariaLabelledby: [{
475
+ type: HostBinding,
476
+ args: ['attr.aria-labelledby']
477
+ }], onKeydown: [{
478
+ type: HostListener,
479
+ args: ['keydown', ['$event']]
480
+ }] } });
481
+ export class TngDatepickerDayCell extends TngDatepickerControllerPart {
482
+ dayGrid = inject(TngDatepickerDayGrid);
483
+ controller = computed(() => this.dayGrid.controller(), ...(ngDevMode ? [{ debugName: "controller" }] : []));
484
+ cell = input.required({ ...(ngDevMode ? { debugName: "cell" } : {}), alias: 'tngDatepickerDayCell' });
485
+ attributes = computed(() => {
486
+ this.renderVersion();
487
+ return this.controller().getOutputs().getCellAttributes(this.cell());
488
+ }, ...(ngDevMode ? [{ debugName: "attributes" }] : []));
489
+ get id() {
490
+ return this.attributes().id ?? null;
491
+ }
492
+ get role() {
493
+ return resolveAttribute(this.attributes(), 'role');
494
+ }
495
+ get tabindex() {
496
+ return resolveAttribute(this.attributes(), 'tabindex');
497
+ }
498
+ get disabled() {
499
+ return this.cell().disabled;
500
+ }
501
+ get ariaCurrent() {
502
+ return resolveAttribute(this.attributes(), 'aria-current');
503
+ }
504
+ get ariaDisabled() {
505
+ return resolveAttribute(this.attributes(), 'aria-disabled');
506
+ }
507
+ get ariaSelected() {
508
+ return resolveAttribute(this.attributes(), 'aria-selected');
509
+ }
510
+ get dataActive() {
511
+ return resolveAttribute(this.attributes(), 'data-active');
512
+ }
513
+ get dataDisabled() {
514
+ return resolveAttribute(this.attributes(), 'data-disabled');
515
+ }
516
+ get dataFocusVisible() {
517
+ return resolveAttribute(this.attributes(), 'data-focus-visible');
518
+ }
519
+ get dataHidden() {
520
+ return resolveAttribute(this.attributes(), 'data-hidden');
521
+ }
522
+ get dataInMonth() {
523
+ return resolveAttribute(this.attributes(), 'data-in-month');
524
+ }
525
+ get dataInRange() {
526
+ return resolveAttribute(this.attributes(), 'data-in-range');
527
+ }
528
+ get dataRangeEnd() {
529
+ return resolveAttribute(this.attributes(), 'data-range-end');
530
+ }
531
+ get dataRangeStart() {
532
+ return resolveAttribute(this.attributes(), 'data-range-start');
533
+ }
534
+ get dataSelected() {
535
+ return resolveAttribute(this.attributes(), 'data-selected');
536
+ }
537
+ get dataSlot() {
538
+ return resolveAttribute(this.attributes(), 'data-slot');
539
+ }
540
+ onClick(event) {
541
+ const cell = this.cell();
542
+ if (cell.disabled || cell.hidden) {
543
+ return;
544
+ }
545
+ this.controller().handleCellClick(cell.date, { shiftKey: event.shiftKey });
546
+ this.syncOverlayFocus();
547
+ }
548
+ onPointerEnter() {
549
+ const cell = this.cell();
550
+ if (cell.disabled || cell.hidden) {
551
+ return;
552
+ }
553
+ this.controller().handleCellPointerEnter(cell.date);
554
+ }
555
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerDayCell, deps: null, target: i0.ɵɵFactoryTarget.Directive });
556
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerDayCell, isStandalone: true, selector: "button[tngDatepickerDayCell]", inputs: { cell: { classPropertyName: "cell", publicName: "tngDatepickerDayCell", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick($event)", "pointerenter": "onPointerEnter()" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "disabled": "this.disabled", "attr.aria-current": "this.ariaCurrent", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-selected": "this.ariaSelected", "attr.data-active": "this.dataActive", "attr.data-disabled": "this.dataDisabled", "attr.data-focus-visible": "this.dataFocusVisible", "attr.data-hidden": "this.dataHidden", "attr.data-in-month": "this.dataInMonth", "attr.data-in-range": "this.dataInRange", "attr.data-range-end": "this.dataRangeEnd", "attr.data-range-start": "this.dataRangeStart", "attr.data-selected": "this.dataSelected", "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngDatepickerDayCell"], usesInheritance: true, ngImport: i0 });
557
+ }
558
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerDayCell, decorators: [{
559
+ type: Directive,
560
+ args: [{
561
+ selector: 'button[tngDatepickerDayCell]',
562
+ exportAs: 'tngDatepickerDayCell',
563
+ standalone: true,
564
+ }]
565
+ }], propDecorators: { cell: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerDayCell", required: true }] }], id: [{
566
+ type: HostBinding,
567
+ args: ['attr.id']
568
+ }], role: [{
569
+ type: HostBinding,
570
+ args: ['attr.role']
571
+ }], tabindex: [{
572
+ type: HostBinding,
573
+ args: ['attr.tabindex']
574
+ }], disabled: [{
575
+ type: HostBinding,
576
+ args: ['disabled']
577
+ }], ariaCurrent: [{
578
+ type: HostBinding,
579
+ args: ['attr.aria-current']
580
+ }], ariaDisabled: [{
581
+ type: HostBinding,
582
+ args: ['attr.aria-disabled']
583
+ }], ariaSelected: [{
584
+ type: HostBinding,
585
+ args: ['attr.aria-selected']
586
+ }], dataActive: [{
587
+ type: HostBinding,
588
+ args: ['attr.data-active']
589
+ }], dataDisabled: [{
590
+ type: HostBinding,
591
+ args: ['attr.data-disabled']
592
+ }], dataFocusVisible: [{
593
+ type: HostBinding,
594
+ args: ['attr.data-focus-visible']
595
+ }], dataHidden: [{
596
+ type: HostBinding,
597
+ args: ['attr.data-hidden']
598
+ }], dataInMonth: [{
599
+ type: HostBinding,
600
+ args: ['attr.data-in-month']
601
+ }], dataInRange: [{
602
+ type: HostBinding,
603
+ args: ['attr.data-in-range']
604
+ }], dataRangeEnd: [{
605
+ type: HostBinding,
606
+ args: ['attr.data-range-end']
607
+ }], dataRangeStart: [{
608
+ type: HostBinding,
609
+ args: ['attr.data-range-start']
610
+ }], dataSelected: [{
611
+ type: HostBinding,
612
+ args: ['attr.data-selected']
613
+ }], dataSlot: [{
614
+ type: HostBinding,
615
+ args: ['attr.data-slot']
616
+ }], onClick: [{
617
+ type: HostListener,
618
+ args: ['click', ['$event']]
619
+ }], onPointerEnter: [{
620
+ type: HostListener,
621
+ args: ['pointerenter']
622
+ }] } });
623
+ export class TngDatepickerMonthGrid extends TngDatepickerControllerPart {
624
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerMonthGrid' });
625
+ dataSlot = 'datepicker-grid';
626
+ role = 'grid';
627
+ onKeydown(event) {
628
+ this.controller().handleMonthGridKeyDown(event);
629
+ if (isPickerActivationKey(event.key)) {
630
+ this.controller().showDaysPanel();
631
+ }
632
+ if (shouldSyncOverlayFocusAfterPickerKey(event.key)) {
633
+ this.syncOverlayFocus();
634
+ }
635
+ }
636
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerMonthGrid, deps: null, target: i0.ɵɵFactoryTarget.Directive });
637
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerMonthGrid, isStandalone: true, selector: "[tngDatepickerMonthGrid]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerMonthGrid", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.role" } }, exportAs: ["tngDatepickerMonthGrid"], usesInheritance: true, ngImport: i0 });
638
+ }
639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerMonthGrid, decorators: [{
640
+ type: Directive,
641
+ args: [{
642
+ selector: '[tngDatepickerMonthGrid]',
643
+ exportAs: 'tngDatepickerMonthGrid',
644
+ standalone: true,
645
+ }]
646
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerMonthGrid", required: true }] }], dataSlot: [{
647
+ type: HostBinding,
648
+ args: ['attr.data-slot']
649
+ }], role: [{
650
+ type: HostBinding,
651
+ args: ['attr.role']
652
+ }], onKeydown: [{
653
+ type: HostListener,
654
+ args: ['keydown', ['$event']]
655
+ }] } });
656
+ export class TngDatepickerMonthOption extends TngDatepickerControllerPart {
657
+ monthGrid = inject(TngDatepickerMonthGrid);
658
+ controller = computed(() => this.monthGrid.controller(), ...(ngDevMode ? [{ debugName: "controller" }] : []));
659
+ option = input.required({ ...(ngDevMode ? { debugName: "option" } : {}), alias: 'tngDatepickerMonthOption' });
660
+ attributes = computed(() => {
661
+ this.renderVersion();
662
+ return this.controller().getOutputs().getMonthAttributes(this.option());
663
+ }, ...(ngDevMode ? [{ debugName: "attributes" }] : []));
664
+ get id() {
665
+ return this.attributes().id ?? null;
666
+ }
667
+ get role() {
668
+ return resolveAttribute(this.attributes(), 'role');
669
+ }
670
+ get tabindex() {
671
+ return resolveAttribute(this.attributes(), 'tabindex');
672
+ }
673
+ get disabled() {
674
+ return this.option().disabled;
675
+ }
676
+ get ariaDisabled() {
677
+ return resolveAttribute(this.attributes(), 'aria-disabled');
678
+ }
679
+ get ariaSelected() {
680
+ return resolveAttribute(this.attributes(), 'aria-selected');
681
+ }
682
+ get dataActive() {
683
+ return resolveAttribute(this.attributes(), 'data-active');
684
+ }
685
+ get dataDisabled() {
686
+ return resolveAttribute(this.attributes(), 'data-disabled');
687
+ }
688
+ get dataFocusVisible() {
689
+ return resolveAttribute(this.attributes(), 'data-focus-visible');
690
+ }
691
+ get dataSelected() {
692
+ return resolveAttribute(this.attributes(), 'data-selected');
693
+ }
694
+ get dataSlot() {
695
+ return resolveAttribute(this.attributes(), 'data-slot');
696
+ }
697
+ onClick() {
698
+ const option = this.option();
699
+ if (option.disabled) {
700
+ return;
701
+ }
702
+ this.controller().selectMonth(option.index);
703
+ this.controller().showDaysPanel();
704
+ this.syncOverlayFocus();
705
+ }
706
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerMonthOption, deps: null, target: i0.ɵɵFactoryTarget.Directive });
707
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerMonthOption, isStandalone: true, selector: "button[tngDatepickerMonthOption]", inputs: { option: { classPropertyName: "option", publicName: "tngDatepickerMonthOption", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "disabled": "this.disabled", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-selected": "this.ariaSelected", "attr.data-active": "this.dataActive", "attr.data-disabled": "this.dataDisabled", "attr.data-focus-visible": "this.dataFocusVisible", "attr.data-selected": "this.dataSelected", "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngDatepickerMonthOption"], usesInheritance: true, ngImport: i0 });
708
+ }
709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerMonthOption, decorators: [{
710
+ type: Directive,
711
+ args: [{
712
+ selector: 'button[tngDatepickerMonthOption]',
713
+ exportAs: 'tngDatepickerMonthOption',
714
+ standalone: true,
715
+ }]
716
+ }], propDecorators: { option: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerMonthOption", required: true }] }], id: [{
717
+ type: HostBinding,
718
+ args: ['attr.id']
719
+ }], role: [{
720
+ type: HostBinding,
721
+ args: ['attr.role']
722
+ }], tabindex: [{
723
+ type: HostBinding,
724
+ args: ['attr.tabindex']
725
+ }], disabled: [{
726
+ type: HostBinding,
727
+ args: ['disabled']
728
+ }], ariaDisabled: [{
729
+ type: HostBinding,
730
+ args: ['attr.aria-disabled']
731
+ }], ariaSelected: [{
732
+ type: HostBinding,
733
+ args: ['attr.aria-selected']
734
+ }], dataActive: [{
735
+ type: HostBinding,
736
+ args: ['attr.data-active']
737
+ }], dataDisabled: [{
738
+ type: HostBinding,
739
+ args: ['attr.data-disabled']
740
+ }], dataFocusVisible: [{
741
+ type: HostBinding,
742
+ args: ['attr.data-focus-visible']
743
+ }], dataSelected: [{
744
+ type: HostBinding,
745
+ args: ['attr.data-selected']
746
+ }], dataSlot: [{
747
+ type: HostBinding,
748
+ args: ['attr.data-slot']
749
+ }], onClick: [{
750
+ type: HostListener,
751
+ args: ['click']
752
+ }] } });
753
+ export class TngDatepickerYearGrid extends TngDatepickerControllerPart {
754
+ controller = input.required({ ...(ngDevMode ? { debugName: "controller" } : {}), alias: 'tngDatepickerYearGrid' });
755
+ dataSlot = 'datepicker-grid';
756
+ role = 'grid';
757
+ onKeydown(event) {
758
+ this.controller().handleYearGridKeyDown(event);
759
+ if (isPickerActivationKey(event.key)) {
760
+ this.controller().showMonthsPanel();
761
+ }
762
+ if (shouldSyncOverlayFocusAfterPickerKey(event.key)) {
763
+ this.syncOverlayFocus();
764
+ }
765
+ }
766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerYearGrid, deps: null, target: i0.ɵɵFactoryTarget.Directive });
767
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerYearGrid, isStandalone: true, selector: "[tngDatepickerYearGrid]", inputs: { controller: { classPropertyName: "controller", publicName: "tngDatepickerYearGrid", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.role" } }, exportAs: ["tngDatepickerYearGrid"], usesInheritance: true, ngImport: i0 });
768
+ }
769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerYearGrid, decorators: [{
770
+ type: Directive,
771
+ args: [{
772
+ selector: '[tngDatepickerYearGrid]',
773
+ exportAs: 'tngDatepickerYearGrid',
774
+ standalone: true,
775
+ }]
776
+ }], propDecorators: { controller: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerYearGrid", required: true }] }], dataSlot: [{
777
+ type: HostBinding,
778
+ args: ['attr.data-slot']
779
+ }], role: [{
780
+ type: HostBinding,
781
+ args: ['attr.role']
782
+ }], onKeydown: [{
783
+ type: HostListener,
784
+ args: ['keydown', ['$event']]
785
+ }] } });
786
+ export class TngDatepickerYearOption extends TngDatepickerControllerPart {
787
+ yearGrid = inject(TngDatepickerYearGrid);
788
+ controller = computed(() => this.yearGrid.controller(), ...(ngDevMode ? [{ debugName: "controller" }] : []));
789
+ option = input.required({ ...(ngDevMode ? { debugName: "option" } : {}), alias: 'tngDatepickerYearOption' });
790
+ attributes = computed(() => {
791
+ this.renderVersion();
792
+ return this.controller().getOutputs().getYearAttributes(this.option());
793
+ }, ...(ngDevMode ? [{ debugName: "attributes" }] : []));
794
+ get id() {
795
+ return this.attributes().id ?? null;
796
+ }
797
+ get role() {
798
+ return resolveAttribute(this.attributes(), 'role');
799
+ }
800
+ get tabindex() {
801
+ return resolveAttribute(this.attributes(), 'tabindex');
802
+ }
803
+ get disabled() {
804
+ return this.option().disabled;
805
+ }
806
+ get ariaDisabled() {
807
+ return resolveAttribute(this.attributes(), 'aria-disabled');
808
+ }
809
+ get ariaSelected() {
810
+ return resolveAttribute(this.attributes(), 'aria-selected');
811
+ }
812
+ get dataActive() {
813
+ return resolveAttribute(this.attributes(), 'data-active');
814
+ }
815
+ get dataDisabled() {
816
+ return resolveAttribute(this.attributes(), 'data-disabled');
817
+ }
818
+ get dataFocusVisible() {
819
+ return resolveAttribute(this.attributes(), 'data-focus-visible');
820
+ }
821
+ get dataSelected() {
822
+ return resolveAttribute(this.attributes(), 'data-selected');
823
+ }
824
+ get dataSlot() {
825
+ return resolveAttribute(this.attributes(), 'data-slot');
826
+ }
827
+ onClick() {
828
+ const option = this.option();
829
+ if (option.disabled) {
830
+ return;
831
+ }
832
+ this.controller().selectYear(option.year);
833
+ this.controller().showMonthsPanel();
834
+ this.syncOverlayFocus();
835
+ }
836
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerYearOption, deps: null, target: i0.ɵɵFactoryTarget.Directive });
837
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngDatepickerYearOption, isStandalone: true, selector: "button[tngDatepickerYearOption]", inputs: { option: { classPropertyName: "option", publicName: "tngDatepickerYearOption", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "disabled": "this.disabled", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-selected": "this.ariaSelected", "attr.data-active": "this.dataActive", "attr.data-disabled": "this.dataDisabled", "attr.data-focus-visible": "this.dataFocusVisible", "attr.data-selected": "this.dataSelected", "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngDatepickerYearOption"], usesInheritance: true, ngImport: i0 });
838
+ }
839
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngDatepickerYearOption, decorators: [{
840
+ type: Directive,
841
+ args: [{
842
+ selector: 'button[tngDatepickerYearOption]',
843
+ exportAs: 'tngDatepickerYearOption',
844
+ standalone: true,
845
+ }]
846
+ }], propDecorators: { option: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngDatepickerYearOption", required: true }] }], id: [{
847
+ type: HostBinding,
848
+ args: ['attr.id']
849
+ }], role: [{
850
+ type: HostBinding,
851
+ args: ['attr.role']
852
+ }], tabindex: [{
853
+ type: HostBinding,
854
+ args: ['attr.tabindex']
855
+ }], disabled: [{
856
+ type: HostBinding,
857
+ args: ['disabled']
858
+ }], ariaDisabled: [{
859
+ type: HostBinding,
860
+ args: ['attr.aria-disabled']
861
+ }], ariaSelected: [{
862
+ type: HostBinding,
863
+ args: ['attr.aria-selected']
864
+ }], dataActive: [{
865
+ type: HostBinding,
866
+ args: ['attr.data-active']
867
+ }], dataDisabled: [{
868
+ type: HostBinding,
869
+ args: ['attr.data-disabled']
870
+ }], dataFocusVisible: [{
871
+ type: HostBinding,
872
+ args: ['attr.data-focus-visible']
873
+ }], dataSelected: [{
874
+ type: HostBinding,
875
+ args: ['attr.data-selected']
876
+ }], dataSlot: [{
877
+ type: HostBinding,
878
+ args: ['attr.data-slot']
879
+ }], onClick: [{
880
+ type: HostListener,
881
+ args: ['click']
882
+ }] } });
883
+ //# sourceMappingURL=tng-datepicker.parts.js.map