@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.
- package/README.md +14 -5
- package/dist/ktui.js +3775 -2298
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +25 -5
- package/lib/cjs/components/datatable/datatable-checkbox.d.ts +37 -1
- package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-checkbox.js +143 -156
- package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-column-utils.d.ts +30 -0
- package/lib/cjs/components/datatable/datatable-column-utils.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-column-utils.js +42 -0
- package/lib/cjs/components/datatable/datatable-column-utils.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-contracts.d.ts +2 -4
- package/lib/cjs/components/datatable/datatable-contracts.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-defaults.d.ts +20 -0
- package/lib/cjs/components/datatable/datatable-defaults.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-defaults.js +193 -0
- package/lib/cjs/components/datatable/datatable-defaults.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-layout-plugin.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-layout-plugin.js +11 -1
- package/lib/cjs/components/datatable/datatable-layout-plugin.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-local-provider.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-local-provider.js +80 -24
- package/lib/cjs/components/datatable/datatable-local-provider.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-pagination-renderer.js +3 -2
- package/lib/cjs/components/datatable/datatable-pagination-renderer.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-registry.d.ts +18 -0
- package/lib/cjs/components/datatable/datatable-registry.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-registry.js +66 -0
- package/lib/cjs/components/datatable/datatable-registry.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-remote-provider.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-remote-provider.js +1 -2
- package/lib/cjs/components/datatable/datatable-remote-provider.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-search-handler.d.ts +10 -0
- package/lib/cjs/components/datatable/datatable-search-handler.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-search-handler.js +65 -0
- package/lib/cjs/components/datatable/datatable-search-handler.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-sort.d.ts +31 -4
- package/lib/cjs/components/datatable/datatable-sort.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-sort.js +86 -58
- package/lib/cjs/components/datatable/datatable-sort.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-spinner.d.ts +30 -0
- package/lib/cjs/components/datatable/datatable-spinner.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-spinner.js +54 -0
- package/lib/cjs/components/datatable/datatable-spinner.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-state-persistence.d.ts +19 -0
- package/lib/cjs/components/datatable/datatable-state-persistence.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-state-persistence.js +59 -0
- package/lib/cjs/components/datatable/datatable-state-persistence.js.map +1 -0
- package/lib/cjs/components/datatable/datatable-table-renderer.d.ts +2 -0
- package/lib/cjs/components/datatable/datatable-table-renderer.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable-table-renderer.js +75 -16
- package/lib/cjs/components/datatable/datatable-table-renderer.js.map +1 -1
- package/lib/cjs/components/datatable/datatable-utils.d.ts +10 -0
- package/lib/cjs/components/datatable/datatable-utils.d.ts.map +1 -0
- package/lib/cjs/components/datatable/datatable-utils.js +15 -0
- package/lib/cjs/components/datatable/datatable-utils.js.map +1 -0
- package/lib/cjs/components/datatable/datatable.d.ts +26 -34
- package/lib/cjs/components/datatable/datatable.d.ts.map +1 -1
- package/lib/cjs/components/datatable/datatable.js +155 -492
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/components/datatable/index.d.ts +1 -1
- package/lib/cjs/components/datatable/index.d.ts.map +1 -1
- package/lib/cjs/components/datatable/types.d.ts +100 -11
- package/lib/cjs/components/datatable/types.d.ts.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +6 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.d.ts +37 -1
- package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-checkbox.js +142 -155
- package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -1
- package/lib/esm/components/datatable/datatable-column-utils.d.ts +30 -0
- package/lib/esm/components/datatable/datatable-column-utils.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-column-utils.js +38 -0
- package/lib/esm/components/datatable/datatable-column-utils.js.map +1 -0
- package/lib/esm/components/datatable/datatable-contracts.d.ts +2 -4
- package/lib/esm/components/datatable/datatable-contracts.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-defaults.d.ts +20 -0
- package/lib/esm/components/datatable/datatable-defaults.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-defaults.js +190 -0
- package/lib/esm/components/datatable/datatable-defaults.js.map +1 -0
- package/lib/esm/components/datatable/datatable-layout-plugin.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-layout-plugin.js +11 -1
- package/lib/esm/components/datatable/datatable-layout-plugin.js.map +1 -1
- package/lib/esm/components/datatable/datatable-local-provider.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-local-provider.js +80 -24
- package/lib/esm/components/datatable/datatable-local-provider.js.map +1 -1
- package/lib/esm/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-pagination-renderer.js +3 -2
- package/lib/esm/components/datatable/datatable-pagination-renderer.js.map +1 -1
- package/lib/esm/components/datatable/datatable-registry.d.ts +18 -0
- package/lib/esm/components/datatable/datatable-registry.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-registry.js +63 -0
- package/lib/esm/components/datatable/datatable-registry.js.map +1 -0
- package/lib/esm/components/datatable/datatable-remote-provider.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-remote-provider.js +1 -2
- package/lib/esm/components/datatable/datatable-remote-provider.js.map +1 -1
- package/lib/esm/components/datatable/datatable-search-handler.d.ts +10 -0
- package/lib/esm/components/datatable/datatable-search-handler.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-search-handler.js +62 -0
- package/lib/esm/components/datatable/datatable-search-handler.js.map +1 -0
- package/lib/esm/components/datatable/datatable-sort.d.ts +31 -4
- package/lib/esm/components/datatable/datatable-sort.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-sort.js +85 -57
- package/lib/esm/components/datatable/datatable-sort.js.map +1 -1
- package/lib/esm/components/datatable/datatable-spinner.d.ts +30 -0
- package/lib/esm/components/datatable/datatable-spinner.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-spinner.js +51 -0
- package/lib/esm/components/datatable/datatable-spinner.js.map +1 -0
- package/lib/esm/components/datatable/datatable-state-persistence.d.ts +19 -0
- package/lib/esm/components/datatable/datatable-state-persistence.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-state-persistence.js +55 -0
- package/lib/esm/components/datatable/datatable-state-persistence.js.map +1 -0
- package/lib/esm/components/datatable/datatable-table-renderer.d.ts +2 -0
- package/lib/esm/components/datatable/datatable-table-renderer.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable-table-renderer.js +75 -16
- package/lib/esm/components/datatable/datatable-table-renderer.js.map +1 -1
- package/lib/esm/components/datatable/datatable-utils.d.ts +10 -0
- package/lib/esm/components/datatable/datatable-utils.d.ts.map +1 -0
- package/lib/esm/components/datatable/datatable-utils.js +12 -0
- package/lib/esm/components/datatable/datatable-utils.js.map +1 -0
- package/lib/esm/components/datatable/datatable.d.ts +26 -34
- package/lib/esm/components/datatable/datatable.d.ts.map +1 -1
- package/lib/esm/components/datatable/datatable.js +157 -494
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/components/datatable/index.d.ts +1 -1
- package/lib/esm/components/datatable/index.d.ts.map +1 -1
- package/lib/esm/components/datatable/types.d.ts +100 -11
- package/lib/esm/components/datatable/types.d.ts.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +6 -0
- package/lib/esm/index.js.map +1 -1
- package/package.json +5 -1
- package/skills/ktui/SKILL.md +711 -0
- package/skills/ktui-datatable/SKILL.md +302 -0
- package/skills/ktui-install/SKILL.md +150 -0
- package/skills/ktui-select/SKILL.md +271 -0
- package/src/components/__tests__/component.test.ts +347 -0
- package/src/components/collapse/collapse.css +2 -2
- package/src/components/datatable/__tests__/architecture-boundaries.test.ts +56 -8
- package/src/components/datatable/__tests__/currency-sort.test.ts +25 -28
- package/src/components/datatable/__tests__/datatable-checkbox.test.ts +527 -0
- package/src/components/datatable/__tests__/datatable-column-utils.test.ts +117 -0
- package/src/components/datatable/__tests__/datatable-defaults.test.ts +57 -0
- package/src/components/datatable/__tests__/datatable-finalize-extended.test.ts +361 -0
- package/src/components/datatable/__tests__/datatable-fixed-layout.test.ts +427 -0
- package/src/components/datatable/__tests__/datatable-improvements.test.ts +484 -0
- package/src/components/datatable/__tests__/datatable-pagination-extended.test.ts +508 -0
- package/src/components/datatable/__tests__/datatable-public-api.test.ts +269 -0
- package/src/components/datatable/__tests__/datatable-registry.test.ts +172 -0
- package/src/components/datatable/__tests__/datatable-remote-provider.test.ts +468 -0
- package/src/components/datatable/__tests__/datatable-search-handler.test.ts +124 -0
- package/src/components/datatable/__tests__/datatable-sort-extended.test.ts +417 -0
- package/src/components/datatable/__tests__/datatable-spinner.test.ts +95 -0
- package/src/components/datatable/__tests__/datatable-table-renderer-extended.test.ts +425 -0
- package/src/components/datatable/__tests__/datatable-types.test.ts +117 -0
- package/src/components/datatable/__tests__/datatable-utils.test.ts +52 -0
- package/src/components/datatable/__tests__/multi-row-headers.test.ts +7 -7
- package/src/components/datatable/__tests__/pagination-reset.test.ts +129 -6
- package/src/components/datatable/__tests__/race-conditions.test.ts +11 -11
- package/src/components/datatable/__tests__/setup.ts +12 -4
- package/src/components/datatable/datatable-checkbox.ts +144 -145
- package/src/components/datatable/datatable-column-utils.ts +63 -0
- package/src/components/datatable/datatable-contracts.ts +2 -3
- package/src/components/datatable/datatable-defaults.ts +204 -0
- package/src/components/datatable/datatable-layout-plugin.ts +11 -1
- package/src/components/datatable/datatable-local-provider.ts +91 -28
- package/src/components/datatable/datatable-pagination-renderer.ts +3 -2
- package/src/components/datatable/datatable-registry.ts +89 -0
- package/src/components/datatable/datatable-remote-provider.ts +1 -3
- package/src/components/datatable/datatable-search-handler.ts +97 -0
- package/src/components/datatable/datatable-sort.ts +111 -66
- package/src/components/datatable/datatable-spinner.ts +103 -0
- package/src/components/datatable/datatable-state-persistence.ts +67 -0
- package/src/components/datatable/datatable-table-renderer.ts +81 -18
- package/src/components/datatable/datatable-utils.ts +12 -0
- package/src/components/datatable/datatable.ts +191 -580
- package/src/components/datatable/index.ts +3 -0
- package/src/components/datatable/types.ts +124 -23
- package/src/helpers/__tests__/dom.test.ts +776 -0
- package/src/helpers/__tests__/utils.test.ts +332 -0
- package/src/index.ts +10 -0
- package/skills/ktui-components/SKILL.md +0 -41
- package/skills/ktui-theming/SKILL.md +0 -50
- package/src/components/datatable/datatable-event-adapter.ts +0 -21
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
KTDataTableTableRenderer,
|
|
13
13
|
KTDataTableTableRendererInput,
|
|
14
14
|
} from './datatable-contracts';
|
|
15
|
+
import { resolveColumns } from './datatable-column-utils';
|
|
15
16
|
|
|
16
17
|
export class KTDataTableDomTableRenderer<
|
|
17
18
|
T extends KTDataTableDataInterface,
|
|
@@ -26,10 +27,12 @@ export class KTDataTableDomTableRenderer<
|
|
|
26
27
|
const tbodyElement =
|
|
27
28
|
input.tableElement.createTBody() as HTMLTableSectionElement;
|
|
28
29
|
|
|
29
|
-
if (input.
|
|
30
|
-
tbodyElement.className = input.
|
|
30
|
+
if (input.originalClasses.tbody) {
|
|
31
|
+
tbodyElement.className = input.originalClasses.tbody;
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
this.applyTableLayout(input);
|
|
35
|
+
|
|
33
36
|
this.renderContent(input, tbodyElement);
|
|
34
37
|
|
|
35
38
|
return tbodyElement;
|
|
@@ -44,9 +47,71 @@ export class KTDataTableDomTableRenderer<
|
|
|
44
47
|
const cell = row.insertCell();
|
|
45
48
|
const logicalCount = getLogicalColumnCount();
|
|
46
49
|
cell.colSpan = logicalCount > 0 ? logicalCount : 1;
|
|
50
|
+
cell.style.textAlign = 'center';
|
|
47
51
|
cell.innerHTML = message;
|
|
48
52
|
}
|
|
49
53
|
|
|
54
|
+
private applyTableLayout(
|
|
55
|
+
input: KTDataTableTableRendererInput<T>,
|
|
56
|
+
): void {
|
|
57
|
+
const tableLayout = input.config.tableLayout || 'auto';
|
|
58
|
+
const tableElement = input.tableElement;
|
|
59
|
+
|
|
60
|
+
tableElement.style.tableLayout = tableLayout;
|
|
61
|
+
|
|
62
|
+
if (tableLayout === 'fixed') {
|
|
63
|
+
if (!tableElement.style.width) {
|
|
64
|
+
tableElement.style.width = '100%';
|
|
65
|
+
}
|
|
66
|
+
this.updateColgroup(input);
|
|
67
|
+
} else {
|
|
68
|
+
const existingColgroup = tableElement.querySelector('colgroup');
|
|
69
|
+
if (existingColgroup) {
|
|
70
|
+
tableElement.removeChild(existingColgroup);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private updateColgroup(
|
|
76
|
+
input: KTDataTableTableRendererInput<T>,
|
|
77
|
+
): void {
|
|
78
|
+
const tableElement = input.tableElement;
|
|
79
|
+
const existingColgroup = tableElement.querySelector('colgroup');
|
|
80
|
+
if (existingColgroup) {
|
|
81
|
+
tableElement.removeChild(existingColgroup);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const colgroup = document.createElement('colgroup');
|
|
85
|
+
|
|
86
|
+
if (input.config.columns) {
|
|
87
|
+
const columns = input.config.columns;
|
|
88
|
+
for (const key of Object.keys(columns)) {
|
|
89
|
+
const col = document.createElement('col');
|
|
90
|
+
if (columns[key].width) {
|
|
91
|
+
col.style.width = columns[key].width;
|
|
92
|
+
}
|
|
93
|
+
colgroup.appendChild(col);
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const { columnsByIndex } = resolveColumns(input.theadElement);
|
|
97
|
+
for (const th of columnsByIndex) {
|
|
98
|
+
const col = document.createElement('col');
|
|
99
|
+
const width = th.getAttribute('data-kt-datatable-column-width');
|
|
100
|
+
if (width) {
|
|
101
|
+
col.style.width = width;
|
|
102
|
+
}
|
|
103
|
+
colgroup.appendChild(col);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const thead = tableElement.querySelector('thead');
|
|
108
|
+
if (thead) {
|
|
109
|
+
tableElement.insertBefore(colgroup, thead);
|
|
110
|
+
} else {
|
|
111
|
+
tableElement.appendChild(colgroup);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
50
115
|
private renderContent(
|
|
51
116
|
input: KTDataTableTableRendererInput<T>,
|
|
52
117
|
tbodyElement: HTMLTableSectionElement,
|
|
@@ -64,15 +129,7 @@ export class KTDataTableDomTableRenderer<
|
|
|
64
129
|
return tbodyElement;
|
|
65
130
|
}
|
|
66
131
|
|
|
67
|
-
const
|
|
68
|
-
? input.theadElement.querySelectorAll('th')
|
|
69
|
-
: ([] as unknown as NodeListOf<HTMLTableCellElement>);
|
|
70
|
-
|
|
71
|
-
const ths: HTMLTableCellElement[] = Array.from(allThs).filter((th) =>
|
|
72
|
-
th.hasAttribute('data-kt-datatable-column'),
|
|
73
|
-
);
|
|
74
|
-
const columnsToRender: HTMLTableCellElement[] =
|
|
75
|
-
ths.length > 0 && ths.length !== allThs.length ? Array.from(allThs) : ths;
|
|
132
|
+
const { columnsByIndex: columnsToRender } = resolveColumns(input.theadElement);
|
|
76
133
|
const logicalColumnCount =
|
|
77
134
|
columnsToRender.length > 0
|
|
78
135
|
? columnsToRender.length
|
|
@@ -81,8 +138,8 @@ export class KTDataTableDomTableRenderer<
|
|
|
81
138
|
input.data.forEach((item: T, rowIndex: number) => {
|
|
82
139
|
const row = document.createElement('tr');
|
|
83
140
|
|
|
84
|
-
if (input.
|
|
85
|
-
row.className = input.
|
|
141
|
+
if (input.originalClasses.tr && input.originalClasses.tr[rowIndex]) {
|
|
142
|
+
row.className = input.originalClasses.tr[rowIndex];
|
|
86
143
|
}
|
|
87
144
|
|
|
88
145
|
if (!input.config.columns) {
|
|
@@ -174,7 +231,13 @@ export class KTDataTableDomTableRenderer<
|
|
|
174
231
|
td.innerHTML = result as string;
|
|
175
232
|
}
|
|
176
233
|
} else {
|
|
177
|
-
|
|
234
|
+
const cellValue = item[colKey];
|
|
235
|
+
if (cellValue === null || cellValue === undefined) {
|
|
236
|
+
td.textContent = '';
|
|
237
|
+
} else {
|
|
238
|
+
// Match implicit column rendering: preserve HTML from DOM extraction.
|
|
239
|
+
td.innerHTML = String(cellValue);
|
|
240
|
+
}
|
|
178
241
|
}
|
|
179
242
|
|
|
180
243
|
if (typeof columnDef.createdCell === 'function') {
|
|
@@ -192,11 +255,11 @@ export class KTDataTableDomTableRenderer<
|
|
|
192
255
|
colIndex: number,
|
|
193
256
|
): void {
|
|
194
257
|
if (
|
|
195
|
-
input.
|
|
196
|
-
input.
|
|
197
|
-
input.
|
|
258
|
+
input.originalClasses.td &&
|
|
259
|
+
input.originalClasses.td[rowIndex] &&
|
|
260
|
+
input.originalClasses.td[rowIndex][colIndex]
|
|
198
261
|
) {
|
|
199
|
-
td.className = input.
|
|
262
|
+
td.className = input.originalClasses.td[rowIndex][colIndex];
|
|
200
263
|
}
|
|
201
264
|
}
|
|
202
265
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KTUI - Free & Open-Source Tailwind UI Components by Keenthemes
|
|
3
|
+
* Copyright 2025 by Keenthemes Inc
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Strip HTML tags and entities from a value, returning plain text.
|
|
8
|
+
* Used by sort, search, and filter pipelines.
|
|
9
|
+
*/
|
|
10
|
+
export function stripHtml(value: unknown): string {
|
|
11
|
+
return String(value).replace(/<[^>]*>| /g, '');
|
|
12
|
+
}
|