@ni/nimble-components 18.0.2 → 18.0.3
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/dist/all-components-bundle.js +758 -56
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +2602 -2483
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/index.d.ts +11 -0
- package/dist/esm/table/index.js +10 -0
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/virtualizer.d.ts +24 -0
- package/dist/esm/table/models/virtualizer.js +98 -0
- package/dist/esm/table/models/virtualizer.js.map +1 -0
- package/dist/esm/table/styles.js +25 -1
- package/dist/esm/table/styles.js.map +1 -1
- package/dist/esm/table/template.js +18 -14
- package/dist/esm/table/template.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
2
2
|
import type { TableColumn } from '../table-column/base';
|
|
3
3
|
import type { TableRecord, TableRowState, TableValidity } from './types';
|
|
4
|
+
import { Virtualizer } from './models/virtualizer';
|
|
4
5
|
declare global {
|
|
5
6
|
interface HTMLElementTagNameMap {
|
|
6
7
|
'nimble-table': Table;
|
|
@@ -21,12 +22,22 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
21
22
|
*/
|
|
22
23
|
canRenderRows: boolean;
|
|
23
24
|
get validity(): TableValidity;
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
readonly viewport: HTMLElement;
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
readonly virtualizer: Virtualizer<TData>;
|
|
24
33
|
private readonly table;
|
|
25
34
|
private options;
|
|
26
35
|
private readonly tableValidator;
|
|
27
36
|
constructor();
|
|
28
37
|
setData(newData: readonly TData[]): void;
|
|
29
38
|
idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
|
|
39
|
+
connectedCallback(): void;
|
|
40
|
+
disconnectedCallback(): void;
|
|
30
41
|
checkValidity(): boolean;
|
|
31
42
|
private setTableData;
|
|
32
43
|
private refreshRows;
|
package/dist/esm/table/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { createTable as tanStackCreateTable, getCoreRowModel as tanStackGetCoreR
|
|
|
5
5
|
import { TableValidator } from './models/table-validator';
|
|
6
6
|
import { styles } from './styles';
|
|
7
7
|
import { template } from './template';
|
|
8
|
+
import { Virtualizer } from './models/virtualizer';
|
|
8
9
|
/**
|
|
9
10
|
* A nimble-styled table.
|
|
10
11
|
*/
|
|
@@ -44,6 +45,7 @@ export class Table extends FoundationElement {
|
|
|
44
45
|
autoResetAll: false
|
|
45
46
|
};
|
|
46
47
|
this.table = tanStackCreateTable(this.options);
|
|
48
|
+
this.virtualizer = new Virtualizer(this);
|
|
47
49
|
}
|
|
48
50
|
get validity() {
|
|
49
51
|
return this.tableValidator.getValidity();
|
|
@@ -57,6 +59,13 @@ export class Table extends FoundationElement {
|
|
|
57
59
|
// generated when creating a new row model.
|
|
58
60
|
this.setTableData(this.table.options.data);
|
|
59
61
|
}
|
|
62
|
+
connectedCallback() {
|
|
63
|
+
super.connectedCallback();
|
|
64
|
+
this.virtualizer.connectedCallback();
|
|
65
|
+
}
|
|
66
|
+
disconnectedCallback() {
|
|
67
|
+
this.virtualizer.disconnectedCallback();
|
|
68
|
+
}
|
|
60
69
|
checkValidity() {
|
|
61
70
|
return this.tableValidator.isValid();
|
|
62
71
|
}
|
|
@@ -83,6 +92,7 @@ export class Table extends FoundationElement {
|
|
|
83
92
|
};
|
|
84
93
|
return rowState;
|
|
85
94
|
});
|
|
95
|
+
this.virtualizer.dataChanged();
|
|
86
96
|
}
|
|
87
97
|
updateTableOptions(updatedOptions) {
|
|
88
98
|
this.options = { ...this.options, ...updatedOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAKH,WAAW,IAAI,mBAAmB,EAClC,eAAe,IAAI,uBAAuB,EAE7C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { VirtualItem } from '@tanstack/virtual-core';
|
|
2
|
+
import type { Table } from '..';
|
|
3
|
+
import type { TableRecord } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Helper class for the nimble-table for row virtualization.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare class Virtualizer<TData extends TableRecord = TableRecord> {
|
|
10
|
+
visibleItems: VirtualItem[];
|
|
11
|
+
allRowsHeight: number;
|
|
12
|
+
headerContainerMarginRight: number;
|
|
13
|
+
rowContainerYOffset: number;
|
|
14
|
+
private readonly table;
|
|
15
|
+
private readonly viewportResizeObserver;
|
|
16
|
+
private virtualizer?;
|
|
17
|
+
constructor(table: Table<TData>);
|
|
18
|
+
connectedCallback(): void;
|
|
19
|
+
disconnectedCallback(): void;
|
|
20
|
+
dataChanged(): void;
|
|
21
|
+
private updateVirtualizer;
|
|
22
|
+
private createVirtualizerOptions;
|
|
23
|
+
private handleVirtualizerChange;
|
|
24
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { observable } from '@microsoft/fast-element';
|
|
3
|
+
import { Virtualizer as TanStackVirtualizer, elementScroll, observeElementOffset, observeElementRect } from '@tanstack/virtual-core';
|
|
4
|
+
import { controlHeight } from '../../theme-provider/design-tokens';
|
|
5
|
+
/**
|
|
6
|
+
* Helper class for the nimble-table for row virtualization.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export class Virtualizer {
|
|
11
|
+
constructor(table) {
|
|
12
|
+
this.visibleItems = [];
|
|
13
|
+
this.allRowsHeight = 0;
|
|
14
|
+
this.headerContainerMarginRight = 0;
|
|
15
|
+
this.rowContainerYOffset = 0;
|
|
16
|
+
this.table = table;
|
|
17
|
+
this.viewportResizeObserver = new ResizeObserver(entries => {
|
|
18
|
+
const borderBoxSize = entries[0]?.borderBoxSize[0];
|
|
19
|
+
if (borderBoxSize) {
|
|
20
|
+
// If we have enough rows that a vertical scrollbar is shown, we need to offset the header widths
|
|
21
|
+
// by the same margin so the column headers align with the corresponding rendered cells
|
|
22
|
+
const viewportBoundingWidth = borderBoxSize.inlineSize;
|
|
23
|
+
this.headerContainerMarginRight = viewportBoundingWidth - this.table.viewport.scrollWidth;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
this.viewportResizeObserver.observe(this.table.viewport);
|
|
29
|
+
this.updateVirtualizer();
|
|
30
|
+
}
|
|
31
|
+
disconnectedCallback() {
|
|
32
|
+
this.viewportResizeObserver.disconnect();
|
|
33
|
+
}
|
|
34
|
+
dataChanged() {
|
|
35
|
+
if (this.table.$fastController.isConnected) {
|
|
36
|
+
this.updateVirtualizer();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
updateVirtualizer() {
|
|
40
|
+
const options = this.createVirtualizerOptions();
|
|
41
|
+
if (this.virtualizer) {
|
|
42
|
+
this.virtualizer.setOptions(options);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.virtualizer = new TanStackVirtualizer(options);
|
|
46
|
+
}
|
|
47
|
+
this.virtualizer._willUpdate();
|
|
48
|
+
this.handleVirtualizerChange();
|
|
49
|
+
}
|
|
50
|
+
createVirtualizerOptions() {
|
|
51
|
+
const rowHeight = parseFloat(controlHeight.getValueFor(this.table));
|
|
52
|
+
return {
|
|
53
|
+
count: this.table.tableData.length,
|
|
54
|
+
getScrollElement: () => {
|
|
55
|
+
return this.table.viewport;
|
|
56
|
+
},
|
|
57
|
+
estimateSize: (_) => rowHeight,
|
|
58
|
+
enableSmoothScroll: true,
|
|
59
|
+
overscan: 3,
|
|
60
|
+
scrollingDelay: 5,
|
|
61
|
+
scrollToFn: elementScroll,
|
|
62
|
+
observeElementOffset,
|
|
63
|
+
observeElementRect,
|
|
64
|
+
onChange: () => this.handleVirtualizerChange()
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
handleVirtualizerChange() {
|
|
68
|
+
const virtualizer = this.virtualizer;
|
|
69
|
+
this.visibleItems = virtualizer.getVirtualItems();
|
|
70
|
+
this.allRowsHeight = virtualizer.getTotalSize();
|
|
71
|
+
// We're using a separate div ('table-scroll') to represent the full height of all rows, and
|
|
72
|
+
// the row container's height is only big enough to hold the virtualized rows. So we don't
|
|
73
|
+
// use the TanStackVirtual-provided 'start' offset (which is in terms of the full height)
|
|
74
|
+
// to translate every individual row, we just translate the row container.
|
|
75
|
+
let rowContainerYOffset = 0;
|
|
76
|
+
if (this.visibleItems.length > 0) {
|
|
77
|
+
const firstItem = this.visibleItems[0];
|
|
78
|
+
const lastItem = this.visibleItems[this.visibleItems.length - 1];
|
|
79
|
+
if (lastItem.end < this.allRowsHeight) {
|
|
80
|
+
rowContainerYOffset = firstItem.start - virtualizer.scrollOffset;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.rowContainerYOffset = rowContainerYOffset;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
__decorate([
|
|
87
|
+
observable
|
|
88
|
+
], Virtualizer.prototype, "visibleItems", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
observable
|
|
91
|
+
], Virtualizer.prototype, "allRowsHeight", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
observable
|
|
94
|
+
], Virtualizer.prototype, "headerContainerMarginRight", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
observable
|
|
97
|
+
], Virtualizer.prototype, "rowContainerYOffset", void 0);
|
|
98
|
+
//# sourceMappingURL=virtualizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualizer.js","sourceRoot":"","sources":["../../../../src/table/models/virtualizer.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/table/styles.js
CHANGED
|
@@ -8,13 +8,37 @@ import { themeBehavior } from '../utilities/style/theme';
|
|
|
8
8
|
export const styles = css `
|
|
9
9
|
${display('flex')}
|
|
10
10
|
|
|
11
|
+
:host {
|
|
12
|
+
height: 480px;
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
.table-container {
|
|
12
16
|
display: flex;
|
|
13
17
|
flex-direction: column;
|
|
14
18
|
width: 100%;
|
|
15
19
|
font: ${bodyFont};
|
|
16
20
|
color: ${bodyFontColor};
|
|
17
|
-
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.table-viewport {
|
|
24
|
+
overflow-y: auto;
|
|
25
|
+
display: block;
|
|
26
|
+
height: 100%;
|
|
27
|
+
position: relative;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.table-scroll {
|
|
31
|
+
pointer-events: none;
|
|
32
|
+
position: absolute;
|
|
33
|
+
top: 0px;
|
|
34
|
+
width: 100%;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.table-row-container {
|
|
38
|
+
width: 100%;
|
|
39
|
+
position: sticky;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
top: 0px;
|
|
18
42
|
}
|
|
19
43
|
|
|
20
44
|
.header-container {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/table/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EACH,0BAA0B,EAC1B,QAAQ,EACR,aAAa,EACb,cAAc,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/table/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EACH,0BAA0B,EAC1B,QAAQ,EACR,aAAa,EACb,cAAc,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;gBAUL,QAAQ;iBACP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgCR,0BAA0B;;;;;;;;;sBAS1B,0BAA0B;;;;;;;;;;;;sBAY1B,cAAc;;CAEnC,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;;;;;8BAMmB,cAAc;;;;8BAId,cAAc;;;;8BAId,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;SAEnD,CACJ,CACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { html, repeat, slotted, when } from '@microsoft/fast-element';
|
|
1
|
+
import { html, ref, repeat, slotted, when } from '@microsoft/fast-element';
|
|
2
2
|
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
3
3
|
import { TableHeader } from './components/header';
|
|
4
4
|
import { TableRow } from './components/row';
|
|
@@ -13,7 +13,7 @@ const isTableColumn = () => {
|
|
|
13
13
|
export const template = html `
|
|
14
14
|
<template role="table">
|
|
15
15
|
<div class="table-container">
|
|
16
|
-
<div role="rowgroup" class="header-container">
|
|
16
|
+
<div role="rowgroup" class="header-container" style="margin-right: ${x => x.virtualizer.headerContainerMarginRight}px;">
|
|
17
17
|
<div class="header-row" role="row">
|
|
18
18
|
${repeat(x => x.columns, html `
|
|
19
19
|
<${DesignSystem.tagFor(TableHeader)} class="header">
|
|
@@ -22,18 +22,22 @@ export const template = html `
|
|
|
22
22
|
`)}
|
|
23
23
|
</div>
|
|
24
24
|
</div>
|
|
25
|
-
<div class="table-viewport"
|
|
26
|
-
|
|
27
|
-
${
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
<div class="table-viewport" ${ref('viewport')}>
|
|
26
|
+
<div class="table-scroll" style="height: ${x => x.virtualizer.allRowsHeight}px;"></div>
|
|
27
|
+
<div class="table-row-container" role="rowgroup" style="transform: ${x => (x.virtualizer.rowContainerYOffset === 0 ? 'none' : `translateY(${x.virtualizer.rowContainerYOffset}px)`)};">
|
|
28
|
+
${when(x => x.columns.length > 0 && x.canRenderRows, html `
|
|
29
|
+
${repeat(x => x.virtualizer.visibleItems, html `
|
|
30
|
+
<${DesignSystem.tagFor(TableRow)}
|
|
31
|
+
class="row"
|
|
32
|
+
record-id="${(x, c) => c.parent.tableData[x.index]?.id}"
|
|
33
|
+
:dataRecord="${(x, c) => c.parent.tableData[x.index]?.record}"
|
|
34
|
+
:columns="${(_, c) => c.parent.columns}"
|
|
35
|
+
style="height: ${x => x.size}px;"
|
|
36
|
+
>
|
|
37
|
+
</${DesignSystem.tagFor(TableRow)}>
|
|
38
|
+
`)}
|
|
39
|
+
`)}
|
|
40
|
+
</div>
|
|
37
41
|
</div>
|
|
38
42
|
</div>
|
|
39
43
|
<slot ${slotted({ property: 'columns', filter: isTableColumn() })}></slot>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,IAAI,EACJ,MAAM,EACN,OAAO,EACP,IAAI,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,aAAa,GAAG,GAAmB,EAAE;IACvC,MAAM,MAAM,GAAmB,CAC3B,KAAW,EACX,CAAS,EACT,EAAU,EACH,EAAE;QACT,OAAO,KAAK,YAAY,WAAW,CAAC;IACxC,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAO
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,IAAI,EACJ,GAAG,EACH,MAAM,EACN,OAAO,EACP,IAAI,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,aAAa,GAAG,GAAmB,EAAE;IACvC,MAAM,MAAM,GAAmB,CAC3B,KAAW,EACX,CAAS,EACT,EAAU,EACH,EAAE;QACT,OAAO,KAAK,YAAY,WAAW,CAAC;IACxC,CAAC,CAAC;IACF,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAO;;;iFAG8C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,0BAA0B;;sBAExG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAa;2BACnC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;8BAC7B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;4BACpB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;qBACvC,CAAC;;;0CAGoB,GAAG,CAAC,UAAU,CAAC;2DACE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa;qFACN,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,mBAAmB,KAAK,CAAC;sBAC7K,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAO;0BAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAoB;+BAC3D,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;;6CAEf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;+CACvC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM;4CAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;iDACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;;gCAE5B,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;yBACpC,CAAC;qBACL,CAAC;;;;gBAIN,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC;;CAExE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "18.0.
|
|
3
|
+
"version": "18.0.3",
|
|
4
4
|
"description": "Styled web components for the NI Nimble Design System",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run generate-icons && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"@microsoft/fast-web-utilities": "^5.4.1",
|
|
53
53
|
"@ni/nimble-tokens": "^4.3.2",
|
|
54
54
|
"@tanstack/table-core": "^8.7.0",
|
|
55
|
+
"@tanstack/virtual-core": "^3.0.0-beta.34",
|
|
55
56
|
"@types/d3": "^7.4.0",
|
|
56
57
|
"@types/d3-scale": "^4.0.2",
|
|
57
58
|
"@types/d3-zoom": "^3.0.0",
|