@keenthemes/ktui 1.2.6 → 1.2.7

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 (190) hide show
  1. package/README.md +14 -5
  2. package/dist/ktui.js +3775 -2298
  3. package/dist/ktui.min.js +1 -1
  4. package/dist/ktui.min.js.map +1 -1
  5. package/dist/styles.css +25 -5
  6. package/lib/cjs/components/datatable/datatable-checkbox.d.ts +37 -1
  7. package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -1
  8. package/lib/cjs/components/datatable/datatable-checkbox.js +143 -156
  9. package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -1
  10. package/lib/cjs/components/datatable/datatable-column-utils.d.ts +30 -0
  11. package/lib/cjs/components/datatable/datatable-column-utils.d.ts.map +1 -0
  12. package/lib/cjs/components/datatable/datatable-column-utils.js +42 -0
  13. package/lib/cjs/components/datatable/datatable-column-utils.js.map +1 -0
  14. package/lib/cjs/components/datatable/datatable-contracts.d.ts +2 -4
  15. package/lib/cjs/components/datatable/datatable-contracts.d.ts.map +1 -1
  16. package/lib/cjs/components/datatable/datatable-defaults.d.ts +20 -0
  17. package/lib/cjs/components/datatable/datatable-defaults.d.ts.map +1 -0
  18. package/lib/cjs/components/datatable/datatable-defaults.js +193 -0
  19. package/lib/cjs/components/datatable/datatable-defaults.js.map +1 -0
  20. package/lib/cjs/components/datatable/datatable-layout-plugin.d.ts.map +1 -1
  21. package/lib/cjs/components/datatable/datatable-layout-plugin.js +11 -1
  22. package/lib/cjs/components/datatable/datatable-layout-plugin.js.map +1 -1
  23. package/lib/cjs/components/datatable/datatable-local-provider.d.ts.map +1 -1
  24. package/lib/cjs/components/datatable/datatable-local-provider.js +80 -24
  25. package/lib/cjs/components/datatable/datatable-local-provider.js.map +1 -1
  26. package/lib/cjs/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
  27. package/lib/cjs/components/datatable/datatable-pagination-renderer.js +3 -2
  28. package/lib/cjs/components/datatable/datatable-pagination-renderer.js.map +1 -1
  29. package/lib/cjs/components/datatable/datatable-registry.d.ts +18 -0
  30. package/lib/cjs/components/datatable/datatable-registry.d.ts.map +1 -0
  31. package/lib/cjs/components/datatable/datatable-registry.js +66 -0
  32. package/lib/cjs/components/datatable/datatable-registry.js.map +1 -0
  33. package/lib/cjs/components/datatable/datatable-remote-provider.d.ts.map +1 -1
  34. package/lib/cjs/components/datatable/datatable-remote-provider.js +1 -2
  35. package/lib/cjs/components/datatable/datatable-remote-provider.js.map +1 -1
  36. package/lib/cjs/components/datatable/datatable-search-handler.d.ts +10 -0
  37. package/lib/cjs/components/datatable/datatable-search-handler.d.ts.map +1 -0
  38. package/lib/cjs/components/datatable/datatable-search-handler.js +65 -0
  39. package/lib/cjs/components/datatable/datatable-search-handler.js.map +1 -0
  40. package/lib/cjs/components/datatable/datatable-sort.d.ts +31 -4
  41. package/lib/cjs/components/datatable/datatable-sort.d.ts.map +1 -1
  42. package/lib/cjs/components/datatable/datatable-sort.js +86 -58
  43. package/lib/cjs/components/datatable/datatable-sort.js.map +1 -1
  44. package/lib/cjs/components/datatable/datatable-spinner.d.ts +30 -0
  45. package/lib/cjs/components/datatable/datatable-spinner.d.ts.map +1 -0
  46. package/lib/cjs/components/datatable/datatable-spinner.js +54 -0
  47. package/lib/cjs/components/datatable/datatable-spinner.js.map +1 -0
  48. package/lib/cjs/components/datatable/datatable-state-persistence.d.ts +19 -0
  49. package/lib/cjs/components/datatable/datatable-state-persistence.d.ts.map +1 -0
  50. package/lib/cjs/components/datatable/datatable-state-persistence.js +59 -0
  51. package/lib/cjs/components/datatable/datatable-state-persistence.js.map +1 -0
  52. package/lib/cjs/components/datatable/datatable-table-renderer.d.ts +2 -0
  53. package/lib/cjs/components/datatable/datatable-table-renderer.d.ts.map +1 -1
  54. package/lib/cjs/components/datatable/datatable-table-renderer.js +75 -16
  55. package/lib/cjs/components/datatable/datatable-table-renderer.js.map +1 -1
  56. package/lib/cjs/components/datatable/datatable-utils.d.ts +10 -0
  57. package/lib/cjs/components/datatable/datatable-utils.d.ts.map +1 -0
  58. package/lib/cjs/components/datatable/datatable-utils.js +15 -0
  59. package/lib/cjs/components/datatable/datatable-utils.js.map +1 -0
  60. package/lib/cjs/components/datatable/datatable.d.ts +26 -34
  61. package/lib/cjs/components/datatable/datatable.d.ts.map +1 -1
  62. package/lib/cjs/components/datatable/datatable.js +155 -492
  63. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  64. package/lib/cjs/components/datatable/index.d.ts +1 -1
  65. package/lib/cjs/components/datatable/index.d.ts.map +1 -1
  66. package/lib/cjs/components/datatable/types.d.ts +100 -11
  67. package/lib/cjs/components/datatable/types.d.ts.map +1 -1
  68. package/lib/cjs/index.d.ts +1 -1
  69. package/lib/cjs/index.d.ts.map +1 -1
  70. package/lib/cjs/index.js +6 -0
  71. package/lib/cjs/index.js.map +1 -1
  72. package/lib/esm/components/datatable/datatable-checkbox.d.ts +37 -1
  73. package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -1
  74. package/lib/esm/components/datatable/datatable-checkbox.js +142 -155
  75. package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -1
  76. package/lib/esm/components/datatable/datatable-column-utils.d.ts +30 -0
  77. package/lib/esm/components/datatable/datatable-column-utils.d.ts.map +1 -0
  78. package/lib/esm/components/datatable/datatable-column-utils.js +38 -0
  79. package/lib/esm/components/datatable/datatable-column-utils.js.map +1 -0
  80. package/lib/esm/components/datatable/datatable-contracts.d.ts +2 -4
  81. package/lib/esm/components/datatable/datatable-contracts.d.ts.map +1 -1
  82. package/lib/esm/components/datatable/datatable-defaults.d.ts +20 -0
  83. package/lib/esm/components/datatable/datatable-defaults.d.ts.map +1 -0
  84. package/lib/esm/components/datatable/datatable-defaults.js +190 -0
  85. package/lib/esm/components/datatable/datatable-defaults.js.map +1 -0
  86. package/lib/esm/components/datatable/datatable-layout-plugin.d.ts.map +1 -1
  87. package/lib/esm/components/datatable/datatable-layout-plugin.js +11 -1
  88. package/lib/esm/components/datatable/datatable-layout-plugin.js.map +1 -1
  89. package/lib/esm/components/datatable/datatable-local-provider.d.ts.map +1 -1
  90. package/lib/esm/components/datatable/datatable-local-provider.js +80 -24
  91. package/lib/esm/components/datatable/datatable-local-provider.js.map +1 -1
  92. package/lib/esm/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
  93. package/lib/esm/components/datatable/datatable-pagination-renderer.js +3 -2
  94. package/lib/esm/components/datatable/datatable-pagination-renderer.js.map +1 -1
  95. package/lib/esm/components/datatable/datatable-registry.d.ts +18 -0
  96. package/lib/esm/components/datatable/datatable-registry.d.ts.map +1 -0
  97. package/lib/esm/components/datatable/datatable-registry.js +63 -0
  98. package/lib/esm/components/datatable/datatable-registry.js.map +1 -0
  99. package/lib/esm/components/datatable/datatable-remote-provider.d.ts.map +1 -1
  100. package/lib/esm/components/datatable/datatable-remote-provider.js +1 -2
  101. package/lib/esm/components/datatable/datatable-remote-provider.js.map +1 -1
  102. package/lib/esm/components/datatable/datatable-search-handler.d.ts +10 -0
  103. package/lib/esm/components/datatable/datatable-search-handler.d.ts.map +1 -0
  104. package/lib/esm/components/datatable/datatable-search-handler.js +62 -0
  105. package/lib/esm/components/datatable/datatable-search-handler.js.map +1 -0
  106. package/lib/esm/components/datatable/datatable-sort.d.ts +31 -4
  107. package/lib/esm/components/datatable/datatable-sort.d.ts.map +1 -1
  108. package/lib/esm/components/datatable/datatable-sort.js +85 -57
  109. package/lib/esm/components/datatable/datatable-sort.js.map +1 -1
  110. package/lib/esm/components/datatable/datatable-spinner.d.ts +30 -0
  111. package/lib/esm/components/datatable/datatable-spinner.d.ts.map +1 -0
  112. package/lib/esm/components/datatable/datatable-spinner.js +51 -0
  113. package/lib/esm/components/datatable/datatable-spinner.js.map +1 -0
  114. package/lib/esm/components/datatable/datatable-state-persistence.d.ts +19 -0
  115. package/lib/esm/components/datatable/datatable-state-persistence.d.ts.map +1 -0
  116. package/lib/esm/components/datatable/datatable-state-persistence.js +55 -0
  117. package/lib/esm/components/datatable/datatable-state-persistence.js.map +1 -0
  118. package/lib/esm/components/datatable/datatable-table-renderer.d.ts +2 -0
  119. package/lib/esm/components/datatable/datatable-table-renderer.d.ts.map +1 -1
  120. package/lib/esm/components/datatable/datatable-table-renderer.js +75 -16
  121. package/lib/esm/components/datatable/datatable-table-renderer.js.map +1 -1
  122. package/lib/esm/components/datatable/datatable-utils.d.ts +10 -0
  123. package/lib/esm/components/datatable/datatable-utils.d.ts.map +1 -0
  124. package/lib/esm/components/datatable/datatable-utils.js +12 -0
  125. package/lib/esm/components/datatable/datatable-utils.js.map +1 -0
  126. package/lib/esm/components/datatable/datatable.d.ts +26 -34
  127. package/lib/esm/components/datatable/datatable.d.ts.map +1 -1
  128. package/lib/esm/components/datatable/datatable.js +157 -494
  129. package/lib/esm/components/datatable/datatable.js.map +1 -1
  130. package/lib/esm/components/datatable/index.d.ts +1 -1
  131. package/lib/esm/components/datatable/index.d.ts.map +1 -1
  132. package/lib/esm/components/datatable/types.d.ts +100 -11
  133. package/lib/esm/components/datatable/types.d.ts.map +1 -1
  134. package/lib/esm/index.d.ts +1 -1
  135. package/lib/esm/index.d.ts.map +1 -1
  136. package/lib/esm/index.js +6 -0
  137. package/lib/esm/index.js.map +1 -1
  138. package/package.json +5 -1
  139. package/skills/ktui/SKILL.md +711 -0
  140. package/skills/ktui-datatable/SKILL.md +302 -0
  141. package/skills/ktui-install/SKILL.md +150 -0
  142. package/skills/ktui-select/SKILL.md +271 -0
  143. package/src/components/__tests__/component.test.ts +347 -0
  144. package/src/components/collapse/collapse.css +2 -2
  145. package/src/components/datatable/__tests__/architecture-boundaries.test.ts +56 -8
  146. package/src/components/datatable/__tests__/currency-sort.test.ts +25 -28
  147. package/src/components/datatable/__tests__/datatable-checkbox.test.ts +527 -0
  148. package/src/components/datatable/__tests__/datatable-column-utils.test.ts +117 -0
  149. package/src/components/datatable/__tests__/datatable-defaults.test.ts +57 -0
  150. package/src/components/datatable/__tests__/datatable-finalize-extended.test.ts +361 -0
  151. package/src/components/datatable/__tests__/datatable-fixed-layout.test.ts +427 -0
  152. package/src/components/datatable/__tests__/datatable-improvements.test.ts +484 -0
  153. package/src/components/datatable/__tests__/datatable-pagination-extended.test.ts +508 -0
  154. package/src/components/datatable/__tests__/datatable-public-api.test.ts +269 -0
  155. package/src/components/datatable/__tests__/datatable-registry.test.ts +172 -0
  156. package/src/components/datatable/__tests__/datatable-remote-provider.test.ts +468 -0
  157. package/src/components/datatable/__tests__/datatable-search-handler.test.ts +124 -0
  158. package/src/components/datatable/__tests__/datatable-sort-extended.test.ts +417 -0
  159. package/src/components/datatable/__tests__/datatable-spinner.test.ts +95 -0
  160. package/src/components/datatable/__tests__/datatable-table-renderer-extended.test.ts +425 -0
  161. package/src/components/datatable/__tests__/datatable-types.test.ts +117 -0
  162. package/src/components/datatable/__tests__/datatable-utils.test.ts +52 -0
  163. package/src/components/datatable/__tests__/multi-row-headers.test.ts +7 -7
  164. package/src/components/datatable/__tests__/pagination-reset.test.ts +129 -6
  165. package/src/components/datatable/__tests__/race-conditions.test.ts +11 -11
  166. package/src/components/datatable/__tests__/setup.ts +12 -4
  167. package/src/components/datatable/datatable-checkbox.ts +144 -145
  168. package/src/components/datatable/datatable-column-utils.ts +63 -0
  169. package/src/components/datatable/datatable-contracts.ts +2 -3
  170. package/src/components/datatable/datatable-defaults.ts +204 -0
  171. package/src/components/datatable/datatable-layout-plugin.ts +11 -1
  172. package/src/components/datatable/datatable-local-provider.ts +91 -28
  173. package/src/components/datatable/datatable-pagination-renderer.ts +3 -2
  174. package/src/components/datatable/datatable-registry.ts +89 -0
  175. package/src/components/datatable/datatable-remote-provider.ts +1 -3
  176. package/src/components/datatable/datatable-search-handler.ts +97 -0
  177. package/src/components/datatable/datatable-sort.ts +111 -66
  178. package/src/components/datatable/datatable-spinner.ts +103 -0
  179. package/src/components/datatable/datatable-state-persistence.ts +67 -0
  180. package/src/components/datatable/datatable-table-renderer.ts +81 -18
  181. package/src/components/datatable/datatable-utils.ts +12 -0
  182. package/src/components/datatable/datatable.ts +191 -580
  183. package/src/components/datatable/index.ts +3 -0
  184. package/src/components/datatable/types.ts +124 -23
  185. package/src/helpers/__tests__/dom.test.ts +776 -0
  186. package/src/helpers/__tests__/utils.test.ts +332 -0
  187. package/src/index.ts +10 -0
  188. package/skills/ktui-components/SKILL.md +0 -41
  189. package/skills/ktui-theming/SKILL.md +0 -50
  190. package/src/components/datatable/datatable-event-adapter.ts +0 -21
@@ -13,6 +13,9 @@ export type {
13
13
  KTDataTableConfigInterface,
14
14
  KTDataTableColumnFilterTypeInterface,
15
15
  KTDataTableColumnFilterInterface,
16
+ KTDataTableTextFilterInterface,
17
+ KTDataTableNumericFilterInterface,
18
+ KTDataTableDateRangeFilterInterface,
16
19
  KTDataTableCheckConfigInterface,
17
20
  KTDataTableCheckInterface,
18
21
  KTDataTableCheckChangePayloadInterface,
@@ -62,6 +62,69 @@ export interface KTDataTableInterface {
62
62
  showSpinner(): void;
63
63
 
64
64
  hideSpinner(): void;
65
+
66
+ /**
67
+ * Redraw the table, optionally navigating to a specific page.
68
+ * @param page The page number to navigate to (defaults to 1)
69
+ */
70
+ redraw(page?: number): void;
71
+
72
+ /**
73
+ * Search the data using a string query or object.
74
+ * @param query The search query
75
+ */
76
+ search(query: string | object): void;
77
+
78
+ /**
79
+ * Set or replace a column filter.
80
+ * @param filter The filter to apply
81
+ */
82
+ setFilter(filter: KTDataTableColumnFilterInterface): void;
83
+
84
+ /**
85
+ * Get the current state of the datatable.
86
+ */
87
+ getState(): KTDataTableStateInterface;
88
+
89
+ /**
90
+ * Dispose of the datatable instance, cleaning up event listeners and DOM nodes.
91
+ */
92
+ dispose(): void;
93
+
94
+ /**
95
+ * Check if all visible rows are checked (header checkbox state).
96
+ */
97
+ isChecked(): boolean;
98
+
99
+ /**
100
+ * Toggle all visible row checkboxes.
101
+ */
102
+ toggle(): void;
103
+
104
+ /**
105
+ * Check all visible row checkboxes.
106
+ */
107
+ check(): void;
108
+
109
+ /**
110
+ * Uncheck all visible row checkboxes.
111
+ */
112
+ uncheck(): void;
113
+
114
+ /**
115
+ * Get all checked row IDs.
116
+ */
117
+ getChecked(): string[];
118
+
119
+ /**
120
+ * Re-apply checkbox checked states to visible rows after a redraw or pagination change.
121
+ */
122
+ refreshCheckboxes(): void;
123
+
124
+ /**
125
+ * @deprecated Use {@link refreshCheckboxes} instead.
126
+ */
127
+ update(): void;
65
128
  }
66
129
 
67
130
  export interface KTDataTableResponseDataInterface {
@@ -100,7 +163,9 @@ export interface KTDataTableLayoutPluginInterface {
100
163
  }
101
164
 
102
165
  // Define the DataTable options type
103
- export interface KTDataTableConfigInterface {
166
+ export interface KTDataTableConfigInterface<
167
+ T extends KTDataTableDataInterface = KTDataTableDataInterface,
168
+ > {
104
169
  requestMethod?: string;
105
170
  requestHeaders?: { [key: string]: string };
106
171
  requestCredentials?: RequestCredentials;
@@ -117,20 +182,18 @@ export interface KTDataTableConfigInterface {
117
182
  stateNamespace?: string;
118
183
  pageSizes?: number[];
119
184
  columns?: {
120
- [key: keyof KTDataTableDataInterface | string]: {
185
+ [key: string]: {
121
186
  title?: string;
122
187
  render?: (
123
- item: KTDataTableDataInterface[keyof KTDataTableDataInterface] | string,
124
- data: KTDataTableDataInterface,
188
+ item: T[keyof T] | string,
189
+ data: T,
125
190
  context: KTDataTableInterface,
126
191
  ) => string | HTMLElement | DocumentFragment;
127
192
  checkbox?: boolean;
128
193
  createdCell?: (
129
194
  cell: HTMLTableCellElement,
130
- cellData:
131
- | KTDataTableDataInterface[keyof KTDataTableDataInterface]
132
- | string,
133
- rowData: KTDataTableDataInterface,
195
+ cellData: T[keyof T] | string,
196
+ rowData: T,
134
197
  row: HTMLTableRowElement,
135
198
  ) => void;
136
199
  /**
@@ -144,11 +207,14 @@ export interface KTDataTableConfigInterface {
144
207
  * Use for custom formats (e.g. dates, combined fields, custom parsing).
145
208
  */
146
209
  sortValue?: (
147
- cellValue:
148
- | KTDataTableDataInterface[keyof KTDataTableDataInterface]
149
- | string,
150
- rowData: KTDataTableDataInterface,
210
+ cellValue: T[keyof T] | string,
211
+ rowData: T,
151
212
  ) => number | string;
213
+ /**
214
+ * Fixed width for this column when tableLayout is 'fixed'.
215
+ * Accepts any CSS length value (e.g. '120px', '20%', '10rem').
216
+ */
217
+ width?: string;
152
218
  };
153
219
  };
154
220
 
@@ -169,18 +235,15 @@ export interface KTDataTableConfigInterface {
169
235
  };
170
236
  // local data sort callback
171
237
  callback?: (
172
- data: KTDataTableDataInterface[],
173
- sortField: keyof KTDataTableDataInterface | number,
238
+ data: T[],
239
+ sortField: keyof T | number,
174
240
  sortOrder: KTDataTableSortOrderInterface,
175
- ) => KTDataTableDataInterface[];
241
+ ) => T[];
176
242
  };
177
243
 
178
244
  search?: {
179
245
  delay?: number; // delay in milliseconds
180
- callback?: (
181
- data: KTDataTableDataInterface[],
182
- search: string,
183
- ) => KTDataTableDataInterface[]; // search callback
246
+ callback?: (data: T[], search: string) => T[]; // search callback
184
247
  };
185
248
 
186
249
  pagination?: {
@@ -217,11 +280,20 @@ export interface KTDataTableConfigInterface {
217
280
  preserveSelection?: boolean;
218
281
  };
219
282
 
283
+ /**
284
+ * Table layout algorithm. When 'fixed', the table uses `table-layout: fixed`
285
+ * and generates a `<colgroup>` to keep column widths consistent across pagination.
286
+ * Column widths are read from `columns[key].width` (configured mode) or from
287
+ * `data-kt-datatable-column-width` attribute on `<th>` elements (implicit mode).
288
+ * @default 'auto'
289
+ */
290
+ tableLayout?: 'auto' | 'fixed';
291
+
220
292
  lockedLayout?: KTDataTableLockedLayoutConfigInterface;
221
293
  layoutPlugin?: KTDataTableLayoutPluginInterface;
222
294
 
223
295
  _state?: KTDataTableStateInterface;
224
- _data?: KTDataTableDataInterface[];
296
+ _data?: T[];
225
297
 
226
298
  loadingClass?: string;
227
299
  }
@@ -231,11 +303,28 @@ export type KTDataTableColumnFilterTypeInterface =
231
303
  | 'numeric'
232
304
  | 'dateRange';
233
305
 
234
- export type KTDataTableColumnFilterInterface = {
306
+ export interface KTDataTableTextFilterInterface {
235
307
  column: keyof KTDataTableDataInterface;
236
- type: KTDataTableColumnFilterTypeInterface;
308
+ type: 'text';
237
309
  value: string;
238
- };
310
+ }
311
+
312
+ export interface KTDataTableNumericFilterInterface {
313
+ column: keyof KTDataTableDataInterface;
314
+ type: 'numeric';
315
+ value: number;
316
+ }
317
+
318
+ export interface KTDataTableDateRangeFilterInterface {
319
+ column: keyof KTDataTableDataInterface;
320
+ type: 'dateRange';
321
+ value: { from: string; to: string };
322
+ }
323
+
324
+ export type KTDataTableColumnFilterInterface =
325
+ | KTDataTableTextFilterInterface
326
+ | KTDataTableNumericFilterInterface
327
+ | KTDataTableDateRangeFilterInterface;
239
328
 
240
329
  export interface KTDataTableCheckConfigInterface {
241
330
  target: string;
@@ -257,3 +346,15 @@ export interface KTDataTableCheckInterface {
257
346
  export interface KTDataTableCheckChangePayloadInterface {
258
347
  cancel?: boolean;
259
348
  }
349
+
350
+ /**
351
+ * Stores original CSS classes from the server-rendered table,
352
+ * used to preserve styling after datatable redraws.
353
+ */
354
+ export interface OriginalTableClasses {
355
+ tbody: string;
356
+ thead: string;
357
+ tr: string[];
358
+ td: string[][];
359
+ th: string[];
360
+ }