@knime/kds-table 0.6.4 → 0.8.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 (74) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +28 -1
  3. package/dist/index.css +55 -61
  4. package/dist/index.js +8215 -7899
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/components/TableBodyNavigatable.vue.d.ts +10 -13
  7. package/dist/src/components/TableBodyNavigatable.vue.d.ts.map +1 -1
  8. package/dist/src/components/TableCore.vue.d.ts +20 -249
  9. package/dist/src/components/TableCore.vue.d.ts.map +1 -1
  10. package/dist/src/components/TableCoreVirtual.vue.d.ts +19 -24
  11. package/dist/src/components/TableCoreVirtual.vue.d.ts.map +1 -1
  12. package/dist/src/components/TableUI.vue.d.ts +346 -1349
  13. package/dist/src/components/TableUI.vue.d.ts.map +1 -1
  14. package/dist/src/components/TableUIWithAutoSizeCalculation.vue.d.ts +384 -2590
  15. package/dist/src/components/TableUIWithAutoSizeCalculation.vue.d.ts.map +1 -1
  16. package/dist/src/components/VirtualRow.vue.d.ts +9 -13
  17. package/dist/src/components/VirtualRow.vue.d.ts.map +1 -1
  18. package/dist/src/components/composables/useHeaderMenuItems.d.ts +2 -8
  19. package/dist/src/components/composables/useHeaderMenuItems.d.ts.map +1 -1
  20. package/dist/src/components/control/PageControls.vue.d.ts +65 -222
  21. package/dist/src/components/control/PageControls.vue.d.ts.map +1 -1
  22. package/dist/src/components/control/PageNavigation.vue.d.ts +3 -2
  23. package/dist/src/components/control/PageNavigation.vue.d.ts.map +1 -1
  24. package/dist/src/components/control/PageRowRange.vue.d.ts +2 -1
  25. package/dist/src/components/control/PageRowRange.vue.d.ts.map +1 -1
  26. package/dist/src/components/control/TableActionBar.vue.d.ts +14 -196
  27. package/dist/src/components/control/TableActionBar.vue.d.ts.map +1 -1
  28. package/dist/src/components/control/actionbar/PopoverContainer.vue.d.ts +9 -12
  29. package/dist/src/components/control/actionbar/PopoverContainer.vue.d.ts.map +1 -1
  30. package/dist/src/components/control/actionbar/SortControl.vue.d.ts +3 -139
  31. package/dist/src/components/control/actionbar/SortControl.vue.d.ts.map +1 -1
  32. package/dist/src/components/layout/Cell.vue.d.ts +6 -203
  33. package/dist/src/components/layout/Cell.vue.d.ts.map +1 -1
  34. package/dist/src/components/layout/CellRenderer.vue.d.ts +14 -21
  35. package/dist/src/components/layout/CellRenderer.vue.d.ts.map +1 -1
  36. package/dist/src/components/layout/CellRendererProps.d.ts +5 -0
  37. package/dist/src/components/layout/CellRendererProps.d.ts.map +1 -1
  38. package/dist/src/components/layout/Header.vue.d.ts +33 -106
  39. package/dist/src/components/layout/Header.vue.d.ts.map +1 -1
  40. package/dist/src/components/layout/HeaderCell.vue.d.ts +12 -138
  41. package/dist/src/components/layout/HeaderCell.vue.d.ts.map +1 -1
  42. package/dist/src/components/layout/NewRowButton.vue.d.ts +3 -2
  43. package/dist/src/components/layout/NewRowButton.vue.d.ts.map +1 -1
  44. package/dist/src/components/layout/Row.vue.d.ts +19 -241
  45. package/dist/src/components/layout/Row.vue.d.ts.map +1 -1
  46. package/dist/src/components/ui/CellExpandButton.vue.d.ts +3 -2
  47. package/dist/src/components/ui/CellExpandButton.vue.d.ts.map +1 -1
  48. package/dist/src/components/ui/CellSelectionOverlay.vue.d.ts +3 -4
  49. package/dist/src/components/ui/CellSelectionOverlay.vue.d.ts.map +1 -1
  50. package/dist/src/components/ui/EmptyRow.vue.d.ts +2 -1
  51. package/dist/src/components/ui/EmptyRow.vue.d.ts.map +1 -1
  52. package/dist/src/components/ui/PlaceholderRow.vue.d.ts +2 -1
  53. package/dist/src/components/ui/PlaceholderRow.vue.d.ts.map +1 -1
  54. package/dist/src/config/table.config.d.ts +0 -43
  55. package/dist/src/config/table.config.d.ts.map +1 -1
  56. package/dist/src/constants.d.ts +6 -6
  57. package/dist/src/constants.d.ts.map +1 -1
  58. package/dist/src/index.d.ts +10 -13
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/types/ActionConfig.d.ts +0 -2
  61. package/dist/src/types/ActionConfig.d.ts.map +1 -1
  62. package/dist/src/types/ColumnConfig.d.ts +8 -9
  63. package/dist/src/types/ColumnConfig.d.ts.map +1 -1
  64. package/dist/src/types/ColumnState.d.ts +0 -7
  65. package/dist/src/types/ColumnState.d.ts.map +1 -1
  66. package/package.json +7 -7
  67. package/dist/src/components/control/actionbar/FilterControl.vue.d.ts +0 -176
  68. package/dist/src/components/control/actionbar/FilterControl.vue.d.ts.map +0 -1
  69. package/dist/src/components/control/actionbar/FilterControlBody.vue.d.ts +0 -14
  70. package/dist/src/components/control/actionbar/FilterControlBody.vue.d.ts.map +0 -1
  71. package/dist/src/components/control/actionbar/filterConfigActive.d.ts +0 -6
  72. package/dist/src/components/control/actionbar/filterConfigActive.d.ts.map +0 -1
  73. package/dist/src/types/FilterConfig.d.ts +0 -37
  74. package/dist/src/types/FilterConfig.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # @knime/kds-table
2
2
 
3
+ ## 0.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f171bc8: `TableUI`: added optional `overlayDataValueViewButton` flag to `ColumnConfig` that overlays the data value view button on top of the cell content instead of reserving space next to it, so slotted content (e.g. images) does not shrink when the button appears on hover.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [1f991d6]
12
+ - Updated dependencies [3e20664]
13
+ - @knime/kds-components@2.6.1
14
+ - @knime/kds-styles@2.6.1
15
+
16
+ ## 0.7.0
17
+
18
+ ### Minor Changes
19
+
20
+ - f1defd4: `TableUI` / `TableUIWithAutoSizeCalculation`: remove built-in filter controls and add an extensible `#action-bar-left` slot and `additionalHeaderMenuItems` prop.
21
+
22
+ BREAKING CHANGES:
23
+
24
+ - `TableUI` / `TableUIWithAutoSizeCalculation`: removed prop `colFilterValues`; removed emit `columnFilter`; removed methods `openActionBarFilterControl`, `clearColumnFilter`.
25
+ - `TableActionBar`: removed props `colFilterValues`, `columns`; removed emit `columnFilter`; removed expose `openFilterControl`.
26
+ - `ActionConfig`: removed `enableFilters` field.
27
+ - `ColumnConfig`: removed `filterConfig` field; removed `headerSubMenuItems` field (use `additionalHeaderMenuItems` on `TableUI`/`TableUIWithAutoSizeCalculation` instead).
28
+ - Removed exported types `FilterConfig`, `FilterValue`, `ColFilterValues`.
29
+
30
+ New API:
31
+
32
+ - `TableUI` / `TableUIWithAutoSizeCalculation`: new `#action-bar-left` slot — rendered in the action bar's left section after sort controls; inject any filter UI here.
33
+ - `TableUI` / `TableUIWithAutoSizeCalculation`: new `additionalHeaderMenuItems` prop (`KdsMenuItem[][]`, index-aligned with `columns`) — per-column header menu items appended after sort items, kept separate from `columns` for rendering performance.
34
+ - New exported helpers for building custom filter controls in the `#action-bar-left` slot: `PopoverContainer` component and `useButtonPopoverInteraction` composable.
35
+
3
36
  ## 0.6.4
4
37
 
5
38
  ### Patch Changes
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # KNIME® Design System – Table Component
2
2
 
3
- This is part of the [KNIME Design System](../README.md) maintained by the [UI Core Team](mailto:team-ui-core@knime.com).
3
+ This is part of the [KNIME Design System](../README.md).
4
4
 
5
5
  This package contains the table component used by e.g. the TableView of KNIME Analytics Platform and KNIME Hub. It is based on the [Vue] JavaScript framework and built on the KNIME Design System tokens.
6
6
 
@@ -105,6 +105,33 @@ Use in Template
105
105
  </template>
106
106
  ```
107
107
 
108
+ ### Using with Vitest, Nuxt, or Vite SSR
109
+
110
+ The published JavaScript imports its CSS as a side effect (e.g.
111
+ `import "./index.css"`), which bundlers handle automatically. When the package
112
+ is instead evaluated by Node's native ESM loader — as **Vitest** and
113
+ **Vite/Nuxt SSR** do by default, since they externalize `node_modules` — Node
114
+ has no `.css` loader and throws `Unknown file extension ".css"`. Configure the
115
+ consuming project once so `@knime/*` packages are processed instead of
116
+ externalized:
117
+
118
+ ```ts
119
+ // Vitest — vitest.config.ts
120
+ export default defineConfig({
121
+ test: { server: { deps: { inline: [/@knime\//] } } },
122
+ });
123
+ ```
124
+
125
+ ```ts
126
+ // Vite SSR — vite.config.ts
127
+ export default defineConfig({ ssr: { noExternal: [/@knime\//] } });
128
+ ```
129
+
130
+ ```ts
131
+ // Nuxt — nuxt.config.ts
132
+ export default defineNuxtConfig({ build: { transpile: [/@knime\//] } });
133
+ ```
134
+
108
135
  ### Requirements
109
136
 
110
137
  The KNIME-Table expects that the embedding app provides the following:
package/dist/index.css CHANGED
@@ -148,23 +148,6 @@ tr {
148
148
  }
149
149
  }
150
150
 
151
- .rows[data-v-e5d5e963] {
152
- display: grid;
153
- grid-template-columns: 2fr 1fr 2fr auto;
154
- gap: var(--kds-spacing-container-0-5x) var(--kds-spacing-container-0-5x);
155
- }
156
- .row[data-v-e5d5e963] {
157
- display: contents;
158
- }
159
- .column[data-v-e5d5e963],
160
- .mode[data-v-e5d5e963],
161
- .value[data-v-e5d5e963] {
162
- min-width: 0;
163
- }
164
- .add[data-v-e5d5e963] {
165
- margin-top: var(--kds-spacing-container-0-5x);
166
- }
167
-
168
151
  .popover {
169
152
  &[data-v-349cd3ba] {
170
153
  display: flex;
@@ -186,24 +169,24 @@ tr {
186
169
  }
187
170
  }
188
171
 
189
- .sort-popover[data-v-0885d523] {
172
+ .sort-popover[data-v-97a272c8] {
190
173
  position-try-order: most-inline-size;
191
174
  }
192
175
  .popover-container {
193
176
  .body {
194
- &[data-v-0885d523] {
177
+ &[data-v-97a272c8] {
195
178
  display: grid;
196
179
  grid-template-columns: 1fr 1fr;
197
180
  gap: var(--kds-spacing-container-0-5x);
198
181
  }
199
- &[data-v-0885d523] > * {
182
+ &[data-v-97a272c8] > * {
200
183
  min-width: 0;
201
184
  }
202
185
  }
203
186
  }
204
187
 
205
188
  .kds-table-action-bar {
206
- &[data-v-9181ec3b] {
189
+ &[data-v-a70d7b02] {
207
190
  display: flex;
208
191
  align-items: center;
209
192
  justify-content: space-between;
@@ -212,24 +195,24 @@ tr {
212
195
  padding-left: var(--kds-spacing-container-0-5x);
213
196
  border-top: var(--kds-border-base-subtle);
214
197
  }
215
- &.temporary-view[data-v-9181ec3b] {
198
+ &.temporary-view[data-v-a70d7b02] {
216
199
  background-color: var(--kds-color-background-static-info-muted);
217
200
  }
218
201
  & .left {
219
- &[data-v-9181ec3b] {
202
+ &[data-v-a70d7b02] {
220
203
  display: flex;
221
204
  flex: 1 0 0;
222
205
  gap: var(--kds-spacing-container-0-5x);
223
206
  align-items: center;
224
207
  padding: var(--kds-spacing-container-0-12x) 0;
225
208
  }
226
- & .dimension[data-v-9181ec3b] {
209
+ & .dimension[data-v-a70d7b02] {
227
210
  font: var(--kds-font-base-title-small);
228
211
  color: var(--kds-color-text-and-icon-muted);
229
212
  white-space: pre;
230
213
  }
231
214
  }
232
- & .right[data-v-9181ec3b] {
215
+ & .right[data-v-a70d7b02] {
233
216
  display: flex;
234
217
  gap: var(--kds-spacing-container-0-25x);
235
218
  align-items: center;
@@ -239,7 +222,7 @@ tr {
239
222
  }
240
223
 
241
224
  .column-header {
242
- &[data-v-2a49a01e] {
225
+ &[data-v-31a6758f] {
243
226
  /* Need to set position relative here to position the resize handle absolutely within the header cell */
244
227
  position: relative;
245
228
  display: flex;
@@ -253,10 +236,10 @@ tr {
253
236
  text-align: left;
254
237
  white-space: nowrap;
255
238
  }
256
- &.header-focused[data-v-2a49a01e] {
239
+ &.header-focused[data-v-31a6758f] {
257
240
  background-color: var(--kds-color-focus-background);
258
241
  }
259
- &.colored-header[data-v-2a49a01e] {
242
+ &.colored-header[data-v-31a6758f] {
260
243
  /* stylelint-disable no-unknown-custom-properties -- runtime variable set via inline :style */
261
244
  background-image: linear-gradient(
262
245
  90deg,
@@ -268,48 +251,48 @@ tr {
268
251
  background-size: var(--kds-spacing-container-0-25x);
269
252
  }
270
253
  & .column-header-content {
271
- &[data-v-2a49a01e] {
254
+ &[data-v-31a6758f] {
272
255
  display: flex;
273
256
  flex-direction: column;
274
257
  justify-content: center;
275
258
  width: 100%;
276
259
  }
277
- &[data-v-2a49a01e]:focus {
260
+ &[data-v-31a6758f]:focus {
278
261
  outline: none;
279
262
  }
280
- &.with-button-in-header[data-v-2a49a01e] {
263
+ &.with-button-in-header[data-v-31a6758f] {
281
264
  width: calc(
282
265
  100% - var(--kds-dimension-component-width-1-5x)
283
266
  ); /* due to .sub-menu-select-header / .delete-column-button: width */
284
267
  }
285
268
  & .main-header {
286
- &[data-v-2a49a01e] {
269
+ &[data-v-31a6758f] {
287
270
  display: flex;
288
271
  }
289
- & .header-text-container[data-v-2a49a01e] {
272
+ & .header-text-container[data-v-31a6758f] {
290
273
  max-width: 100%;
291
274
  overflow: hidden;
292
275
  text-overflow: ellipsis;
293
276
  font: var(--kds-font-base-title-medium-strong);
294
277
  }
295
278
  }
296
- & .sub-header-text-container[data-v-2a49a01e] {
279
+ & .sub-header-text-container[data-v-31a6758f] {
297
280
  overflow: hidden;
298
281
  text-overflow: ellipsis;
299
282
  font: var(--kds-font-base-subtext-small);
300
283
  }
301
284
  }
302
- & .menu-button-hidden[data-v-2a49a01e] {
285
+ & .menu-button-hidden[data-v-31a6758f] {
303
286
  pointer-events: none;
304
287
  opacity: 0;
305
288
  }
306
- & .delete-column-button[data-v-2a49a01e] {
289
+ & .delete-column-button[data-v-31a6758f] {
307
290
  display: flex;
308
291
  align-items: center;
309
292
  width: var(--kds-dimension-component-width-2x);
310
293
  }
311
294
  & .resize-handle-area {
312
- &[data-v-2a49a01e] {
295
+ &[data-v-31a6758f] {
313
296
  position: absolute;
314
297
 
315
298
  /* resize handle should range into top border */
@@ -335,21 +318,21 @@ tr {
335
318
  cursor: col-resize;
336
319
  opacity: 0;
337
320
  }
338
- & .resize-handle[data-v-2a49a01e] {
321
+ & .resize-handle[data-v-31a6758f] {
339
322
  border-right: var(--kds-border-resize-handle-hover);
340
323
  border-radius: var(--kds-border-radius-container-0-25x);
341
324
  }
342
- &.hover[data-v-2a49a01e] {
325
+ &.hover[data-v-31a6758f] {
343
326
  opacity: 1;
344
327
  }
345
- &.drag[data-v-2a49a01e] {
328
+ &.drag[data-v-31a6758f] {
346
329
  opacity: 1;
347
330
  }
348
331
  }
349
332
  }
350
333
 
351
334
  thead {
352
- &[data-v-a024da6c] {
335
+ &[data-v-a97dc625] {
353
336
  /* TODO SLEEK-376 handle background color */
354
337
  /* stylelint-disable-next-line no-unknown-custom-properties */
355
338
  background-color: var(--knime-white);
@@ -357,7 +340,7 @@ thead {
357
340
  border-bottom: var(--kds-border-base-subtle);
358
341
  }
359
342
  & tr {
360
- &[data-v-a024da6c] {
343
+ &[data-v-a97dc625] {
361
344
  display: flex;
362
345
  height: 100%;
363
346
  transition:
@@ -365,51 +348,51 @@ thead {
365
348
  box-shadow 0.15s;
366
349
  }
367
350
  & th {
368
- &[data-v-a024da6c] {
351
+ &[data-v-a97dc625] {
369
352
  min-height: var(--kds-dimension-component-height-2-5x);
370
353
  max-height: var(--kds-dimension-component-height-5x);
371
354
  text-align: left;
372
355
  white-space: nowrap;
373
356
  }
374
- &.deletion-cell-spacer[data-v-a024da6c] {
357
+ &.deletion-cell-spacer[data-v-a97dc625] {
375
358
  width: var(--kds-dimension-component-width-2x);
376
359
  }
377
360
  &.select-cell {
378
- &[data-v-a024da6c] {
361
+ &[data-v-a97dc625] {
379
362
  display: flex;
380
363
  justify-content: center;
381
364
  width: var(--kds-dimension-component-width-2x);
382
365
  padding: var(--kds-spacing-container-0-75x);
383
366
  }
384
- & .select-checkbox[data-v-a024da6c] {
367
+ & .select-checkbox[data-v-a97dc625] {
385
368
  /* With this added padding the checkbox appears centered initially */
386
369
  padding: var(--kds-spacing-container-0-10x);
387
370
  }
388
371
  }
389
- &.new-column-head[data-v-a024da6c] {
372
+ &.new-column-head[data-v-a97dc625] {
390
373
  display: flex;
391
374
  flex-direction: column;
392
375
  justify-content: center;
393
376
  padding: var(--kds-spacing-container-0-5x);
394
377
  }
395
378
  }
396
- &[data-v-a024da6c]:hover {
379
+ &[data-v-a97dc625]:hover {
397
380
  outline: none;
398
381
  }
399
382
  }
400
- &.sub-menu-active tr[data-v-a024da6c] {
383
+ &.sub-menu-active tr[data-v-a97dc625] {
401
384
  padding-right: var(--kds-dimension-component-width-2x);
402
385
  }
403
386
  }
404
387
  .header-selection-overlay {
405
- &[data-v-a024da6c] {
388
+ &[data-v-a97dc625] {
406
389
  position: absolute;
407
390
  top: 0;
408
391
  height: 100%;
409
392
  pointer-events: none;
410
393
  border: var(--kds-border-action-selected-accent);
411
394
  }
412
- &.header-focused[data-v-a024da6c] {
395
+ &.header-focused[data-v-a97dc625] {
413
396
  border: var(--kds-border-action-focused);
414
397
  }
415
398
  }
@@ -462,7 +445,7 @@ thead {
462
445
  }
463
446
 
464
447
  .data-cell {
465
- &[data-v-e7fb7b49] {
448
+ &[data-v-a7720ed9] {
466
449
  display: flex;
467
450
  font: var(--kds-font-base-interactive-small);
468
451
  color: var(--kds-color-text-and-icon-neutral);
@@ -470,10 +453,10 @@ thead {
470
453
  user-select: none;
471
454
  background-clip: border-box;
472
455
  }
473
- &.in-cell-selection[data-v-e7fb7b49] {
456
+ &.in-cell-selection[data-v-a7720ed9] {
474
457
  background-color: var(--kds-color-focus-background);
475
458
  }
476
- &.colored-cell[data-v-e7fb7b49] {
459
+ &.colored-cell[data-v-a7720ed9] {
477
460
  /* stylelint-disable no-unknown-custom-properties -- runtime variable set via inline :style */
478
461
  background-image: linear-gradient(
479
462
  90deg,
@@ -484,14 +467,25 @@ thead {
484
467
  background-repeat: no-repeat;
485
468
  background-size: var(--kds-spacing-container-0-25x);
486
469
  }
487
- & .cell-content[data-v-e7fb7b49] {
470
+ & .cell-content {
471
+ &[data-v-a7720ed9] {
472
+ position: relative;
488
473
  display: flex;
489
474
  gap: var(--kds-spacing-container-0-25x);
490
475
  align-self: flex-start;
491
476
  justify-content: space-between;
492
477
  width: 100%;
478
+
479
+ /* Anchored at the same height as the buttons of padded (non-slotted)
480
+ cells, so it lines up with the other columns' buttons in the row. */
481
+ }
482
+ & > .overlaid[data-v-a7720ed9] {
483
+ position: absolute;
484
+ top: var(--ceb68c32);
485
+ right: 0;
486
+ }
493
487
  }
494
- & .cell-content .cell-text[data-v-e7fb7b49] {
488
+ & .cell-content .cell-text[data-v-a7720ed9] {
495
489
  flex: 0 1 auto;
496
490
  min-width: 0;
497
491
  overflow: hidden;
@@ -580,7 +574,7 @@ tr.row {
580
574
  }
581
575
  }
582
576
 
583
- .wrapper[data-v-5dec2b59] {
577
+ .wrapper[data-v-d531fa0a] {
584
578
  display: flex;
585
579
  flex-direction: column;
586
580
  width: 100%;
@@ -590,7 +584,7 @@ tr.row {
590
584
  }
591
585
  }
592
586
  table {
593
- &[data-v-5dec2b59] {
587
+ &[data-v-d531fa0a] {
594
588
  position: relative;
595
589
  display: flex;
596
590
  flex-grow: 1;
@@ -598,15 +592,15 @@ table {
598
592
  width: 100%;
599
593
  min-height: 0;
600
594
  }
601
- &[data-v-5dec2b59]:focus {
595
+ &[data-v-d531fa0a]:focus {
602
596
  outline: none;
603
597
  }
604
- & .new-row-footer[data-v-5dec2b59] {
598
+ & .new-row-footer[data-v-d531fa0a] {
605
599
  width: 100%;
606
600
  }
607
601
  }
608
602
 
609
- .table-column-size-calculation[data-v-29efd9ce] {
603
+ .table-column-size-calculation[data-v-11d56c71] {
610
604
  position: absolute;
611
605
  top: -9999px;
612
606
  left: -9999px;