@keenthemes/ktui 1.2.4 → 1.2.6

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 (152) hide show
  1. package/dist/ktui.js +2551 -2817
  2. package/dist/ktui.min.js +1 -1
  3. package/dist/ktui.min.js.map +1 -1
  4. package/dist/styles.css +136 -40
  5. package/lib/cjs/components/datatable/datatable-checkbox.d.ts.map +1 -1
  6. package/lib/cjs/components/datatable/datatable-checkbox.js +34 -15
  7. package/lib/cjs/components/datatable/datatable-checkbox.js.map +1 -1
  8. package/lib/cjs/components/datatable/datatable-contracts.d.ts +3 -3
  9. package/lib/cjs/components/datatable/datatable-contracts.d.ts.map +1 -1
  10. package/lib/cjs/components/datatable/datatable-layout-plugin.d.ts +7 -0
  11. package/lib/cjs/components/datatable/datatable-layout-plugin.d.ts.map +1 -0
  12. package/lib/cjs/components/datatable/datatable-layout-plugin.js +328 -0
  13. package/lib/cjs/components/datatable/datatable-layout-plugin.js.map +1 -0
  14. package/lib/cjs/components/datatable/datatable-local-provider.d.ts +2 -2
  15. package/lib/cjs/components/datatable/datatable-local-provider.d.ts.map +1 -1
  16. package/lib/cjs/components/datatable/datatable-local-provider.js +18 -10
  17. package/lib/cjs/components/datatable/datatable-local-provider.js.map +1 -1
  18. package/lib/cjs/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
  19. package/lib/cjs/components/datatable/datatable-pagination-renderer.js +40 -25
  20. package/lib/cjs/components/datatable/datatable-pagination-renderer.js.map +1 -1
  21. package/lib/cjs/components/datatable/datatable-remote-provider.d.ts.map +1 -1
  22. package/lib/cjs/components/datatable/datatable-remote-provider.js +3 -0
  23. package/lib/cjs/components/datatable/datatable-remote-provider.js.map +1 -1
  24. package/lib/cjs/components/datatable/datatable-table-renderer.d.ts.map +1 -1
  25. package/lib/cjs/components/datatable/datatable-table-renderer.js +14 -6
  26. package/lib/cjs/components/datatable/datatable-table-renderer.js.map +1 -1
  27. package/lib/cjs/components/datatable/datatable.d.ts +9 -0
  28. package/lib/cjs/components/datatable/datatable.d.ts.map +1 -1
  29. package/lib/cjs/components/datatable/datatable.js +200 -61
  30. package/lib/cjs/components/datatable/datatable.js.map +1 -1
  31. package/lib/cjs/components/datatable/index.d.ts +1 -1
  32. package/lib/cjs/components/datatable/index.d.ts.map +1 -1
  33. package/lib/cjs/components/datatable/types.d.ts +27 -0
  34. package/lib/cjs/components/datatable/types.d.ts.map +1 -1
  35. package/lib/cjs/components/dropdown/dropdown.d.ts +2 -2
  36. package/lib/cjs/components/dropdown/dropdown.d.ts.map +1 -1
  37. package/lib/cjs/components/dropdown/dropdown.js +68 -31
  38. package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
  39. package/lib/cjs/components/input-number/index.d.ts +7 -0
  40. package/lib/cjs/components/input-number/index.d.ts.map +1 -0
  41. package/lib/cjs/components/input-number/index.js +10 -0
  42. package/lib/cjs/components/input-number/index.js.map +1 -0
  43. package/lib/cjs/components/input-number/input-number.d.ts +40 -0
  44. package/lib/cjs/components/input-number/input-number.d.ts.map +1 -0
  45. package/lib/cjs/components/input-number/input-number.js +248 -0
  46. package/lib/cjs/components/input-number/input-number.js.map +1 -0
  47. package/lib/cjs/components/input-number/types.d.ts +30 -0
  48. package/lib/cjs/components/input-number/types.d.ts.map +1 -0
  49. package/lib/cjs/components/input-number/types.js +7 -0
  50. package/lib/cjs/components/input-number/types.js.map +1 -0
  51. package/lib/cjs/components/select/config.d.ts +1 -0
  52. package/lib/cjs/components/select/config.d.ts.map +1 -1
  53. package/lib/cjs/components/select/config.js +2 -1
  54. package/lib/cjs/components/select/config.js.map +1 -1
  55. package/lib/cjs/components/select/select.d.ts +8 -1
  56. package/lib/cjs/components/select/select.d.ts.map +1 -1
  57. package/lib/cjs/components/select/select.js +14 -1
  58. package/lib/cjs/components/select/select.js.map +1 -1
  59. package/lib/cjs/components/select/tags.d.ts.map +1 -1
  60. package/lib/cjs/components/select/tags.js +10 -0
  61. package/lib/cjs/components/select/tags.js.map +1 -1
  62. package/lib/cjs/index.d.ts +5 -1
  63. package/lib/cjs/index.d.ts.map +1 -1
  64. package/lib/cjs/index.js +5 -1
  65. package/lib/cjs/index.js.map +1 -1
  66. package/lib/esm/components/datatable/datatable-checkbox.d.ts.map +1 -1
  67. package/lib/esm/components/datatable/datatable-checkbox.js +34 -15
  68. package/lib/esm/components/datatable/datatable-checkbox.js.map +1 -1
  69. package/lib/esm/components/datatable/datatable-contracts.d.ts +3 -3
  70. package/lib/esm/components/datatable/datatable-contracts.d.ts.map +1 -1
  71. package/lib/esm/components/datatable/datatable-layout-plugin.d.ts +7 -0
  72. package/lib/esm/components/datatable/datatable-layout-plugin.d.ts.map +1 -0
  73. package/lib/esm/components/datatable/datatable-layout-plugin.js +324 -0
  74. package/lib/esm/components/datatable/datatable-layout-plugin.js.map +1 -0
  75. package/lib/esm/components/datatable/datatable-local-provider.d.ts +2 -2
  76. package/lib/esm/components/datatable/datatable-local-provider.d.ts.map +1 -1
  77. package/lib/esm/components/datatable/datatable-local-provider.js +18 -10
  78. package/lib/esm/components/datatable/datatable-local-provider.js.map +1 -1
  79. package/lib/esm/components/datatable/datatable-pagination-renderer.d.ts.map +1 -1
  80. package/lib/esm/components/datatable/datatable-pagination-renderer.js +40 -25
  81. package/lib/esm/components/datatable/datatable-pagination-renderer.js.map +1 -1
  82. package/lib/esm/components/datatable/datatable-remote-provider.d.ts.map +1 -1
  83. package/lib/esm/components/datatable/datatable-remote-provider.js +3 -0
  84. package/lib/esm/components/datatable/datatable-remote-provider.js.map +1 -1
  85. package/lib/esm/components/datatable/datatable-table-renderer.d.ts.map +1 -1
  86. package/lib/esm/components/datatable/datatable-table-renderer.js +14 -6
  87. package/lib/esm/components/datatable/datatable-table-renderer.js.map +1 -1
  88. package/lib/esm/components/datatable/datatable.d.ts +9 -0
  89. package/lib/esm/components/datatable/datatable.d.ts.map +1 -1
  90. package/lib/esm/components/datatable/datatable.js +200 -61
  91. package/lib/esm/components/datatable/datatable.js.map +1 -1
  92. package/lib/esm/components/datatable/index.d.ts +1 -1
  93. package/lib/esm/components/datatable/index.d.ts.map +1 -1
  94. package/lib/esm/components/datatable/types.d.ts +27 -0
  95. package/lib/esm/components/datatable/types.d.ts.map +1 -1
  96. package/lib/esm/components/dropdown/dropdown.d.ts +2 -2
  97. package/lib/esm/components/dropdown/dropdown.d.ts.map +1 -1
  98. package/lib/esm/components/dropdown/dropdown.js +68 -31
  99. package/lib/esm/components/dropdown/dropdown.js.map +1 -1
  100. package/lib/esm/components/input-number/index.d.ts +7 -0
  101. package/lib/esm/components/input-number/index.d.ts.map +1 -0
  102. package/lib/esm/components/input-number/index.js +6 -0
  103. package/lib/esm/components/input-number/index.js.map +1 -0
  104. package/lib/esm/components/input-number/input-number.d.ts +40 -0
  105. package/lib/esm/components/input-number/input-number.d.ts.map +1 -0
  106. package/lib/esm/components/input-number/input-number.js +245 -0
  107. package/lib/esm/components/input-number/input-number.js.map +1 -0
  108. package/lib/esm/components/input-number/types.d.ts +30 -0
  109. package/lib/esm/components/input-number/types.d.ts.map +1 -0
  110. package/lib/esm/components/input-number/types.js +6 -0
  111. package/lib/esm/components/input-number/types.js.map +1 -0
  112. package/lib/esm/components/select/config.d.ts +1 -0
  113. package/lib/esm/components/select/config.d.ts.map +1 -1
  114. package/lib/esm/components/select/config.js +2 -1
  115. package/lib/esm/components/select/config.js.map +1 -1
  116. package/lib/esm/components/select/select.d.ts +8 -1
  117. package/lib/esm/components/select/select.d.ts.map +1 -1
  118. package/lib/esm/components/select/select.js +14 -1
  119. package/lib/esm/components/select/select.js.map +1 -1
  120. package/lib/esm/components/select/tags.d.ts.map +1 -1
  121. package/lib/esm/components/select/tags.js +11 -1
  122. package/lib/esm/components/select/tags.js.map +1 -1
  123. package/lib/esm/index.d.ts +5 -1
  124. package/lib/esm/index.d.ts.map +1 -1
  125. package/lib/esm/index.js +3 -0
  126. package/lib/esm/index.js.map +1 -1
  127. package/package.json +5 -11
  128. package/src/components/datatable/__tests__/locked-layout.test.ts +257 -0
  129. package/src/components/datatable/__tests__/pagination-reset.test.ts +18 -0
  130. package/src/components/datatable/datatable-checkbox.ts +35 -27
  131. package/src/components/datatable/datatable-contracts.ts +3 -3
  132. package/src/components/datatable/datatable-layout-plugin.ts +449 -0
  133. package/src/components/datatable/datatable-local-provider.ts +21 -14
  134. package/src/components/datatable/datatable-pagination-renderer.ts +40 -29
  135. package/src/components/datatable/datatable-remote-provider.ts +3 -0
  136. package/src/components/datatable/datatable-table-renderer.ts +40 -32
  137. package/src/components/datatable/datatable.css +98 -0
  138. package/src/components/datatable/datatable.ts +223 -86
  139. package/src/components/datatable/index.ts +5 -0
  140. package/src/components/datatable/types.ts +33 -0
  141. package/src/components/dropdown/dropdown.ts +86 -58
  142. package/src/components/input/input-group.css +14 -1
  143. package/src/components/input-number/__tests__/input-number.test.ts +278 -0
  144. package/src/components/input-number/index.ts +11 -0
  145. package/src/components/input-number/input-number.ts +267 -0
  146. package/src/components/input-number/types.ts +32 -0
  147. package/src/components/select/__tests__/ux-behaviors.test.ts +72 -0
  148. package/src/components/select/config.ts +3 -1
  149. package/src/components/select/select.css +23 -20
  150. package/src/components/select/select.ts +15 -1
  151. package/src/components/select/tags.ts +14 -1
  152. package/src/index.ts +14 -0
@@ -130,7 +130,7 @@ export class KTDataTableDomTableRenderer<
130
130
  td.innerHTML = value as string;
131
131
 
132
132
  this.applyOriginalTdClass(input, td, rowIndex, colIndex);
133
- this.applyDataRowAttributes(td, dataRowAttributes, colIndex);
133
+ this.applyDataRowAttributes(td, dataRowAttributes ?? null, colIndex);
134
134
 
135
135
  row.appendChild(td);
136
136
  }
@@ -142,39 +142,47 @@ export class KTDataTableDomTableRenderer<
142
142
  item: T,
143
143
  rowIndex: number,
144
144
  ): void {
145
- Object.keys(input.config.columns).forEach(
146
- (key: keyof T, colIndex: number) => {
147
- const td = document.createElement('td');
148
- const columnDef = input.config.columns[key as string];
149
-
150
- this.applyOriginalTdClass(input, td, rowIndex, colIndex);
151
-
152
- if (typeof columnDef.render === 'function') {
153
- const result = columnDef.render.call(
154
- input.context,
155
- item[key],
156
- item,
157
- input.context,
158
- );
159
- if (
160
- result instanceof HTMLElement ||
161
- result instanceof DocumentFragment
162
- ) {
163
- td.appendChild(result);
164
- } else if (typeof result === 'string') {
165
- td.innerHTML = result as string;
166
- }
167
- } else {
168
- td.textContent = item[key] as string;
169
- }
145
+ const columns = input.config.columns;
146
+ if (!columns) {
147
+ return;
148
+ }
149
+
150
+ Object.keys(columns).forEach((key, colIndex) => {
151
+ const columnDef = columns[key];
152
+ if (!columnDef) {
153
+ return;
154
+ }
155
+ const colKey = key as keyof T;
156
+
157
+ const td = document.createElement('td');
158
+
159
+ this.applyOriginalTdClass(input, td, rowIndex, colIndex);
170
160
 
171
- if (typeof columnDef.createdCell === 'function') {
172
- columnDef.createdCell.call(input.context, td, item[key], item, row);
161
+ if (typeof columnDef.render === 'function') {
162
+ const result = columnDef.render.call(
163
+ input.context,
164
+ item[colKey],
165
+ item,
166
+ input.context,
167
+ );
168
+ if (
169
+ result instanceof HTMLElement ||
170
+ result instanceof DocumentFragment
171
+ ) {
172
+ td.appendChild(result);
173
+ } else if (typeof result === 'string') {
174
+ td.innerHTML = result as string;
173
175
  }
176
+ } else {
177
+ td.textContent = item[colKey] as string;
178
+ }
174
179
 
175
- row.appendChild(td);
176
- },
177
- );
180
+ if (typeof columnDef.createdCell === 'function') {
181
+ columnDef.createdCell.call(input.context, td, item[colKey], item, row);
182
+ }
183
+
184
+ row.appendChild(td);
185
+ });
178
186
  }
179
187
 
180
188
  private applyOriginalTdClass(
@@ -194,7 +202,7 @@ export class KTDataTableDomTableRenderer<
194
202
 
195
203
  private applyDataRowAttributes(
196
204
  td: HTMLTableCellElement,
197
- dataRowAttributes: KTDataTableAttributeInterface,
205
+ dataRowAttributes: KTDataTableAttributeInterface | null,
198
206
  colIndex: number,
199
207
  ): void {
200
208
  if (dataRowAttributes && dataRowAttributes[colIndex]) {
@@ -71,6 +71,104 @@
71
71
  [data-kt-datatable].loading table {
72
72
  opacity: 0.6;
73
73
  }
74
+
75
+ /* Locked layout styles */
76
+ [data-kt-datatable] .kt-datatable-locked-layout {
77
+ position: relative;
78
+ }
79
+
80
+ [data-kt-datatable]
81
+ .kt-datatable-locked-layout
82
+ [data-kt-datatable-table]
83
+ thead.kt-datatable-locked-header-section {
84
+ /* Sticky thead group — opaque surface, no gap above first body row */
85
+ background-color: color-mix(
86
+ in srgb,
87
+ var(--color-muted, rgb(0, 0, 0)) 40%,
88
+ var(--color-card, var(--color-background, #ffffff))
89
+ ) !important;
90
+ }
91
+
92
+ /* Sticky columns use border-collapse: separate — per-cell borders replace tr border-b */
93
+ [data-kt-datatable]
94
+ .kt-datatable-locked-layout.kt-datatable-locked-layout-separate
95
+ [data-kt-datatable-table]
96
+ thead
97
+ tr {
98
+ @apply border-b-0;
99
+ }
100
+
101
+ [data-kt-datatable]
102
+ .kt-datatable-locked-layout.kt-datatable-locked-layout-separate
103
+ [data-kt-datatable-table]
104
+ thead
105
+ th {
106
+ @apply border-b border-border;
107
+ }
108
+
109
+ [data-kt-datatable]
110
+ .kt-datatable-locked-layout.kt-datatable-locked-layout-separate
111
+ [data-kt-datatable-table]
112
+ tbody
113
+ tr {
114
+ @apply border-b-0;
115
+ }
116
+
117
+ [data-kt-datatable]
118
+ .kt-datatable-locked-layout.kt-datatable-locked-layout-separate
119
+ [data-kt-datatable-table]
120
+ tbody
121
+ td {
122
+ @apply border-b border-border;
123
+ }
124
+
125
+ [data-kt-datatable]
126
+ .kt-datatable-locked-layout.kt-datatable-locked-layout-separate
127
+ [data-kt-datatable-table]
128
+ tbody
129
+ tr:last-child
130
+ td {
131
+ @apply border-b-0;
132
+ }
133
+
134
+ [data-kt-datatable] .kt-datatable-locked-cell {
135
+ overflow: hidden;
136
+ isolation: isolate;
137
+ /* Opaque surface so horizontally scrolling cells do not show through */
138
+ background-color: var(--color-card, var(--color-background, #ffffff)) !important;
139
+ }
140
+
141
+ [data-kt-datatable] [data-kt-datatable-table] thead th.kt-datatable-locked-cell,
142
+ [data-kt-datatable] .kt-datatable-locked-header {
143
+ /* Match kt-table thead bg-muted/40 without transparency */
144
+ background-color: color-mix(
145
+ in srgb,
146
+ var(--color-muted, rgb(0, 0, 0)) 40%,
147
+ var(--color-card, var(--color-background, #ffffff))
148
+ ) !important;
149
+ }
150
+
151
+ [data-kt-datatable] .kt-datatable-locked-left {
152
+ box-shadow: inset -1px 0 0 0 var(--color-border, rgba(0, 0, 0, 0.08));
153
+ }
154
+
155
+ [data-kt-datatable] .kt-datatable-locked-right {
156
+ box-shadow: inset 1px 0 0 0 var(--color-border, rgba(0, 0, 0, 0.08));
157
+ }
158
+
159
+ /* Keep row hover/checked visual states on sticky body cells */
160
+ [data-kt-datatable] [data-kt-datatable-table] tbody tr:hover > .kt-datatable-locked-cell {
161
+ /* Match kt-table row hover bg-muted/50 without transparency */
162
+ background-color: color-mix(
163
+ in srgb,
164
+ var(--color-muted, rgb(0, 0, 0)) 50%,
165
+ var(--color-card, var(--color-background, #ffffff))
166
+ ) !important;
167
+ }
168
+
169
+ [data-kt-datatable] [data-kt-datatable-table] tbody tr.checked > .kt-datatable-locked-cell {
170
+ background-color: var(--color-muted, rgb(0, 0, 0)) !important;
171
+ }
74
172
  }
75
173
 
76
174
  @custom-variant kt-datatable-loading {