@tekus/design-system 5.31.0 → 5.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,268 +1,318 @@
1
- import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
2
1
  import * as _angular_core from '@angular/core';
3
2
  import { OnInit } from '@angular/core';
4
- import { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';
3
+ import { ControlValueAccessor, Validator, NgControl, FormControl, ValidationErrors } from '@angular/forms';
5
4
 
6
5
  type DateValue = Date | [Date, Date] | null;
7
- declare class DatePickerComponent implements OnInit, ControlValueAccessor {
8
- /** Internal references and injections */
6
+ /**
7
+ * @description
8
+ * Wrapper around PrimeNG's DatePicker with support for single-date, date-range,
9
+ * and combined date+time modes. Implements `ControlValueAccessor` and `Validator`
10
+ * so it works transparently with reactive forms (`[formControl]`, `[control]`)
11
+ * and template-driven forms (`[(ngModel)]`). A signal model (`[(modelValue)]`)
12
+ * is also available for standalone usage without Angular forms.
13
+ *
14
+ * For time-only selection use `tk-time-picker` instead.
15
+ *
16
+ * @example
17
+ * <!-- Date range with reactive form -->
18
+ * <tk-date-picker
19
+ * [control]="form.controls.stayRange"
20
+ * selectionMode="range"
21
+ * labelText="Stay dates"
22
+ * [showClear]="true">
23
+ * </tk-date-picker>
24
+ *
25
+ * @example
26
+ * <!-- Combined date + time -->
27
+ * <tk-date-picker
28
+ * [showTime]="true"
29
+ * hourFormat="24"
30
+ * [(modelValue)]="appointmentDateTime"
31
+ * labelText="Appointment">
32
+ * </tk-date-picker>
33
+ */
34
+ declare class DatePickerComponent implements OnInit, ControlValueAccessor, Validator {
35
+ /** @internal */
9
36
  readonly ngControl: NgControl | null;
37
+ /** @internal */
10
38
  private readonly destroyRef;
11
39
  constructor();
12
40
  /**
13
- * @property {InputSignal<'date' | 'time' | 'both'>} variant
14
41
  * @description
15
- * Defines the visual and functional mode:
16
- * - `'date'`: standard date/range picker
17
- * - `'time'`: time-only picker
18
- * - `'both'`: date and time picker
19
- * @default 'date'
42
+ * Marks the field as required. When `true`, the component returns a
43
+ * `{ required: true }` validation error when no date is selected.
44
+ *
45
+ * @default false
46
+ *
47
+ * @example
48
+ * <tk-date-picker [required]="true" errorMessage="Date is required" />
20
49
  */
21
- variant: _angular_core.InputSignal<"date" | "time" | "both">;
50
+ required: _angular_core.InputSignal<boolean>;
22
51
  /**
23
- * @property {InputSignal<'single' | 'range'>} selectionMode
24
52
  * @description
25
- * Defines how the datepicker behaves:
26
- * - `'single'`: select one date
27
- * - `'range'`: select a pair of dates [start, end]
53
+ * Selection behaviour for the date calendar.
54
+ * - `'single'` — one date.
55
+ * - `'range'` — a pair of dates `[start, end]`.
56
+ *
28
57
  * @default 'range'
58
+ *
59
+ * @example
60
+ * <tk-date-picker selectionMode="single" />
29
61
  */
30
62
  selectionMode: _angular_core.InputSignal<"single" | "range">;
31
63
  /**
32
- * @property {InputSignal<boolean>} readonlyInput
33
64
  * @description
34
- * Disables manual typing in the input and forces the user to select via the calendar.
35
- * @default true
36
- */
37
- readonlyInput: _angular_core.InputSignal<boolean>;
38
- /**
39
- * @property {InputSignal<boolean>} showClear
40
- * @description
41
- * Displays a clear button that resets the datepicker value.
65
+ * Shows a clear (×) button that resets the value to `null`.
66
+ *
42
67
  * @default true
68
+ *
69
+ * @example
70
+ * <tk-date-picker [showClear]="false" />
43
71
  */
44
72
  showClear: _angular_core.InputSignal<boolean>;
45
73
  /**
46
- * @property {InputSignal<boolean>} showIcon
47
74
  * @description
48
- * Shows the calendar or clock icon inside the input.
75
+ * Shows the calendar icon inside the input field.
76
+ * When `false`, the overlay can only be opened by clicking the input itself.
77
+ *
49
78
  * @default true
79
+ *
80
+ * @example
81
+ * <tk-date-picker [showIcon]="false" />
50
82
  */
51
83
  showIcon: _angular_core.InputSignal<boolean>;
52
84
  /**
53
- * @property {InputSignal<string>} dateFormat
54
85
  * @description
55
- * Format used by PrimeNG for displaying dates.
86
+ * Date display format forwarded to PrimeNG (e.g. `'dd/mm/yy'`, `'yy-mm-dd'`).
87
+ *
56
88
  * @default 'dd/mm/yy'
89
+ *
90
+ * @example
91
+ * <tk-date-picker dateFormat="yy-mm-dd" />
57
92
  */
58
93
  dateFormat: _angular_core.InputSignal<string>;
59
94
  /**
60
- * @property {InputSignal<string>} timeFormat
61
- * @description
62
- * Format used by PrimeNG for displaying times.
63
- * @default 'HH:mm'
64
- */
65
- timeFormat: _angular_core.InputSignal<string>;
66
- /**
67
- * @property {InputSignal<number>} stepHour
68
- * @description
69
- * Hours to skip when clicking up/down.
95
+ * @description Hour increment/decrement step for the time spinner (used when `showTime=true`).
70
96
  * @default 1
71
97
  */
72
98
  stepHour: _angular_core.InputSignal<number>;
73
99
  /**
74
- * @property {InputSignal<number>} stepMinute
75
- * @description
76
- * Minutes to skip when clicking up/down.
100
+ * @description Minute increment/decrement step for the time spinner (used when `showTime=true`).
77
101
  * @default 1
78
102
  */
79
103
  stepMinute: _angular_core.InputSignal<number>;
80
104
  /**
81
- * @property {InputSignal<number>} stepSecond
82
- * @description
83
- * Seconds to skip when clicking up/down.
105
+ * @description Second increment/decrement step for the time spinner (used when `showTime=true`).
84
106
  * @default 1
85
107
  */
86
108
  stepSecond: _angular_core.InputSignal<number>;
87
109
  /**
88
- * @property {InputSignal<boolean>} showSeconds
89
110
  * @description
90
- * Whether to show seconds in the time picker.
91
- * Only applicable when hourFormat is '24'.
111
+ * Whether to show the seconds segment in the time spinner.
112
+ * Only active when `showTime=true` and `hourFormat="24"`.
113
+ *
92
114
  * @default false
93
115
  */
94
116
  showSeconds: _angular_core.InputSignal<boolean>;
95
117
  /**
96
- * @property {InputSignal<boolean>} disabled
97
118
  * @description
98
- * Whether the component is disabled.
119
+ * Disables the entire component. Can also be controlled through the bound
120
+ * form control via `control.disable()` / `control.enable()`.
121
+ *
99
122
  * @default false
123
+ *
124
+ * @example
125
+ * <tk-date-picker [disabled]="isReadonly()" />
100
126
  */
101
127
  disabled: _angular_core.InputSignal<boolean>;
102
128
  /**
103
- * @property {InputSignal<boolean>} inline
104
129
  * @description
105
- * Whether to display the datepicker inline.
130
+ * Renders the calendar inline (always visible) instead of in a dropdown overlay.
131
+ *
106
132
  * @default false
133
+ *
134
+ * @example
135
+ * <tk-date-picker [inline]="true" selectionMode="single" />
107
136
  */
108
137
  inline: _angular_core.InputSignal<boolean>;
109
138
  /**
110
- * @property {InputSignal<boolean>} showTime
111
139
  * @description
112
- * Whether to show the time picker along with the date picker.
140
+ * Adds a time spinner alongside the date calendar.
141
+ *
113
142
  * @default false
143
+ *
144
+ * @example
145
+ * <tk-date-picker [showTime]="true" hourFormat="24" />
114
146
  */
115
147
  showTime: _angular_core.InputSignal<boolean>;
116
148
  /**
117
- * @property {InputSignal<'12' | '24'>} hourFormat
118
149
  * @description
119
- * Format of the hours: '12' or '24'.
150
+ * Hour format for the time spinner (only relevant when `showTime=true`).
151
+ * - `'24'` — 0–23 hours.
152
+ * - `'12'` — 1–12 hours with AM/PM toggle.
153
+ *
120
154
  * @default '24'
155
+ *
156
+ * @example
157
+ * <tk-date-picker [showTime]="true" hourFormat="12" />
121
158
  */
122
159
  hourFormat: _angular_core.InputSignal<"12" | "24">;
123
160
  /**
124
- * @property {InputSignal<string | HTMLElement | null | undefined>} appendTo
125
161
  * @description
126
- * Target element to attach the overlay to.
127
- * @default 'null'
162
+ * Target element or CSS selector to which the overlay panel is appended.
163
+ * Use `'body'` to escape `overflow:hidden` parent containers (e.g. modals).
164
+ *
165
+ * @default 'body'
166
+ *
167
+ * @example
168
+ * <tk-date-picker appendTo="body" />
128
169
  */
129
170
  appendTo: _angular_core.InputSignal<string | HTMLElement | null | undefined>;
130
171
  /**
131
- * @property {InputSignal<number>} baseZIndex
132
- * @description
133
- * Base z-index value for the overlay.
172
+ * @description Base z-index applied to the overlay panel.
134
173
  * @default 10000
135
174
  */
136
175
  baseZIndex: _angular_core.InputSignal<number>;
137
176
  /**
138
- * @property {InputSignal<Date | null>} maxDate
139
177
  * @description
140
- * Maximum selectable date.
178
+ * Latest selectable date. Enforced both by PrimeNG (disables calendar days)
179
+ * and by Angular form validation.
180
+ *
141
181
  * @default null
182
+ *
183
+ * @example
184
+ * <tk-date-picker [maxDate]="today" errorMessage="Date cannot be in the future" />
142
185
  */
143
186
  maxDate: _angular_core.InputSignal<Date | null>;
144
187
  /**
145
- * @property {InputSignal<Date | null>} minDate
146
188
  * @description
147
- * Minimum selectable date.
189
+ * Earliest selectable date. Enforced both by PrimeNG (disables calendar days)
190
+ * and by Angular form validation.
191
+ *
148
192
  * @default null
193
+ *
194
+ * @example
195
+ * <tk-date-picker [minDate]="today" errorMessage="Date must be today or later" />
149
196
  */
150
197
  minDate: _angular_core.InputSignal<Date | null>;
151
198
  /**
152
- * @property {InputSignal<string>} labelText
153
- * @description
154
- * Label shown by the float-label wrapper.
199
+ * @description Floating label text shown above the input field.
200
+ * @default 'Select a date'
201
+ * @example
202
+ * <tk-date-picker labelText="Check-in date" />
155
203
  */
156
204
  labelText: _angular_core.InputSignal<string>;
157
205
  /**
158
- * @property {InputSignal<FormControl>} control
159
206
  * @description
160
- * External FormControl used to read/set the datepicker value.
161
- * If not provided, an internal FormControl is created.
207
+ * Validation error message rendered beneath the field when the bound control
208
+ * is invalid and the field has been dirtied or touched.
209
+ *
210
+ * @default null
211
+ *
212
+ * @example
213
+ * <tk-date-picker [minDate]="minDate" errorMessage="Date is required" />
214
+ */
215
+ errorMessage: _angular_core.InputSignal<string | null>;
216
+ /**
217
+ * @description
218
+ * Optional external `FormControl` to bind when not using the standard
219
+ * `formControl` / `formControlName` / `ngModel` directives.
220
+ *
221
+ * @example
222
+ * <tk-date-picker [control]="form.controls.startDate" />
162
223
  */
163
224
  control: _angular_core.InputSignal<FormControl<any> | undefined>;
164
225
  /**
165
- * @property {ModelSignal<DateValue>} modelValue
166
226
  * @description
167
- * The value of the datepicker model. Supports two-way binding.
227
+ * Two-way signal binding for the selected value.
228
+ * Accepts `Date` (single), `[Date, Date]` (range), or `null` (cleared).
229
+ *
230
+ * @example
231
+ * <tk-date-picker [(modelValue)]="selectedDate" />
168
232
  */
169
233
  modelValue: _angular_core.ModelSignal<DateValue>;
170
234
  /**
171
- * @property {OutputRef<DateValue>} handleSelect
172
235
  * @description
173
- * Emitted when a value is selected.
236
+ * Emits the selected value whenever a complete selection is made.
237
+ * In range mode, fires only when both start and end dates are chosen.
238
+ *
239
+ * @example
240
+ * <tk-date-picker (handleSelect)="onDateSelected($event)" />
174
241
  */
175
242
  handleSelect: _angular_core.OutputEmitterRef<DateValue>;
176
243
  /**
177
- * @property {OutputRef<void>} handleClear
178
- * @description
179
- * Emitted when the value is cleared.
244
+ * @description Emits when the user clears the field via the clear button.
245
+ * @example
246
+ * <tk-date-picker (handleClear)="onCleared()" />
180
247
  */
181
248
  handleClear: _angular_core.OutputEmitterRef<void>;
182
- /**
183
- * @property {WritableSignal<boolean>} disabledStatus
184
- * @description
185
- * Internal signal to track disabled state.
186
- */
249
+ /** @internal */
187
250
  disabledStatus: _angular_core.WritableSignal<boolean>;
188
- /**
189
- * @property {Signal<boolean>} effectiveDisabled
190
- * @description
191
- * Returns true if either the [disabled] input is true OR the FormControl is disabled.
192
- */
251
+ /** @internal */
193
252
  effectiveDisabled: _angular_core.Signal<boolean>;
194
- /** Computed properties */
195
- /**
196
- * @property {Signal<'single' | 'range'>} effectiveSelectionMode
197
- * @description
198
- * Returns 'single' automatically if variant is 'time', otherwise returns the user-provided selectionMode.
199
- */
253
+ /** @internal */
254
+ effectiveMinDate: _angular_core.Signal<Date | null>;
255
+ /** @internal */
256
+ effectiveMaxDate: _angular_core.Signal<Date | null>;
257
+ /** @internal */
200
258
  effectiveSelectionMode: _angular_core.Signal<"single" | "range">;
201
- /**
202
- * @property {Signal<string>} effectiveDateFormat
203
- * @description
204
- * Returns the user-provided dateFormat or timeFormat based on the variant.
205
- */
259
+ /** @internal */
260
+ effectiveHourFormat: _angular_core.Signal<"12" | "24">;
261
+ /** @internal */
206
262
  effectiveDateFormat: _angular_core.Signal<string>;
207
- /**
208
- * @property {Signal<boolean>} effectiveShowSeconds
209
- * @description
210
- * Returns whether seconds should be shown, restricted to 24h format.
211
- */
263
+ /** @internal */
212
264
  effectiveShowSeconds: _angular_core.Signal<boolean>;
213
- /**
214
- * @property {Signal<boolean>} effectiveShowTime
215
- * @description
216
- * Returns whether the time picker should be shown.
217
- */
265
+ /** @internal */
218
266
  effectiveShowTime: _angular_core.Signal<boolean>;
267
+ /** @internal */
268
+ private readonly internalControl;
219
269
  /**
220
- * @property {Signal<FormControl>} effectiveControl
221
270
  * @description
222
- * Returns the external FormControl from NgControl or a local fallback.
271
+ * Memoised signal returning the active `FormControl` in priority order:
272
+ * `NgControl` (reactive forms) → `control` input → internal fallback control.
223
273
  */
224
- private readonly internalControl;
225
- get effectiveControl(): FormControl;
226
- /** Icons */
227
- faCalendarDay: _fortawesome_fontawesome_common_types.IconDefinition;
228
- faClock: _fortawesome_fontawesome_common_types.IconDefinition;
229
- /** CVA Logic */
230
- onChange: (value: DateValue) => void;
231
- onTouched: () => void;
232
- private lastValue;
233
- private isWriting;
274
+ readonly effectiveControl: _angular_core.Signal<FormControl<any>>;
275
+ /** @internal Unique DOM id used for `inputId` / `for` binding on every instance. */
276
+ readonly uid: string;
277
+ /** @internal */ onChange: (value: DateValue) => void;
278
+ /** @internal */ onTouched: () => void;
279
+ /** @internal */ onValidatorChange: () => void;
280
+ /** @internal */ private lastValue;
281
+ /** @internal */ private readonly boundValidate;
282
+ /** @inheritdoc */
234
283
  ngOnInit(): void;
284
+ /** @inheritdoc */
235
285
  writeValue(value: DateValue): void;
286
+ /** @inheritdoc */
236
287
  registerOnChange(fn: (value: DateValue) => void): void;
288
+ /** @inheritdoc */
237
289
  registerOnTouched(fn: () => void): void;
290
+ /** @inheritdoc */
291
+ registerOnValidatorChange(fn: () => void): void;
292
+ /** @inheritdoc */
293
+ validate(): ValidationErrors | null;
294
+ private validateBounds;
295
+ /** @inheritdoc */
238
296
  setDisabledState(isDisabled: boolean): void;
239
- /**
240
- * @method onModelChange
241
- * @description
242
- * Called when the PrimeNG DatePicker template updates the value.
243
- */
297
+ /** @description Central change handler for PrimeNG's `ngModelChange`. */
244
298
  onModelChange(value: DateValue): void;
299
+ /** @description Marks the control as touched when the user leaves the field. */
300
+ onBlur(): void;
245
301
  /**
246
- * @method applyTimeCascading
247
- * @private
248
- * @description
249
- * Adjusts the date when minutes or seconds wrap around.
250
- */
251
- private applyTimeCascading;
252
- /**
253
- * @method onBlur
254
- * @description
255
- * Triggered when the component loses focus.
302
+ * @description Programmatically clears the selected value, resetting it to `null`.
303
+ *
304
+ * @example
305
+ * <tk-date-picker #picker />
306
+ * <button (click)="picker.clear()">Reset</button>
256
307
  */
257
- onBlur(): void;
308
+ clear(): void;
258
309
  /**
259
- * @method clear
260
310
  * @description
261
- * Programmatically clears the value.
311
+ * Adjusts hours or minutes when the spinner rolls over a unit boundary.
262
312
  */
263
- clear(): void;
313
+ private applyTimeCascading;
264
314
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatePickerComponent, never>;
265
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "tk-date-picker", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "readonlyInput": { "alias": "readonlyInput"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "stepHour": { "alias": "stepHour"; "required": false; "isSignal": true; }; "stepMinute": { "alias": "stepMinute"; "required": false; "isSignal": true; }; "stepSecond": { "alias": "stepSecond"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "baseZIndex": { "alias": "baseZIndex"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "labelText": { "alias": "labelText"; "required": false; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "modelValue": { "alias": "modelValue"; "required": false; "isSignal": true; }; }, { "modelValue": "modelValueChange"; "handleSelect": "handleSelect"; "handleClear": "handleClear"; }, never, never, true, never>;
315
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent, "tk-date-picker", never, { "required": { "alias": "required"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "stepHour": { "alias": "stepHour"; "required": false; "isSignal": true; }; "stepMinute": { "alias": "stepMinute"; "required": false; "isSignal": true; }; "stepSecond": { "alias": "stepSecond"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; "hourFormat": { "alias": "hourFormat"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "baseZIndex": { "alias": "baseZIndex"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "labelText": { "alias": "labelText"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "modelValue": { "alias": "modelValue"; "required": false; "isSignal": true; }; }, { "modelValue": "modelValueChange"; "handleSelect": "handleSelect"; "handleClear": "handleClear"; }, never, never, true, never>;
266
316
  }
267
317
 
268
318
  export { DatePickerComponent };
@@ -82,9 +82,18 @@ declare class IconComponent {
82
82
  /**
83
83
  * Gets the key style for the icon based on the current styleIcon model.
84
84
  *
85
- * @returns 'light' | 'regular' | 'solid' | null
85
+ * @returns 'light' | 'regular' | 'solid' | null
86
86
  */
87
87
  getKeyStyle(): 'light' | 'regular' | 'solid' | null;
88
+ /**
89
+ * Converts a kebab-case icon name to the FontAwesome camelCase key (e.g. 'arrow-right' → 'faArrowRight').
90
+ */
91
+ private toFaKey;
92
+ /**
93
+ * Fallback loader for any FA icon not registered in the catalog.
94
+ * Dynamically imports the icon by name from the appropriate FA pro package.
95
+ */
96
+ private loadIconFaFallback;
88
97
  /**
89
98
  * Loads a custom icon from the IconCatalog.
90
99
  * Sanitize the SVG content and apply the appropriate color.
@@ -4,7 +4,7 @@ import { TagSeverity } from '@tekus/design-system/components/tag';
4
4
  import { SortEvent } from 'primeng/api';
5
5
  import { TkAction } from '@tekus/design-system/components/action-group';
6
6
 
7
- type TableColumnType = 'text' | 'tag' | 'actions' | 'selection' | 'checkbox' | 'action-group' | 'connection-status';
7
+ type TableColumnType = 'text' | 'tag' | 'actions' | 'selection' | 'checkbox' | 'action-group' | 'connection-status' | 'image';
8
8
  interface TableColumn<T = unknown> {
9
9
  field?: string;
10
10
  header: string;
@@ -25,6 +25,11 @@ interface TableColumn<T = unknown> {
25
25
  action: (row: T) => void;
26
26
  }>;
27
27
  actionGroupMaxVisible?: number;
28
+ imageAlt?: (row: T) => string;
29
+ imageWidth?: string;
30
+ imageHeight?: string;
31
+ imageFallback?: string;
32
+ imageAction?: (row: T) => void;
28
33
  }
29
34
 
30
35
  declare class TableComponent<T = unknown> {
@@ -193,6 +198,26 @@ declare class TableComponent<T = unknown> {
193
198
  * Handles primitives directly and avoids [object Object] for complex types.
194
199
  */
195
200
  private cellToString;
201
+ /**
202
+ * @method handleImageClick
203
+ * @description
204
+ * Handles click events on image-type cells.
205
+ * Stops row selection propagation and invokes the column's imageAction callback when defined.
206
+ * No-op when imageAction is not set, preserving default row-click behavior.
207
+ * @param event {Event} - The native click event.
208
+ * @param col {TableColumn<T>} - The column definition that may carry an imageAction.
209
+ * @param row {T} - The data row associated with the clicked image.
210
+ */
211
+ handleImageClick(event: Event, col: TableColumn<T>, row: T): void;
212
+ /**
213
+ * @method onImageError
214
+ * @description
215
+ * Handles image load errors by replacing the broken src with a fallback URL.
216
+ * Called from the template's (error) binding on image-type columns.
217
+ * @param event {Event} - The native error event from the <img> element.
218
+ * @param fallback {string | undefined} - Optional URL to use as replacement src.
219
+ */
220
+ onImageError(event: Event, fallback?: string): void;
196
221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent<any>, never>;
197
222
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent<any>, "tk-table", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; }, never, never, true, never>;
198
223
  }