@tociva/tailng-ui 0.8.0 → 0.12.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 (34) hide show
  1. package/README.md +8 -8
  2. package/fesm2022/tociva-tailng-ui-buttons-indicators.mjs +22 -0
  3. package/fesm2022/tociva-tailng-ui-buttons-indicators.mjs.map +1 -0
  4. package/fesm2022/tociva-tailng-ui-data-table-structure.mjs +22 -0
  5. package/fesm2022/tociva-tailng-ui-data-table-structure.mjs.map +1 -0
  6. package/fesm2022/tociva-tailng-ui-form-controls.mjs +22 -0
  7. package/fesm2022/tociva-tailng-ui-form-controls.mjs.map +1 -0
  8. package/fesm2022/tociva-tailng-ui-layout.mjs +22 -0
  9. package/fesm2022/tociva-tailng-ui-layout.mjs.map +1 -0
  10. package/fesm2022/tociva-tailng-ui-navigation.mjs +22 -0
  11. package/fesm2022/tociva-tailng-ui-navigation.mjs.map +1 -0
  12. package/fesm2022/tociva-tailng-ui-popups-overlays.mjs +22 -0
  13. package/fesm2022/tociva-tailng-ui-popups-overlays.mjs.map +1 -0
  14. package/fesm2022/tociva-tailng-ui-utilities.mjs +22 -0
  15. package/fesm2022/tociva-tailng-ui-utilities.mjs.map +1 -0
  16. package/fesm2022/tociva-tailng-ui.mjs +1 -14
  17. package/fesm2022/tociva-tailng-ui.mjs.map +1 -1
  18. package/package.json +30 -2
  19. package/types/tociva-tailng-ui-buttons-indicators.d.ts +179 -0
  20. package/types/tociva-tailng-ui-buttons-indicators.d.ts.map +1 -0
  21. package/types/tociva-tailng-ui-data-table-structure.d.ts +355 -0
  22. package/types/tociva-tailng-ui-data-table-structure.d.ts.map +1 -0
  23. package/types/tociva-tailng-ui-form-controls.d.ts +903 -0
  24. package/types/tociva-tailng-ui-form-controls.d.ts.map +1 -0
  25. package/types/tociva-tailng-ui-layout.d.ts +174 -0
  26. package/types/tociva-tailng-ui-layout.d.ts.map +1 -0
  27. package/types/tociva-tailng-ui-navigation.d.ts +282 -0
  28. package/types/tociva-tailng-ui-navigation.d.ts.map +1 -0
  29. package/types/tociva-tailng-ui-popups-overlays.d.ts +408 -0
  30. package/types/tociva-tailng-ui-popups-overlays.d.ts.map +1 -0
  31. package/types/tociva-tailng-ui-utilities.d.ts +74 -0
  32. package/types/tociva-tailng-ui-utilities.d.ts.map +1 -0
  33. package/types/tociva-tailng-ui.d.ts +7 -2264
  34. package/types/tociva-tailng-ui.d.ts.map +1 -1
@@ -0,0 +1,903 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef, ElementRef, InjectionToken } from '@angular/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+ import { OptionTplContext } from '@tociva/tailng-cdk/util';
5
+ import { TngOverlayCloseReason, TngOptionList } from '@tociva/tailng-ui/popups-overlays';
6
+
7
+ type AutocompleteCloseReason = TngOverlayCloseReason;
8
+ declare class TngAutocomplete<T> implements ControlValueAccessor {
9
+ optionTpl?: TemplateRef<OptionTplContext<T>>;
10
+ inputTpl?: TemplateRef<{
11
+ $implicit: T;
12
+ }>;
13
+ inputEl: ElementRef<HTMLInputElement>;
14
+ optionList?: TngOptionList<T>;
15
+ readonly inputKlass: _angular_core.InputSignal<string>;
16
+ readonly options: _angular_core.InputSignal<T[]>;
17
+ readonly placeholder: _angular_core.InputSignal<string>;
18
+ /** External disabled input (read-only InputSignal) */
19
+ readonly disabled: _angular_core.InputSignal<boolean>;
20
+ /** String representation (used for actual input.value + fallback) */
21
+ readonly displayWith: _angular_core.InputSignal<(item: T) => string>;
22
+ /** Raw text for filtering / API search (not the form value) */
23
+ readonly search: _angular_core.OutputEmitterRef<string>;
24
+ /** Optional: non-form usage hook */
25
+ readonly selected: _angular_core.OutputEmitterRef<T>;
26
+ /** Emits whenever overlay closes (selection/escape/outside-click/blur/programmatic) */
27
+ readonly closed: _angular_core.OutputEmitterRef<TngOverlayCloseReason>;
28
+ readonly inputValue: _angular_core.WritableSignal<string>;
29
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
30
+ readonly focusedIndex: _angular_core.WritableSignal<number>;
31
+ /** eslint-safe + template-safe internal disabled state */
32
+ protected readonly isDisabled: _angular_core.WritableSignal<boolean>;
33
+ /** Selected item (for inputTpl rendering) */
34
+ readonly selectedValue: _angular_core.WritableSignal<T | null>;
35
+ /**
36
+ * Whether to show rich selected template over the input.
37
+ * Show only when:
38
+ * - inputTpl exists
39
+ * - we have a selected value
40
+ * - overlay is closed (so typing/search UX stays normal)
41
+ */
42
+ readonly showSelectedTpl: _angular_core.Signal<boolean>;
43
+ readonly inputKlassFinal: _angular_core.Signal<string>;
44
+ /** Form value (selected item) */
45
+ private value;
46
+ private onChange;
47
+ private onTouched;
48
+ constructor();
49
+ writeValue(value: T | null): void;
50
+ registerOnChange(fn: (value: T | null) => void): void;
51
+ registerOnTouched(fn: () => void): void;
52
+ setDisabledState(isDisabled: boolean): void;
53
+ display(item: T): string;
54
+ open(_reason: AutocompleteCloseReason): void;
55
+ close(reason: AutocompleteCloseReason): void;
56
+ onOverlayClosed(reason: AutocompleteCloseReason): void;
57
+ onOverlayOpenChange(open: boolean): void;
58
+ onInput(ev: Event): void;
59
+ onBlur(): void;
60
+ /**
61
+ * Key handling updated to match OptionList architecture:
62
+ * - Escape is handled here (OptionList doesn't close overlays)
63
+ * - Navigation/Enter are delegated to optionList.onKeydown(ev)
64
+ * - Printable keys are NOT delegated (input typing controls filtering)
65
+ */
66
+ onKeydown(ev: KeyboardEvent): void;
67
+ private isListNavigationKey;
68
+ onFocusedIndexChange(i: number): void;
69
+ requestSelectActive(): void;
70
+ select(item: T): void;
71
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngAutocomplete<any>, never>;
72
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngAutocomplete<any>, "tng-autocomplete", never, { "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; }, { "search": "search"; "selected": "selected"; "closed": "closed"; }, ["optionTpl", "inputTpl"], never, true, never>;
73
+ }
74
+
75
+ type TngButtonToggleValue = string | number;
76
+ type TngButtonToggleOption<T extends TngButtonToggleValue = TngButtonToggleValue> = {
77
+ value: T;
78
+ label: string;
79
+ disabled?: boolean;
80
+ };
81
+ /**
82
+ * Value type:
83
+ * - single mode: T | null
84
+ * - multiple mode: T[]
85
+ */
86
+ type TngButtonToggleSelection<T extends TngButtonToggleValue> = T | null | T[];
87
+ declare class TngButtonToggle<T extends TngButtonToggleValue> implements ControlValueAccessor {
88
+ /** Options for the segmented control */
89
+ options: _angular_core.InputSignal<TngButtonToggleOption<T>[]>;
90
+ /**
91
+ * Direct mode value (optional).
92
+ * In forms mode, CVA is source of truth.
93
+ */
94
+ value: _angular_core.InputSignal<TngButtonToggleSelection<T>>;
95
+ readonly valueChange: _angular_core.OutputEmitterRef<TngButtonToggleSelection<T>>;
96
+ /** External disabled input (read-only) */
97
+ disabled: _angular_core.InputSignal<boolean>;
98
+ /** Material-like: single (default) or multiple selection */
99
+ multiple: _angular_core.InputSignal<boolean>;
100
+ /**
101
+ * Whether selection can be cleared:
102
+ * - single: clicking active option -> null
103
+ * - multiple: allows empty array
104
+ */
105
+ allowDeselect: _angular_core.InputSignal<boolean>;
106
+ /** Root wrapper */
107
+ rootKlass: _angular_core.InputSignal<string>;
108
+ /** Group container */
109
+ groupKlass: _angular_core.InputSignal<string>;
110
+ /** Button base */
111
+ buttonKlass: _angular_core.InputSignal<string>;
112
+ /** Active option button */
113
+ activeButtonKlass: _angular_core.InputSignal<string>;
114
+ /** Inactive option button */
115
+ inactiveButtonKlass: _angular_core.InputSignal<string>;
116
+ /** Disabled option button */
117
+ disabledButtonKlass: _angular_core.InputSignal<string>;
118
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
119
+ /** Authoritative selected value inside component */
120
+ private selectedValue;
121
+ /** When true, CVA owns the value (forms mode) */
122
+ private usingCva;
123
+ private onChange;
124
+ private onTouched;
125
+ constructor();
126
+ writeValue(value: TngButtonToggleSelection<T>): void;
127
+ registerOnChange(fn: (value: TngButtonToggleSelection<T>) => void): void;
128
+ registerOnTouched(fn: () => void): void;
129
+ setDisabledState(isDisabled: boolean): void;
130
+ currentValue: _angular_core.Signal<TngButtonToggleSelection<T>>;
131
+ isOptionDisabled(opt: TngButtonToggleOption<T>): boolean;
132
+ isSelected(opt: TngButtonToggleOption<T>): boolean;
133
+ select(opt: TngButtonToggleOption<T>): void;
134
+ onKeydown(ev: KeyboardEvent): void;
135
+ /** Group container classes */
136
+ readonly groupClasses: _angular_core.Signal<string>;
137
+ /** Button base classes */
138
+ private readonly baseBtn;
139
+ buttonClasses(opt: TngButtonToggleOption<T>): string;
140
+ private normalizeIncoming;
141
+ private toArray;
142
+ private toSingle;
143
+ private toggleInArray;
144
+ private shallowEqual;
145
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngButtonToggle<any>, never>;
146
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngButtonToggle<any>, "tng-button-toggle", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "allowDeselect": { "alias": "allowDeselect"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "groupKlass": { "alias": "groupKlass"; "required": false; "isSignal": true; }; "buttonKlass": { "alias": "buttonKlass"; "required": false; "isSignal": true; }; "activeButtonKlass": { "alias": "activeButtonKlass"; "required": false; "isSignal": true; }; "inactiveButtonKlass": { "alias": "inactiveButtonKlass"; "required": false; "isSignal": true; }; "disabledButtonKlass": { "alias": "disabledButtonKlass"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
147
+ }
148
+
149
+ declare class TngCheckbox implements ControlValueAccessor {
150
+ readonly id: _angular_core.InputSignal<string>;
151
+ readonly name: _angular_core.InputSignal<string>;
152
+ readonly label: _angular_core.InputSignal<string>;
153
+ readonly disabled: _angular_core.InputSignal<boolean>;
154
+ readonly required: _angular_core.InputSignal<boolean>;
155
+ /** Root <label> */
156
+ readonly rootKlass: _angular_core.InputSignal<string>;
157
+ /** <input type="checkbox"> */
158
+ readonly inputKlass: _angular_core.InputSignal<string>;
159
+ /** Label <span> */
160
+ readonly labelKlass: _angular_core.InputSignal<string>;
161
+ private readonly _value;
162
+ readonly value: _angular_core.Signal<boolean>;
163
+ private onChange;
164
+ private onTouched;
165
+ private readonly _formDisabled;
166
+ readonly isDisabled: _angular_core.Signal<boolean>;
167
+ writeValue(value: boolean | null): void;
168
+ registerOnChange(fn: (value: boolean) => void): void;
169
+ registerOnTouched(fn: () => void): void;
170
+ setDisabledState(isDisabled: boolean): void;
171
+ /** Final classes */
172
+ readonly classes: _angular_core.Signal<string>;
173
+ onToggle(event: Event): void;
174
+ onBlur(): void;
175
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngCheckbox, never>;
176
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngCheckbox, "tng-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; "labelKlass": { "alias": "labelKlass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
177
+ }
178
+
179
+ type ChipsCloseReason = TngOverlayCloseReason;
180
+ type ChipTplContext<T> = {
181
+ $implicit: T;
182
+ index: number;
183
+ };
184
+ declare class TngChips<T> implements ControlValueAccessor {
185
+ chipTpl?: TemplateRef<ChipTplContext<T>>;
186
+ optionTpl?: TemplateRef<OptionTplContext<T>>;
187
+ inputEl: ElementRef<HTMLInputElement>;
188
+ optionList?: TngOptionList<T>;
189
+ readonly value: _angular_core.InputSignal<T[]>;
190
+ readonly options: _angular_core.InputSignal<T[]>;
191
+ readonly placeholder: _angular_core.InputSignal<string>;
192
+ readonly disabled: _angular_core.InputSignal<boolean>;
193
+ readonly displayWith: _angular_core.InputSignal<(item: T) => string>;
194
+ readonly allowFreeText: _angular_core.InputSignal<boolean>;
195
+ readonly parse: _angular_core.InputSignal<(raw: string) => T>;
196
+ readonly normalize: _angular_core.InputSignal<(raw: string) => string>;
197
+ readonly preventDuplicates: _angular_core.InputSignal<boolean>;
198
+ readonly search: _angular_core.OutputEmitterRef<string>;
199
+ readonly valueChange: _angular_core.OutputEmitterRef<T[]>;
200
+ readonly chipAdded: _angular_core.OutputEmitterRef<T>;
201
+ readonly chipRemoved: _angular_core.OutputEmitterRef<T>;
202
+ readonly closed: _angular_core.OutputEmitterRef<TngOverlayCloseReason>;
203
+ readonly rootKlass: _angular_core.InputSignal<string>;
204
+ readonly containerKlass: _angular_core.InputSignal<string>;
205
+ readonly chipKlass: _angular_core.InputSignal<string>;
206
+ readonly chipLabelKlass: _angular_core.InputSignal<string>;
207
+ readonly removeButtonKlass: _angular_core.InputSignal<string>;
208
+ readonly inputKlass: _angular_core.InputSignal<string>;
209
+ readonly inputValue: _angular_core.WritableSignal<string>;
210
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
211
+ readonly focusedIndex: _angular_core.WritableSignal<number>;
212
+ protected readonly isDisabled: _angular_core.WritableSignal<boolean>;
213
+ private readonly chipsValue;
214
+ private usingCva;
215
+ private onChange;
216
+ private onTouched;
217
+ constructor();
218
+ writeValue(value: T[] | null): void;
219
+ registerOnChange(fn: (value: T[]) => void): void;
220
+ registerOnTouched(fn: () => void): void;
221
+ setDisabledState(isDisabled: boolean): void;
222
+ chips(): T[];
223
+ readonly placeholderText: _angular_core.Signal<string>;
224
+ readonly containerClasses: _angular_core.Signal<string>;
225
+ display(item: T): string;
226
+ private existsAlready;
227
+ private emitValue;
228
+ open(_reason: ChipsCloseReason): void;
229
+ close(reason: ChipsCloseReason): void;
230
+ onOverlayOpenChange(open: boolean): void;
231
+ onOverlayClosed(reason: ChipsCloseReason): void;
232
+ onInput(ev: Event): void;
233
+ onBlur(): void;
234
+ onKeydown(ev: KeyboardEvent): void;
235
+ private isListNavigationKey;
236
+ private cloneKeyboardEvent;
237
+ requestSelectActive(): void;
238
+ addFromInput(): void;
239
+ selectOption(item: T): void;
240
+ removeAt(index: number): void;
241
+ clearAll(): void;
242
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngChips<any>, never>;
243
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngChips<any>, "tng-chips", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "allowFreeText": { "alias": "allowFreeText"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "normalize": { "alias": "normalize"; "required": false; "isSignal": true; }; "preventDuplicates": { "alias": "preventDuplicates"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "containerKlass": { "alias": "containerKlass"; "required": false; "isSignal": true; }; "chipKlass": { "alias": "chipKlass"; "required": false; "isSignal": true; }; "chipLabelKlass": { "alias": "chipLabelKlass"; "required": false; "isSignal": true; }; "removeButtonKlass": { "alias": "removeButtonKlass"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; }, { "search": "search"; "valueChange": "valueChange"; "chipAdded": "chipAdded"; "chipRemoved": "chipRemoved"; "closed": "closed"; }, ["chipTpl", "optionTpl"], never, true, never>;
244
+ }
245
+
246
+ type TngDateInput = Date | string | number;
247
+ interface TngDateAdapter {
248
+ now(): Date;
249
+ from(value: TngDateInput): Date | null;
250
+ isValid(date: Date): boolean;
251
+ startOfDay(date: Date): Date;
252
+ year(date: Date): number;
253
+ month(date: Date): number;
254
+ date(date: Date): number;
255
+ day(date: Date): number;
256
+ daysInMonth(date: Date): number;
257
+ setYear(date: Date, year: number): Date;
258
+ setMonth(date: Date, month0: number): Date;
259
+ setDate(date: Date, dayOfMonth: number): Date;
260
+ addDays(date: Date, days: number): Date;
261
+ addMonths(date: Date, months: number): Date;
262
+ startOfMonth(date: Date): Date;
263
+ endOfMonth(date: Date): Date;
264
+ startOfYear(date: Date): Date;
265
+ endOfYear(date: Date): Date;
266
+ isSameDay(a: Date, b: Date): boolean;
267
+ isBeforeDay(a: Date, b: Date): boolean;
268
+ isAfterDay(a: Date, b: Date): boolean;
269
+ format(date: Date, format: string, locale?: string): string;
270
+ parse(text: string, format: string, locale?: string): Date | null;
271
+ }
272
+ declare const TNG_DATE_ADAPTER: InjectionToken<TngDateAdapter>;
273
+
274
+ type CalendarCell = {
275
+ date: Date;
276
+ label: string;
277
+ isOutsideMonth: boolean;
278
+ };
279
+ declare class TngDatepicker implements ControlValueAccessor {
280
+ readonly min: _angular_core.InputSignal<Date | null>;
281
+ readonly max: _angular_core.InputSignal<Date | null>;
282
+ readonly disabled: _angular_core.InputSignal<boolean>;
283
+ readonly displayFormat: _angular_core.InputSignal<string>;
284
+ readonly previewFormat: _angular_core.InputSignal<string>;
285
+ /** Optional locale for month names (e.g. 'en', 'fr', 'de', 'ml') */
286
+ readonly locale: _angular_core.InputSignal<string | null>;
287
+ readonly dateAdapter: _angular_core.InputSignal<TngDateAdapter | null>;
288
+ /** Klass applied to the text input element */
289
+ readonly inputKlass: _angular_core.InputSignal<string>;
290
+ readonly toggleKlass: _angular_core.InputSignal<string>;
291
+ readonly hostKlass: _angular_core.InputSignal<string>;
292
+ readonly disabledKlass: _angular_core.InputSignal<string>;
293
+ readonly fieldKlass: _angular_core.InputSignal<string>;
294
+ readonly toggleIconKlass: _angular_core.InputSignal<string>;
295
+ readonly panelKlass: _angular_core.InputSignal<string>;
296
+ readonly panelFrameKlass: _angular_core.InputSignal<string>;
297
+ readonly panelLayoutKlass: _angular_core.InputSignal<string>;
298
+ readonly monthRailKlass: _angular_core.InputSignal<string>;
299
+ readonly monthListKlass: _angular_core.InputSignal<string>;
300
+ readonly monthItemKlass: _angular_core.InputSignal<string>;
301
+ readonly calendarKlass: _angular_core.InputSignal<string>;
302
+ readonly titleKlass: _angular_core.InputSignal<string>;
303
+ readonly weekdayRowKlass: _angular_core.InputSignal<string>;
304
+ readonly weekdayCellKlass: _angular_core.InputSignal<string>;
305
+ readonly dayGridKlass: _angular_core.InputSignal<string>;
306
+ readonly dayCellKlass: _angular_core.InputSignal<string>;
307
+ readonly previewTextKlass: _angular_core.InputSignal<string>;
308
+ readonly actionBarKlass: _angular_core.InputSignal<string>;
309
+ readonly cancelKlass: _angular_core.InputSignal<string>;
310
+ readonly confirmKlass: _angular_core.InputSignal<string>;
311
+ readonly yearRailKlass: _angular_core.InputSignal<string>;
312
+ readonly yearNavPrevKlass: _angular_core.InputSignal<string>;
313
+ readonly yearListKlass: _angular_core.InputSignal<string>;
314
+ readonly yearItemKlass: _angular_core.InputSignal<string>;
315
+ readonly yearNavNextKlass: _angular_core.InputSignal<string>;
316
+ inputEl: ElementRef<HTMLInputElement>;
317
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
318
+ readonly isDisabled: _angular_core.WritableSignal<boolean>;
319
+ private readonly injectedAdapter;
320
+ private readonly nativeAdapter;
321
+ readonly adapter: _angular_core.Signal<TngDateAdapter>;
322
+ readonly inputKlassFinal: _angular_core.Signal<string>;
323
+ readonly toggleKlassFinal: _angular_core.Signal<string>;
324
+ readonly hostKlassFinal: _angular_core.Signal<string>;
325
+ readonly disabledKlassFinal: _angular_core.Signal<string>;
326
+ readonly fieldKlassFinal: _angular_core.Signal<string>;
327
+ readonly toggleIconKlassFinal: _angular_core.Signal<string>;
328
+ readonly panelKlassFinal: _angular_core.Signal<string>;
329
+ readonly panelFrameKlassFinal: _angular_core.Signal<string>;
330
+ readonly panelLayoutKlassFinal: _angular_core.Signal<string>;
331
+ readonly monthRailKlassFinal: _angular_core.Signal<string>;
332
+ readonly monthListKlassFinal: _angular_core.Signal<string>;
333
+ readonly monthItemKlassFinal: _angular_core.Signal<string>;
334
+ readonly calendarKlassFinal: _angular_core.Signal<string>;
335
+ readonly titleKlassFinal: _angular_core.Signal<string>;
336
+ readonly weekdayRowKlassFinal: _angular_core.Signal<string>;
337
+ readonly weekdayCellKlassFinal: _angular_core.Signal<string>;
338
+ readonly dayGridKlassFinal: _angular_core.Signal<string>;
339
+ readonly dayCellKlassFinal: _angular_core.Signal<string>;
340
+ readonly previewTextKlassFinal: _angular_core.Signal<string>;
341
+ readonly actionBarKlassFinal: _angular_core.Signal<string>;
342
+ readonly cancelKlassFinal: _angular_core.Signal<string>;
343
+ readonly confirmKlassFinal: _angular_core.Signal<string>;
344
+ readonly yearRailKlassFinal: _angular_core.Signal<string>;
345
+ readonly yearNavPrevKlassFinal: _angular_core.Signal<string>;
346
+ readonly yearListKlassFinal: _angular_core.Signal<string>;
347
+ readonly yearItemKlassFinal: _angular_core.Signal<string>;
348
+ readonly yearNavNextKlassFinal: _angular_core.Signal<string>;
349
+ private join;
350
+ private value;
351
+ readonly draft: _angular_core.WritableSignal<Date | null>;
352
+ readonly inputValue: _angular_core.WritableSignal<string>;
353
+ private onChange;
354
+ private onTouched;
355
+ readonly months: readonly [{
356
+ readonly index: 0;
357
+ readonly label: "Jan";
358
+ }, {
359
+ readonly index: 1;
360
+ readonly label: "Feb";
361
+ }, {
362
+ readonly index: 2;
363
+ readonly label: "Mar";
364
+ }, {
365
+ readonly index: 3;
366
+ readonly label: "Apr";
367
+ }, {
368
+ readonly index: 4;
369
+ readonly label: "May";
370
+ }, {
371
+ readonly index: 5;
372
+ readonly label: "Jun";
373
+ }, {
374
+ readonly index: 6;
375
+ readonly label: "Jul";
376
+ }, {
377
+ readonly index: 7;
378
+ readonly label: "Aug";
379
+ }, {
380
+ readonly index: 8;
381
+ readonly label: "Sep";
382
+ }, {
383
+ readonly index: 9;
384
+ readonly label: "Oct";
385
+ }, {
386
+ readonly index: 10;
387
+ readonly label: "Nov";
388
+ }, {
389
+ readonly index: 11;
390
+ readonly label: "Dec";
391
+ }];
392
+ readonly weekdays: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
393
+ readonly focusedDate: _angular_core.WritableSignal<Date | null>;
394
+ private readonly minD;
395
+ private readonly maxD;
396
+ readonly view: _angular_core.Signal<Date>;
397
+ readonly selectedYear: _angular_core.Signal<number>;
398
+ readonly selectedMonth: _angular_core.Signal<number>;
399
+ readonly yearBase: _angular_core.WritableSignal<number>;
400
+ readonly years: _angular_core.Signal<number[]>;
401
+ readonly previewLabel: _angular_core.Signal<string>;
402
+ readonly calendarCells: _angular_core.Signal<CalendarCell[]>;
403
+ canPrevYearWindow: _angular_core.Signal<boolean>;
404
+ canNextYearWindow: _angular_core.Signal<boolean>;
405
+ private isYearWindowBlocked;
406
+ constructor();
407
+ prevYearWindow(): void;
408
+ nextYearWindow(): void;
409
+ writeValue(value: Date | string | number | null): void;
410
+ registerOnChange(fn: (value: Date | null) => void): void;
411
+ registerOnTouched(fn: () => void): void;
412
+ setDisabledState(isDisabled: boolean): void;
413
+ open(_reason: TngOverlayCloseReason): void;
414
+ close(_reason: TngOverlayCloseReason): void;
415
+ onOverlayOpenChange(open: boolean): void;
416
+ onOverlayClosed(reason: TngOverlayCloseReason): void;
417
+ toggleOverlay(): void;
418
+ onInput(ev: Event): void;
419
+ onBlur(): void;
420
+ private setFocusedDate;
421
+ private moveFocusedByDays;
422
+ private moveFocusedByMonths;
423
+ private moveFocusedToStartOfMonth;
424
+ private moveFocusedToEndOfMonth;
425
+ isCellFocused(cell: CalendarCell): boolean;
426
+ onKeydown(ev: KeyboardEvent): void;
427
+ selectMonth(monthIndex0: number): void;
428
+ selectYear(year: number): void;
429
+ selectDay(cell: {
430
+ date: Date;
431
+ }): void;
432
+ cancel(): void;
433
+ confirm(): void;
434
+ isMonthSelected(monthIndex0: number): boolean;
435
+ isYearSelected(year: number): boolean;
436
+ isCellSelected(cell: CalendarCell): boolean;
437
+ isCellDisabled(cell: CalendarCell): boolean;
438
+ isMonthDisabled(monthIndex0: number): boolean;
439
+ isYearDisabled(year: number): boolean;
440
+ private clampToBounds;
441
+ private isWithinBounds;
442
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngDatepicker, never>;
443
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngDatepicker, "tng-datepicker", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "previewFormat": { "alias": "previewFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dateAdapter": { "alias": "dateAdapter"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; "toggleKlass": { "alias": "toggleKlass"; "required": false; "isSignal": true; }; "hostKlass": { "alias": "hostKlass"; "required": false; "isSignal": true; }; "disabledKlass": { "alias": "disabledKlass"; "required": false; "isSignal": true; }; "fieldKlass": { "alias": "fieldKlass"; "required": false; "isSignal": true; }; "toggleIconKlass": { "alias": "toggleIconKlass"; "required": false; "isSignal": true; }; "panelKlass": { "alias": "panelKlass"; "required": false; "isSignal": true; }; "panelFrameKlass": { "alias": "panelFrameKlass"; "required": false; "isSignal": true; }; "panelLayoutKlass": { "alias": "panelLayoutKlass"; "required": false; "isSignal": true; }; "monthRailKlass": { "alias": "monthRailKlass"; "required": false; "isSignal": true; }; "monthListKlass": { "alias": "monthListKlass"; "required": false; "isSignal": true; }; "monthItemKlass": { "alias": "monthItemKlass"; "required": false; "isSignal": true; }; "calendarKlass": { "alias": "calendarKlass"; "required": false; "isSignal": true; }; "titleKlass": { "alias": "titleKlass"; "required": false; "isSignal": true; }; "weekdayRowKlass": { "alias": "weekdayRowKlass"; "required": false; "isSignal": true; }; "weekdayCellKlass": { "alias": "weekdayCellKlass"; "required": false; "isSignal": true; }; "dayGridKlass": { "alias": "dayGridKlass"; "required": false; "isSignal": true; }; "dayCellKlass": { "alias": "dayCellKlass"; "required": false; "isSignal": true; }; "previewTextKlass": { "alias": "previewTextKlass"; "required": false; "isSignal": true; }; "actionBarKlass": { "alias": "actionBarKlass"; "required": false; "isSignal": true; }; "cancelKlass": { "alias": "cancelKlass"; "required": false; "isSignal": true; }; "confirmKlass": { "alias": "confirmKlass"; "required": false; "isSignal": true; }; "yearRailKlass": { "alias": "yearRailKlass"; "required": false; "isSignal": true; }; "yearNavPrevKlass": { "alias": "yearNavPrevKlass"; "required": false; "isSignal": true; }; "yearListKlass": { "alias": "yearListKlass"; "required": false; "isSignal": true; }; "yearItemKlass": { "alias": "yearItemKlass"; "required": false; "isSignal": true; }; "yearNavNextKlass": { "alias": "yearNavNextKlass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
444
+ }
445
+
446
+ declare class TngNativeDateAdapter implements TngDateAdapter {
447
+ now(): Date;
448
+ from(value: TngDateInput): Date | null;
449
+ isValid(date: Date): boolean;
450
+ startOfDay(date: Date): Date;
451
+ year(date: Date): number;
452
+ month(date: Date): number;
453
+ date(date: Date): number;
454
+ day(date: Date): number;
455
+ daysInMonth(date: Date): number;
456
+ setYear(date: Date, year: number): Date;
457
+ setMonth(date: Date, month0: number): Date;
458
+ setDate(date: Date, dayOfMonth: number): Date;
459
+ addDays(date: Date, days: number): Date;
460
+ addMonths(date: Date, months: number): Date;
461
+ startOfMonth(date: Date): Date;
462
+ endOfMonth(date: Date): Date;
463
+ startOfYear(date: Date): Date;
464
+ endOfYear(date: Date): Date;
465
+ isSameDay(a: Date, b: Date): boolean;
466
+ isBeforeDay(a: Date, b: Date): boolean;
467
+ isAfterDay(a: Date, b: Date): boolean;
468
+ format(date: Date, format: string, _locale?: string): string;
469
+ parse(text: string, format: string, _locale?: string): Date | null;
470
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngNativeDateAdapter, never>;
471
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TngNativeDateAdapter>;
472
+ }
473
+
474
+ type ParseResult = {
475
+ kind: 'empty';
476
+ } | {
477
+ kind: 'partial';
478
+ } | {
479
+ kind: 'invalid';
480
+ } | {
481
+ kind: 'valid';
482
+ date: Date;
483
+ };
484
+ /**
485
+ * Smart parse:
486
+ * 1) Try strict parse of raw input using displayFormat (supports separators, MMM, etc.)
487
+ * 2) If fails, try normalized input + normalized format (removes literals),
488
+ * e.g. "15-May-1981" -> "15May1981" with "DDMMMYYYY"
489
+ *
490
+ * Returns partial/invalid/valid.
491
+ */
492
+ declare function parseSmartDate(raw: string, displayFormat: string, adapter: TngDateAdapter, locale?: string): ParseResult;
493
+ /**
494
+ * Format a Date using displayFormat and locale.
495
+ */
496
+ declare function formatDate(date: Date, displayFormat: string, adapter: TngDateAdapter, locale?: string): string;
497
+ /**
498
+ * Caret preservation:
499
+ * after we programmatically replace input.value, reposition caret to a logical place.
500
+ *
501
+ * Strategy:
502
+ * - Count alphanumeric characters before caret in the "before" string.
503
+ * - Find the position in "after" string that has the same count of alphanumerics.
504
+ */
505
+ declare function computeNextCaretPos(before: string, beforeCaret: number, after: string): number;
506
+
507
+ declare class TngFileUpload implements ControlValueAccessor {
508
+ fileInput: ElementRef<HTMLInputElement>;
509
+ readonly disabled: _angular_core.InputSignal<boolean>;
510
+ readonly accept: _angular_core.InputSignal<string>;
511
+ readonly multiple: _angular_core.InputSignal<boolean>;
512
+ readonly title: _angular_core.InputSignal<string>;
513
+ readonly subtitle: _angular_core.InputSignal<string>;
514
+ readonly rootKlass: _angular_core.InputSignal<string>;
515
+ readonly dropzoneKlass: _angular_core.InputSignal<string>;
516
+ readonly titleKlass: _angular_core.InputSignal<string>;
517
+ readonly subtitleKlass: _angular_core.InputSignal<string>;
518
+ readonly hintKlass: _angular_core.InputSignal<string>;
519
+ readonly fileListKlass: _angular_core.InputSignal<string>;
520
+ readonly fileItemKlass: _angular_core.InputSignal<string>;
521
+ readonly clearButtonKlass: _angular_core.InputSignal<string>;
522
+ readonly valueChange: _angular_core.OutputEmitterRef<File[] | null>;
523
+ private readonly _value;
524
+ readonly value: _angular_core.Signal<File[] | null>;
525
+ private readonly _formDisabled;
526
+ readonly isDisabled: _angular_core.Signal<boolean>;
527
+ private onChange;
528
+ private onTouched;
529
+ readonly dragActive: _angular_core.WritableSignal<boolean>;
530
+ writeValue(value: File[] | null): void;
531
+ registerOnChange(fn: (value: File[] | null) => void): void;
532
+ registerOnTouched(fn: () => void): void;
533
+ setDisabledState(isDisabled: boolean): void;
534
+ readonly dropzoneClasses: _angular_core.Signal<string>;
535
+ openPicker(): void;
536
+ private setFiles;
537
+ onNativeChange(event: Event): void;
538
+ onDropped(files: File[]): void;
539
+ clear(): void;
540
+ onBlur(): void;
541
+ onDragActiveChange(active: boolean): void;
542
+ trackByName: (_: number, f: File) => string;
543
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngFileUpload, never>;
544
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngFileUpload, "tng-file-upload", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "dropzoneKlass": { "alias": "dropzoneKlass"; "required": false; "isSignal": true; }; "titleKlass": { "alias": "titleKlass"; "required": false; "isSignal": true; }; "subtitleKlass": { "alias": "subtitleKlass"; "required": false; "isSignal": true; }; "hintKlass": { "alias": "hintKlass"; "required": false; "isSignal": true; }; "fileListKlass": { "alias": "fileListKlass"; "required": false; "isSignal": true; }; "fileItemKlass": { "alias": "fileItemKlass"; "required": false; "isSignal": true; }; "clearButtonKlass": { "alias": "clearButtonKlass"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
545
+ }
546
+
547
+ type TngFileDrop = {
548
+ files: File[];
549
+ items?: DataTransferItemList;
550
+ raw?: DataTransfer;
551
+ };
552
+ declare class TngFileDropzone {
553
+ /** Disable drag/drop interactions */
554
+ readonly disabled: _angular_core.InputSignal<boolean>;
555
+ /** Optional: allow dropping multiple files */
556
+ readonly multiple: _angular_core.InputSignal<boolean>;
557
+ /** Optional: accept filter like input accept attribute (e.g. "image/*,.pdf") */
558
+ readonly accept: _angular_core.InputSignal<string>;
559
+ /** Emits when valid files dropped */
560
+ readonly filesDropped: _angular_core.OutputEmitterRef<File[]>;
561
+ /** Emits drag active state changes (optional hook) */
562
+ readonly dragActiveChange: _angular_core.OutputEmitterRef<boolean>;
563
+ private readonly _dragActive;
564
+ readonly dragActive: _angular_core.Signal<boolean>;
565
+ private setActive;
566
+ private acceptMatches;
567
+ private filterFiles;
568
+ private extractFiles;
569
+ onDragEnter(ev: DragEvent): void;
570
+ onDragOver(ev: DragEvent): void;
571
+ onDragLeave(ev: DragEvent): void;
572
+ onDrop(ev: DragEvent): void;
573
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngFileDropzone, never>;
574
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TngFileDropzone, "[tngFileDropzone]", ["tngFileDropzone"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; }, { "filesDropped": "filesDropped"; "dragActiveChange": "dragActiveChange"; }, never, never, true, never>;
575
+ }
576
+
577
+ type TngFormFieldSize = 'sm' | 'md' | 'lg';
578
+ type TngFormFieldAppearance = 'outline' | 'filled';
579
+ declare class TngFormField {
580
+ private readonly ngControl;
581
+ private readonly destroyRef;
582
+ /**
583
+ * Bridge Angular Forms mutable state (touched/dirty/errors) into signals world.
584
+ * We bump this tick on any control event so all computed() re-evaluate.
585
+ */
586
+ private readonly _tick;
587
+ private bump;
588
+ readonly label: _angular_core.InputSignal<string>;
589
+ readonly hint: _angular_core.InputSignal<string>;
590
+ /**
591
+ * Manual overrides:
592
+ * If provided, they take precedence over NgControl state.
593
+ */
594
+ readonly error: _angular_core.InputSignal<string>;
595
+ readonly invalid: _angular_core.InputSignal<boolean | null>;
596
+ readonly disabled: _angular_core.InputSignal<boolean | null>;
597
+ /**
598
+ * Required mark:
599
+ * Reliable + explicit. (Auto-detecting Validators.required is not stable.)
600
+ */
601
+ readonly required: _angular_core.InputSignal<boolean>;
602
+ readonly size: _angular_core.InputSignal<TngFormFieldSize>;
603
+ readonly appearance: _angular_core.InputSignal<TngFormFieldAppearance>;
604
+ readonly rootKlass: _angular_core.InputSignal<string>;
605
+ readonly labelKlass: _angular_core.InputSignal<string>;
606
+ readonly requiredMarkKlass: _angular_core.InputSignal<string>;
607
+ readonly hintKlass: _angular_core.InputSignal<string>;
608
+ readonly errorKlass: _angular_core.InputSignal<string>;
609
+ /** Wrapper around projected control */
610
+ readonly controlShellKlass: _angular_core.InputSignal<string>;
611
+ readonly prefixKlass: _angular_core.InputSignal<string>;
612
+ readonly suffixKlass: _angular_core.InputSignal<string>;
613
+ readonly footerKlass: _angular_core.InputSignal<string>;
614
+ private readonly ctrl;
615
+ constructor();
616
+ private readonly autoDisabled;
617
+ private readonly autoInvalid;
618
+ /** Prefer explicit inputs; fall back to form control. */
619
+ readonly isDisabled: _angular_core.Signal<boolean>;
620
+ readonly isInvalid: _angular_core.Signal<boolean>;
621
+ readonly isRequired: _angular_core.Signal<boolean>;
622
+ /**
623
+ * Auto error message:
624
+ * - manual [error] wins
625
+ * - otherwise derive from control.errors
626
+ */
627
+ readonly errorText: _angular_core.Signal<string>;
628
+ readonly showHint: _angular_core.Signal<boolean>;
629
+ readonly showError: _angular_core.Signal<boolean>;
630
+ private readonly sizeShell;
631
+ private readonly sizeLabel;
632
+ private readonly appearanceShell;
633
+ readonly controlShellClasses: _angular_core.Signal<string>;
634
+ readonly labelClasses: _angular_core.Signal<string>;
635
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngFormField, never>;
636
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngFormField, "tng-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "labelKlass": { "alias": "labelKlass"; "required": false; "isSignal": true; }; "requiredMarkKlass": { "alias": "requiredMarkKlass"; "required": false; "isSignal": true; }; "hintKlass": { "alias": "hintKlass"; "required": false; "isSignal": true; }; "errorKlass": { "alias": "errorKlass"; "required": false; "isSignal": true; }; "controlShellKlass": { "alias": "controlShellKlass"; "required": false; "isSignal": true; }; "prefixKlass": { "alias": "prefixKlass"; "required": false; "isSignal": true; }; "suffixKlass": { "alias": "suffixKlass"; "required": false; "isSignal": true; }; "footerKlass": { "alias": "footerKlass"; "required": false; "isSignal": true; }; }, {}, ["ngControl"], ["[tngPrefix]", "*", "[tngSuffix]"], true, never>;
637
+ }
638
+
639
+ declare class TngNumberInput implements ControlValueAccessor {
640
+ id: _angular_core.InputSignal<string>;
641
+ name: _angular_core.InputSignal<string>;
642
+ placeholder: _angular_core.InputSignal<string>;
643
+ klass: _angular_core.InputSignal<string>;
644
+ disabled: _angular_core.InputSignal<boolean>;
645
+ readonly: _angular_core.InputSignal<boolean>;
646
+ inputmode: _angular_core.InputSignal<"numeric" | "decimal">;
647
+ autocomplete: _angular_core.InputSignal<string>;
648
+ min: _angular_core.InputSignal<number | null>;
649
+ max: _angular_core.InputSignal<number | null>;
650
+ step: _angular_core.InputSignal<number | "any" | null>;
651
+ private readonly _value;
652
+ readonly value: _angular_core.Signal<number | null>;
653
+ private onChange;
654
+ private onTouched;
655
+ private readonly _formDisabled;
656
+ readonly isDisabled: _angular_core.Signal<boolean>;
657
+ writeValue(value: number | null): void;
658
+ registerOnChange(fn: (value: number | null) => void): void;
659
+ registerOnTouched(fn: () => void): void;
660
+ setDisabledState(isDisabled: boolean): void;
661
+ classes: _angular_core.Signal<string>;
662
+ onInput(event: Event): void;
663
+ onBlur(): void;
664
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngNumberInput, never>;
665
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngNumberInput, "tng-number-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "klass": { "alias": "klass"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
666
+ }
667
+
668
+ declare class TngRadioButton implements ControlValueAccessor {
669
+ readonly id: _angular_core.InputSignal<string>;
670
+ readonly name: _angular_core.InputSignal<string>;
671
+ readonly value: _angular_core.InputSignal<string>;
672
+ readonly label: _angular_core.InputSignal<string>;
673
+ readonly disabled: _angular_core.InputSignal<boolean>;
674
+ readonly required: _angular_core.InputSignal<boolean>;
675
+ /** Root <label> */
676
+ readonly rootKlass: _angular_core.InputSignal<string>;
677
+ /** <input type="radio"> */
678
+ readonly inputKlass: _angular_core.InputSignal<string>;
679
+ /** Label <span> */
680
+ readonly labelKlass: _angular_core.InputSignal<string>;
681
+ private readonly _formValue;
682
+ readonly isChecked: _angular_core.Signal<boolean>;
683
+ private onChange;
684
+ private onTouched;
685
+ private readonly _formDisabled;
686
+ readonly isDisabled: _angular_core.Signal<boolean>;
687
+ writeValue(value: string | null): void;
688
+ registerOnChange(fn: (value: string) => void): void;
689
+ registerOnTouched(fn: () => void): void;
690
+ setDisabledState(isDisabled: boolean): void;
691
+ /** Final classes */
692
+ readonly classes: _angular_core.Signal<string>;
693
+ onSelect(event: Event): void;
694
+ onBlur(): void;
695
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngRadioButton, never>;
696
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngRadioButton, "tng-radio-button", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; "labelKlass": { "alias": "labelKlass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
697
+ }
698
+
699
+ type SelectCloseReason = TngOverlayCloseReason;
700
+ type SelectValueTplContext<T> = {
701
+ $implicit: T;
702
+ };
703
+ declare class TngSelect<T> implements ControlValueAccessor {
704
+ optionTpl?: TemplateRef<OptionTplContext<T>>;
705
+ valueTpl?: TemplateRef<SelectValueTplContext<T>>;
706
+ triggerEl: ElementRef<HTMLElement>;
707
+ optionList?: TngOptionList<T>;
708
+ readonly options: _angular_core.InputSignal<T[]>;
709
+ readonly value: _angular_core.InputSignal<T | null>;
710
+ readonly placeholder: _angular_core.InputSignal<string>;
711
+ readonly disabled: _angular_core.InputSignal<boolean>;
712
+ readonly displayWith: _angular_core.InputSignal<(item: T) => string>;
713
+ readonly selected: _angular_core.OutputEmitterRef<T>;
714
+ readonly closed: _angular_core.OutputEmitterRef<TngOverlayCloseReason>;
715
+ readonly rootKlass: _angular_core.InputSignal<string>;
716
+ readonly triggerKlass: _angular_core.InputSignal<string>;
717
+ readonly valueKlass: _angular_core.InputSignal<string>;
718
+ readonly placeholderKlass: _angular_core.InputSignal<string>;
719
+ readonly iconKlass: _angular_core.InputSignal<string>;
720
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
721
+ readonly activeIndex: _angular_core.WritableSignal<number>;
722
+ protected readonly isDisabled: _angular_core.WritableSignal<boolean>;
723
+ private readonly selectedValue;
724
+ private usingCva;
725
+ private onChange;
726
+ private onTouched;
727
+ constructor();
728
+ writeValue(value: T | null): void;
729
+ registerOnChange(fn: (value: T | null) => void): void;
730
+ registerOnTouched(fn: () => void): void;
731
+ setDisabledState(isDisabled: boolean): void;
732
+ display(item: T | null): string;
733
+ currentValue(): T | null;
734
+ readonly triggerClasses: _angular_core.Signal<string>;
735
+ open(_reason: SelectCloseReason): void;
736
+ close(reason: SelectCloseReason): void;
737
+ onOverlayOpenChange(open: boolean): void;
738
+ onOverlayClosed(reason: SelectCloseReason): void;
739
+ onTriggerClick(): void;
740
+ onBlur(): void;
741
+ onKeydown(ev: KeyboardEvent): void;
742
+ private isListNavigationKey;
743
+ private cloneKeyboardEvent;
744
+ onActiveIndexChange(i: number): void;
745
+ requestSelectActive(): void;
746
+ select(item: T): void;
747
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngSelect<any>, never>;
748
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngSelect<any>, "tng-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "triggerKlass": { "alias": "triggerKlass"; "required": false; "isSignal": true; }; "valueKlass": { "alias": "valueKlass"; "required": false; "isSignal": true; }; "placeholderKlass": { "alias": "placeholderKlass"; "required": false; "isSignal": true; }; "iconKlass": { "alias": "iconKlass"; "required": false; "isSignal": true; }; }, { "selected": "selected"; "closed": "closed"; }, ["optionTpl", "valueTpl"], never, true, never>;
749
+ }
750
+
751
+ declare class TngSlider implements ControlValueAccessor {
752
+ readonly id: _angular_core.InputSignal<string>;
753
+ readonly name: _angular_core.InputSignal<string>;
754
+ readonly ariaLabel: _angular_core.InputSignal<string>;
755
+ readonly min: _angular_core.InputSignal<number>;
756
+ readonly max: _angular_core.InputSignal<number>;
757
+ readonly step: _angular_core.InputSignal<number>;
758
+ readonly disabled: _angular_core.InputSignal<boolean>;
759
+ /**
760
+ * Controlled usage (Angular 21 signals):
761
+ * <tng-slider [value]="v()" (valueChange)="v.set($event)" />
762
+ *
763
+ * When `value` is provided (not null), it becomes the source of truth.
764
+ */
765
+ readonly value: _angular_core.InputSignal<number | null>;
766
+ readonly valueChange: _angular_core.OutputEmitterRef<number>;
767
+ readonly rootKlass: _angular_core.InputSignal<string>;
768
+ readonly labelKlass: _angular_core.InputSignal<string>;
769
+ readonly trackKlass: _angular_core.InputSignal<string>;
770
+ readonly fillKlass: _angular_core.InputSignal<string>;
771
+ readonly thumbKlass: _angular_core.InputSignal<string>;
772
+ readonly rangeKlass: _angular_core.InputSignal<string>;
773
+ private readonly _value;
774
+ private readonly _formDisabled;
775
+ readonly isDisabled: _angular_core.Signal<boolean>;
776
+ private onChange;
777
+ private onTouched;
778
+ /** effective value: controlled `value` wins when provided */
779
+ readonly currentValue: _angular_core.Signal<number>;
780
+ readonly clampedValue: _angular_core.Signal<number>;
781
+ readonly percent: _angular_core.Signal<number>;
782
+ readonly trackClasses: _angular_core.Signal<string>;
783
+ readonly fillClasses: _angular_core.Signal<string>;
784
+ readonly thumbClasses: _angular_core.Signal<string>;
785
+ readonly rangeClasses: _angular_core.Signal<string>;
786
+ writeValue(value: number | null): void;
787
+ registerOnChange(fn: (value: number) => void): void;
788
+ registerOnTouched(fn: () => void): void;
789
+ setDisabledState(isDisabled: boolean): void;
790
+ onInput(ev: Event): void;
791
+ onBlur(): void;
792
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngSlider, never>;
793
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngSlider, "tng-slider", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "labelKlass": { "alias": "labelKlass"; "required": false; "isSignal": true; }; "trackKlass": { "alias": "trackKlass"; "required": false; "isSignal": true; }; "fillKlass": { "alias": "fillKlass"; "required": false; "isSignal": true; }; "thumbKlass": { "alias": "thumbKlass"; "required": false; "isSignal": true; }; "rangeKlass": { "alias": "rangeKlass"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
794
+ }
795
+
796
+ declare class TngSlideToggle implements ControlValueAccessor {
797
+ readonly id: _angular_core.InputSignal<string>;
798
+ readonly name: _angular_core.InputSignal<string>;
799
+ readonly label: _angular_core.InputSignal<string>;
800
+ readonly disabled: _angular_core.InputSignal<boolean>;
801
+ readonly required: _angular_core.InputSignal<boolean>;
802
+ readonly checked: _angular_core.InputSignal<boolean | null>;
803
+ readonly checkedChange: _angular_core.OutputEmitterRef<boolean>;
804
+ readonly rootKlass: _angular_core.InputSignal<string>;
805
+ readonly trackKlass: _angular_core.InputSignal<string>;
806
+ readonly thumbKlass: _angular_core.InputSignal<string>;
807
+ readonly labelKlass: _angular_core.InputSignal<string>;
808
+ readonly inputKlass: _angular_core.InputSignal<string>;
809
+ private readonly _value;
810
+ private readonly _formDisabled;
811
+ readonly isDisabled: _angular_core.Signal<boolean>;
812
+ private onChange;
813
+ private onTouched;
814
+ /** effective value: controlled `checked` wins when provided */
815
+ readonly value: _angular_core.Signal<boolean>;
816
+ writeValue(value: boolean | null): void;
817
+ registerOnChange(fn: (value: boolean) => void): void;
818
+ registerOnTouched(fn: () => void): void;
819
+ setDisabledState(isDisabled: boolean): void;
820
+ readonly trackClasses: _angular_core.Signal<string>;
821
+ readonly thumbClasses: _angular_core.Signal<string>;
822
+ onToggle(ev: Event): void;
823
+ onBlur(): void;
824
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngSlideToggle, never>;
825
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngSlideToggle, "tng-slide-toggle", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "trackKlass": { "alias": "trackKlass"; "required": false; "isSignal": true; }; "thumbKlass": { "alias": "thumbKlass"; "required": false; "isSignal": true; }; "labelKlass": { "alias": "labelKlass"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
826
+ }
827
+
828
+ declare class TngTextarea implements ControlValueAccessor {
829
+ placeholder: _angular_core.InputSignal<string>;
830
+ disabled: _angular_core.InputSignal<boolean>;
831
+ rows: _angular_core.InputSignal<number>;
832
+ klass: _angular_core.InputSignal<string>;
833
+ private readonly _value;
834
+ readonly value: _angular_core.Signal<string>;
835
+ private onChange;
836
+ private onTouched;
837
+ writeValue(value: string | null): void;
838
+ registerOnChange(fn: (value: string) => void): void;
839
+ registerOnTouched(fn: () => void): void;
840
+ setDisabledState(isDisabled: boolean): void;
841
+ private readonly _formDisabled;
842
+ readonly isDisabled: _angular_core.Signal<boolean>;
843
+ classes: _angular_core.Signal<string>;
844
+ onInput(event: Event): void;
845
+ onBlur(): void;
846
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngTextarea, never>;
847
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngTextarea, "tng-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "klass": { "alias": "klass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
848
+ }
849
+
850
+ declare class TngTextInput implements ControlValueAccessor {
851
+ id: _angular_core.InputSignal<string>;
852
+ name: _angular_core.InputSignal<string>;
853
+ placeholder: _angular_core.InputSignal<string>;
854
+ type: _angular_core.InputSignal<"email" | "search" | "text" | "password" | "tel" | "url">;
855
+ disabled: _angular_core.InputSignal<boolean>;
856
+ readonly: _angular_core.InputSignal<boolean>;
857
+ autocomplete: _angular_core.InputSignal<string>;
858
+ inputmode: _angular_core.InputSignal<string>;
859
+ minlength: _angular_core.InputSignal<number | null>;
860
+ maxlength: _angular_core.InputSignal<number | null>;
861
+ pattern: _angular_core.InputSignal<string | null>;
862
+ /**
863
+ * Prefix: non-clickable by default (safer UX).
864
+ * If you want clickable prefix, set prefixClickable=true and use a <button tngPrefix>.
865
+ */
866
+ prefixClickable: _angular_core.InputSignal<boolean>;
867
+ rootKlass: _angular_core.InputSignal<string>;
868
+ inputKlass: _angular_core.InputSignal<string>;
869
+ prefixKlass: _angular_core.InputSignal<string>;
870
+ suffixKlass: _angular_core.InputSignal<string>;
871
+ private readonly _value;
872
+ readonly value: _angular_core.Signal<string>;
873
+ private onChange;
874
+ private onTouched;
875
+ private readonly _formDisabled;
876
+ readonly isDisabled: _angular_core.Signal<boolean>;
877
+ setDisabledState(isDisabled: boolean): void;
878
+ writeValue(value: string | null): void;
879
+ registerOnChange(fn: (value: string) => void): void;
880
+ registerOnTouched(fn: () => void): void;
881
+ readonly rootKlassFinal: _angular_core.Signal<string>;
882
+ readonly inputKlassFinal: _angular_core.Signal<string>;
883
+ readonly prefixKlassFinal: _angular_core.Signal<string>;
884
+ readonly suffixKlassFinal: _angular_core.Signal<string>;
885
+ private composing;
886
+ onCompositionStart(): void;
887
+ onCompositionEnd(event: Event): void;
888
+ onInput(event: Event): void;
889
+ private commitValue;
890
+ onBlur(): void;
891
+ private join;
892
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngTextInput, never>;
893
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngTextInput, "tng-text-input", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "prefixClickable": { "alias": "prefixClickable"; "required": false; "isSignal": true; }; "rootKlass": { "alias": "rootKlass"; "required": false; "isSignal": true; }; "inputKlass": { "alias": "inputKlass"; "required": false; "isSignal": true; }; "prefixKlass": { "alias": "prefixKlass"; "required": false; "isSignal": true; }; "suffixKlass": { "alias": "suffixKlass"; "required": false; "isSignal": true; }; }, {}, never, ["[tngPrefix]", "[tngSuffix]"], true, never>;
894
+ }
895
+
896
+ declare class TngTimepicker {
897
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TngTimepicker, never>;
898
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TngTimepicker, "tng-timepicker", never, {}, {}, never, never, true, never>;
899
+ }
900
+
901
+ export { TNG_DATE_ADAPTER, TngAutocomplete, TngButtonToggle, TngCheckbox, TngChips, TngDatepicker, TngFileDropzone, TngFileUpload, TngFormField, TngNativeDateAdapter, TngNumberInput, TngRadioButton, TngSelect, TngSlideToggle, TngSlider, TngTextInput, TngTextarea, TngTimepicker, computeNextCaretPos, formatDate, parseSmartDate };
902
+ export type { AutocompleteCloseReason, ChipTplContext, ChipsCloseReason, ParseResult, SelectCloseReason, SelectValueTplContext, TngButtonToggleOption, TngButtonToggleSelection, TngButtonToggleValue, TngDateAdapter, TngDateInput, TngFileDrop, TngFormFieldAppearance, TngFormFieldSize };
903
+ //# sourceMappingURL=tociva-tailng-ui-form-controls.d.ts.map